ThinkPHP實現經緯度范圍查詢


thinkphp實現附近范圍的查詢,如附近的人和附近團購之類。

首先,要定位用戶的經緯度。客戶端定位的方法可以使用地圖api或者用html5瀏覽器定位(比較不穩定而且不會太精確)。

然后,將當前經緯度,和需要搜索的距離范圍,計算一個經緯度范圍,這個范圍就是“附近”。計算這個“附近”的示例如下:

/**
     * 
     * @param  $latitude    緯度    
     * @param  $longitude    經度
     * @param  $raidus        半徑范圍(單位:米)
     * @return multitype:number
     */
    public function getAround($latitude,$longitude,$raidus){
        $PI = 3.14159265;
        $degree = (24901*1609)/360.0;
        $dpmLat = 1/$degree;
        $radiusLat = $dpmLat*$raidus;
        $minLat = $latitude - $radiusLat;
        $maxLat = $latitude + $radiusLat;
        $mpdLng = $degree*cos($latitude * ($PI/180));
        $dpmLng = 1 / $mpdLng;
        $radiusLng = $dpmLng*$raidus;
        $minLng = $longitude - $radiusLng;
        $maxLng = $longitude + $radiusLng;
        return array (minLat=>$minLat, maxLat=>$maxLat, minLng=>$minLng, maxLng=>$maxLng);
    }

然后,把獲得的經緯度距離,組裝成sql。thinkPHP對sql條件有很好的封裝,超級便捷

$array = $this->getAround($lat, $lng, 2000);
$condition['latitude']  = array(array('EGT',$array['minLat']),array('ELT',$array['maxLat']),'and');//(`latitude` >= minLat) AND (`latitude` <=maxLat) 

$condition['longitude'] = array(array('EGT',$array['minLng']),array('ELT',$array['maxLng']),'and');//(`longitude` >= minLng) AND (`longitude` <= maxLng)

 


免責聲明!

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



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