PHP根據一個給定經緯度的點,進行附近地點查詢

ne3g 9年前發布 | 4K 次閱讀 PHP

實現原理先算出該點周圍的矩形的四個點,然后使用經緯度去直接匹配數據庫中的記錄。

   //獲取周圍坐標
   public function returnSquarePoint($lng, $lat,$distance = 0.5){
         $earthRadius = 6378138;
        $dlng =  2  asin(sin($distance / (2  $earthRadius)) / cos(deg2rad($lat)));
        $dlng = rad2deg($dlng);
        $dlat = $distance/$earthRadius;
        $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)
        );
   }
   //計算兩個坐標的直線距離

public function getDistance($lat1, $lng1, $lat2, $lng2){
$earthRadius = 6378138; //近似地球半徑米 // 轉換為弧度 $lat1 = ($lat1 pi()) / 180; $lng1 = ($lng1 pi()) / 180; $lat2 = ($lat2 pi()) / 180; $lng2 = ($lng2 pi()) / 180; // 使用半正矢公式 用尺規來計算 $calcLongitude = $lng2 - $lng1; $calcLatitude = $lat2 - $lat1; $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) cos($lat2) pow(sin($calcLongitude / 2), 2);
$stepTwo = 2 asin(min(1, sqrt($stepOne))); $calculatedDistance = $earthRadius $stepTwo; return round($calculatedDistance); }</pre>

 本文由用戶 ne3g 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!