記錄兩個函數--1.計算某個經緯度的周圍某段距離的正方形的四個點。2.根據兩點間的經緯度計算距離

    前些日子在作手機網站開發的時候碰到這樣一個需求,用某度地圖的定位功能查看本身如今所在的位置,同時要顯示出以本身爲圓心,周圍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); 
	}
相關文章
相關標籤/搜索