zoukankan      html  css  js  c++  java
  • 基于高德地图API的地点距离查询

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>距离计算</title>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
            <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
            <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
            <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
            <script src="js/map.js"></script>
        </head>
        <body>
            <div class="container" style="margin-top: 50px;">
                <div>
                    <div>起点:</div>
                    <textarea placeholder="请填写" id="start"></textarea>
                </div>
                <div>
                    <div>终点:</div>
                    <textarea placeholder="请填写" id="end"></textarea>
                </div>
                <button class="btn btn-primary" onclick="compute()">计算距离</button>
                <div id="recommended" style="margin-top: 20px;"></div>
            </div>
            
            
            <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=053942438bf01f56a386b4e755b4161b&plugin=AMap.Geocoder"></script>
            <script type="text/javascript">
                
                
                
            </script>
        </body>
    </html>

    js部分

    function geoCode(address) {
        let geocoder = new AMap.Geocoder({
            
        });
        geocoder.getLocation(address, function(status, result) {
            if (status === 'complete' && result.geocodes.length) {
                var lnglat = result.geocodes[0].location;
                console.log('经纬度',lnglat)
            } else {
                log.error('根据地址查询位置失败');
            }
        });
    }
    //根据经纬度计算距离
    function computeDistanceByLnglat(startLnglat,endLnglat) {
        let p1 = startLnglat.split(',');
        console.log('p1经纬度',p1);
        let p2 = endLnglat.split(',');
        // var yg = AMap.GeometryUtil.distance(p1, p2);
        // let km = (yg / 1000).toFixed(2);
        // alert("本单距离您约为" + km + "km");
        // $('#distance').text('两点之间的距离为' + yg + 'm');
    }
    //根据地址名称计算距离
    function computeDistanceByAddress(address,target) {
        var p1;
        var p2;
        let geocoder = new AMap.Geocoder({
            
        });
        geocoder.getLocation(address, function(status, result) {
            if (status === 'complete' && result.geocodes.length) {
                let lnglat = result.geocodes[0].location;
                p1 = lnglat.lng+','+lnglat.lat;
                console.log('p1',p1);
            } else {
                log.error('根据地址查询位置失败');
            }
        });
        geocoder.getLocation(target, function(status, result) {
            if (status === 'complete' && result.geocodes.length) {
                let lnglat = result.geocodes[0].location;
                p2 = lnglat.lng+','+lnglat.lat;
                console.log('p2',p2);
            } else {
                log.error('根据地址查询位置失败');
            }
        });
        setTimeout(function(){
            var yg = AMap.GeometryUtil.distance(p1.split(','), p2.split(','));
            let km = (yg / 1000).toFixed(2);
            console.log('【'+address+'】与【'+target+'】的距离为' + km + 'km');
            $('#recommended').text('【'+address+'】与【'+target+'】的距离为' + km + 'km');
        },2000);
    }
    function compute(){
        let start = $('#start').val();
        let end = $('#end').val();
        console.log('计算');
        computeDistanceByAddress(start,end);
    }
    //店铺推荐
    function storeRecommended(){
        let address = $('#start').val();
        let stories = ['长沙市世茂广场L110商铺','浏阳大润发商业广场华为授权官方店','长沙市芙蓉区蔡锷中路112号','长沙市岳麓区梅溪湖西弘坤花样汇华为店1F1036号'];
        var minDistance = 9999999;
        let p1 = 1;
        let p2 = 1;
        let storeAddress;
        let geocoder = new AMap.Geocoder({
            
        });
        //获取收货地址的经纬度
        geocoder.getLocation(address, function(status, result) {
            if (status === 'complete' && result.geocodes.length) {
                let lnglat = result.geocodes[0].location;
                p1 = lnglat.lng+','+lnglat.lat;
                console.log('p1',p1);
            } else {
                log.error('根据地址查询位置失败');
            }
        });
        let coordinate = [];
        //获取门店地址的经纬度
        for(let i=0;i<stories.length;i++){
            geocoder.getLocation(stories[i], function(status, result) {
                if (status === 'complete' && result.geocodes.length) {
                    let lnglat = result.geocodes[0].location;
                    coordinate[stories[i]] = lnglat.lng+','+lnglat.lat;
                } else {
                    log.error('根据地址查询位置失败');
                }
            });
        }
        setTimeout(function(){
            for(let key in coordinate){
                console.log('----start----')
                var yg = AMap.GeometryUtil.distance(p1.split(','),coordinate[key].split(','));
                let km = (yg / 1000).toFixed(2);
                console.log('km',km);
                console.log('minDistance',minDistance);
                console.log('店名',key);
                console.log(km<minDistance);
                if(km<minDistance){
                    minDistance = km;
                    storeAddress = key;
                }
                console.log('更新后后',minDistance);
                console.log('----end----')
            }
        },2000)
        setTimeout(function(){
            console.log('您离店铺【'+storeAddress+'】最近,距离'+minDistance+'KM');
            $('#recommended').text('您离店铺【'+storeAddress+'】最近,距离为' + minDistance + 'km');
        },4000)
    }

    效果图

    本文转载自ushowtime,原文地址https://www.ushowtime.cn/blog/p/69

  • 相关阅读:
    函数式编程
    scala 有 + 运算符吗?
    使用 Idea 打 scala程序的 jar 包
    相见恨晚的 scala
    半夜思考,为什么 String 具有不变性
    我的常用
    DataTable学习笔记
    Js 操作cookie
    嵌套的 ajax 请求
    Jquery插件收集【m了慢慢学】
  • 原文地址:https://www.cnblogs.com/ushowtime/p/13445113.html
Copyright © 2011-2022 走看看