GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)
文章目录
- 前言
- 一、坐标系
- 1.地球坐标 (WGS84)
- 2.国测局坐标系(GCJ-02、火星坐标系)
- 3.百度坐标(BD-09)
- 4.国家大地2000坐标系(CGCS2000)
- 二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换
- 1.核心代码
- 2.转换验证
- 百度地图
- 高德地图
- 腾讯地图
- 三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
- 四、wgs84坐标转换
- 1.坐标偏移和经纬度单独转换
- 2.GCJ02 转换为 WGS84
- 3.WGS84转GCj02
- 4.WGS84 百度坐标系 (BD-09) 的转换
- 5.百度坐标系 (BD-09) WGS84 的转换
- 总结
前言
地理信息系统 (GIS) 是一个创建、管理、分析和绘制所有类型数据的系统。GIS 将数据连接到地图,将位置数据(事物所在位置)与所有类型的描述性信息(事物在该位置的情况)集成到一起。这可以为适用于自然科学和几乎所有行业的制图和分析提供基础。GIS 帮助用户了解模式、关系和地理环境。其优势包括改善沟通、提高效率以及更好地管理和决策。
一、坐标系
坐标系是一种用于表示地理要素、影像和观察值位置的参照系统,为定义真实世界的位置提供了框架。
使用 [经度,纬度]来描述点的横纵坐标,经度(longitude)范围是[-180,180],纬度(latitude)范围是[-90,90],那么大于90或者小于90的一定不会是纬度,另外我们中国所覆盖的范围大约是经度73.66 ~ 135.05,纬度3.86 ~ 53.55
,因此在国内项目上可以通过坐标范围来判定经纬度顺序:经度缩写为lng,纬度缩写为lat。
1.地球坐标 (WGS84)
- 国际标准,从 GPS 设备中取出的数据的坐标系。
- 国际地图提供商使用的坐标系(谷歌地图国外、osm、mapbox)。
2.国测局坐标系(GCJ-02、火星坐标系)
- 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系;
- 国家规定:国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密(高德地图、腾讯地图等) ;
- WGS84基础上的加密;
3.百度坐标(BD-09)
- 百度标准,百度 SDK,百度地图,百度GeoCoding 使用;
- GCJ-02基础上的二次加密。
4.国家大地2000坐标系(CGCS2000)
- 国家天地图使用的坐标系。
- 基本跟WGS84相近(厘米级)。
WGS84 通过国测局一次加密偏移后为 GCJ02(国测局2002)坐标系,BD09在此基础上进行了二次加密,而国家大地2000(CGCS2000)则是我们国家目前在推的标准规范平时精度要求不高,我们可以约等同于 WGS84。
二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换
1.核心代码
"""*百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换*即百度转谷歌(国内)、高德、腾讯* @ parambd_lon* @ parambd_lat* @ returns{*[]}
"""
def bd09togcj02(bd_lon, bd_lat):x = bd_lon - 0.0065y = bd_lat - 0.006z = 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)gg_lng = z * math.cos(theta)gg_lat = z * math.sin(theta)return [gg_lng, gg_lat]# print(bd09togcj02(120.199672, 30.331184))
2.转换验证
通过百度、高德和腾讯,国内3大主流LBS地图为测试蓝本,拾取百度坐标后,进行转换到各自版本做标注比对。
百度地图
120.199672,30.331184
高德地图
120.19312059585862, 30.325466905933578
腾讯地图
30.325466905933578, 120.19312059585862。腾讯地图的经纬度输入方式,和百度高德的不同,需要对调位置。
三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
核心代码
"""* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换* 即谷歌、高德 转 百度* @param lng* @param lat* @returns {*[]}
"""def gcj02tobd09(lng, lat):z = math.sqrt(lng * lng + lat * lat) + 0.00002 * math.sin(lat * x_PI)theta = math.atan2(lat, lng) + 0.000003 * math.cos(lng * x_PI)bd_lng = z * math.cos(theta) + 0.0065bd_lat = z * math.sin(theta) + 0.006return [bd_lng, bd_lat]# print(gcj02tobd09(120.19312059585862, 30.325466905933578))
四、wgs84坐标转换
1.坐标偏移和经纬度单独转换
"""* 判断是否在国内,不在国内则不做偏移* @param lng* @param lat* @returns {boolean}
"""def out_of_china(lng, lat):# 纬度3.86~53.55,经度73.66~135.05if 73.66 < lng < 135.05 and 3.86 < lat < 53.55:return False"""* 经纬度偏移转换
"""def transform_lat(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 transform_lng(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 ret
2.GCJ02 转换为 WGS84
"""* GCJ02 转换为 WGS84* @param lng* @param lat* @returns {*[]}
"""def gcj02_to_wgs84(lng, lat):# 判断是否为国外坐标if out_of_china(lng, lat):return [lng, lat]else:dlat = transform_lat(lng - 105.0, lat - 35.0)dlng = transform_lng(lng - 105.0, lat - 35.0)radlat = lat / 180.0 * PImagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = math.sqrt(magic)dlat = (dlat * 180.0) / ((aa * (1 - ee)) / (magic * sqrtmagic) * PI)dlng = (dlng * 180.0) / (aa / sqrtmagic * math.cos(radlat) * PI)mglat = lat + dlatmglng = lng + dlngreturn [lng * 2 - mglng, lat * 2 - mglat]
3.WGS84转GCj02
"""* WGS84转GCj02* @param lng* @param lat* @returns {*[]}
"""def wgs84_to_gcj02(lng, lat):if out_of_china(lng, lat):return [lng, lat]else:dlat = transform_lat(lng - 105.0, lat - 35.0)dlng = transform_lng(lng - 105.0, lat - 35.0)radlat = lat / 180.0 * PImagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = math.sqrt(magic)dlat = (dlat * 180.0) / ((aa * (1 - ee)) / (magic * sqrtmagic) * PI)dlng = (dlng * 180.0) / (aa / sqrtmagic * math.cos(radlat) * PI)mglat = lat + dlatmglng = lng + dlngreturn [mglng, mglat]
4.WGS84 百度坐标系 (BD-09) 的转换
"""*WGS84 百度坐标系 (BD-09) 的转换*@param lng*@param lat*@returns {*[]}
"""def wgs84_to_bd09(lng, lat):point = wgs84_to_gcj02(lng, lat)bdpoint = gcj02_to_bd09(point[0], point[1])return [bdpoint[0], bdpoint[1], point[0], point[1]]
5.百度坐标系 (BD-09) WGS84 的转换
"""* 百度坐标系 (BD-09) WGS84 的转换* @param lng* @param lat* @returns {*[]}
"""def bd09_to_wgs84(lng, lat):point = bd09_to_gcj02(lng, lat)wgs84point = gcj02_to_wgs84(point[0], point[1])return [wgs84point[0], wgs84point[1]]
总结
- 解决使用百度webAPI坐标转换时的问题:X→GPS根据法律规定,不支持将任何类型的坐标转换为GPS坐标;
- 经纬度精准度和转换时估算的差异,会导致不同坐标在地图标注的差异,对实际地点的标注影响不大;
- 在实际开发中的产品应用:批量转化。即开发批量转化工具,减少对百度或高德地图限额的依赖。
@漏刻有时
相关文章:
GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)
文章目录前言一、坐标系1.地球坐标 (WGS84)2.国测局坐标系(GCJ-02、火星坐标系)3.百度坐标(BD-09)4.国家大地2000坐标系(CGCS2000)二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换1.核心代码2.转换验证百度地图高德地图腾讯地图三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09…...
流媒体传输系列文章汇总
流媒体传输系列文章汇总 文章目录流媒体传输系列文章汇总引言流媒体交互协议详解视频封装协议详解流媒体环境搭建其他引言 从去年开始编写有关流媒体传输相关知识的文章,已发表文章22篇,阅读量也超过了10万,为了方便各位阅读,本文…...
“万字“ Java I/O流讲解
Java I/O流讲解 每博一文案 谁让你读了这么多书,又知道了双水村以外还有一个大世界,如果从小你就在这个天地里,日出而作,日落而息。 那你现在就会和众乡亲抱同一理想:经过几年的辛劳,像大哥一样娶个满意的…...
数据库(Spring)事务的四种隔离级别
文章目录Spring(数据库)事务隔离级别分为四种(级别递减)1、Serializable(串行化)2、REPEATABLE READ(可重复读)3、READ COMMITTED(读以提交)4、Read Uncommit…...
RabbitMQ详解(一):RabbitMQ相关概念
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,本系列是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、五种消息模…...
ICLR 2023 | GReTo:以同异配关系重新审视动态时空图聚合
©PaperWeekly 原创 作者 | 周正阳单位 | 中国科学技术大学论文简介动态时空图数据结构在多种不同的学科中均普遍存在,如交通流、空气质量观测、社交网络等,这些观测往往会随着时间而变化,进而引发节点间关联的动态时变特性。本文的主要…...
线程池分享总结
线程池介绍 可以复用线程池的每一个资源 控制资源的总量 为什么要使用线程池 问题一:反复创建线程开销大 问题二:过多的线程会占用太多内存 解决以上两个问题的思路 • 用少量的线程——避免内存占用过多 • 让这部分线程都保持工作,且可…...
AOSP Android11系统源码和内核源码
推荐阅读 商务合作 安全产品 安全服务 2023年招聘 安全培训服务 软件定制服务 Android系统定制服务 安全/软件开发的课程列表 1.下载repo工具 (1).创建bin,并加入到PATH中 mkdir ~/binPATH~/bin:$PATH (2).安装依赖库 sudo apt-get install bison g-mult…...
layui框架学习(6:基础菜单)
菜单是应用系统的必备元素,虽然网页中的导航也能作为菜单使用,但菜单和导航的样式和用途有所不同(不同之处详见参考文献5)。Layui中用不同的预设类定义菜单和导航的样式,同时二者依赖的模块也不一样。本文主要学习和记…...
第十三届蓝桥杯 C++ B组省赛 C 题——刷题统计(AC)
1.刷题统计 1.题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 aaa 道题目, 周六和周日每天做 bbb 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 nnn 题? 2.输入格式 输入一行包含三个整数 a,ba,ba,b 和 nnn. 3.输出…...
C++中的多态
【1】表现形式:同样的调用语句有多种不同的表现形态 【2】分类:静态联编和动态联编 静态联编有函数重载(运算符重载是特殊的函数重载),模板 【3】重点说下动态联编 【3.1】动态联编的实现需要以下步骤: 有继承关系、父类函数有virtual关…...
Swift如何保证线程安全
Swift可以通过以下几种方式来保证线程安全 使用互斥锁(Mutex):使用互斥锁可以防止多个线程同时访问共享数据,保证线程安全。 使用OSAtomic操作:OSAtomic操作可以在多线程环境中安全地执行原子操作。 使用DispatchQue…...
整型提升+算术转换——“C”
各位CSDN的uu们你们好呀,今天小雅兰的内容是之前操作符那篇博客中没有讲完的内容,整型提升这个小知识点也非常重要,那现在,就让我们进入操作符的世界吧 隐式类型转换 算术转换 操作符的属性 隐式类型转换 表达式求值的顺序一部…...
Freemarker介绍
2. Freemarker介绍 FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成 XML…...
【软件测试开发】Junit5单元测试框架
目录1. 注解Test 注解BeforeEach BeforeAllAfterEach AfterAll2. 断言 assertassertequalsassertTrue assertFalseassertNull assertNotNull3. 用例执行顺序方法排序,通过 Order 注解来排序4. 测试套件 Suite5. 参数化单参数stringsints6. 参数化多参数CsvSourceCsv…...
【C语言技能树】程序环境和预处理
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...
数据库的三大范式
1.为什么需要数据库设计 设计数据表的时候,要考虑很多的问题: 用户需要哪些数据,我们在数据表中要保存哪一些数据怎么保证数据表中的数据的正确性如何降低数据表的冗余度开发人员怎么才能更方便的使用数据库 如果数据库设计得不合理的话,可…...
【MT7628】开发环境搭建-Fedora12安装之后无法上网问题解决
1.按照如下图所示,打开Network Connections 2.点击Network Connections,弹出如下界面...
[Android Studio]Android 数据存储-文件存储学习笔记-结合保存QQ账户与密码存储到指定文件中的演练
🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…...
【openGauss实战9】深度分析分区表
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
XSS跨站脚本攻击剖析与防御:初识XSS
目录 跨站脚本介绍 1. 什么是XSS跨站脚本 2. XSS跨站脚本实例 3. XSS漏洞的危害 XSS的分类 1. 反射型XSS 2. 持久性XSS XSS构造 1. 利用< >标记注射Html /Javascript 2. 利用HTML标签属性值执行XSS 3. 空格回车Tab 4. 对标签属性值转码 5. 产生自己的事件…...
Python 高级编程之网络编程 Socket(六)
文章目录一、概述二、Python socket 模块1)Socket 类型1、创建 TCP Socket2、创建 UDP Socket2)Socket 函数1、服务端socket函数2、客户端socket函数3、公共socket函数三、单工,半双工以及全双工通信方式的区别四、单工,半双工以及…...
centos学习记录
遇到的问题及其解决办法 centos7安装图形化界面 yum groupinstall ‘X Window System’ yum groupinstall -y ‘GNOME Desktop’ 安装完成后输入init 5进入图形化界面 centos7安装vmware-tools 第一步卸载open-vm-tools 输入命令 yum remove open-vm-tools 输入命令 reboot 在…...
为什么说网络安全是风口行业?
前言 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万&…...
12-PHP使用过的函数 111-120
111、rowCount if ($stmt->execute($data)) {//true//读:select//写:insert,update,delete,成功后会返回表中受影响的记录数量//!rowCount() 返回受影响的记录数量if ($stmt->rowCount() > 0) {echo 新增成功,id . $db->lastInsertId() . <hr>;} else {//…...
【JavaWeb项目】简单搭建一个前端的博客系统
博客系统项目 本项目主要分成四个页面: 博客列表页博客详情页登录页面博客编辑页 该系统公共的CSS样式 common.css /* 放置一些各个页面都会用到的公共样式 */* {margin: 0;padding: 0;box-sizing: 0; }/* 给整个页面加上背景 */ html, body{height: 100%; }body {backgrou…...
iPerf3 -M参数详解,场景分析
本文目录iPerf3 -M参数说明几个典型测试场景中应该如何设定合适的-M参数值理想局域网模型(无丢包,无抖动)高丢包,无抖动模型高丢包,高抖动模型(网络质量比较差,IP转发路径变化频繁)总…...
java的基本语法以及注意事项
Java 基础语法一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它…...
matlab搭建IAE,ISE,ITAE性能指标
目录前言准备IAEISEITAE前言 最近在使用matlab搭建控制系统性能评价指标模型,记录一下 准备 MATLAB R2020 IAE IAE函数表达式如下所示: IAE函数模型如下所示: ISE ISE函数表达式如下所示: ISE函数模型如下所示ÿ…...
docker安装mysql
在安装Mysql之前,我们可以先查看一下我们的镜像,输入命令: docker images 能发现,镜像里面只有一个Nginx,并没有Mysql 然后我们可以像上一篇安装Nginx一样,安装Mysql镜像。 输入以下命令,安装…...
做收费类网站站长/一站式推广平台
来源:Lin_R 链接:https://segmentfault.com/a/1190000020956724背景我们负责的一个业务平台,有次在发现设置页面的加载特别特别地慢,简直就是令人发指让用户等待 36s 肯定是不可能的,于是我们就要开启优化之旅了。投…...
汽车网站建设工作室/长沙网站排名推广
从gitHub或者gitee上拉取代码后,我老是想着把别人的代码保存到自己的仓库上,这里教你一招。 gitee的: 首先我们在gitee或者github上创建一个自己的仓库,github的我就不在展示了,基本上和gitee操作一样 输入相关信息…...
十堰网站建设公司0719web/seo基础教程视频
iptables/netfilter详解一、前言1.防火墙(Firewall)是隔离工具;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(识别条件)进行检测, 对于能够被规则匹配到的报文实行某预定义的…...
网页网站制作公司/优化大师好用吗
刚上大学,我以为学好了c就行,那时我只会用C做一些数字运算,ac一些简单的练习题,以为那样就足够了、天真的以为学好“编程”就可以自己做app了。 后来学了结构体开始懵逼,再后来学了数据结构——C的指针我也需要学&…...
外贸网站建设浩森宇特/灰色广告投放平台
映射 | MAP 集合的映射操作是将来在编写Spark/Flink用得最多的操作,是我们必须要掌握的。因为进行数据计算的时候,就是一个将一种数据类型转换为另外一种数据类型的过程。 map方法接收一个函数,将这个函数应用到每一个元素,返回一…...
wordpress 文章编辑 插件/互联网推广广告
Akka 和 Storm 的设计差异 Akka 和 Storm 都是实现低延时, 高吞吐量计算的重要工具. 不过它们并非完全的竞品,如果说 Akka 是 linux 内核的话, storm 更像是类似 Ubuntu 的发行版.然而 Storm并非 Akka 的发行版, 或许说 Akka 比作 BSD, Storm 比作 Ubuntu 更合适. 实现的功能差…...