Python应用指南:一个库解决常见的国内坐标系转换需求

在地理信息系统(GIS)和位置服务开发中,坐标转换是一项基础且至关重要的任务,不同坐标系统间的精确转换对于确保地图显示的准确性和提升基于地理位置的服务质量至关重要。coord-convert 库专为解决这一系列坐标转换问题而设计,提供了一套简单易用的接口,支持多种常见坐标系统的相互转换,包括GCJ-02(火星坐标系)、WGS-84以及百度坐标系BD-09等,无论是处理大规模数据集还是进行实时坐标转换,都能提供高效且准确的解决方案。本篇文章将深入探讨 coord-convert 库的使用方法及其背后的原理,从基本概念讲起,逐步介绍如何安装配置库文件,通过简单的API调用来完成坐标转换,并结合具体案例展示其应用;

目前国内主要有以下三种坐标:

WGS84:一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系;

GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系;

BD09:百度地图所使用的坐标体系,是在火星坐标系的基础上又进行了一次加密处理;

第一步:我们先安装coord-convert 库,直接pip即可;

pip install coord-convert

然后我们再来看看有哪些核心功能函数;

函数名功能描述示例场景
wgs2gcj(lng, lat)WGS84 → GCJ-02GPS设备数据转高德坐标
gcj2wgs(lng, lat)GCJ-02 → WGS84高德坐标转GPS原始数据
gcj2bd(lng, lat)GCJ-02 → BD-09高德坐标转百度坐标
bd2gcj(lng, lat)BD-09 → GCJ-02百度坐标转高德坐标
wgs2bd(lng, lat)WGS84 → BD-09GPS数据直接转百度坐标
bd2wgs(lng, lat)BD-09 → WGS84百度坐标转GPS原始数据

场景一:高德地图坐标转WGS84

from coord_convert import transformdef amap_to_wgs84(amap_lng, amap_lat):"""将高德地图坐标转为WGS84"""return transform.gcj2wgs(amap_lng, amap_lat)# 示例:上海市中心(高德坐标)
amap_lng, amap_lat = 121.473701, 31.230416
wgs_lng, wgs_lat = amap_to_wgs84(amap_lng, amap_lat)
print(f"WGS84坐标:{wgs_lng:.6f}, {wgs_lat:.6f}")

场景二:百度地图坐标转WGS84

from coord_convert import transformdef baidu_to_wgs84(bd_lng, bd_lat):"""将百度坐标转为WGS84"""return transform.bd2wgs(bd_lng, bd_lat)# 示例:北京天安门(百度坐标)
bd_lng, bd_lat = 116.403847, 39.915526
wgs_lng, wgs_lat = baidu_to_wgs84(bd_lng, bd_lat)
print(f"WGS84坐标:{wgs_lng:.6f}, {wgs_lat:.6f}")

场景三:混合转换(GCJ-02 → BD-09 → WGS84)

from coord_convert import transformdef hybrid_conversion(gcj_lng, gcj_lat):"""GCJ-02 → BD-09 → WGS84"""# 转换为百度坐标bd_lng, bd_lat = transform.gcj2bd(gcj_lng, gcj_lat)# 再转WGS84return transform.bd2wgs(bd_lng, bd_lat)# 示例:深圳腾讯大厦(高德坐标)
gcj_lng, gcj_lat = 113.944531, 22.528922
wgs_lng, wgs_lat = hybrid_conversion(gcj_lng, gcj_lat)
print(f"最终WGS84坐标:{wgs_lng:.6f}, {wgs_lat:.6f}")

场景四:自动化脚本(CSV文件处理)

import csv
from coord_convert import transformdef convert_csv(input_file, output_file):"""批量转换CSV文件中的坐标"""with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out:reader = csv.DictReader(f_in)writer = csv.writer(f_out)writer.writerow(["地点", "原始经度", "原始纬度", "WGS84经度", "WGS84纬度"])for row in reader:lng = float(row["lng"])lat = float(row["lat"])wgs_lng, wgs_lat = transform.gcj2wgs(lng, lat)writer.writerow([row["地点"], lng, lat, wgs_lng, wgs_lat])# 示例调用
convert_csv("input_coordinates.csv", "output_wgs84.csv")

转换后的坐标依然有偏移?

首先坐标转换算法本身存在一定的误差(通常在10米以内),尤其是从加密坐标系(如GCJ-02或BD-09)逆向转换到WGS84时,误差可能更加明显,国内地图服务(如高德、百度)对WGS84坐标进行了加密处理(GCJ-02或BD-09),即使通过coord-convert将坐标转换为WGS84,直接在地图上显示时仍可能存在偏移;

如果需要更高精度的坐标,建议直接使用地图服务商的API获取原始坐标,例如,高德地图提供了坐标转换API,支持WGS84、GCJ-02和BD-09之间的转换,并能够对坐标进行精准纠偏;

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

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

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

相关文章

win32汇编环境,对线程的创建与操作示例一

;运行效果 ;win32汇编环境,对线程的创建与操作示例一 ;线程是主进程之外并行运行着的过程,很多的时候,我们需要一些运算保持运行,但又不能影响进程,这个时候就需要线程 ;比如,在游戏外挂之中,需要每隔几秒判…

用 DeepSeek + Kimi 自动做 PPT,效率起飞

以下是使用 DeepSeek Kimi 自动做 PPT 的详细操作步骤: 利用 DeepSeek 生成 PPT 内容: 访问 DeepSeek 官网,完成注册/登录后进入对话界面。输入指令,例如“请用 Markdown 格式生成一份关于[具体主题]的 PPT 大纲,需包…

学习总结二十九

公路维修问题 这里首先先明白题意,就是一段路分为m段,只需要分m-1次。我们先要解决的的问题是如何在合适的地方截断。案例给出,发现第一段的末与第二段的头的位置相差很大,而每一段的每个坑位相差不是很大 。,所以就知…

C语言预处理艺术:编译前的魔法之旅

,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程(1&…

【go】交叉编译

发现go像是c,做后台还是比较好的 使用的是goland编辑器,可以在windows编译在linux上运行,配置如下: Goland中导入包标红但是能用解决办法 复制了一份项目代码task为task_bk,但是原来的task删除了,再次 把t…

防御综合实验

需求一 配置vlan [SW2]int g 0/0/2 [SW2-GigabitEthernet0/0/2]port link-type access [SW2-GigabitEthernet0/0/2]port default vlan 10 [SW2-GigabitEthernet0/0/2]int g0/0/3 [SW2-GigabitEthernet0/0/3]port link-type access [SW2-GigabitEthernet0/0/3]port default vl…

数据库高安全—数据保护:数据动态脱敏

书接上文数据库高安全—审计追踪:传统审计&统一审计,从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读,本篇将从数据动态脱敏方面对高斯数据库的数据保护技术进行解读。 5.1 数据动态脱敏 数据脱敏,顾名思义就…

《艾尔登法环》运行时弹窗“由于找不到vcruntime140.dll,无法继续执行代码”要怎么解决?

宝子们,是不是在玩《艾尔登法环》的时候,突然弹出一个提示:“由于找不到vcruntime140.dll,无法继续执行代码”?这可真是让人着急上火!别慌,今天就给大家唠唠这个文件为啥会丢,还有怎…

【Git】Failed to connect to github.com port 443: Timed out

由于DNS污染国内访问github经常会超时,参考网上的方法修改host文件绑定ip过段时间就失效了,这里介绍一个修改工具,通过修改本地host来绕过国内DNS解析实现连接 UsbEAm Hosts Editor UsbEAm Hosts Editor [多平台hosts修改] V3.63 – Dogfigh…

qml RoundButton详解

1、概述 RoundButton是QML(Qt Modeling Language)中的一种按钮控件,它继承自Button控件,并增加了一个特殊的属性——radius,用于设置按钮圆角的半径。这使得RoundButton能够呈现为带有圆角的形状,而不仅仅…

Django在终端创建项目(pycharm Windows)

1.选择目录 选择或新建一个文件夹,作为项目保存的地方 2.右键在终端打开 3.确定django-admin.exe安装位置 找到自己安装django时,django-admin.exe安装的位置,例如 4.运行命令 使用django-admin.exe的绝对路径,在刚才打开的终端…

Visual Studio 2022 中使用 Google Test

要在 Visual Studio 2022 中使用 Google Test (gtest),可以按照以下步骤进行: 安装 Google Test:确保你已经安装了 Google Test。如果没有安装,可以通过 Visual Studio Installer 安装。在安装程序中,找到并选择 Googl…

Unity-Mirror网络框架-从入门到精通之LagCompensation示例

文章目录 前言什么是滞后补偿Lag Compensation示例延迟补偿原理ServerCubeClientCubeCapture2DSnapshot3D补充LagCompensation.cs 独立算法滞后补偿器组件注意:算法最小示例前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mir…

数据集成实例分享:金蝶云星空对接旺店通实现库存管理自动化

拆卸父项出库:金蝶云星空数据集成到旺店通企业奇门 在现代企业的运营过程中,数据的高效流动和准确处理至关重要。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将金蝶云星空的数据无缝对接到旺店通企业奇门&#xff0…

Git、Github和Gitee完整讲解:丛基础到进阶功能

第一部分:Git 是什么? 比喻:Git就像是一本“时光机日记本” 每一段代码的改动,Git都会帮你记录下来,像是在写日记。如果出现问题或者想查看之前的版本,Git可以带你“穿越回过去”,找到任意时间…

解锁 DeepSeek 模型高效部署密码:蓝耘平台深度剖析与实战应用

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

autMan奥特曼机器人-对接deepseek教程

一、安装插件ChatGPT 符合openai api协议的大模型均可使用此插件,包括chatgpt-4/chatgpt-3.5-turbo,可自定义服务地址和模型,指令:gpt,要求Python3.7以上,使用官方库https://github.com/openai/openai-pyt…

循环神经网络学习01——transformer:输入部分-嵌入层位置编码

一、介绍 1、核心思想 利用自注意力机制来捕获输入序列中各元素之间的全局依赖关系,无论这些元素之间的实际距离有多远。 自注意力机制:允许模型在处理序列的每个元素时,考虑到序列中的所有其他元素,从而捕捉它们之间的关系和依…

git rebase 和 git merge的区别

Rebase 可使提交树变得很干净, 所有的提交都在一条线上。 Merge 则是包含所有的调试记录,合并之后,父级的所有信息都会合并在一起 Rebase 修改了提交树的历史 比如, 提交 C1 可以被 rebase 到 C3 之后。这看起来 C1 中的工作是在 C3 之后进行的&#xf…

上马传奇新手起号攻略 上马传奇云手机开荒玩法

在上马传奇这款游戏中,我们可以选择合适的职业,参与各类玩法快速起号,今天就给大家一些攻略。 一、职业 1.游戏中的战士、法师、道士分别有三个分支,一共九个职业可以选择,选择之后不能转职,所以前期要慎重…