#-*- coding: utf-8 -*-#/**#* 各地图API坐标系统比较与转换;#* WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,#* 谷歌地图采用的是WGS84地理坐标系(中国范围除外);#* GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系;

# * 3BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系;#*/

importmathfrom decimal import *

classtransfer:def __init__(self,key=None):

self.a=6378245.0self.ee=Decimal(0.00669342162296594323)deftransformLng(self,x,y):

ret=Decimal()

ret= 300.0+x+2.0*y+0.1*x*x+0.1*x*y+0.1*math.sqrt(math.fabs(x))

ret+= (20.0 * math.sin(6.0 * x * math.pi) + 20.0 * math.sin(2.0 * x * math.pi)) * 2.0 / 3.0ret+= (20.0 * math.sin(x * math.pi) + 40.0 * math.sin(x / 3.0 * math.pi)) * 2.0 / 3.0ret+= (150.0 * math.sin(x / 12.0 * math.pi) + 300.0 * math.sin(x / 30.0* math.pi)) * 2.0 / 3.0

returnretdeftransformLat(self,x,y):

ret=Decimal()

ret= -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y+ 0.2 *math.sqrt(math.fabs(x))

ret+= (20.0 * math.sin(6.0 * x * math.pi) + 20.0 * math.sin(2.0 * x * math.pi)) * 2.0 / 3.0ret+= (20.0 * math.sin(y * math.pi) + 40.0 * math.sin(y / 3.0 * math.pi)) * 2.0 / 3.0ret+= (160.0 * math.sin(y / 12.0 * math.pi) + 320 * math.sin(y * math.pi / 30.0)) * 2.0 / 3.0

returnretdeftransfrom(self,lng,lat):

dLat= self.transformLat(lng - 105.0, lat - 35.0)

dLng= self.transformLng(lng - 105.0, lat - 35.0)

radLat= lat / 180.0 *math.pi

magic=math.sin(radLat)

magic= 1 - self.ee * Decimal(magic) *Decimal(magic)

sqrtMagic=math.sqrt(magic)

dLat= Decimal((dLat * 180.0)) / ((Decimal(self.a) * (1 - self.ee)) / (Decimal(magic) * Decimal(sqrtMagic)) *Decimal(math.pi))

dLng= (dLng * 180.0) / (self.a / sqrtMagic * math.cos(radLat) *math.pi)

mgLat= lat +float(dLat)

mgLng= lng +dLngreturnmgLng,mgLat#gps坐标转换为gcj02坐标系

defwg84_to_gcj02(self,wg84_lng,wg84_lat):

dLat=self.transformLat(wg84_lng-105.0,wg84_lat-35.0)

dLng=self.transformLng(wg84_lng-105.0,wg84_lat-35.0)

radLat= wg84_lat / 180.0 *math.pi

magic=math.sin(radLat)

magic= 1 - self.ee * Decimal(magic) *Decimal(magic)

sqrtMagic=math.sqrt(magic)

dLat= Decimal((dLat * 180.0)) / ((Decimal(self.a) * (1 - self.ee)) / (Decimal(magic) * Decimal(sqrtMagic)) *Decimal(math.pi))

dLng= (dLng * 180.0) / (self.a / sqrtMagic * math.cos(radLat) *math.pi)

gcj02Lat= wg84_lat +float(dLat)

gcj02Lng= wg84_lng +dLngreturngcj02Lng,gcj02Lat#gcj02坐标转百度坐标

defgcj02_to_bd09(self,gcj02_lng,gcj02_lat):

x=gcj02_lng

y=gcj02_lat

z= math.sqrt(x * x + y * y) + 0.00002 * math.sin(y *math.pi)

theta= math.atan2(y, x) + 0.000003 * math.cos(x *math.pi)

bd09_Lng= z * math.cos(theta) + 0.0065bd09_Lat= z * math.sin(theta) + 0.006

returnbd09_Lng,bd09_Lat#wg84坐标转百度坐标

defwg84_to_bd09(self,wg84_lng,wg84_lat):

gcj02lng,gcj02lat=self.wg84_to_gcj02(wg84_lng,wg84_lat)returnself.gcj02_to_bd09(gcj02lng,gcj02lat)#百度坐标转GCJ02坐标

defbd09_to_gcj02(self,bd09_lng,bd09_lat):

x= bd09_lng - 0.0065y= bd09_lat - 0.006z= math.sqrt(x * x + y * y) - 0.00002 * math.sin(y *math.pi)

theta= math.atan2(y, x) - 0.000003 * math.cos(x *math.pi)

gcj02_lng= z *math.cos(theta)

gcj02_lat= z *math.sin(theta)returngcj02_lng,gcj02_lat#GCJ坐标转WG84坐标

defgcj02_to_wg84(self,gcj02_lng,gcj02_lat):

mlng,mlat=self.transfrom(gcj02_lng,gcj02_lat)

wg84_Lng=gcj02_lng*2-mlng

wg84_Lat=gcj02_lat*2-mlatreturnwg84_Lng,wg84_Lat#将百度坐标转WG84坐标

defbd09_to_wg84(self,bd09_lng,bd09_lat):

gcj02_lng, gcj02_lat=self.bd09_to_gcj02(bd09_lng,bd09_lat)returnself.gcj02_to_wg84(gcj02_lng,gcj02_lat)

tr=transfer()#测试

print(tr.bd09_to_gcj02(113.30764968,23.1200491)) #转换正确

print(tr.bd09_to_wg84(113.30764968,23.1200491)) #转换正确

print(tr.wg84_to_bd09(113.30764968,23.1200491)) #转换正确

python坐标转换_python 编写的经纬度坐标转换类相关推荐

  1. python网页服务器_python编写简单网页服务器

    这篇文章主要介绍了关于python 编写简单网页服务器,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 IDE:Pycharm sever.py #!/bin/python #-*- c ...

  2. python助手_python编写学习助手0

    项目原因 为了解决学习知识后不及时复习而导致遗忘的问题,准备写一个桌面助手,采用艾宾浩斯记忆法,对每次学习的内容排布复习计划. 第一步是做出最简单的文本列表,里面是待办事项,每个复习待办事项都会有符合 ...

  3. 利用GeoHash实现逆地理编码(经纬度坐标转换行政区划)

    目录 前言 理解GeoHash GeoHash精度 GeoHash特征 GeoHash规律 逆地理编码 实现逆地理编码的基本思路 1.全国范围内6位精度GeoHash计算 2.获取全国范围内区/县/三 ...

  4. python坐标系图解_入门-Python-GIS坐标转换

    前言 做GIS数据处理的同仁,不可避免的都会遇到坐标转换的问题,也许很多人遇到该问题,马上会使用各类GIS坐标转换的工具软件,甚至是GIS平台,比如ArcGIS,其实除非代转数据是未知坐标系(必须通过 ...

  5. python可以实现什么黑科技_Python黑科技之元类

    Python中的类 在理解元类之前,你需要了解Python中的类.Python中的类借鉴自Smalltalk. 在大多数编程语言中,类只是描述对象生成方式的一段代码,在Python里面看起来也是这样. ...

  6. python class类里给列表排序_python笔记:Class(类)

    在学习python代码中,你是否看到过Class这个词?你是否见过__init__这样的代码?有的书里把这部分内容讲的太过"专业",导致我看了也看不懂.直到看Python Cras ...

  7. python一般的类有三部分组成_Python学习笔记总结(三)类

    一.类简单介绍 1.介绍 类是Python面向对象程序设计(OOP)的主要工具,类建立使用class语句,通过class定义的对象. 类和模块的差异,类是语句,模块是文件. 类和实例 实例:代表程序领 ...

  8. wgs84坐标格式转换度分秒_WGS84经纬度坐标转换到西安80高斯投影坐标。

    带号18,并且对应的中央子午线是105°,说明是按6度带划分计算的.你注意看你的标题"WGS84经纬度坐标转换到西安80高斯投影坐标",就是说是在高斯坐标系下的平面坐标,高斯投影坐 ...

  9. GPS经纬度坐标转换的方法

    GPS经纬度坐标转换的方法 原文:http://hi.baidu.com/myonlylovegg/blog/item/dacc24d4db648acc51da4b28.html 2009-04-05 ...

最新文章

  1. java 读取txt字符串_java读取txt文档需要匹配文档中的字符串
  2. TSS和内核态堆栈的关系
  3. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Mixin 混合进行方法注入 )
  4. LeetCode刷题-两数之和(持续更新)
  5. r语言中mpg数据_R语言常用的数据处理的包(1)
  6. arduino消息服务器,在C(Arduino IDE)中将API链接消息解析为服务器(示例代码)
  7. 解密Go协程的栈内存管理
  8. python中的一个现象,db.commit和db.commit()
  9. python判断火车票座位是否靠窗_python如何判断购买火车有没有对应的列车,没有就输出未查询到对应的车次?...
  10. 使用jpeglib直接把NV12转为jpeg文件的代码
  11. c语言编译怎么查看错误,C语言编译器的错误信息
  12. 小米手机v3.exo 合并_eXo发布Web Content Management 2.0作为开源
  13. 五子棋(含较高级的人机对战)
  14. java大数据开发是做什么的
  15. 区块链APP怎么开发?深入分析
  16. CCS中下载程序到FALSH与RAM类型切换
  17. 云管平台可以应用于哪些行业?传统行业可以吗?
  18. 笔记本电脑无论插、拔耳机后都没有声音,解决方法
  19. 积分制管理系统:其它可增加积分的功能
  20. android 开启dlna音乐服务_案例 | 香山美墅全屋背景音乐系统,音乐唤醒生活仪式感...

热门文章

  1. 虚拟机Linux CentOS 7安装配置Tomcat10(适用于安装任何tomcat版本!!)
  2. HTML小游戏12 —— 汽车赛道飙车游戏(附完整源码)
  3. 细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(五)
  4. GOM引擎登录器配置教程
  5. 从《数学之美》中我想到的
  6. android开发常用app有哪些,【推荐收藏】安卓开发中必备的那些神器APP
  7. 越来越觉得马克思主义原理非常深邃
  8. Novavax和武田宣布在日本合作Novavax的COVID-19候选疫苗
  9. 美国日本如何推动中小企业信息化
  10. IoT赛道2019风向,升级为智联网AIoT,AI独角兽入场,“手机+AIoT”成标配【物女心经】