TransBigData 坐标转换指南
安装
bash
pip install transbigdata
中国常用坐标系说明
| 坐标系 | 说明 | 常见来源 |
|---|---|---|
| WGS84 | GPS原始坐标,国际标准 | 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')
坐标系识别技巧
不确定数据坐标系时,可以:
- •将点叠加到不同底图上查看偏移
- •与已知坐标系的边界数据对比
- •查询数据来源的文档说明
常见偏移特征:
- •WGS84 在国内地图上会偏移 100-700 米
- •BD09 相对 GCJ02 还会有额外偏移
参考文档
完整文档: https://transbigdata.readthedocs.io/en/latest/CoordinatesConverter.html