python读取数据文件、并把里面的数据变成x的二维坐标_(数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换...
importmathclassLngLatTransfer():def __init__(self):
self.x_pi= 3.14159265358979324 * 3000.0 / 180.0self.pi= math.pi #π
self.a = 6378245.0 #长半轴
self.es = 0.00669342162296594323 #偏心率平方
pass
defGCJ02_to_BD09(self, gcj_lng, gcj_lat):"""实现GCJ02向BD09坐标系的转换
:param lng: GCJ02坐标系下的经度
:param lat: GCJ02坐标系下的纬度
:return: 转换后的BD09下经纬度"""z= math.sqrt(gcj_lng * gcj_lng + gcj_lat * gcj_lat) + 0.00002 * math.sin(gcj_lat *self.x_pi)
theta= math.atan2(gcj_lat, gcj_lng) + 0.000003 * math.cos(gcj_lng *self.x_pi)
bd_lng= z * math.cos(theta) + 0.0065bd_lat= z * math.sin(theta) + 0.006
returnbd_lng, bd_latdefBD09_to_GCJ02(self, bd_lng, bd_lat):'''实现BD09坐标系向GCJ02坐标系的转换
:param bd_lng: BD09坐标系下的经度
:param bd_lat: BD09坐标系下的纬度
:return: 转换后的GCJ02下经纬度'''x= bd_lng - 0.0065y= bd_lat - 0.006z= math.sqrt(x * x + y * y) - 0.00002 * math.sin(y *self.x_pi)
theta= math.atan2(y, x) - 0.000003 * math.cos(x *self.x_pi)
gcj_lng= z *math.cos(theta)
gcj_lat= z *math.sin(theta)returngcj_lng, gcj_latdefWGS84_to_GCJ02(self, lng, lat):'''实现WGS84坐标系向GCJ02坐标系的转换
:param lng: WGS84坐标系下的经度
:param lat: WGS84坐标系下的纬度
:return: 转换后的GCJ02下经纬度'''dlat= self._transformlat(lng - 105.0, lat - 35.0)
dlng= self._transformlng(lng - 105.0, lat - 35.0)
radlat= lat / 180.0 *self.pi
magic=math.sin(radlat)
magic= 1 - self.es * magic *magic
sqrtmagic=math.sqrt(magic)
dlat= (dlat * 180.0) / ((self.a * (1 - self.es)) / (magic * sqrtmagic) *self.pi)
dlng= (dlng * 180.0) / (self.a / sqrtmagic * math.cos(radlat) *self.pi)
gcj_lng= lat +dlat
gcj_lat= lng +dlngreturngcj_lng, gcj_latdefGCJ02_to_WGS84(self, gcj_lng, gcj_lat):'''实现GCJ02坐标系向WGS84坐标系的转换
:param gcj_lng: GCJ02坐标系下的经度
:param gcj_lat: GCJ02坐标系下的纬度
:return: 转换后的WGS84下经纬度'''dlat= self._transformlat(gcj_lng - 105.0, gcj_lat - 35.0)
dlng= self._transformlng(gcj_lng - 105.0, gcj_lat - 35.0)
radlat= gcj_lat / 180.0 *self.pi
magic=math.sin(radlat)
magic= 1 - self.es * magic *magic
sqrtmagic=math.sqrt(magic)
dlat= (dlat * 180.0) / ((self.a * (1 - self.es)) / (magic * sqrtmagic) *self.pi)
dlng= (dlng * 180.0) / (self.a / sqrtmagic * math.cos(radlat) *self.pi)
mglat= gcj_lat +dlat
mglng= gcj_lng +dlng
lng= gcj_lng * 2 -mglng
lat= gcj_lat * 2 -mglatreturnlng, latdefBD09_to_WGS84(self, bd_lng, bd_lat):'''实现BD09坐标系向WGS84坐标系的转换
:param bd_lng: BD09坐标系下的经度
:param bd_lat: BD09坐标系下的纬度
:return: 转换后的WGS84下经纬度'''lng, lat=self.BD09_to_GCJ02(bd_lng, bd_lat)returnself.GCJ02_to_WGS84(lng, lat)defWGS84_to_BD09(self, lng, lat):'''实现WGS84坐标系向BD09坐标系的转换
:param lng: WGS84坐标系下的经度
:param lat: WGS84坐标系下的纬度
:return: 转换后的BD09下经纬度'''lng, lat=self.WGS84_to_GCJ02(lng, lat)returnself.GCJ02_to_BD09(lng, lat)def_transformlat(self, 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 * self.pi) + 20.0 *math.sin(2.0 * lng * self.pi)) * 2.0 / 3.0ret+= (20.0 * math.sin(lat * self.pi) + 40.0 *math.sin(lat/ 3.0 * self.pi)) * 2.0 / 3.0ret+= (160.0 * math.sin(lat / 12.0 * self.pi) + 320 *math.sin(lat* self.pi / 30.0)) * 2.0 / 3.0
returnretdef_transformlng(self, 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 * self.pi) + 20.0 *math.sin(2.0 * lng * self.pi)) * 2.0 / 3.0ret+= (20.0 * math.sin(lng * self.pi) + 40.0 *math.sin(lng/ 3.0 * self.pi)) * 2.0 / 3.0ret+= (150.0 * math.sin(lng / 12.0 * self.pi) + 300.0 *math.sin(lng/ 30.0 * self.pi)) * 2.0 / 3.0
returnretdefWGS84_to_WebMercator(self, lng, lat):'''实现WGS84向web墨卡托的转换
:param lng: WGS84经度
:param lat: WGS84纬度
:return: 转换后的web墨卡托坐标'''x= lng * 20037508.342789 / 180y= math.log(math.tan((90 + lat) * self.pi / 360)) / (self.pi / 180)
y= y * 20037508.34789 / 180
returnx, ydefWebMercator_to_WGS84(self, x, y):'''实现web墨卡托向WGS84的转换
:param x: web墨卡托x坐标
:param y: web墨卡托y坐标
:return: 转换后的WGS84经纬度'''lng= x / 20037508.34 * 180lat= y / 20037508.34 * 180lat= 180 / self.pi * (2 * math.atan(math.exp(lat * self.pi / 180)) - self.pi / 2)return lng, lat
python读取数据文件、并把里面的数据变成x的二维坐标_(数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换...相关推荐
- python实现坐标系转换_(数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换...
importmathclassLngLatTransfer():def __init__(self): self.x_pi= 3.14159265358979324 * 3000.0 / 180.0s ...
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
- python炫酷动画源代码_(数据科学学习手札85)Python+Kepler.gl轻松制作酷炫路径动画...
1 简介 Kepler.gl相信很多人都听说过,作为Uber几年前开源的交互式地理信息可视化工具,kepler.gl依托WebGL强大的图形渲染能力,可以在浏览器端以多种形式轻松展示大规模数据集. 图 ...
- (数据科学学习手札05)Python与R数据读入存出方式的总结与比较
在数据分析的过程中,外部数据的导入和数据的导出是非常关键的部分,而Python和R在这方面大同小异,且针对不同的包或模块,对应着不同的函数来完成这部分功能: Python 1.TXT文件 导入: 以某 ...
- (数据科学学习手札03)Python与R在随机数生成上的异同
随机数的使用是很多算法的关键步骤,例如蒙特卡洛法.遗传算法中的轮盘赌法的过程,因此对于任意一种语言,掌握其各类型随机数生成的方法至关重要,Python与R在随机数底层生成上都依靠梅森旋转(twiste ...
- Windows上python读取grib2文件(不用Linux)
最近在网上下载的NCEP的fnl数据,发现只有grib2文件格式.因为现在处理数据使用的更多的是python,matlab一类的.网上一搜python读取grib文件需要依赖pygrib库,pygri ...
- python读文件代码-简单了解Python读取大文件代码实例
这篇文章主要介绍了简单了解Python读取大文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通常对于大文件读取及处理,不可能直接加载到内 ...
- python 读取excel文件 效率 时间 格式_python读取Excel文件中的时间数据
在使用python读取Excel文件中的时间格式,碰到的时间格式转换问题: 读取这样的表格: 输出这样的数据结果: 然而这样的结果却不是我们想要的,我们需要的是这样的结果: 1.安装python官方库 ...
- python读取文件某一行-使用python读取.text文件特定行的数据方法
如何用python循环读取下面.txt文件中,用红括号标出来的数据呢? 首先,观察数据可知,不同行的第一个数据元素不一样,所以考虑直接用正则表达式. 再加上,对读和写文件的操作,就行了 注:我用的是p ...
最新文章
- Android 仿微信小视频录制
- 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步
- interface接口实例
- 图片链接生成器软件_推荐10个小众但是黑科技十足的Windows软件
- linux删除第二列为空_Linux之基本文本处理工具(二)
- ActiveMQ反序列化漏洞(CVE-2015-5254)复现
- 抓到的一次suse11 xen用libvirt连接的错误
- STM32 - 定时器的设定 - 基础- 07 - 6-step PWM generation - 6步长PWM的产生 - COM Event的解释
- 早起 - 对我影响最大的习惯
- python合并word全部_python:怎样合并文档中有重复部分的行?
- mysql在同一台机器上实现主从_MySQL 5.7主从搭建(同一台机器)
- 再议Python协程——从yield到asyncio
- 达梦数据库图形化工具
- Caffe框架的基本操作和分析
- 链表的中间结点-python
- 汽车4G车载TBOX智能终端
- python实现情感分析
- 初涉VB.NET入门级代码积累
- 20亿美金独角兽Notion,和它在中国的“抄袭”者们
- 使用电信云时做对象储存时的异常信息:com.amazonaws.services.s3.model.AmazonS3Exception