日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java火星坐标转百度坐标_各种地理坐标系的转换,火星坐标,百度坐标,wsg84等...

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java火星坐标转百度坐标_各种地理坐标系的转换,火星坐标,百度坐标,wsg84等... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# -*- coding: utf-8 -*-

import json

import requests

import math

key = 'your key here' # 這里填寫你的百度開放平臺的key

x_pi = 3.14159265358979324 * 3000.0 / 180.0

pi = 3.1415926535897932384626 # π

a = 6378245.0 # 長半軸

ee = 0.00669342162296594323 # 扁率

def geocode(address):

"""

利用百度geocoding服務解析地址獲取位置坐標

:param address:需要解析的地址

:return:

"""

geocoding = {'s': 'rsv3',

'key': key,

'city': '全國',

'address': address}

res = requests.get(

"http://restapi.amap.com/v3/geocode/geo", params=geocoding)

if res.status_code == 200:

json = res.json()

status = json.get('status')

count = json.get('count')

if status == '1' and int(count) >= 1:

geocodes = json.get('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 gcj02tobd09(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 bd09togcj02(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 wgs84togcj02(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) / (a / sqrtmagic * math.cos(radlat) * pi)

mglat = lat + dlat

mglng = lng + dlng

return [mglng, mglat]

def gcj02towgs84(lng, lat):

"""

GCJ02(火星坐標系)轉GPS84

:param lng:火星坐標系的經度

:param lat:火星坐標系緯度

: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) / (a / sqrtmagic * math.cos(radlat) * pi)

mglat = lat + dlat

mglng = lng + dlng

return [lng * 2 - mglng, lat * 2 - mglat]

def transformlat(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 * pi) + 20.0 *

math.sin(2.0 * lng * pi)) * 2.0 / 3.0

ret += (20.0 * math.sin(lat * pi) + 40.0 *

math.sin(lat / 3.0 * pi)) * 2.0 / 3.0

ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 *

math.sin(lat * pi / 30.0)) * 2.0 / 3.0

return ret

def transformlng(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 * pi) + 20.0 *

math.sin(2.0 * lng * pi)) * 2.0 / 3.0

ret += (20.0 * math.sin(lng * pi) + 40.0 *

math.sin(lng / 3.0 * pi)) * 2.0 / 3.0

ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 *

math.sin(lng / 30.0 * pi)) * 2.0 / 3.0

return ret

def out_of_china(lng, lat):

"""

判斷是否在國內,不在國內不做偏移

:param lng:

:param lat:

:return:

"""

if lng < 72.004 or lng > 137.8347:

return True

if lat < 0.8293 or lat > 55.8271:

return True

return False

if __name__ == '__main__':

lng = 128.543

lat = 37.065

result1 = gcj02tobd09(lng, lat)

result2 = bd09togcj02(lng, lat)

result3 = wgs84togcj02(lng, lat)

result4 = gcj02towgs84(lng, lat)

result5 = geocode('北京市朝陽區朝陽公園')

print (result1, result2, result3, result4, result5)

總結

以上是生活随笔為你收集整理的java火星坐标转百度坐标_各种地理坐标系的转换,火星坐标,百度坐标,wsg84等...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。