百度地图、高德地图、google地图等坐标系相关梳理

以下是详细讲解“百度地图、高德地图、Google地图等坐标系相关梳理的完整攻略”:

百度地图、高德地图、Google地图等坐标系相关梳理

在使用地图相关的应用程序时,经常需要涉及到坐标系的转换。不同的地图服务提供商使用不同的坐标系,因此需要进行坐标系的转换。本攻略将介绍百度地图、高德地图、Google地图等常用地图服务提供的坐标系,并提供坐标系转换的示例。

坐标概述

坐标系是用于描述地球表面位置的一种数学模型。常用的坐标系包括经纬度坐标系和平面坐标系。经纬度坐标系是用经度和纬度来描述地球表面位置的坐标系,常用于全球范围内的位置描述。平面坐标系是用平面坐标来描述地球表面位置的坐标系,常用于局部范围内的位置描述。

百度地图坐标系

百地图使用的是BD-09坐标系,也称为百度坐标系。BD-09坐标系是在GCJ-02坐标系的基础上进行了加密和偏移处理得到的。因此,如果需要将其他坐标系的坐标转换为百度坐标系,需要先将其转换为GCJ-02坐标系,然后再进行加密和偏移处理。

高德地图坐标系

高德地图使用的是GCJ-02坐标系,也称为火星坐标系。GCJ-02坐标系是在WGS-84坐标系的基础上进行了加密和偏移处理得到的。因此,如果需要将其他坐标系的坐标转换为高德坐标系,需要先将其转换为WGS-84坐标系,然后再进行加密和偏移处理。

Google地图坐标系

Google地图使用的是WGS-84坐标系,也称为全球卫星定位系统坐标系。WGS-84坐标系是一种全球通用的坐标系,常用于全球范围内的位置描述。

坐标系转换示例

下面是将经纬度坐标转换为百度坐标系和高德坐标系的示例:

将纬度坐标转换为百度坐标系

from math import pi, cos, sin, sqrt, atan2

def bd_encrypt(lng, lat):
    x_pi = pi * 3000.0 / 180.0
    x = lng
    y = lat
    z = sqrt(x * x + y * y) + 0.00002 * sin(y x_pi)
    theta = atan2(y, x) + 0.000003 * cos(x * x_pi)
    bd_lng = z * cos(theta) + 0.0065
    bd_lat = z * sin(theta) + 0.006
    return bd_lng, bd_lat

将经纬度标转换为高德坐标系

from math import pi, cos, sin, sqrt, atan2

def gcj_encrypt(lng, lat):
    x_pi = pi * 3000.0 / 180.0
    a = 6378245.0
    ee = 0.00669342162296594323
    d_lat = transform_lat(lng - 105.0, lat - 35.0)
    d_lng = transform_lng(lng - 105.0, lat - 35.0)
    rad = lat / 180.0 * pi
    magic = sin(rad_lat)
    magic = 1 - ee * magic * magic
    sqrt_magic = sqrt(magic)
    d_lat = (d_lat * 180.0) / ((a * (1 - ee)) / (magic * sqrt_magic) * pi)
    d_lng = (d_lng * 180.0) / (a / sqrt_magic * cos(rad_lat) * pi)
    mg_lat = lat + d_lat
    mg_lng = lng + d_lng
    return mg_lng, mg_lat

def transform_lat(lng, lat):
    x_pi = pi * 3000.0 / 180.0
    a = 6378245.0
    ee = 0.00669342162296594323
    d_lat = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * sqrt(abs(lng))
    d_lat += (20.0 * sin(6.0 * lng * pi) + 20.0 * sin(2.0 * lng * pi)) * 2.0 / 3.0
    d_lat += (20.0 * sin(lat * pi) + 40.0 * sin(lat / 3.0 * pi)) * 2.0 / 3.0
    d_lat += (160.0 * sin(lat / 12.0 * pi) + 320 * sin(lat * pi / 30.0)) * 2.0 / 3.0
    return d_lat

def transform_lng(lng, lat):
    x_pi = pi * 3000.0 / 180.0
    a = 6378245.0
    ee = 0.00669342162296594323    d_lng = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * sqrt(abs(lng))
    d_lng += (20.0 * sin(6.0 * lng * pi) + 20.0 sin(2.0 * lng * pi)) * 2.0 / 3.0
    d_lng += (20.0 * sin(lng * pi) + 40.0 * sin(lng / 3.0 * pi)) * .0 / 3.0
    d_lng += (150.0 * sin(lng / 12.0 * pi) + 300.0 * sin(lng / 30.0 * pi)) * 2.0 / 3.0
    return d_lng

示例一:将百度坐标系转换为WGS-84坐标系

from math import pi, cos, sin, sqrt, atan2

def bd_decrypt(bd_lng, bd_lat):
    x_pi = pi * 3000.0 / 180.0
    x = bd_lng - 0.0065
    y = bd_lat - 0.006
    z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi)
    theta = atan2(y, x) - 0.000003 * cos(x * x_pi)
    lng = z * cos(theta)
    lat = z * sin(theta)
    return lng, lat

示例二:将高德坐标系转换为WGS-84坐标系

from math import pi, cos, sin, sqrt, atan2

def gcj_decrypt(gcj_lng, gcj_lat):
    x_pi = pi * 3000.0 / 180.0
    a = 6378245.0
    ee = 0.00669342162296594323
    d_lat = transform_lat(gcj_lng - 105.0, gcj_lat - 35.0)
    d_lng = transform_lng(gcj_lng - 105.0, gcj_lat - 35.0)
    rad_lat = gcj_lat / 180.0 * pi
    magic = sin(rad_lat)
    magic = 1 - ee * magic * magic
    sqrt_magic = sqrt(magic)
    d_lat = (d_lat * 180.0) / ((a * (1 - ee)) / (magic * sqrt_magic) * pi)
    d_lng = (d_lng * 180.0) / (a / sqrt_magic * cos(rad_lat) * pi)
    mg_lat = gcj_lat + d_lat
    mg_lng = gcj_lng + d_lng
    return mg_lng, mg_lat

总结

以上是百度地图、高德地图、Google地图等常用地图服务提商的坐标系相关梳理,以及坐标系转换的示例。在使用地图相关的应用程序时,需要根据具体的求选择合适的坐标系,并进行坐标系的转换。同时,需要注意坐标系转换的精度和稳定性,以确保转换的准确无误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:百度地图、高德地图、google地图等坐标系相关梳理 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • 配置F5 负载均衡(转)

    配置F5 负载均衡(转) 负载均衡是现代网络中非常重要的一环,能够帮助我们分摊网络流量,同时增强服务可用性和可靠性。F5作为著名的应用交付和负载均衡解决方案,提供了非常丰富的负载均衡功能和配置选项。 本文将详细介绍如何通过F5负载均衡器来配置负载均衡,以实现更优秀的网络负载均衡效果。 准备工作 在开始配置之前,我们需要做好一些准备工作,包括: 拥有F5负载均…

    其他 2023年3月28日
    00
  • Java编程实现从尾到头打印链表代码实例

    下面是Java编程实现从尾到头打印链表代码实例的完整攻略。 1. 思路分析 从尾到头打印链表,可以想到两种方式: 反转链表,并正序打印 从尾到头遍历链表,借助栈的先进后出特性 我们可以选择使用第二种方式来实现。具体步骤如下: 从头到尾遍历链表,将节点值依次入栈 遍历完整个链表后,依次弹出栈的元素,即可实现从尾到头打印链表 2. 代码实现 2.1 定义List…

    other 2023年6月27日
    00
  • Android5.1系统通过包名给应用开放系统权限的方法

    Android 5.1系统通过包名给应用开放系统权限的方法攻略 在Android 5.1系统中,可以通过以下步骤给应用开放系统权限: 确定应用的包名:首先,需要确定要给应用开放权限的包名。包名是应用在Android系统中的唯一标识符,可以在应用的清单文件(AndroidManifest.xml)中找到。 编辑系统权限配置文件:接下来,需要编辑系统权限配置文件…

    other 2023年9月7日
    00
  • 谢宝友:会说话的linux内核

    谢宝友:会说话的Linux内核 谢宝友是一位著名的Linux内核开发者,他开发了一个名为“会说话的Linux内核”的项目,该项目可以让Linux内核说话。本文将介绍如何使用谢宝友的“会说话的Linux内核”项目,并提供两个示例说明。 1. 下载并编译内核 首先,需要下载并编译谢宝友的“会说话的Linux内核”项目。可以使用以下步骤: 下载内核源代码: git…

    other 2023年5月7日
    00
  • Xcode8下iOS10常见报错闪退,字体适配和编译不过的问题及解决方案

    Xcode8下iOS10常见报错、闪退、字体适配和编译不过的问题及解决方案 在使用Xcode8开发iOS10应用时,常常会遇到报错、闪退、字体适配和编译不过的问题。本文将介绍常见的这些问题及其解决方案。 1. 报错和闪退问题 1.1 NSAllowsArbitraryLoads导致的网络请求报错 iOS10引入了新的安全策略,禁止非HTTPS的网络请求,默认…

    other 2023年6月26日
    00
  • idea下Android各目录所代表的含义介绍

    idea下Android各目录所代表的含义介绍 在使用IntelliJ IDEA进行Android开发时,项目中的各个目录有着不同的含义和用途。下面是对常见的Android项目目录的介绍: app:该目录是Android项目的主要模块,包含了应用程序的源代码、资源文件和配置文件等。在该目录下,通常会包含以下子目录: src:该目录包含了应用程序的源代码,按照…

    other 2023年10月13日
    00
  • 【转】winrar命令行详解

    【转】winrar命令行详解 WinRAR是一个强大的文件压缩、解压缩软件,常常被用于在Windows系统中对文件进行压缩、备份和归档。除了通过图形界面使用WinRAR,还可以通过命令行来使用它提供的功能。本文将详细解释WinRAR的命令行参数及其用法。 WinRAR命令行用法 WinRAR的命令行用法如下: WinRAR [<命令>] -[&l…

    其他 2023年3月28日
    00
  • Firefox浏览网页时不停抖动解决方案

    针对”Firefox浏览网页时不停抖动”这个问题,我们可以采取以下解决步骤: 步骤一:清除浏览器缓存 浏览器缓存很可能是导致抖动的罪魁祸首。在进入下一步之前,我们先尝试清除浏览器缓存。 打开菜单栏的 “选项”。 选择 “隐私与安全”。 找到 “清除数据” 选项并点击。 在 “清除数据” 窗口中,确保选中了 “缓存”。 点击 “清除数据” 按钮。 清除缓存可以…

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