AgentSkillsCN

transbigdata-coordinates

利用 TransBigData 进行坐标系转换与距离计算。支持 WGS84、GCJ02、BD09 坐标系之间的互转,以及两点间距离的精确计算。

SKILL.md
--- frontmatter
name: transbigdata-coordinates
description: 使用 TransBigData 进行坐标系转换和距离计算。适用于 WGS84、GCJ02、BD09 坐标系互转,以及两点间距离计算。

TransBigData 坐标转换指南

安装

bash
pip install transbigdata

中国常用坐标系说明

坐标系说明常见来源
WGS84GPS原始坐标,国际标准GPS设备、OpenStreetMap
GCJ02国测局坐标(火星坐标)高德地图、腾讯地图
BD09百度坐标百度地图
BD09MC百度墨卡托坐标百度地图API

坐标转换函数

WGS84 转换

python
import transbigdata as tbd

# WGS84 → GCJ02
data['Lng_gcj'], data['Lat_gcj'] = tbd.wgs84togcj02(data['Lng'], data['Lat'])

# WGS84 → BD09
data['Lng_bd'], data['Lat_bd'] = tbd.wgs84tobd09(data['Lng'], data['Lat'])

GCJ02 转换

python
# GCJ02 → WGS84
data['Lng_wgs'], data['Lat_wgs'] = tbd.gcj02towgs84(data['Lng'], data['Lat'])

# GCJ02 → BD09
data['Lng_bd'], data['Lat_bd'] = tbd.gcj02tobd09(data['Lng'], data['Lat'])

BD09 转换

python
# BD09 → WGS84
data['Lng_wgs'], data['Lat_wgs'] = tbd.bd09towgs84(data['Lng'], data['Lat'])

# BD09 → GCJ02
data['Lng_gcj'], data['Lat_gcj'] = tbd.bd09togcj02(data['Lng'], data['Lat'])

# BD09MC → BD09
data['Lng_bd'], data['Lat_bd'] = tbd.bd09mctobd09(data['x'], data['y'])

GeoDataFrame 坐标转换

transform_shape() - 批量转换几何对象

python
import geopandas as gpd

# 加载 GCJ02 坐标的数据
gdf = gpd.read_file('data_gcj02.shp')

# 转换为 WGS84
gdf_wgs84 = tbd.transform_shape(gdf, method=tbd.gcj02towgs84)

距离计算

getdistance() - 两点间距离

计算 WGS84 坐标系下两点间的球面距离。

python
# 单点距离
distance = tbd.getdistance(lon1, lat1, lon2, lat2)  # 返回米

# 向量化计算
data['distance'] = tbd.getdistance(
    data['slon'], data['slat'],
    data['elon'], data['elat']
)

完整示例

示例 1:高德数据转 WGS84

python
import pandas as pd
import transbigdata as tbd

# 加载高德地图采集的数据(GCJ02坐标)
data = pd.read_csv('amap_data.csv')

# 转换为 WGS84
data['Lng_wgs'], data['Lat_wgs'] = tbd.gcj02towgs84(data['Lng'], data['Lat'])

# 保存
data.to_csv('data_wgs84.csv', index=False)

示例 2:百度数据转 WGS84

python
import pandas as pd
import transbigdata as tbd

# 加载百度地图数据(BD09坐标)
data = pd.read_csv('baidu_data.csv')

# 转换为 WGS84
data['Lng_wgs'], data['Lat_wgs'] = tbd.bd09towgs84(data['Lng'], data['Lat'])

示例 3:计算 OD 距离

python
import pandas as pd
import transbigdata as tbd

# OD 数据
od_data = pd.DataFrame({
    'slon': [114.0, 114.1],
    'slat': [22.5, 22.6],
    'elon': [114.2, 114.3],
    'elat': [22.7, 22.8]
})

# 计算直线距离
od_data['distance_m'] = tbd.getdistance(
    od_data['slon'], od_data['slat'],
    od_data['elon'], od_data['elat']
)
od_data['distance_km'] = od_data['distance_m'] / 1000

print(od_data)

示例 4:转换 Shapefile

python
import geopandas as gpd
import transbigdata as tbd

# 加载 GCJ02 坐标的行政区划
districts = gpd.read_file('districts_gcj02.shp')

# 转换为 WGS84
districts_wgs84 = tbd.transform_shape(districts, method=tbd.gcj02towgs84)

# 保存
districts_wgs84.to_file('districts_wgs84.shp')

坐标系识别技巧

不确定数据坐标系时,可以:

  1. 将点叠加到不同底图上查看偏移
  2. 与已知坐标系的边界数据对比
  3. 查询数据来源的文档说明

常见偏移特征:

  • WGS84 在国内地图上会偏移 100-700 米
  • BD09 相对 GCJ02 还会有额外偏移

参考文档

完整文档: https://transbigdata.readthedocs.io/en/latest/CoordinatesConverter.html