基於高德地圖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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM