【问题标题】:error retrieving distance and travel time values from a Google API ()从 Google API 检索距离和旅行时间值时出错 ()
【发布时间】:2015-11-02 19:04:20
【问题描述】:

我不确定接下来要采取什么方法,目前我有以下代码,它计算任意 2 个给定位置(使用经度和纬度)之间的距离(以英里为单位),但它是一条直线,而且道路不是笔直的...所以我想做的是像谷歌地图一样计算距离,例如这里有一些随机坐标:

lat1:   53.015036674593500
lat2:   -2.244633982337860
long1:   52.363731052413800
long2:  -1.307122733526320

当转换成这段代码时(JavaScript)

function distance(lat1, lon1, lat2, lon2, unit) {
        var radlat1 = Math.PI * lat1 / 180
        var radlat2 = Math.PI * lat2 / 180
        var radlon1 = Math.PI * lon1 / 180
        var radlon2 = Math.PI * lon2 / 180
        var theta = lon1 - lon2
        var radtheta = Math.PI * theta / 180
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist)
        dist = dist * 180 / Math.PI
        dist = dist * 60 * 1.1515
        if (unit == "K") { dist = dist * 1.609344 }
        if (unit == "N") { dist = dist * 0.8684 }
        return dist
    }

    var dist = distance(lata, longa, latb, longb, unit).toFixed(2);

    window.alert(dist + " miles");

返回的值是 59.83 miles 或大约......如果我要在谷歌地图中执行此操作:

https://www.google.co.uk/maps/dir/1+Creswell+Pl,+Cawston,+Rugby+CV22+7GZ,+UK/1+Ironbridge+Dr,+Newcastle+ST5+6ER,+UK/@52.6863234,-2.0253047,10z/data=!3m1!4b1!4m13!4m12!1m5!1m1!1s0x487747659759ff6f:0x2ae7f451f320ca80!2m2!1d-1.3071227!2d52.3637323!1m5!1m1!1s0x487a67f1ebd6bdaf:0x89c3b0d334683e52!2m2!1d-2.2446339!2d53.0150378

数值范围介于 77.1 英里76.5 英里

问题

我有 BELOW 函数部分地工作来获取旅行时间和距离,但是它在底部的警报框中随机返回“UNDEFINED”,或者有这个错误消息

"Object doesn't support this action"

使用 console.log 时,它会返回此消息:

"google.maps.DistanceMatrixService is not a function"

代码:

 var siteP = postcodearray.indexOf(screen.sitePostcode);
    var StaffP = postcodearray.indexOf(screen.engineerPostcode);

    sitelat = latarray[siteP];
    sitelong = longarray[siteP];
    stafflat = latarray[StaffP];
    stafflong = longarray[StaffP];

    var site = sitelat + ", " + sitelong;
    var staff = stafflat + ", " + stafflong;

    var distance;
    var duration;

    var service = new google.maps.DistanceMatrixService();
    service.getDistanceMatrix({
        origins: [staff],
        destinations: [site],
        travelMode: google.maps.TravelMode.DRIVING,
        unitSystem: google.maps.UnitSystem.METRIC,
        avoidHighways: false,
        avoidTolls: false
    }, function (response, status) {
        if (status == google.maps.DistanceMatrixStatus.OK && response.rows[0].elements[0].status != "ZERO_RESULTS") {
            distance = response.rows[0].elements[0].distance.text;
            duration = response.rows[0].elements[0].duration.text;
            //var dvDistance = document.getElementById("dvDistance");
            //dvDistance.innerHTML = "";
            //dvDistance.innerHTML += "Distance: " + distance + "<br />";
            //dvDistance.innerHTML += "Duration:" + duration;

        } else {
            alert("Unable to find the distance via road.");
        }
    });

    window.alert(distance); //UNDEFINED

请有人指出我在这里做了什么/做错了什么,因为我非常接近获得我需要的 2 个值

【问题讨论】:

标签: javascript api google-maps maps bing-maps


【解决方案1】:

您可以在此处找到使用 Bing 地图 REST 服务以 JavaScript 计算位置之间的路线的示例:https://msdn.microsoft.com/en-us/library/gg427607.aspx

我建议添加 routeAttributes 参数并将其设置为 routeSummariesOnly。这将使响应非常小。 https://msdn.microsoft.com/en-us/library/ff701717.aspx

或者,如果您使用 JavaScript 并想要加载地图,则使用 Bing Maps JavaScript 控件和方向模块:https://msdn.microsoft.com/en-us/library/hh312802.aspx

您还可以在此处找到 Bing 地图控件的交互式 SDK:https://www.bingmapsportal.com/ISDK/AjaxV7#CreateMap1

您需要 Bing 地图密钥才能访问该服务,但它不必与推荐人绑定。我建议在这里注册一个免费的 Bing 地图密钥:https://azure.microsoft.com/en-us/marketplace/partners/bingmaps/mapapis/

【讨论】:

    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2014-10-29
    相关资源
    最近更新 更多