PHP版根據經緯度和半徑計算出經緯度的范圍


百度地圖提供了范圍搜索的功能,但是它使用的是百度自己的數據,但是有時候我們需要使用自己的數據,顯示在地圖上。比如給定兩個參數:指定位置(某一處的經緯度lnglat)和搜索半徑(r),搜索指定范圍內的數據。針對這樣的需求,基本有三種方法可以解決:
1:根據map提供的計算兩個坐標之間距離的方法,逐一計算指定位置和我們DB庫中的位置的距離s,用s和r進行比較,如果s<r,則在搜索范圍內,返給前段標注在地圖上。這種方法如果數據量小,可以嘗試,如果數據量大,沒測試過,但可以想象……

2:使用搜索引擎自帶的功能,比如solr的位置感知搜索,可參看文章http://www.ibm.com/developerworks/cn/java/j-spatial/

3:如果對精度要求不是很高,可以根據指定位置的經緯度和半徑計算出經緯度的范圍,然后判斷DB中的經緯度是否在此范圍內,可用SQL進行查詢。下面是此計算方法:

/**
* @param lat 緯度 lon 經度 raidus 單位米
* return minLat,minLng,maxLat,maxLng
*/

public function getAround($lat,$lon,$raidus){
$PI = 3.14159265;

$latitude = $lat;
$longitude = $lon;

$degree = (24901*1609)/360.0;
$raidusMile = $raidus;

$dpmLat = 1/$degree;
$radiusLat = $dpmLat*$raidusMile;
$minLat = $latitude$radiusLat;
$maxLat = $latitude + $radiusLat;

$mpdLng = $degree*cos($latitude * ($PI/180));
$dpmLng = 1 / $mpdLng;
$radiusLng = $dpmLng*$raidusMile;
$minLng = $longitude$radiusLng;
$maxLng = $longitude + $radiusLng;
echo $minLat.”#”.$maxLat.”@”.$minLng.”#”.$maxLng;
}
本文固定鏈接: http://www.ccsbbs.com.cn/archives/4686.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM