热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

wgs84坐标系转化为bj54坐标系_坐标系列篇(三)—地理坐标系纠偏转化验证

接上篇WGS84(GPS)坐标要与国内的各种应用地图的坐标要对上,就要进行纠偏,本文就纠偏的一些代码(来自CSDN)做个验证,为后续做软

3a2e2bd36d8511ef43da10b41d6386d8.gif

"接上篇WGS84(GPS)坐标要与国内的各种应用地图的坐标要对上,就要进行纠偏,本文就纠偏的一些代码(来自CSDN)做个验证,为后续做软件插件提供质量保证。"

01

三种坐标

三种坐标分别为谷歌(WGS84)、火星坐标、百度坐标。

类别谷歌坐标火星坐标百度坐标
代号WGS-84GJC-02BD-09
应用googleearth,googlemap(国外服务器)高德地图、googlemap(国内服务器)、腾讯地图、搜狗地图等百度地图

02

偏移代码

导入模块跟设置全局参数:

import mathx_pi = 3.14159265358979324 * 3000.0 / 180.0pi = 3.1415926535897932384626 # πa = 6378245.0 # 长半轴ee = 0.00669342162296594323 # 偏心率平方

火星坐标系转百度坐标系:

def gcj02_to_bd09(lng, lat): """ 火星坐标系(GCJ-02)转百度坐标系(BD-09) 谷歌、高德——>百度 :param lng:火星坐标经度 :param lat:火星坐标纬度 :return: """ 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.0065 bd_lat = z * math.sin(theta) + 0.006 return [bd_lng, bd_lat]

百度坐标系转火星坐标系:

def bd09_to_wgs84(bd_lon, bd_lat): lon, lat = bd09_to_gcj02(bd_lon, bd_lat) return gcj02_to_wgs84(lon, lat)

谷歌坐标转火星坐标系:

def wgs84_to_gcj02(lng, lat): """ WGS84转GCJ02(火星坐标系) :param lng:WGS84坐标系的经度 :param lat:WGS84坐标系的纬度 :return: """ if out_of_china(lng, lat): # 判断是否在国内 return [lng, lat] dlat = _transformlat(lng - 105.0, lat - 35.0) dlng = _transformlng(lng - 105.0, lat - 35.0) radlat = lat / 180.0 * pi magic = math.sin(radlat) magic = 1 - ee * magic * magic sqrtmagic = math.sqrt(magic) dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi) dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi) mglat = lat + dlat mglng = lng + dlng return [mglng, mglat]

火星坐标系转谷歌坐标系:

def gcj02_to_wgs84(lng, lat): """ GCJ02(火星坐标系)转GPS84 :param lng:火星坐标系的经度 :param lat:火星坐标系纬度 :return: """ if out_of_china(lng, lat): return [lng, lat] dlat = _transformlat(lng - 105.0, lat - 35.0) dlng = _transformlng(lng - 105.0, lat - 35.0) radlat = lat / 180.0 * pi magic = math.sin(radlat) magic = 1 - ee * magic * magic sqrtmagic = math.sqrt(magic) dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi) dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi) mglat = lat + dlat mglng = lng + dlng return [lng * 2 - mglng, lat * 2 - mglat]

百度坐标系转谷歌坐标系:

def bd09_to_wgs84(bd_lon, bd_lat): lon, lat = bd09_to_gcj02(bd_lon, bd_lat) return gcj02_to_wgs84(lon, lat)

谷歌坐标系转百度坐标系:

def wgs84_to_bd09(lon, lat): lon, lat = wgs84_to_gcj02(lon, lat) return gcj02_to_bd09(lon, lat)

用到的一些方法:

def _transformlat(lng, lat): ret &#61; -100.0 &#43; 2.0 * lng &#43; 3.0 * lat &#43; 0.2 * lat * lat &#43; \ 0.1 * lng * lat &#43; 0.2 * math.sqrt(math.fabs(lng)) ret &#43;&#61; (20.0 * math.sin(6.0 * lng * pi) &#43; 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0 ret &#43;&#61; (20.0 * math.sin(lat * pi) &#43; 40.0 * math.sin(lat / 3.0 * pi)) * 2.0 / 3.0 ret &#43;&#61; (160.0 * math.sin(lat / 12.0 * pi) &#43; 320 * math.sin(lat * pi / 30.0)) * 2.0 / 3.0 return retdef _transformlng(lng, lat): ret &#61; 300.0 &#43; lng &#43; 2.0 * lat &#43; 0.1 * lng * lng &#43; \ 0.1 * lng * lat &#43; 0.1 * math.sqrt(math.fabs(lng)) ret &#43;&#61; (20.0 * math.sin(6.0 * lng * pi) &#43; 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0 ret &#43;&#61; (20.0 * math.sin(lng * pi) &#43; 40.0 * math.sin(lng / 3.0 * pi)) * 2.0 / 3.0 ret &#43;&#61; (150.0 * math.sin(lng / 12.0 * pi) &#43; 300.0 * math.sin(lng / 30.0 * pi)) * 2.0 / 3.0 return retdef out_of_china(lng, lat): """ 判断是否在国内&#xff0c;不在国内不做偏移 :param lng: :param lat: :return: """ return not (lng > 73.66 and lng <135.05 and lat > 3.86 and lat <53.55)

03

验证测试

找一个点测试偏移后的值在三个坐标&#xff0c;这里选用的坐标点是长沙橘子洲头雕塑这个地标&#xff0c;分别在googleearth、高德地图、百度地图进行测试&#xff1a;

步骤一&#xff1a;在谷歌地球应用下找到橘子洲头雕塑地标&#xff0c;并复制经纬度&#xff0c;十进制[112.954951,28.171073]

f04afb97741e39f2d2e9af8e16cd1332.png

步骤二&#xff1a;调用前面的方法&#xff0c;wsg84_to_gcj02&#xff0c;得到偏移后的火星坐标经纬度[112.960436,28.167598]&#xff1b;用高德地图开放接口的坐标拾缀找到该位置&#xff1a;

3bfd73dac88c649ff5c0d5ee181c896c.png

步骤三&#xff1a;调用前面的方法&#xff0c;wsg84_to_bd09&#xff0c;得到偏移后的百度坐标经纬度[112.966961,28.173417]&#xff1b;用百度地图开放接口的坐标拾缀找到该位置&#xff1a;

ae82de6cdb2c82c3bf26b75e42cffcaf.png

单一的坐标转换代码没问题后&#xff0c;后续可以写一个支持txt、excel、csv格式的纠偏小程序exe。

后台回复关键词&#xff1a;教育&#xff0c;可查看我的个人在线课程&#xff0c;欢迎大家来沟通、交流、共同学习&#xff01;


c4234e8a8ad3b923b2813d6c045f4851.png




推荐阅读
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
  • 本文记录了作者在尝试启用IIS的Gzip压缩功能时遇到的挑战,特别是当企业内部网络使用ISA服务器作为代理时的问题。文章详细描述了问题的发现过程、解决步骤以及最终的解决方案。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 解决MySQL Administrator 登录失败问题
    本文提供了解决在使用MySQL Administrator时遇到的登录错误的方法,包括启动变量和服务部分禁用的问题。同时,文章还介绍了通过安全配置模式来解决问题的具体步骤。 ... [详细]
  • Sass 是一种 CSS 的预处理器,通过使用变量、嵌套、继承等高级功能,使得 CSS 的编写更加灵活和高效。本文将介绍 Sass 的基本语法及其安装使用方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的关键字及其用途,包括53个关键字和2个保留字。文章不仅解释了每个关键字的基本功能,还提供了实际应用场景中的使用示例。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • VMware 15.5.7 中文版激活方法
    本文提供了一种有效的方法来激活 VMware 15.5.7 的中文版本,同时介绍了如何利用最新的激活码进行操作,确保用户能够顺利使用。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 本文将介绍几款常用的搜索引擎,包括Google、百度、搜狗和去哪儿网,旨在为用户提供更多高效的网络搜索工具。所有推荐的搜索引擎均为免费服务。 ... [详细]
  • Git版本控制基础解析
    本文探讨了Git作为版本控制工具的基本概念及其重要性,不仅限于代码管理,还包括文件的历史记录与版本切换功能。通过对比Git与SVN,进一步阐述了分布式版本控制系统的独特优势。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
author-avatar
手机用户2602916425
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有