python 經緯度計算相關

2021-10-23 06:45:44 字數 2631 閱讀 6978

1,高德介面返回位址經緯度

import requests

def getcode(site):

parameters =

base = ''

response = requests.get(base, parameters)

info_site = response.json()

lng = info_site['geocodes'][0]['location'].split(',')[0]

lat = info_site['geocodes'][0]['location'].split(',')[1]

return [lng,lat]

2,利用經緯度計算距離

from math import *

def distance1(lat_a,lng_a,lat_b,lng_b): #第一種計算方法

ra=6378.140 #赤道半徑

rb=6356.755 #極半徑 (km)

flatten=(ra-rb)/ra #地球偏率

rad_lat_a=radians(lat_a)

rad_lng_a=radians(lng_a)

rad_lat_b=radians(lat_b)

rad_lng_b=radians(lng_b)

pa=atan(rb/ra*tan(rad_lat_a))

pb=atan(rb/ra*tan(rad_lat_b))

xx=acos(sin(pa)*sin(pb)+cos(pa)*cos(pb)*cos(rad_lng_a-rad_lng_b))

c1=(sin(xx)-xx)*(sin(pa)+sin(pb))**2/cos(xx/2)**2

c2=(sin(xx)+xx)*(sin(pa)-sin(pb))**2/sin(xx/2)**2

dr=flatten/8*(c1-c2)

distance=ra*(xx+dr)

return distance

def distance2(lat1,lng1,lat2,lng2):# 第二種計算方法

radlat1=radians(lat1)

radlat2=radians(lat2)

a=radlat1-radlat2

b=radians(lng1)-radians(lng2)

s=2*asin(sqrt(pow(sin(a/2),2)+cos(radlat1)*cos(radlat2)*pow(sin(b/2),2)))

earth_radius=6378.137

s=s*earth_radius

if s<0:

return -s

else:

return s

#驗證lat_a=32.060255; lng_a=118.796877 # 南京

lat_b=39.904211; lng_b=116.407395 # 北京

r_id = 'nanjing'; t_id = 'beijing'

distance=distance(t_id,r_id,lat_a,lng_a,lat_b,lng_b)

lat_a = [32.060255,31.060255];lng_a=[118.796877]

lat_b = [39.060255,39.060255];lng_b=[116.796877]

print('(lat_a, lng_a)=(,)'.format(lat_a,lng_a))

print('(lat_b, lng_b)=(,)'.format(lat_b,lng_b))

print('distance1= km'.format(distance))

print('distance2= km'.format(distance2(lat_a,lng_a,lat_b,lng_b)))

3,經緯度劃分區域(資料量多的時候可以用來判斷資料分成那幾塊區域)

_base32 = '0123456789bcdefghjkmnpqrstuvwxyz'

#10進製和32進製轉換,32進製去掉了ailo

_decode_map = {}

_encode_map = {}

for i in range(len(_base32)):

_decode_map[_base32[i]] = i

_encode_map[i]=_base32[i]

del i

def encode(lat,lon,precision=7):

'''編碼位數對應區域大小(精度)

precision = 5 ±2.4km

precision = 6 ±0.61km

precision = 7 ±0.076km

precision = 8 ±0.019km

'''lat_range, lon_range = [-90.0, 90.0], [-180.0, 180.0]

geohash=

code=

while len(geohash)=5:

code=code[5:]

return ''.join(geohash)

經緯度計算

define earth radius,6371 地球半徑,平均半徑為6371km 計算某個經緯度的周圍某段距離的正方形的四個點 param lng float 經度 param lat float 緯度 param distance float 該點所在圓的半徑,該圓與此正方形內切,預設值為0.5...

經緯度計算 筆記

經緯度之間距離計算 返回單位 公尺 function distance lon1,lat1,lon2,lat2 echo distance 116.368904,39.923423,116.387271,39.922501 die 高德計算距離 deg2rad 函式將角度轉換為弧度。rad2deg ...

python經緯度轉化

import requests defgeocode location 引數內容 可以寫成字典的格式 parameters 問號以前的內容 base response requests.get base,parameters print http 請求的狀態 s response.status co...