python 編寫的經緯度座標轉換類

2022-08-31 21:00:09 字數 4263 閱讀 8253

#

-*- coding: utf-8 -*-

#/**

#* 各地圖api座標系統比較與轉換;

#* wgs84座標系:即地球座標系,國際上通用的座標系。裝置一般包含gps晶元或者北斗晶元獲取的經緯度為wgs84地理座標系,

#* 谷歌地圖採用的是wgs84地理座標系(中國範圍除外);

#* gcj02座標系:即火星座標系,是由中國國家測繪局制訂的地理資訊系統的座標系統。由wgs84座標係經加密後的座標系。谷歌中國地圖和搜搜中國地圖採用的是gcj02地理座標系; #*/

import

math

from decimal import *

class

transfer:

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

return

ret

deftransformlat(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

return

ret

deftransfrom(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 +dlng

return

mglng,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 +dlng

return

gcj02lng,gcj02lat

#def

gcj02_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

return

bd09_lng,bd09_lat

#def

wg84_to_bd09(self,wg84_lng,wg84_lat):

gcj02lng,gcj02lat=self.wg84_to_gcj02(wg84_lng,wg84_lat)

return

self.gcj02_to_bd09(gcj02lng,gcj02lat)

#def

bd09_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)

return

gcj02_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-mlat

return

wg84_lng,wg84_lat

#def

bd09_to_wg84(self,bd09_lng,bd09_lat):

gcj02_lng, gcj02_lat=self.bd09_to_gcj02(bd09_lng,bd09_lat)

return

self.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實現的各類座標系轉換程式,驗證可行

arcgis 經緯度轉大地座標 大地經緯度轉UTM

在日常gnss應用中,常需要應用到utm座標,而python提供了較為完備座標轉換工具,無需再去用arcgis了。首先貼出幾個帖子,值得一讀,其次,說一下要用到的工具,pyproj,其源於proj4庫 安裝 pip install pyproj 呼叫 import pyproj 再者,庫函式使用,先...

經緯度座標系轉東北天 經緯度座標系轉換

網際網路地圖的座標系現狀 地球座標 wgs84 國際標準,從 gps 裝置中取出的資料的座標系 國際地圖提供商使用的座標系 火星座標 gcj 02 也叫國測局座標系 中國標準,從國行移動裝置中定位獲取的座標資料使用這個座標系 國家規定 國內出版的各種地圖系統 包括電子形式 必須至少採用gcj 02對...

python 編寫的經緯度座標轉換類

測試 coding utf 8 各地圖api座標系統比較與轉換 wgs84座標系 即地球座標系,國際上通用的座標系。裝置一般包含gps晶元或者北斗晶元獲取的經緯度為wgs84地理座標系,谷歌地圖採用的是wgs84地理座標系 中國範圍除外 gcj02座標系 即火星座標系,是由中國國家測繪局制訂的地理資...