代碼分析Python地圖坐標轉(zhuǎn)換
更新時間:2018年02月08日 10:24:39 投稿:laozhang
這篇文章主要介紹了Python地圖坐標轉(zhuǎn)換的相關(guān)知識點以及分享了相關(guān)的代碼實例,對此有興趣的朋友學習下。
最近做項目正好需要坐標的轉(zhuǎn)換
- 各地圖API坐標系統(tǒng)比較與轉(zhuǎn)換;
- WGS84坐標系:即地球坐標系,國際上通用的坐標系。設(shè)備一般包含GPS芯片或者北斗芯片獲取的經(jīng)緯度為WGS84地理坐標系,
- 谷歌地圖采用的是WGS84地理坐標系(中國范圍除外);
- GCJ02坐標系:即火星坐標系,是由中國國家測繪局制訂的地理信息系統(tǒng)的坐標系統(tǒng)。由WGS84坐標系經(jīng)加密后的坐標系。
- 谷歌中國地圖和搜搜中國地圖采用的是GCJ02地理坐標系; BD09坐標系:即百度坐標系,GCJ02坐標系經(jīng)加密后的坐標系;
- 搜狗坐標系、圖吧坐標系等,估計也是在GCJ02基礎(chǔ)上加密而成的.
然后在csv中將其轉(zhuǎn)化。
最后再在百度地圖API上進行檢驗成功
#http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=10923
#代碼原地址
import csv
import string
import time
import math
#系數(shù)常量
a = 6378245.0
ee = 0.00669342162296594323
x_pi = 3.14159265358979324 * 3000.0 / 180.0;
#轉(zhuǎn)換經(jīng)度
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
#轉(zhuǎn)換緯度
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("轉(zhuǎn)換成功")
相關(guān)文章
pytorch通過自己的數(shù)據(jù)集訓練Unet網(wǎng)絡(luò)架構(gòu)
Unet是一個最近比較火的網(wǎng)絡(luò)結(jié)構(gòu)。它的理論已經(jīng)有很多大佬在討論了。本文主要從實際操作的層面,講解如何使用pytorch實現(xiàn)unet圖像分割2022-12-12
python詳解如何通過sshtunnel pymssql實現(xiàn)遠程連接數(shù)據(jù)庫
為了安全起見,很多公司服務(wù)器數(shù)據(jù)庫的訪問多半是要做限制的,由專門的DBA管理,而且都是做的集群,數(shù)據(jù)庫只能內(nèi)網(wǎng)訪問,所以就有一個直接的問題是,往往多數(shù)時候,在別的機器上(比如自己本地),是不能訪問數(shù)據(jù)庫的,給日常開發(fā)調(diào)試造成了很大不便2021-10-10
基于PyQt5實現(xiàn)一個串口接數(shù)據(jù)波形顯示工具
這篇文章主要為大家詳細介紹了如何利用PyQt5實現(xiàn)一個串口接數(shù)據(jù)波形顯示工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
python將logging模塊封裝成單獨模塊并實現(xiàn)動態(tài)切換Level方式
這篇文章主要介紹了python將logging模塊封裝成單獨模塊并實現(xiàn)動態(tài)切換Level方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
解決django中form表單設(shè)置action后無法回到原頁面的問題
這篇文章主要介紹了解決django中form表單設(shè)置action后無法回到原頁面的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

