資源簡介
提供百度坐標與WGS84,高德、谷歌坐標與WGS84坐標的轉換,提供百度、高德、谷歌與WGS84、火星之間的轉換
代碼片段和文件信息
#?-*-?coding:?utf-8?-*-
import?json
import?urllib
import?math
x_pi?=?3.14159265358979324?*?3000.0?/?180.0
pi?=?3.1415926535897932384626??#?π
a?=?6378245.0??#?長半軸
ee?=?0.00669342162296594323??#?扁率
class?Geocoding:
????def?__init__(self?api_key):
????????self.api_key?=?api_key
????def?geocode(self?address):
????????“““
????????利用高德geocoding服務解析地址獲取位置坐標
????????:param?address:需要解析的地址
????????:return:
????????“““
????????geocoding?=?{‘s‘:?‘rsv3‘
?????????????????????‘key‘:?self.api_key
?????????????????????‘city‘:?‘全國‘
?????????????????????‘address‘:?address}
????????geocoding?=?urllib.urlencode(geocoding)
????????ret?=?urllib.urlopen(“%s?%s“?%?(“http://restapi.amap.com/v3/geocode/geo“?geocoding))
????????if?ret.getcode()?==?200:
????????????res?=?ret.read()
????????????json_obj?=?json.loads(res)
????????????if?json_obj[‘status‘]?==?‘1‘?and?int(json_obj[‘count‘])?>=?1:
????????????????geocodes?=?json_obj[‘geocodes‘][0]
????????????????lng?=?float(geocodes.get(‘location‘).split(‘‘)[0])
????????????????lat?=?float(geocodes.get(‘location‘).split(‘‘)[1])
????????????????return?[lng?lat]
????????????else:
????????????????return?None
????????else:
????????????return?None
def?gcj02_to_bd09(lng?lat):
????“““
????火星坐標系(GCJ-02)轉百度坐標系(BD-09)
????谷歌、高德——>百度
????:param?lng:火星坐標經度
????:param?lat:火星坐標緯度
????:return:
????“““
????z?=?math.sqrt(lng?*?lng?+?lat?*?lat)?+?0.00002?*?math.sin(lat?*?x_pi)
????theta?=?math.atan2(lat?lng)?+?0.000003?*?math.cos(lng?*?x_pi)
????bd_lng?=?z?*?math.cos(theta)?+?0.0065
????bd_lat?=?z?*?math.sin(theta)?+?0.006
????return?[bd_lng?bd_lat]
def?bd09_to_gcj02(bd_lon?bd_lat):
????“““
????百度坐標系(BD-09)轉火星坐標系(GCJ-02)
????百度——>谷歌、高德
????:param?bd_lat:百度坐標緯度
????:param?bd_lon:百度坐標經度
????:return:轉換后的坐標列表形式
????“““
????x?=?bd_lon?-?0.0065
????y?=?bd_lat?-?0.006
????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)
????gg_lng?=?z?*?math.cos(theta)
????gg_lat?=?z?*?math.sin(theta)
????return?[gg_lng?gg_lat]
def?wgs84_to_gcj02(lng?lat):
????“““
????WGS84轉GCJ02(火星坐標系)
????:param?lng:WGS84坐標系的經度
????:param?lat:WGS84坐標系的緯度
????:return:
????“““
????if?out_of_china(lng?lat):??#?判斷是否在國內
????????return?lng?lat
????dlat?=?_transformlat(lng?-?105.0?lat?-?35.0)
????dlng?=?_transformlng(lng?-?105.0?lat?-?35.0)
????radlat?=?lat?/?180.0?*?pi
????magic?=?math.sin(radlat)
????magic?=?1?-?ee?*?magic?*?magic
????sqrtmagic?=?math.sqrt(magic)
????dlat?=?(dlat?*?180.0)?/?((a?*?(1?-?ee))?/?(magic?*?sqrtmagic)?*?pi)
????dlng?=?(dlng?*?180.0)?/?
- 上一篇:Python爬取豆瓣圖書信息
- 下一篇:PCA降維+分類器 python語言寫的
評論
共有 條評論