ThinkPHP實現經緯度範圍查詢

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

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

而後,將當前經緯度,和須要搜索的距離範圍,計算一個經緯度範圍,這個範圍就是「附近」。計算這個「附近」的示例以下: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條件有很好的封裝,超級便捷git

$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)
相關文章
相關標籤/搜索