当前位置: 首页 > news >正文

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…...

流媒体传输系列文章汇总

流媒体传输系列文章汇总 文章目录流媒体传输系列文章汇总引言流媒体交互协议详解视频封装协议详解流媒体环境搭建其他引言 从去年开始编写有关流媒体传输相关知识的文章&#xff0c;已发表文章22篇&#xff0c;阅读量也超过了10万&#xff0c;为了方便各位阅读&#xff0c;本文…...

“万字“ Java I/O流讲解

Java I/O流讲解 每博一文案 谁让你读了这么多书&#xff0c;又知道了双水村以外还有一个大世界&#xff0c;如果从小你就在这个天地里&#xff0c;日出而作&#xff0c;日落而息。 那你现在就会和众乡亲抱同一理想&#xff1a;经过几年的辛劳&#xff0c;像大哥一样娶个满意的…...

数据库(Spring)事务的四种隔离级别

文章目录Spring&#xff08;数据库&#xff09;事务隔离级别分为四种&#xff08;级别递减&#xff09;1、Serializable&#xff08;串行化&#xff09;2、REPEATABLE READ&#xff08;可重复读&#xff09;3、READ COMMITTED&#xff08;读以提交&#xff09;4、Read Uncommit…...

RabbitMQ详解(一):RabbitMQ相关概念

RabbitMQ是目前非常热门的一款消息中间件&#xff0c;不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者&#xff0c;有必要对RabbitMQ有所了解&#xff0c;本系列是RabbitMQ快速入门文章&#xff0c;主要内容包括RabbitMQ是什么、RabbitMQ核心概念、五种消息模…...

​ICLR 2023 | GReTo:以同异配关系重新审视动态时空图聚合

©PaperWeekly 原创 作者 | 周正阳单位 | 中国科学技术大学论文简介动态时空图数据结构在多种不同的学科中均普遍存在&#xff0c;如交通流、空气质量观测、社交网络等&#xff0c;这些观测往往会随着时间而变化&#xff0c;进而引发节点间关联的动态时变特性。本文的主要…...

线程池分享总结

线程池介绍 可以复用线程池的每一个资源 控制资源的总量 为什么要使用线程池 问题一&#xff1a;反复创建线程开销大 问题二&#xff1a;过多的线程会占用太多内存 解决以上两个问题的思路 • 用少量的线程——避免内存占用过多 • 让这部分线程都保持工作&#xff0c;且可…...

AOSP Android11系统源码和内核源码

推荐阅读 商务合作 安全产品 安全服务 2023年招聘 安全培训服务 软件定制服务 Android系统定制服务 安全/软件开发的课程列表 1.下载repo工具 (1).创建bin&#xff0c;并加入到PATH中 mkdir ~/binPATH~/bin:$PATH (2).安装依赖库 sudo apt-get install bison g-mult…...

layui框架学习(6:基础菜单)

菜单是应用系统的必备元素&#xff0c;虽然网页中的导航也能作为菜单使用&#xff0c;但菜单和导航的样式和用途有所不同&#xff08;不同之处详见参考文献5&#xff09;。Layui中用不同的预设类定义菜单和导航的样式&#xff0c;同时二者依赖的模块也不一样。本文主要学习和记…...

第十三届蓝桥杯 C++ B组省赛 C 题——刷题统计(AC)

1.刷题统计 1.题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 aaa 道题目, 周六和周日每天做 bbb 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 nnn 题? 2.输入格式 输入一行包含三个整数 a,ba,ba,b 和 nnn. 3.输出…...

C++中的多态

【1】表现形式&#xff1a;同样的调用语句有多种不同的表现形态 【2】分类&#xff1a;静态联编和动态联编 静态联编有函数重载(运算符重载是特殊的函数重载),模板 【3】重点说下动态联编 【3.1】动态联编的实现需要以下步骤&#xff1a; 有继承关系、父类函数有virtual关…...

Swift如何保证线程安全

Swift可以通过以下几种方式来保证线程安全 使用互斥锁&#xff08;Mutex&#xff09;&#xff1a;使用互斥锁可以防止多个线程同时访问共享数据&#xff0c;保证线程安全。 使用OSAtomic操作&#xff1a;OSAtomic操作可以在多线程环境中安全地执行原子操作。 使用DispatchQue…...

整型提升+算术转换——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容是之前操作符那篇博客中没有讲完的内容&#xff0c;整型提升这个小知识点也非常重要&#xff0c;那现在&#xff0c;就让我们进入操作符的世界吧 隐式类型转换 算术转换 操作符的属性 隐式类型转换 表达式求值的顺序一部…...

Freemarker介绍

2. Freemarker介绍 FreeMarker 是一个用 Java 语言编写的模板引擎&#xff0c;它基于模板来生成文本输出。FreeMarker与 Web 容器无关&#xff0c;即在 Web 运行时&#xff0c;它并不知道 Servlet 或 HTTP。它不仅可以用作表现层的实现技术&#xff0c;而且还可以用于生成 XML…...

【软件测试开发】Junit5单元测试框架

目录1. 注解Test 注解BeforeEach BeforeAllAfterEach AfterAll2. 断言 assertassertequalsassertTrue assertFalseassertNull assertNotNull3. 用例执行顺序方法排序&#xff0c;通过 Order 注解来排序4. 测试套件 Suite5. 参数化单参数stringsints6. 参数化多参数CsvSourceCsv…...

【C语言技能树】程序环境和预处理

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

数据库的三大范式

1.为什么需要数据库设计 设计数据表的时候&#xff0c;要考虑很多的问题: 用户需要哪些数据&#xff0c;我们在数据表中要保存哪一些数据怎么保证数据表中的数据的正确性如何降低数据表的冗余度开发人员怎么才能更方便的使用数据库 如果数据库设计得不合理的话&#xff0c;可…...

【MT7628】开发环境搭建-Fedora12安装之后无法上网问题解决

1.按照如下图所示,打开Network Connections 2.点击Network Connections,弹出如下界面...

[Android Studio]Android 数据存储-文件存储学习笔记-结合保存QQ账户与密码存储到指定文件中的演练

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…...

【openGauss实战9】深度分析分区表

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...