Python实现GCJ02坐标系向WGS84坐标系的转换

GCJ02坐标系

GCJ-02(官方称地形图非线性保密处理算法,俗称火星坐标系国测局坐标)是一种基于WGS-84制定的大地测量系统,由中国大陆国家测绘地理信息局制定。此坐标系所采用的混淆算法会在经纬度中加入看似随机的偏移。

使用GCJ-02记录下的地点在GCJ-02的地图中会显示在正确位置,然而换成WGS-84的地图或地点记录就可能造成100-700米不等的偏移。据测量,Google.com的地图与真实坐标相差约50-500米,而中国大陆区的Google.cn地图则与卫星图无偏差,雅虎地图显示的街道图也与卫星图偏差不大。MapQuest地图与众包测绘、不受限制的OpenStreetMap重合。


WGS84坐标系

WGS-84坐标系(World Geodetic System一1984 Coordinate System)是一种国际上采用的地心坐标系。坐标原点为地球质心,其地心空间直角坐标系的Z轴指向BIH (国际时间服务机构)1984.0定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系,称为1984年世界大地坐标系统。
GPS广播星历是以WGS-84坐标系为根据的。


总结

WGS84是大地坐标系,这是一种国际通用的坐标,中国的大地坐标是CGCS2000,也是原始坐标系,一般的终端设备,如果自己有定位功能,比如车载系统,他们发出的gps坐标就是原始坐标,我们在一些地图应用中使用的定位,比如打车软件,其他自带地图的软件,他们一般都是火星坐标系GCJ02,需要进行一个坐标转换。而百度地图相关的应用,基本都是使用的百度坐标,这个是在火星坐标基础上进行的再次加密,所以它还是与火星坐标有关系。

国内的一般都是GCJ02坐标系
国外的很多都是WGS84坐标系

应用需求

我需要把国内平台的数据集,使用Python的Folium库进行地图可视化,但是该可视化库是基于WGS84坐标系实现的。直接把国内平台基于GCJ02坐标系的坐标点使用Folium库进行地图可视化,会有很大的偏移,看起来乱七八糟。
因此,需要先将国内平台的数据集的点的坐标从GCJ02坐标系转换为WGS84坐标系,再使用Folium库进行地图可视化


代码

import mathpi = math.pi
es = 0.00669342162296594323  # 偏心率平方
a = 6378245.0  # 长半轴def _transformlat(lng, lat):ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lat * pi) + 40.0 * math.sin(lat / 3.0 * pi)) * 2.0 / 3.0ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 * math.sin(lat * pi / 30.0)) * 2.0 / 3.0return retdef _transformlng(lng, lat):ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lng * pi) + 40.0 * math.sin(lng / 3.0 * pi)) * 2.0 / 3.0ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 * math.sin(lng / 30.0 * pi)) * 2.0 / 3.0return retdef GCJ02_to_WGS84(gcj_lng, gcj_lat):'''                                                               实现GCJ02坐标系向WGS84坐标系的转换:param gcj_lng: GCJ02坐标系下的经度:param gcj_lat: GCJ02坐标系下的纬度:return: 转换后的WGS84下经纬度'''dlat = _transformlat(gcj_lng - 105.0, gcj_lat - 35.0)dlng = _transformlng(gcj_lng - 105.0, gcj_lat - 35.0)radlat = gcj_lat / 180.0 * pimagic = math.sin(radlat)magic = 1 - es * magic * magicsqrtmagic = math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - es)) / (magic * sqrtmagic) * pi)dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)mglat = gcj_lat + dlatmglng = gcj_lng + dlnglng = gcj_lng * 2 - mglnglat = gcj_lat * 2 - mglatreturn lng, lat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu nginx配置密码访问并下载

nginx配置密码访问_htpasswd: cannot create file-CSDN博客 sudo apt-get install nginx sudo apt install apache2-utils # htpasswd -c /htpasswd/passwd.db test htpasswd -c /etc/nginx/htpasswd.d/nginx_passwd.kibana test # htpasswd -c ccreate 创建文件 # /htp…

2024年美赛数学建模A题思路分析 - 资源可用性和性别比例

# 1 赛题 问题A:资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外,但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1:1,但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

【Java】阻塞队列

目录 BlockingQueue BlockingQueue接口 三个主要实现类介绍: ArrayBlockingQueue:有界队列 LinkedBlockingQueue:无界队列 SynchronousQueue:同步队列 队列对比 BlockingQueue 对于Queue而言,BlockingQueue是主要的线程安全…

有深浅入数据分析 - 启发法(凭人类的天性做分析)

在做数据分析的时候,往往最优的方法是艰难耗时间的 凭经验处理,迅速做出决策,确识能够奏效,进行数据分析的重要而必要的技能 领导的要求是: 邋遢集的处理方式是: 计量的方式处理 上图的调查问卷可以…

pytorch模型里 safetensors 文件、bin文件和pth文件区别、加载和保存方式

目录 PyTorch模型中的safetensors文件和bin文件区别 safetensors文件 bin文件 结论 区别bin文件和pth文件 1. 文件格式 2. 通用性 3. 期望内容 4. 兼容性和移植性 结论 加载和保存safetensors文件 保存safetensors文件 加载safetensors文件 加载和保存bin文件 保…

JVM 内存配置参数积累

0、简介 在进行JVM内存配置时,应当考虑到应用程序的实际需求和运行环境的资源限制,合理分配Xmx、Xms和Xmn参数,以获得最佳的性能表现。通常建议将Xms和Xmx设置为相同的值,以避免JVM在运行过程中动态调整堆大小带来的性能损耗。而…

Axure 动态面板初使用-实现简单的tab切换页面效果

使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure 9,默认进入一个空白页,首先从元件库拉一个动态面板到页面中,位置肯定是C位咯~ 2、将面板尺寸调整一下,设置成你喜欢的数字,比如我就喜欢800600 3、然后…

学习日志以及个人总结(13) 指针!

指针 定义 访问内存地址 操控硬件 指针: 指针基本数据据类 指针数组 指针函数 指针指针 1.指针:就是地址-----就是内存的单元的编号 2.指针变量 语法: 基类型* 指针变量名; 基类型-------数据类型//基础数据类型 //数组…

python脚本将照片按时间线整理

说明:有一次自己瞎折腾,然后把服务器相册搞崩了,后来做了备份同步给找了回来,但是相册的时间线全乱了,看起来非常难受。所以就想通过文件夹的形式把照片重新分类,分类后的结构如下(红色字体为文件夹)&#…

item_get-根据ID取商品详情(shopee.item_get):跨境电商的未来趋势

根据您的需求,我为您撰写了一篇关于“item_get-根据ID取商品详情(shopee.item_get):跨境电商的未来趋势”的文章。由于篇幅限制,我将提供文章的概要和部分内容,完整的文章将需要更多细节和展开。 item_get-根据ID取商品详情(shope…

《区块链简易速速上手小册》第7章:区块链在其他行业的应用(2024 最新版)

文章目录 7.1 供应链管理7.1.1 供应链管理中区块链的基础7.1.2 主要案例:食品安全追踪7.1.3 拓展案例 1:制药供应链7.1.4 拓展案例 2:汽车行业的零部件追踪 7.2 区块链在医疗保健中的应用7.2.1 医疗保健中区块链的基础7.2.2 主要案例&#xf…

今天聊聊软件研发部门孵化策略

声明:上述内容纯属个人瞎说,如有雷同请联系删除。 引:公司研发二部的同事召回来了,这边先恭喜他们荣耀而归。大家都欢心鼓舞、人事嘘寒问暖、综合端盘倒水;真热闹……。我们部门的同事就在边上办公,感触很深…

如何处理缓存一致性问题

* 如何解决缓存一致性问题 * 1. 更新缓存 * ①先更新缓存,再更新数据库. 如果先更新缓存成功了,但是更新数据库失败了,那么数据库将出现脏数据,否掉 * ②先更新数据库,再更新缓存. 如果先更新数据库,但更…

1451A/D/F捷变信号发生器

01 1451A/D/F捷变信号发生器 产品综述: 1451系列捷变信号发生器采用直接数字合成(DDS)技术和直接模拟合成技术(ADS)相结合的设计方案,实现覆盖10MHz~3/20/40GHz全频段的频率捷变,捷变时间小于…

UMI初始化脚手架 Simple App、 Ant Design Pro、Vue Simple App、Umi Plugin 4者的区别

这四个概念分别代表不同的工具和框架,它们的主要区别如下: Simple App:这通常指的是一个基础的、最小化的应用程序。它可能只包含最基础的功能,如用户界面、一些简单的交互等。这种应用程序通常用于学习和实验目的,或者…

分布式事务(四)——TCC补偿模式解决方案

系列目录: 《分布式事务(一)—— 事务的基本概念》 《分布式事务(二)—— CAP和Base理论》 《分布式事务(三)—— 两阶段提交解决方案(2PC)》 一、常见分布式事务解决…

Android selinux调试(rk3588 android 12平台)

Android selinux调试(rk3588 android 12平台): 参考文档: Android系统10 RK3399 init进程启动(二十七) Selinux Type和Attribute https://www.jb51.net/article/277418.htm Android selinux策略文件的编译与加载 https://c.biancheng.net/view/1151.h…

WPF DataTemplate内重写BorderBrush,VisualBrush内数据源绑定提示绑定失败

定义DataTemplate 数据模板文件&#xff0c;内容如下 <DataTemplate x:Key"{DataTemplateKey {x:Type VM:TemplateListVM}}" DataType"{x:Type VM:TemplateListVM}"> <Grid Margin"0" Grid.Row"3" Height"50" Ver…

python:lxml 生成思维导图 Freemind(.mm)文件

请参阅&#xff1a;从PDF中提取目录 或者 java : pdfbox 读取 PDF文件内书签 pip install lxml ; lxml-5.1.0-cp310-cp310-win_amd64.whl (3.9 MB) 读目录.txt文件&#xff0c;使用 lxml 生成思维导图 Freemind&#xff08;.mm&#xff09;文件 编写 txt_etree_mm.py 如下…

QML自定义ComboBox组件,支持动态筛选

QtQuick.Controls提供了ComboBox组件&#xff0c;该组件能够满足日常的下拉选择框的需求&#xff0c;但当需要用户在ComboBox中通过输入关键字进行自动匹配时&#xff0c;原生的组件虽然提供了editable属性用于输入关键字&#xff0c;但是匹配内容不弹出下拉框&#xff0c;无法…