1.介绍

1.1 GIS之坐标系

坐标系是GIS的重中之重,一般来说,工作底图平面坐标系应采用国家大地坐标系CGCS2000(或相当于精度WGS84坐标系),投影方式采用高斯-克吕格投影,高程基准采用1985国家高程基准。

1.2 地理坐标系(GCS,Geographic Coordinate System)

地理坐标系其实是用了一个规则的球面来代表地球表面。在球面上画一张经纬网,球面上的点就有了它的经纬度,这就是地球上每一点的坐标。因此,地球坐标系中的坐标是以经纬度来表示的。

1.3 我国常见的GCS-地理坐标系

坐标系名称 特点及用途
地心坐标系 用于卫星测量,全球导航和地球研究
北京54坐标系 对应椭球为克拉索夫斯基椭球,平均误差29m
西安80坐标系 国际大地测量与地球物理联合会第16届大会确定的坐标系
WGS-84坐标系 是目前国际上统一采用的大地坐标系,GPS也是采用此坐标系
大地坐标系 以参考椭球面为基准面

1.4 国内常见地图API的投影坐标系

API名称 投影坐标系 描述
百度地图 百度坐标(bd09) 在gcj_02的基础上二次加密而成
腾讯搜搜地图 火星坐标系(gcj_02) 国家加密后坐标
阿里云地图 火星坐标系(gcj_02) 国家加密后坐标
高德地图 火星坐标系(gcj_02) 国家加密后坐标
搜狐搜狗地图 搜狗坐标系 在gcj_02的基础上二次加密而成
图灵51地图 火星坐标系(gcj_02) 国家加密后坐标

火星坐标其实是国家对于地理数据的保密插件,其原理就是对真实的坐标经过人为的加偏处理算法,将真实的坐标加密成虚假的坐标,但这个加偏算法不是线性加偏,所以每个地方的偏移情况会有所不同,一般会有100m-nkM不等,所以这个坐标系被称为火星坐标系。
所有的电子地图,导航仪,都需要加入这个火星坐标的国家保密插件。其具体的工作流程如下图所示:

1.5 bd09,gcj02,wgs84三种投影坐标系相互转化(python代码)


# -*- coding: utf-8 -*-
import json
import urllib
import math
# import numpy as npx_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.00669342162296594323  # 偏心率平方'''
输入(经度,维度)
'''
def bd09_to_gcj02(bd_lon, bd_lat):"""百度坐标系(BD-09)转火星坐标系(GCJ-02)百度——>谷歌、高德:param bd_lat:百度坐标纬度:param bd_lon:百度坐标经度:return:转换后的坐标列表形式"""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]
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 * pimagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = 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 + dlatmglng = lng + dlngreturn [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 bd09_to_wgs84(bd_lon, bd_lat):lon, lat = bd09_to_gcj02(bd_lon, bd_lat)return gcj02_to_wgs84(lon, lat)
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.0065bd_lat = z * math.sin(theta) + 0.006return [bd_lng, bd_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 * pimagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = 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 + dlatmglng = lng + dlngreturn [mglng, mglat]
def wgs84_to_bd09(lon, lat):lon, lat = wgs84_to_gcj02(lon, lat)return gcj02_to_bd09(lon, lat)def out_of_china(lng, lat):"""判断是否在国内,不在国内不做偏移:param lng::param lat::return:"""return not (lng > 73.66 and lng < 135.05 and lat > 3.86 and lat < 53.55)def _transformlng(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
def _transformlat(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 ret

python地图坐标系转换(bd09,gcj02,wgs84三种投影坐标系相互转化)相关推荐

  1. 地图经纬度坐标转换BD-09/GCJ-02/WGS84坐标转换

    http://www.huangliuxu.com/shuju/LBH.html https://toolbaba.cn/d/gps

  2. js中将字符串转换成json的三种方式

    ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法. 1,eval方式解析,恐 ...

  3. 百度地图导航的接入(包含三种选择方式驾车、公交、步行)

    百度地图导航的接入(包含三种选择方式驾车.公交.步行) 步骤 1.下载百度的sdk(下载地址:http://lbsyun.baidu.com/sdk/download) 勾选下载"检索功能& ...

  4. WPS如何转换成图片?三种方法帮你实现

    WPS如何转换成图片?三种方法帮你轻松实现!在大学中,大家完成老师布置的专业课作业都是通过使用电脑中的WPS制作完成.为了防止自己的作业遭到其他同学的私自窜改或是复制粘贴的抄袭.有的同学就会将自己的作 ...

  5. html页面转换成图片的三种方法——canvas、dom-to-image、html2canvas

    html页面转换成图片的三种方法--canvas.dom-to-image.html2canvas canvas绘制网络图片报错(跨域) 使用canvas将html页面转成图片 dom-to-imag ...

  6. 【智能CAN/串口转换器提供“透明转换、透明带标识转换和自定义协议转换”三种转换模式介绍、CAN转换器、CAN 485、CAN 232】

    智能CAN/串口协议转换器LCNET Pro RS-232/485提供一路RS-485.一路RS-232和一路CAN通道,实现CAN与串口RS-485或RS-232之间的双向数据智能转换.每个通道独立 ...

  7. python if多条件并列判断的三种方法

    python if多条件并列判断的三种方法 如果使用python的if进行多个条件表达式的判断呢?下面介绍三种方法: 使用and或or来连接多个条件表达式,比如条件1 and 条件2 and条件3等等 ...

  8. 基于Python实现中文文本关键词抽取的三种方法 课程报告+项目源码及数据

    资源下载地址:https://download.csdn.net/download/sheziqiong/85737856 资源下载地址:https://download.csdn.net/downl ...

  9. Python除法保留两位小数点(三种方法实现)

    Python除法保留两位小数点(三种方法实现) 前言序锦 学过编程我们都知道,无论什么语言,其实都是相通的,,当我们学会了并掌握好了一种语言后,我们再去了解另外一种语言,其实就很容易了,今天我们就来一 ...

最新文章

  1. 用php来检测proxy
  2. how is SAP OData metadata read from CDS view via SADL
  3. Linux 的 diff 命令
  4. c# 修改xslt并转为html,c#使用XSLT将xml文档转换为html文档
  5. Network-Monitor项目中观察者模式解析
  6. thinkphp源码分析(三)—自动加载篇(Loader的分析)
  7. 2009年IT行业最重要的十大认证
  8. Python学习笔记(1):初体验
  9. java 名片通讯录,jsp实现通讯录系统
  10. BP神经网络预测实例(matlab代码,神经网络工具箱)
  11. ssm毕设项目疫情防控管理系统02vsf(java+VUE+Mybatis+Maven+Mysql+sprnig)
  12. 42表盘直径是从哪测量_手表的术语中,直径指的是外观直径还是表盘直径?
  13. sp导出贴图到maya
  14. 亲自动手制作来自MyBatis-Spring官网的chm格式帮助文件
  15. 整理了25个Python文本处理案例,收藏!
  16. 九种linux查询日志命令总结
  17. 哪款骨传导耳机好用,好用的骨传导耳机汇总
  18. Xplorasia(畅怀旅游)选择云呐资产管理为企业降本增效
  19. Java 链表知识总结
  20. 微信公众号开发 - token获取(保证同一时间段内只请求一次)

热门文章

  1. 车间为什么要做可视化看板管理?可视化生产看板管理的作用
  2. 跨越速运工作三年,亲身经历告诉你在跨越的工作体验
  3. 【PWN】格式化字符串漏洞原理
  4. idea换行字符数_IntelliJ IDEA,代码行宽度超出限制时自动换行
  5. Cadence 17.2 软件使用(2)— OrCAD新建原理图工程和原理图库
  6. ssm获取session中验证码值为null问题
  7. 模型评估与模型选择(训练误差和测试误差+过拟合)| 15mins 入门 | 《统计学习方法》学习笔记(四)
  8. (邱维声)高等代数课程笔记:n 阶行列式的定义
  9. vue的PDF预览插件(vue-pdf),支持旋转、放大缩小、打印、下载等
  10. 基于大数据平台的毕业设计01:基于Docker的HDP集群搭建