代码分析Python地图坐标转换


Posted in Python onFebruary 08, 2018

最近做项目正好需要坐标的转换

  • 各地图API坐标系统比较与转换;
  • WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,
  • 谷歌地图采用的是WGS84地理坐标系(中国范围除外);
  • GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
  • 谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系;
  • 搜狗坐标系、图吧坐标系等,估计也是在GCJ02基础上加密而成的.

然后在csv中将其转化。

最后再在百度地图API上进行检验成功

#http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=10923
#代码原地址
import csv
import string
import time
import math

#系数常量
a = 6378245.0
ee = 0.00669342162296594323
x_pi = 3.14159265358979324 * 3000.0 / 180.0;

#转换经度
def transformLat(lat,lon):
 ret = -100.0 + 2.0 * lat + 3.0 * lon + 0.2 * lon * lon + 0.1 * lat * lon +0.2 * math.sqrt(abs(lat))
 ret += (20.0 * math.sin(6.0 * lat * math.pi) + 20.0 * math.sin(2.0 * lat * math.pi)) * 2.0 / 3.0
 ret += (20.0 * math.sin(lon * math.pi) + 40.0 * math.sin(lon / 3.0 * math.pi)) * 2.0 / 3.0
 ret += (160.0 * math.sin(lon / 12.0 * math.pi) + 320 * math.sin(lon * math.pi / 30.0)) * 2.0 / 3.0
 return ret

#转换纬度
def transformLon(lat,lon):
 ret = 300.0 + lat + 2.0 * lon + 0.1 * lat * lat + 0.1 * lat * lon + 0.1 * math.sqrt(abs(lat))
 ret += (20.0 * math.sin(6.0 * lat * math.pi) + 20.0 * math.sin(2.0 * lat * math.pi)) * 2.0 / 3.0
 ret += (20.0 * math.sin(lat * math.pi) + 40.0 * math.sin(lat / 3.0 * math.pi)) * 2.0 / 3.0
 ret += (150.0 * math.sin(lat / 12.0 * math.pi) + 300.0 * math.sin(lat / 30.0 * math.pi)) * 2.0 / 3.0
 return ret

#Wgs transform to gcj
def wgs2gcj(lat,lon):
 dLat = transformLat(lon - 105.0, lat - 35.0)
 dLon = transformLon(lon - 105.0, lat - 35.0)
 radLat = lat / 180.0 * math.pi
 magic = math.sin(radLat)
 magic = 1 - ee * magic * magic
 sqrtMagic = math.sqrt(magic)
 dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * math.pi)
 dLon = (dLon * 180.0) / (a / sqrtMagic * math.cos(radLat) * math.pi)
 mgLat = lat + dLat
 mgLon = lon + dLon
 loc=[mgLat,mgLon]
 return loc

#gcj transform to bd2
def gcj2bd(lat,lon):
 x=lon
 y=lat
 z = 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)
 bd_lon = z * math.cos(theta) + 0.0065
 bd_lat = z * math.sin(theta) + 0.006
 bdpoint = [bd_lon,bd_lat]
 return bdpoint

#wgs transform to bd
def wgs2bd(lat,lon):
 wgs_to_gcj = wgs2gcj(lat,lon)
 gcj_to_bd = gcj2bd(wgs_to_gcj[0], wgs_to_gcj[1])
 return gcj_to_bd;

for i in range (3,4):
 n = str('2017.040'+ str(i)+'.csv')
 m = str('2017040' + str(i)+'.csv')
 csvfile = open(m,'w',encoding='UTF-8',newline='')
 nodes = csv.writer(csvfile)
 nodes.writerow(['md5','content','phone','conntime','recitime','lng','lat'])
 l=[]
 with open(n,newline='',encoding='UTF-8') as f:
  reader = csv.DictReader(f)
  for row in reader:
   if row['md5'] == 'md5':
    continue
   else:
    y=float(row['lng'])
    x=float(row['lat'])
    loc=wgs2bd(x,y)
    l.append([row['md5'],row['content'],row['phone'],row['conntime'],row['recitime'],loc[0],loc[1]])
 nodes.writerows(l)
 csvfile.close()

 print("转换成功")
Python 相关文章推荐
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
浅谈scrapy 的基本命令介绍
Jun 13 Python
Python线程同步的实现代码
Oct 03 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
Nov 06 Python
python实现朴素贝叶斯算法
Nov 19 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
Django中ORM的基本使用教程
Dec 22 Python
浅谈Python数学建模之整数规划
Jun 23 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 #Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 #Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 #Python
Python列表推导式与生成器表达式用法示例
Feb 08 #Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 #Python
python OpenCV学习笔记实现二维直方图
Feb 08 #Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 #Python
You might like
点评山进PR-D3L三波段收音机
2021/03/02 无线电
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
Python可以实现栈的结构吗
2020/05/27 Python
详解python如何引用包package
2020/06/07 Python
英语专业毕业个人求职自荐信
2013/09/21 职场文书
殡葬服务心得体会
2014/09/11 职场文书
单位委托书怎么写
2014/09/21 职场文书
个人剖析材料范文
2014/09/30 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
工作态度检讨书范文
2015/05/06 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
贷款工资证明范本
2015/06/12 职场文书
同事离别感言
2015/08/04 职场文书
车间安全生产管理制度
2015/08/06 职场文书
PHP基本语法
2021/03/31 PHP
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
Java完整实现记事本代码
2022/06/16 Java/Android