前些日子在作手機網站開發的時候碰到這樣一個需求,用某度地圖的定位功能查看本身如今所在的位置,同時要顯示出以本身爲圓心,周圍1000米之內的商家。功能很簡單,拿到本身的經緯度,算出四個點的經緯度座標,從數據庫裏拿出相對應的商家,顯示在地圖上便可,關鍵就是須要這麼一個好用函數。還好找到了一個不錯的,分享給你們,估計你們作到這一塊的時候應該也會用到。
php
/** * 計算某個經緯度的周圍某段距離的正方形的四個點 * 地球半徑,平均半徑爲6371km * @param lng float 經度 * @param lat float 緯度 * @param distance float 該點所在圓的半徑,該圓與此正方形內切,默認值爲0.5公里 * @return array 正方形的四個點的經緯度座標 */ function returnSquarePoint($lng, $lat,$distance = 0.5){ $dlng = 2 * asin(sin($distance / (2 * 6371)) / cos(deg2rad($lat))); $dlng = rad2deg($dlng); $dlat = $distance/6371; $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) ); }
作某度地圖的開發還會用到一個頗有用的函數,就是經過兩點之間的經緯度,計算出兩點之間的距離,也把它分享出來吧。git
/** * @desc 根據兩點間的經緯度計算距離 * @param float $lat 緯度值 * @param float $lng 經度值 */ function getDistance($lat1, $lng1, $lat2, $lng2){ $earthRadius = 6367000; $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); }