热门标签 | 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




推荐阅读
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • 目录读写文本格式序列化使用数据库合并数据集重塑和轴向旋转数据转换读写文本格式CSV(Comma-SeparatedValues)格式的文件是指以纯文本形式存储的表格数据,这意味着不 ... [详细]
  • 目录1常见的格式1.1Excel文件的格式1.2Excel数据的格式2Excel数据格式2.1数据类型转换3练习1常见的格式1.1Excel文件的格式Excel文件的常见格式& ... [详细]
  • 在MirrorAPI中,我们可以使用以下内容: ... [详细]
  • 智能家庭如何摆脱“伪智能”困境?
      文/宿命在纠结:2014-12-04  智能家庭是今年超级火爆的领域,一波波的硬件层出不穷,从智能路由、智能摄像头、智能插座、智能空调到最近又开始兴起的智能空气净化器,不过大多 ... [详细]
  • Echarts 3D地图图表
    需求:实现如图所示的3D地图图表(1)原本使用的highcharts没有3d地图的功能,搜索插件也没有可替代的方案ÿ ... [详细]
  • 最近做个项目要用百度地图,每一个点都要在地图上显示出来,而且都在可是范围之内,因为之前已经将所有的点都标注到地图上了,但是地图大小不变化。下面是代码:functionresizeMap(){ ... [详细]
  • 商业智能_2018 商业智能 10 大趋势报告出炉:从 AI 热到 CDO 崛起,热门趋势抢先读!
    本文由编程笔记#小编为大家整理,主要介绍了2018商业智能10大趋势报告出炉:从AI热到CDO崛起,热门趋势抢先读!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 遇到matlabhasencounteredaninternalproblemneedstoclose问题的解决
    matlab有时候会出现崩溃问题记录:matlabhasencounteredaninternalproblemneedstoclose。首先是解决方法的视频。问题描述:在运行pl ... [详细]
  • 看完这篇还搞不懂HTTPS,就来找我!
    本文将为大家详细梳理一下H ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • iOS开启Google位置服务器和显示定位权限的方法
    本文介绍了在iOS开发中如何开启Google位置服务器和显示定位权限的方法,包括导入CoreLocation和MapKit库、在界面导入头文件和在info.plist文件中添加授权等步骤。同时还介绍了iOS11中NSLocationAlwaysAndWhenInUseUsageDescription的功能变化。阅读本文可以帮助开发者了解如何在iOS应用中使用Google位置服务器和处理定位权限相关的问题。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 当google在搜索上很成功,并购youtube、发布gmail、进入手机、一统地图的时候,我们说google真伟大。当苹果在mp3领域一骑绝尘,iphone秒杀诺基亚,ipad打倒了电子 ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
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社区 版权所有