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. centos创建vsftpd虚拟用户
  2. Android 监听Home键
  3. 十三、StringBuffer
  4. 飞控所有PID参数都无法消除振荡问题
  5. Objective-C利用协议实现回调函数(类似java的回调函数)
  6. 《scikit-learn》随机森林之分类树
  7. AGP与PCI-E的区别 PCI-E接口与PCI接口的区别
  8. PHP 5.4.8 添加系统服务命令
  9. 帆软JS实现局部刷新CPT
  10. alexa工具条下载_如何聆听(和删除)您给Alexa的每条命令
  11. 最经典的人生定律、法则、效应总结
  12. opencv 双目标定操作完整版
  13. Faceswap文档之---使用手册
  14. C++之 引用(refer)
  15. 解决localhost打不开的情况
  16. Jmeter基本使用到精通(一)从安装第一个任务线程的创建及测试
  17. dosbox turbo c++3.0
  18. AD-Altium Designer 16 安装附带链接
  19. 新浪微博验证码接口短信轰炸的防护攻略
  20. 企业信息化不可缺少之方正OA

热门文章

  1. Android补间动画之ScaleAnimation、AlphaAnimation、RotateAnimation、TranslateAnimation、AnimationSet详解
  2. 阿里云(OSS)文件上传和删除
  3. golang在线词典
  4. 机房火灾原因、危害及应急预案
  5. Java环境配置及java学习的编译器软件安装
  6. 【PWN】格式化字符串漏洞原理
  7. 红帽 linux 安装gns3,Ubuntu 14.04 LTS 64-bit安装GNS3 1.3.7
  8. Linux(Linux的连接使用)
  9. java常见笔试编程题(一)
  10. stc-isp 51单片机烧录软件的安装