百度地圖提供了范圍搜索的功能,但是它使用的是百度自己的數據,但是有時候我們需要使用自己的數據,顯示在地圖上。比如給定兩個參數:指定位置(某一處的經緯度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; }