python坐标转换_python 编写的经纬度坐标转换类
#-*- 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 编写的经纬度坐标转换类相关推荐
- python网页服务器_python编写简单网页服务器
这篇文章主要介绍了关于python 编写简单网页服务器,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 IDE:Pycharm sever.py #!/bin/python #-*- c ...
- python助手_python编写学习助手0
项目原因 为了解决学习知识后不及时复习而导致遗忘的问题,准备写一个桌面助手,采用艾宾浩斯记忆法,对每次学习的内容排布复习计划. 第一步是做出最简单的文本列表,里面是待办事项,每个复习待办事项都会有符合 ...
- 利用GeoHash实现逆地理编码(经纬度坐标转换行政区划)
目录 前言 理解GeoHash GeoHash精度 GeoHash特征 GeoHash规律 逆地理编码 实现逆地理编码的基本思路 1.全国范围内6位精度GeoHash计算 2.获取全国范围内区/县/三 ...
- python坐标系图解_入门-Python-GIS坐标转换
前言 做GIS数据处理的同仁,不可避免的都会遇到坐标转换的问题,也许很多人遇到该问题,马上会使用各类GIS坐标转换的工具软件,甚至是GIS平台,比如ArcGIS,其实除非代转数据是未知坐标系(必须通过 ...
- python可以实现什么黑科技_Python黑科技之元类
Python中的类 在理解元类之前,你需要了解Python中的类.Python中的类借鉴自Smalltalk. 在大多数编程语言中,类只是描述对象生成方式的一段代码,在Python里面看起来也是这样. ...
- python class类里给列表排序_python笔记:Class(类)
在学习python代码中,你是否看到过Class这个词?你是否见过__init__这样的代码?有的书里把这部分内容讲的太过"专业",导致我看了也看不懂.直到看Python Cras ...
- python一般的类有三部分组成_Python学习笔记总结(三)类
一.类简单介绍 1.介绍 类是Python面向对象程序设计(OOP)的主要工具,类建立使用class语句,通过class定义的对象. 类和模块的差异,类是语句,模块是文件. 类和实例 实例:代表程序领 ...
- wgs84坐标格式转换度分秒_WGS84经纬度坐标转换到西安80高斯投影坐标。
带号18,并且对应的中央子午线是105°,说明是按6度带划分计算的.你注意看你的标题"WGS84经纬度坐标转换到西安80高斯投影坐标",就是说是在高斯坐标系下的平面坐标,高斯投影坐 ...
- GPS经纬度坐标转换的方法
GPS经纬度坐标转换的方法 原文:http://hi.baidu.com/myonlylovegg/blog/item/dacc24d4db648acc51da4b28.html 2009-04-05 ...
最新文章
- java 读取txt字符串_java读取txt文档需要匹配文档中的字符串
- TSS和内核态堆栈的关系
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Mixin 混合进行方法注入 )
- LeetCode刷题-两数之和(持续更新)
- r语言中mpg数据_R语言常用的数据处理的包(1)
- arduino消息服务器,在C(Arduino IDE)中将API链接消息解析为服务器(示例代码)
- 解密Go协程的栈内存管理
- python中的一个现象,db.commit和db.commit()
- python判断火车票座位是否靠窗_python如何判断购买火车有没有对应的列车,没有就输出未查询到对应的车次?...
- 使用jpeglib直接把NV12转为jpeg文件的代码
- c语言编译怎么查看错误,C语言编译器的错误信息
- 小米手机v3.exo 合并_eXo发布Web Content Management 2.0作为开源
- 五子棋(含较高级的人机对战)
- java大数据开发是做什么的
- 区块链APP怎么开发?深入分析
- CCS中下载程序到FALSH与RAM类型切换
- 云管平台可以应用于哪些行业?传统行业可以吗?
- 笔记本电脑无论插、拔耳机后都没有声音,解决方法
- 积分制管理系统:其它可增加积分的功能
- android 开启dlna音乐服务_案例 | 香山美墅全屋背景音乐系统,音乐唤醒生活仪式感...
热门文章
- 虚拟机Linux CentOS 7安装配置Tomcat10(适用于安装任何tomcat版本!!)
- HTML小游戏12 —— 汽车赛道飙车游戏(附完整源码)
- 细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(五)
- GOM引擎登录器配置教程
- 从《数学之美》中我想到的
- android开发常用app有哪些,【推荐收藏】安卓开发中必备的那些神器APP
- 越来越觉得马克思主义原理非常深邃
- Novavax和武田宣布在日本合作Novavax的COVID-19候选疫苗
- 美国日本如何推动中小企业信息化
- IoT赛道2019风向,升级为智联网AIoT,AI独角兽入场,“手机+AIoT”成标配【物女心经】