百度坐标、火星坐标与WGS-84坐标转换(纠偏加偏)工具及其开发思路

2024-03-19 19:30

本文主要是介绍百度坐标、火星坐标与WGS-84坐标转换(纠偏加偏)工具及其开发思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、杂言

百度坐标(BD-09)、火星坐标(GCJ-02)坐标与WGS-84坐标相关说明这里不再赘述,其他博客文章对于三类坐标系的说明已经比较详细,可以自行搜索了解,本篇文章主要对本人开发的各类转换工具进行说明(注:本人主要使用Python脚本进行开发)。文章末会将工具下载链接附上,工具为我在读研期间学习与实践的成果,可以提供数据服务,请尊重知识成果,欢迎提供意见或建议。转换源码为GitHub开源代码,想自己尝试开发的可以看下文链接下载自行开发,工具与工具算法暂不提供,伸手党请绕行。转载请注明原文,谢谢。

二、正题

注意:开发过程中坐标单位均为十进制度

转换方法如下:

       BD_to_HX:百度转火星
       BD_to_GG:百度转谷歌(WGS84)
       HX_to_BD:火星转百度
       HX_to_GG:火星转谷歌(WGS84)
       GG_to_BD:谷歌(WGS84)转百度
       GG_to_HX:谷歌(WGS84)转火星

(一)ArcGIS环境下开发Toolbox工具箱

在软件的计算代码使用GitHub开源代码,提供者为wandergis,地址为(GitHub - wandergis/coordTransform_py: 提供百度坐标系(bd-09)、火星坐标系(国测局坐标系、gcj02)、WGS84坐标系直接的坐标互转,也提供了解析高德地址的方法的python版本)。我对代码修改优化,刚开始在ArcGIS平台进行开发,主要为Toolbox工具箱开发,开发成果只要为三类:坐标转换工具矢量版Toolbox、坐标转换工具Excel版Toolbox、坐标转换工具CSV版Toolbox,三类工具均进行过优化与测试,力求达到最精简界面实现工具功能。下面对三类工具进行简要说明:

1、坐标转换工具矢量版Toolbox v1.1(2019-07-29),该版本修复v1.0中部分bug,增加对孔洞孤岛、多部件要素支持。主要功能利用Arcpy游标函数或Arcpy.da游标函数实现点、线、面矢量数据的转换,主要思路:点要素最简单,直接获取坐标转换保存为新点要素;线要素与面要素较为复杂,我在开发中强制将原要素变为单部件要素,然后获取构成线或面要素的点集坐标转换后逆向构造线或面要素,最后保存为新要素。以上均保持原有要素的属性表信息不变。截图:

优点:(1)在ArcGIS环境中,可以调用现有的函数组合,省去逻辑设计消耗脑细胞,同时减少代码书写量;(2)工具界面利用脚本添加到Toolbox中,省去界面脚本编写的烦恼;(3)实现大批量点、线、面矢量数据的转换,保留原始输入要素的属性值,只对组成图形节点的坐标转换与更新。

缺点:ArcGIS运行环境,数据处理效率一般,数据量大会增加处理时间。

2、坐标转换工具Excel版Toolbox,主要功能利用Openpyxl模块读写Excel记录坐标进行转换,该模块仅支持后缀为*.xlsx的文件读写,主要思路:建立Excel文件模板,编写代码读取并转换,输出结果写入新文件。截图:

优点:处理速度快。缺点:Excel数据量很多时效率低,使用文件时出现严重卡顿。

3、坐标转换工具CSV版Toolbox,主要功能利用CSV模块读写CSV(*.csv)记录坐标进行转换,主要思路:建立CSV文件模板,编写代码读取并转换,输出结果写入新文件,注意以二进制方式(‘wb’)进行读写,否则肯能会出现空白行问题(参考:python 2 csv写入空白行问题_zzzjojo123的博客-CSDN博客)。截图:

优点:CSV支持百万级数据读写操作,且处理速度快。

(二)脱离ArcGIS环境的exe程序

1、坐标转换工具矢量版exe程序

这个部分考虑到ArcGIS运行环境问题,利用基于Python的OSGeo、GeoPandas、Shapely等开源模块,通过算法设计实现与上文矢量版相同功能,从要素几何构成方面设计多部件要素与孔洞、孤岛多边形处理算法,解决无法转换的问题。至该文章发出时,该算法脚本已经通过数据测试,界面如下图所示。我在对脚本打包为exe可执行文件时,使用的是py2exe包,打包期间各种问题频出,不过都完美解决,关于py2exe打包GeoPandas模块时的问题解决方案送上(py2exe打包Geopandas、Pandas、Fiona、Requests、Openpyxl并发布为exe程序问题解决方案(持续更新)_yhiki的博客-CSDN博客)。

优点:(1)支持多部件要素以及孔洞、孤岛多边形;(2)脱离ArcGIS运行环境,处理效率相较于ArcGIS工具箱高。

缺点:Python2.7开发,运行路径有中文可能会出错,建议在非中文路径下运行。

2、坐标转换工具Excel与CSV版集成exe程序

Excel与CSV文件均属表格类型文件,因此进行集成,通过设计类模块与函数进行调用,最后打包为exe可执行程序。界面如下:

(三)链接

坐标转换工具矢量版Toolbox、坐标转换工具Excel与CSV版Toolbox暂不提供了;

坐标转换工具矢量版exe(建议放在英文路径下,否则可能会报错

       百度云:百度网盘 请输入提取码,提取码:sxmf

       蓝奏云:https://wwe.lanzous.com/iH8WBhwm82b,密码:d62z

坐标转换工具Excel与CSV版exe

       Excel表格为2010及以上版本*.xlsx格式

       百度云:百度网盘 请输入提取码,提取码:qqqn

       蓝奏云:https://wwe.lanzous.com/io6L6hp468f,密码:8v8i

软件为个人开发无毒,杀毒软件可能会报毒,可将exe文件添加信任。

使用方法:压缩包解压后,在【dist】目录中找到启动程序,双击程序运行,按下图依次点击即可使用。

若链接失效、使用中出现问题或提出建议请联系开发者(QQ:602168676)。

2020.09.08  第5次修改。

这篇关于百度坐标、火星坐标与WGS-84坐标转换(纠偏加偏)工具及其开发思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827015

相关文章

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要