小型網站使用高德地圖開發定位模塊須要的php代碼

項目要求:git

1.使用定位,獲取gps信息json

2.獲取當前所在城市api

3.從該城市中取數據,按照距離個人當前位置遠近排序cookie

方案session

1.使用js獲取當前位置信息,而後使用cookie或者session存儲函數

function showPosition(position)
            {
                var lat = position.coords.latitude;
                var lon = position.coords.longitude;
                   var baseUrl = '{|:U(GROUP_NAME.'/Index/position')|}';
                //baseUrl += '?lat='+position.coords.latitude+'&lon='+position.coords.longitude;
               $.post(baseUrl,{lat:lat,lon:lon},function(data){
                       location.reload();
//                   alert(data);
               });
            }
//js調用函數
function getLocation()
            {
                if (navigator.geolocation)
                {
                    navigator.geolocation.getCurrentPosition(showPosition);
                }
            }

2.將gps座標轉換成高德座標,並獲取所在城市 直轄市的city爲空(保存在province屬性中)post

http://restapi.amap.com/v3/geocode/regeo?location=108.948711,34.230511&key=b7e6f37cfbf325818525241fc3616e7f&s=rsv3&radius=1000&extensions=all  
注意:1.經緯度小數點後只能6位
      2.extensions 可取 base(當前位置基本信息) all(周邊信息)
Php
//根據高德座標獲取所在城市
function getAmapCity($lng,$lat,$default='北京'){
    $res = file_get_contents('http://restapi.amap.com/v3/geocode/regeo?location='.$lng.','.$lat.'&key=b7e6f37cfbf325818525241fc3616e7f&s=rsv3&radius=1000&extensions=base');
    $res = json_decode($res);
    if($res->info == 'OK'){
        return explode('市',$res->regeocode->addressComponent->city)[0];
    }else{
        return $default;
    }
}

3.計算兩個座標的距離spa

//計算地圖兩點間距離
    function getShortDistance ( $lngx, $latx, $lngy, $laty )
    {
        $DEF_PI = 3.14159265359; // pi();
        $DEF_2PI = 6.28318530712; // 2 * $DEF_PI;
        $DEF_PI180 = 0.01745329252; // $DEF_PI/180.0;
        $DEF_R = 6378.137; // radius of earth
    
        // 角度換弧度
        $radLat1 = $lngx * $DEF_PI180;
        $radLat2 = $lngy * $DEF_PI180;
    
        $a = $radLat1 - $radLat2;
        $b = ( $latx * $DEF_PI180 ) - ( $laty * $DEF_PI180 );
        $s = 2 * sin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));
        $s = $s * $DEF_R;
        $distance = round($s * 1000);
        return $distance;
    }
相關文章
相關標籤/搜索