小型网站使用高德地图开发定位模块需要的php代码

项目要求:

1.使用定位,获取gps信息

2.获取当前所在城市

3.从该城市中取数据,按照距离我的当前位置远近排序

方案

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属性中)

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.计算两个坐标的距离

//计算地图两点间距离
    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;
    }
原文地址:https://www.cnblogs.com/mengxingxinqing/p/4402951.html