zoukankan      html  css  js  c++  java
  • 小型网站使用高德地图开发定位模块需要的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;
        }
  • 相关阅读:
    LeetCode 27. Remove Element(C++)
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 21. Merge Two Sorted Lists(c++)
    LeetCode 20. Valid Parentheses(c++)
    LeetCode 14.Longest Common Prefix(C++)
    poj1847 Tram(最短路dijkstra)
    poj 3268 Silver Cow Party(最短路dijkstra)
    LeetCode 13. Roman to Integer(c语言版)
    hdu2181 简单搜索
    python 算法 day1
  • 原文地址:https://www.cnblogs.com/mengxingxinqing/p/4402951.html
Copyright © 2011-2022 走看看