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日

相关文章

  • Win10文件系统FAT32转NTFS命令方法教程

    以下是详细讲解“Win10文件系统FAT32转NTFS命令方法教程”的完整攻略。 1. 确认文件系统类型 在执行任何文件系统变更操作之前,我们应该先了解当前系统的文件系统类型,以便在确认更改的必要性之后正确选择更改方法。 我们可以通过运行以下命令进行查看: fsutil fsinfo volumeinfo C: 其中,C:为我们需要查看的驱动器符号。 如果我…

    other 2023年6月27日
    00
  • SpringBoot整合websocket实现即时通信聊天

    下面是详细讲解SpringBoot整合websocket实现即时通信聊天的攻略。 1. 环境准备 首先,我们需要准备好以下环境: JDK 1.8及以上版本 Maven Spring Boot 2.0.3.RELEASE及以上版本 2. 添加依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.…

    other 2023年6月27日
    00
  • phpmyadmin MySQL 加密配置方法

    当你在使用phpMyAdmin时,为了保护您的MySQL数据库,建议你采取一些措施使其安全可靠。其中之一是启用MySQL加密。这样可以确保你的数据库中的敏感信息在数据传输过程中不容易被截取到。以下是一些简单的步骤,可以帮助您将MySQL加密配置到phpMyAdmin中。 步骤 在MySQL服务器上为phpMyAdmin创建新用户 在MySQL服务器上为php…

    other 2023年6月27日
    00
  • java多线程的同步方法实例代码

    下面是Java多线程的同步方法实例代码的完整攻略: 一、什么是同步方法? Java中的同步方法是一种保证线程安全的方法。在多线程环境下,如果多个线程访问同一个共享资源(如同一个对象的成员变量),就会发生数据不一致的问题。为了避免这种情况,我们可以使用synchronized关键字修饰共享资源的方法,这样在同一时间只会有一个线程访问该方法,其他线程需要等待。 …

    other 2023年6月27日
    00
  • C语言数据结构与算法之队列的实现详解

    C语言数据结构与算法之队列的实现详解 1. 什么是队列 队列(Queue)是一种数据结构,它是一种具有特殊操作约束的线性结构。在队列中,数据元素按照一定的逻辑顺序(即先进先出)存储,允许在队列尾部插入元素,在队列头部删除元素。队列的基本操作如下: 队尾入队:将一个新元素插入到队列的尾部; 队头出队:将队列中头部的元素删除,并返回该元素; 获取队头元素:仅返回…

    other 2023年6月27日
    00
  • 简单谈谈JavaScript变量提升

    当然!下面是关于\”简单谈谈JavaScript变量提升\”的完整攻略,包含两个示例说明。 … JavaScript变量提升 在JavaScript中,变量提升是指在代码执行之前,JavaScript引擎会将变量的声明提升到作用域的顶部。这意味着我们可以在变量声明之前使用变量。 … 示例1:变量声明提升 console.log(message); /…

    other 2023年8月20日
    00
  • WordPress 嵌套回复 (优缺点对照)

    WordPress 嵌套回复 (优缺点对照)攻略 什么是 WordPress 嵌套回复? WordPress 嵌套回复是一种功能,允许网站访客在评论区对其他评论进行回复。这种功能使得用户可以更方便地进行交流和互动,增强了用户参与度和社区感。 优点 提高用户参与度:嵌套回复功能使得用户可以直接回复其他用户的评论,促进了用户之间的互动和讨论,提高了用户参与度。 …

    other 2023年7月27日
    00
  • iqoo8pro怎么开启开发者模式?iqoo8pro开启开发者模式教程

    当您需要进行一些高级设置或开发调试时,开启开发者模式是必须的。在iQOO 8 Pro中也可以通过以下步骤来启用开发者模式: 打开“设置”应用程序。 向下滚动并点击“关于手机”。 点击“版本号”七次,系统将提示“开启开发者模式”。 返回上一屏幕,在“系统”下找到“开发者选项”,点击进入设置页面。 将“开发者选项”状态切换为“开启”。 以上是iQOO 8 Pro…

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