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实现坐标系转换_(数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换...相关推荐

  1. python读取数据文件、并把里面的数据变成x的二维坐标_(数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换...

    importmathclassLngLatTransfer():def __init__(self): self.x_pi= 3.14159265358979324 * 3000.0 / 180.0s ...

  2. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  3. python炫酷动画源代码_(数据科学学习手札85)Python+Kepler.gl轻松制作酷炫路径动画...

    1 简介 Kepler.gl相信很多人都听说过,作为Uber几年前开源的交互式地理信息可视化工具,kepler.gl依托WebGL强大的图形渲染能力,可以在浏览器端以多种形式轻松展示大规模数据集. 图 ...

  4. (数据科学学习手札05)Python与R数据读入存出方式的总结与比较

    在数据分析的过程中,外部数据的导入和数据的导出是非常关键的部分,而Python和R在这方面大同小异,且针对不同的包或模块,对应着不同的函数来完成这部分功能: Python 1.TXT文件 导入: 以某 ...

  5. (数据科学学习手札03)Python与R在随机数生成上的异同

    随机数的使用是很多算法的关键步骤,例如蒙特卡洛法.遗传算法中的轮盘赌法的过程,因此对于任意一种语言,掌握其各类型随机数生成的方法至关重要,Python与R在随机数底层生成上都依靠梅森旋转(twiste ...

  6. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

  7. python网络数据采集 第三版_(数据科学学习手札31)基于Python的网络数据采集(初级篇)...

    一.简介 在实际的业务中,我们手头的数据往往难以满足需求,这时我们就需要利用互联网上的资源来获取更多的补充数据,但是很多情况下,有价值的数据往往是没有提供源文件的直接下载渠道的(即所谓的API),这时 ...

  8. python扩展库用于科学计算的有哪些_数据科学必备的十大 Python 库

    ​Python 已成为当今使用最广泛的编程语言之一,尤其是在数据科学领域. Python 是一种高性能的语言,易于学习和调试,并且具有广泛的库支持.这些库都有自己独特的功能,一些专注于数据挖掘,一些专 ...

  9. python绘制词云图转换图_(数据科学学习手札71)利用Python绘制词云图

    1 简介 词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词: 图1 词云图示例 在Python中有很多可视化框架可以用来制作词云图,如pyecharts,但这些 ...

最新文章

  1. Yii2 定时任务创建(Console 任务)
  2. MAT之GRNN/PNN:基于GRNN、PNN两神经网络实现并比较鸢尾花(iris数据集)种类识别正确率、各个模型运行时间对比
  3. AUTOSAR从入门到精通100讲(八十五)-AUTOSAR基础篇之BswM
  4. 今日恐慌与贪婪指数为23 恐慌程度有所缓解
  5. 【POJ2676】Sudoku(优化搜索顺序)
  6. IO编程——转自廖雪峰博客
  7. java:linux上找出最耗资源的线程方法
  8. sqlmap挂马命令
  9. PDF如何解密?这些方法你知道吗?
  10. 【UOJ】UER#3.B 开学前的日历
  11. 浙江大学计算机学院博士论文格式,浙江大学外语学院英文版博士学位论文格式.pdf...
  12. c++ nvcc编译CUDA程序入门示例
  13. 缓解环境噪声对音频质量干扰
  14. uefl计算机mbr分区方案,免重装系统 手把手教你MBR转GPT分区表-电脑教程
  15. 【Lawin Transformer2022】Lawin Transformer: Improving Semantic Segmentation Transformer with Multi-Sc
  16. sqlserver with(nolock)
  17. Linux Centos7 Nginx的安装与配置、反向代理、负载均衡、https配置
  18. 机加工图纸有英语看不懂?最全的翻译都在这
  19. “成语消消乐”技術支持
  20. 天使投资人周哲:天使投资-为什么要找我

热门文章

  1. 看板管理:消除生产过程中不协调、降低闲置库存(zt0
  2. Android 标签云 LabelView
  3. C# 转换图片的大小
  4. 过一个“不一样的清明节”
  5. 混音机java通用版下载_Mixer混音台下载_Mixer混音台官方下载-太平洋下载中心
  6. sci论文检索及获取论文的主要方式
  7. mt4双线macd_99%的人使用MACD指标失败的原因!
  8. Sublime Text3必备插件:SQL格式化工具(SqlBeautifier)
  9. 安装升级Erlang/OTP的方法
  10. 深入理解JVM虚拟机读书笔记——内存模型与线程