gps坐标(wgs84)转换百度坐标(bd09)python测试

GPS坐标(WGS84)转换百度坐标(BD09) Python测试

在开发中,我们通常会需要把GPS坐标转换成百度坐标,以便在地图上正确的标注位置信息。本文将介绍如何使用Python实现GPS坐标(WGS84)转换成百度坐标(BD09)的功能。

1. 安装Python第三方库

我们需要安装geohash2geopy这两个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技术站

(1)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • 填坑!线上Presto查询Hudi表异常排查

    填坑!线上Presto查询Hudi表异常排查的完整攻略 Presto是一种分布式SQL查询引擎,可以查询多种数据源,包括Hudi表。但是,在线上查询Hudi表时,可能会遇到各种异常。本文将介绍如何排查在线上Presto查询Hudi表时遇到的异常。 1. 确认Hudi表是否存在 在查询Hudi表之前,需要确认Hudi表是否存在。可以使用Hudi提供的CLI工具…

    other 2023年5月5日
    00
  • nivision介绍

    NI Vision是一款由National Instruments公司开发的图像处理软件,它提供了一系列用于图像处理和分析的工具和函数。以下是NI Vision的详细介绍: NI Vision的功能 NI Vision提供了以下功能: 图像处理和分析工具,如二值化、滤波、形态学操作、边缘检测、特征提取等。 支持多种图像格式,如BMP、JPEG、PNG、TIF…

    other 2023年5月6日
    00
  • 一句sql更新两个表并可更新对应的字段值具体实现

    首先,需要明确的是,一句 SQL 更新两个表并可更新对应的字段值其实是一个比较复杂的操作,需要一定的 SQL 技能和经验。下面是具体实现的攻略: 使用 MySQL 的多表更新语法实现。 MySQL 支持使用多个表进行更新,可以使用 UPDATE 语句完成该操作。示例代码如下: UPDATE table1, table2 SET table1.field1 =…

    other 2023年6月25日
    00
  • api-hook 更轻量的接口测试工具

    API-Hook是一种轻量级的接口测试工具,可以用于测试Web API和HTTP服务。以下是使用API-Hook进行接口测试的详细攻略: 安装API-Hook API-Hook是一个基于Node.js的命令行工具,可以通过npm安装。在终端中执行以下命令即可安装API-Hook: npm install -g api-hook 编写测试脚本 在API-Hoo…

    other 2023年5月7日
    00
  • Golang import本地包和导入问题相关详解

    Golang import本地包和导入问题相关详解 在Golang中,我们可以使用import语句来导入本地包和解决导入问题。以下是导入本地包和解决导入问题的详细步骤: 导入本地包 要导入本地包,我们可以使用相对或绝对路径来指定包的位置。以下是导入本地包的示例: import ( \"fmt\" \"./mylocalpacka…

    other 2023年10月13日
    00
  • ubuntu更换科大源

    当Ubuntu系统的软件源下载速度较慢或更新效率较低时,可以更换为科大源,以提高软件下载速度和更新效率。以下是更换Ubuntu系统软件源为科大源的完整攻略: 步骤一:备份原有软件源 在更换软件源之前,需要备份原有软件源,以便在更换后出现问题时可以恢复原有软件源。以下是备份软件源的命令: sudo cp /etc/apt/sources.list /etc/a…

    other 2023年5月9日
    00
  • 解决lombok 父类和子类builder不兼容的问题

    当使用Lombok框架时,有时会遇到使用父类的Builder创建子类实例时出现兼容性问题的情况。这是因为父类和子类在使用Lombok注解生成的Builder时,使用的是不同的构造器和setter方法。 要解决这个问题,我们可以使用下面的步骤来解决: 1. 使用 @SuperBuilder 注解 在父类和子类中都添加 @SuperBuilder 注解,这个注解…

    other 2023年6月26日
    00
  • python3中类的继承以及self和super的区别详解

    下面是 “Python3中类的继承以及self和super的区别详解” 的完整攻略。 类的继承 在Python3中,类的继承是通过在类定义时指定父类实现的,例如: class Animal: def __init__(self, name): self.name = name class Dog(Animal): def __init__(self, nam…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部