php开发高德地图定位模块的代码

南国老符 南国老符 最后更新于:2022-04-26 浏览:1250

项目要求:

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;
    }

点赞 (0)

收藏 (0)
转载请务必注明: 来源:《建站管家》https://www.df81.com/news/311.html

本站部分信息来源网络,如有侵权,请联系QQ:1062129401删除。

上一篇: PHP获取文件夹列表的方法

下一篇: 常用的正则表达式大全

请先登录后,再发表评论 ~ ~
发表评论
评论 (0)

发表帖子
广告位招租( ¥5 / 天 )
点击咨询
最新帖子

南国老符
2025-05-26 16:54
南国老符
2024-09-29 10:29
南国老符
2023-12-15 21:41
广告位招租( ¥5 / 天 )
点击咨询
最近评论

U
user1379
回复:版本号多少?
U
user1379
回复:新版本修复了,下载新版本即可
U
user1379
U
user1304
回复:默认没有这个功能,你可以自行二次开发后期可能会考虑在站群版本上加入此功能及商城功能
Y
yuanis90
回复:后台->语言->全局管理->模型管理->编辑->启用关键词内链即可
Y
yuanis90
回复:后台已经启用了,但是前台产品说明的关分键词还是没有自动链接到,
购买VIP
购买授权
余额充值
发表帖子
客服微信