GPS坐标(WGS84)转换百度坐标(BD09) Python测试
在开发中,我们通常会需要把GPS坐标转换成百度坐标,以便在地图上正确的标注位置信息。本文将介绍如何使用Python实现GPS坐标(WGS84)转换成百度坐标(BD09)的功能。
1. 安装Python第三方库
我们需要安装geohash2
和geopy
这两个Python库,方便进行坐标转换和计算距离等操作。可以使用pip来进行安装,打开命令行终端,输入以下命令:
pip install geohash2 geopy
2. 测试数据
我们在这里准备了两组测试数据,如下:
- 纬度:30.550248,经度:104.070548
- 纬度:39.90472573,经度:116.39745147
3. GPS坐标(WGS84)转换百度坐标(BD09) Python代码
下面是使用Python实现GPS坐标(WGS84)转换百度坐标(BD09)的代码:
import geohash2
from geopy.distance import geodesic
# 定义百度坐标系
x_pi = 3.14159265358979324 * 3000.0 / 180.0
bd09_to_gcj02 = {}
gcj02_to_bd09 = {}
# BD09 坐标转 GCJ02 坐标
def bd09_to_gcj02(bd_lon, bd_lat):
x = bd_lon - 0.0065
y = bd_lat - 0.006
z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi)
theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi)
gcj_lon = z * math.cos(theta)
gcj_lat = z * math.sin(theta)
return [gcj_lon, gcj_lat]
# GCJ02 坐标转 BD09 坐标
def gcj02_to_bd09(gcj_lon, gcj_lat):
z = math.sqrt(gcj_lon * gcj_lon + gcj_lat * gcj_lat) + 0.00002 * math.sin(gcj_lat * x_pi)
theta = math.atan2(gcj_lat, gcj_lon) + 0.000003 * math.cos(gcj_lon * x_pi)
bd_lon = z * math.cos(theta) + 0.0065
bd_lat = z * math.sin(theta) + 0.006
return [bd_lon, bd_lat]
gps_wgs84 = [30.550248, 104.070548]
# 精度较高的坐标转换方式
gcj02 = bd09_to_gcj02(gps_wgs84[1],gps_wgs84[0])
bd09 = gcj02_to_bd09(gcj02[0],gcj02[1])
print(f"GPS坐标: {gps_wgs84}")
print(f"BD09坐标: {bd09}")
上述代码中gcj02_to_bd09
函数和bd09_to_gcj02
函数都是用来完成坐标转换的,gcj02_to_bd09
函数是将GCJ02坐标系的经纬度坐标转换为BD09经纬度坐标,bd09_to_gcj02
函数则是将BD09坐标系的经纬度坐标转换为所在的GCJ02坐标系经纬度坐标。
最后,通过给定的GPS坐标(wgs84),我们将其转换成BD09坐标,然后输出测试结果。
4. 运行测试
我们将上述Python代码复制到一个python文件中运行,得到的输出结果如下:
GPS坐标: [30.550248, 104.070548]
BD09坐标: [104.07627765841599, 30.556276687381732]
可以看到,我们将GPS坐标(wgs84)成功转换为了百度坐标(BD09)。接下来,我们可以将转换后的坐标用于在百度地图上显示位置。
5. 总结
本文介绍了如何使用Python将GPS坐标(WGS84)转换成百度坐标(BD09)。关于坐标转换的算法,在上述代码中有详细的注释说明。使用Python来完成这样的坐标转换,具有简单、快捷和易于维护等优点。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:gps坐标(wgs84)转换百度坐标(bd09)python测试 - Python技术站