在開發一塊兒玩耍app的時候,有一些距離的處理,整理出這個php
計算x公里範圍內的最大最小經緯度,用來從數據庫中檢索數據python
php方法:數據庫
$myLat = $postObj->Location_X;//接收到的當前位置的緯度 $myLng = $postObj->Location_Y;//接收到的當前位置的經度 $Label = $postObj->Label;//接收到的當前地理位置信息 $Label = iconv("UTF-8","GBK",$Label); $find = stripos($Label,' ');//過濾掉郵政編碼 純屬爲了整潔性 if($find!==false) { $Label = substr($Label,0,$find); } //如下爲核心代碼 $range = 180 / pi() * 1 / 6372.797; //裏面的 1 就表明搜索 1km 以內,單位km $lngR = $range / cos($myLat * pi() / 180); $maxLat = $myLat + $range;//最大緯度 $minLat = $myLat - $range;//最小緯度 $maxLng = $myLng + $lngR;//最大經度 $minLng = $myLng - $lngR;//最小經度 //得出這四個值之後,就能夠根據你數據庫裏存的經緯度信息查找記錄了~
python方法:app
import math # 計算x公里範圍內的的最大最小經緯度 def calcu_location(location_x, location_y, r=1): lat_range = 180 / math.pi * r / 6372.797 # 裏面的 1 就表明搜索 1km 以內,單位km long_r = lat_range / math.cos(location_x * math.pi / 180) max_lat = location_x + lat_range # 最大緯度 min_lat = location_x - lat_range # 最小緯度 max_long = location_y + long_r # 最大經度 min_long = location_y - long_r # 最小經度 range_xy = {} range_xy['location_x'] = {'min':min_lat, 'max':max_lat} range_xy['location_y'] = {'min':min_long, 'max':max_long} return range_xy
測試:post
print calcu_location(-30.376393,-114.33879)
輸出:測試
{'location_x': {'max': -30.367402319846047, 'min': -30.385383680153954}, 'location_y': {'max': -114.32836870647137, 'min': -114.34921129352864}}
2. 計算地球上兩點之間距離,單位公里編碼
python方法:code
#計算兩點距離,輸入兩點經緯度,輸出距離:公里 def rad(flo): return flo * math.pi / 180.0 def calcu_distance(lat1,lng1,lat2,lng2): earth_radius=6378.137 radlat1=rad(lat1) radlat2=rad(lat2) a=radlat1-radlat2 b=rad(lng1)-rad(lng2) s=2*math.asin(math.sqrt(math.pow(math.sin(a/2),2)+math.cos(radlat1)*math.cos(radlat2)*math.pow(math.sin(b/2),2))) s=s*earth_radius if s<0: return round(-s,2) else: return round(s,2)