鍍金池/ 問答/PHP  數(shù)據(jù)庫/ php獲取當前坐標的相近坐標

php獲取當前坐標的相近坐標

做一個銀行網(wǎng)點的列表,現(xiàn)在需要在展示 某某網(wǎng)點信息的時候,在列出 離他最近的其他10個網(wǎng)點,網(wǎng)點數(shù)據(jù)庫存有每個網(wǎng)點的經(jīng)緯度坐標,需要mysql查詢出數(shù)據(jù)庫中與當前坐標值相近的10個坐標值

回答
編輯回答
夢一場

redis 的GEO 數(shù)據(jù)結(jié)構(gòu)能滿足你的需求

2017年10月19日 22:40
編輯回答
毀憶

這個一般是調(diào)用第三方地圖接口進行計算。你自己也可以算,網(wǎng)上就有算法,不過你算的是直線距離。

2018年9月19日 08:54
編輯回答
荒城
define(EARTH_RADIUS, 6371);//地球半徑,平均半徑為6371km
 /**
 *計算某個經(jīng)緯度的周圍某段距離的正方形的四個點
 *
 *@param lng float 經(jīng)度
 *@param lat float 緯度
 *@param distance float 該點所在圓的半徑,該圓與此正方形內(nèi)切,默認值為0.5千米
 *@return array 正方形的四個點的經(jīng)緯度坐標
 */
 function returnSquarePoint($lng, $lat,$distance = 0.5){
 
    $dlng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));
    $dlng = rad2deg($dlng);
     
    $dlat = $distance/EARTH_RADIUS;
    $dlat = rad2deg($dlat);
     
    return array(
                'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
                'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
                'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
                'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
                );
 }
//使用此函數(shù)計算得到結(jié)果后,帶入sql查詢。
$squares = returnSquarePoint($lng, $lat);
$info_sql = "select id,locateinfo,lat,lng from `lbs_info` where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat<{$squares['left-top']['lat']} and lng>{$squares['left-top']['lng']} and lng<{$squares['right-bottom']['lng']} "; 
2017年6月15日 19:35