better2021 / Blog

个人博客
https://feiyuweb.me/Blog
1 stars 0 forks source link

HTML5 地理定位+地图 API:计算用户到商家的距离 #23

Open better2021 opened 4 years ago

better2021 commented 4 years ago
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
    <title>计算用户到商家的距离</title>
</head>
<body>

</body>
</html>
<script type="text/javascript">

    //使用HTML5地理定位
    function getLocation(){

        //检测浏览器是否支持地理定位
      if (navigator.geolocation){
            navigator.geolocation.getCurrentPosition(showPosition,showError);
            //如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象
            //getCurrentPosition()方法的第二个参数showError用于处理错误。它规定当获取用户位置失败时运行的函数
        }else{
            alert("该设备浏览器不支持地理定位");
        }

      }

    function showPosition(position){

        var Longitude=position.coords.longitude;//HTML5定位获取的经度
        var Latitude=position.coords.latitude;//HTML5定位获取的纬度

        //将HTML5定位获取的经纬度,通过百度地图API转换成适应于百度定位的经纬度
        var ggPoint = new BMap.Point(Longitude,Latitude);

        //坐标转换完之后的回调函数
        translateCallback = function (data){
          if(data.status === 0) {
            var map = new BMap.Map();
            console.log(data.points[0]);//转换后新的用户经纬度
            var pointA = new BMap.Point(data.points[0].lng,data.points[0].lat);//用户的经纬度
            var pointB = new BMap.Point(商家经度,商家纬度);//从数据库中取出商家的经纬度
            alert('您到商家的距离是:'+(map.getDistance(pointA,pointB)).toFixed(2)+' 米。');  //获取两点距离,保留小数点后两位
          }
        }

        var convertor = new BMap.Convertor();
        var pointArr = [];
        pointArr.push(ggPoint);
        convertor.translate(pointArr, 1, 5, translateCallback)

    }

    function showError(error){
      switch(error.code) {
        case error.PERMISSION_DENIED:
          alert("用户不允许地理定位")
          break;
        case error.POSITION_UNAVAILABLE:
          alert("无法获取当前位置")
          break;
        case error.TIMEOUT:
          alert("操作超时")
          break;
        case error.UNKNOWN_ERROR:
          alert("未知错误")
          break;
        }
      }

    getLocation();

</script>

原文链接: https://juejin.im/post/5e7e126b51882573c508be13