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

知识技术 2022-04-26 09:50 953
转载请务必注明: 来源:《建站管家》https://www.df81.com/news/311.html

项目要求:

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)

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

上一篇: 《建站管家》二次开发文档

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

请先登录后,再发表评论 ~ ~
发表评论
发表评论
发表帖子
广告位招租( ¥5 / 天 )
点击咨询
相关帖子

如果要判断文件是否存在,用函数 is_file(),如果要判断目录是否存在,用函数 is_dir()
用宝塔安装TP程序后,网站前台可以访问,后台无法访问,不是程序问题,而是web服务器环境配置问题(PHP配置),出现这种问题,一般是windows主机安装宝塔造成的,linux安装宝塔不会出现此错误
广告位招租( ¥3 / 天 )
点击咨询
广告位招租( ¥2 / 天 )
点击咨询
广告位招租( ¥1 / 天 )
点击咨询
最新帖子

小朋友,你爸爸是谁啊?这很单纯的,就像我们碰到别人会问:你吃过饭了吗?类似;许多人初次相识,经常会问:你是做什么的啊?你做什么,好像决定你收入的高低,你,资产的范围
1、升级框架到ThinkPHP8.0.3【要求PHP8.1+环境,推荐PHP8.1】 2、启用/禁用调试模式等小细节改进
后台点击生成站点地图 一直转圈圈没有反应,
在线客服