从 Google API () 中检索距离和旅行时间值时出错
error retrieving distance and travel time values from a Google API ()
我不确定接下来要采取什么方法,目前我有下面的代码,它计算任意 2 个给定位置之间的距离(以英里为单位)(使用经度和纬度),但是它是一条直线,道路不是' t straight...所以我想做的是像 google 地图那样计算距离,例如这里有一些随机坐标:
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 或大约...如果我在 google 中执行此操作地图:
值介于 77.1 英里 和 76.5 英里
之间
问题
我的 BELOW 函数部分用于获取旅行时间和距离,但是它在底部的警告框中随机 returns“UNDEFINED
”,或者有此错误消息
"Object doesn't support this action"
使用 console.log 时 returns 此消息:
"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
请有人指出我在这里做错了什么 done/am 因为我非常接近获得我需要的 2 个值
您可以在此处找到使用 Bing Maps REST 服务计算到 JavaScript 中位置之间的路线的示例:https://msdn.microsoft.com/en-us/library/gg427607.aspx
我建议添加 routeAttributes 参数并将其设置为 routeSummariesOnly。这将使响应非常小。 https://msdn.microsoft.com/en-us/library/ff701717.aspx
或者,如果您正在使用 JavaScript 并想要加载地图,请使用 Bing 地图 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/
我不确定接下来要采取什么方法,目前我有下面的代码,它计算任意 2 个给定位置之间的距离(以英里为单位)(使用经度和纬度),但是它是一条直线,道路不是' t straight...所以我想做的是像 google 地图那样计算距离,例如这里有一些随机坐标:
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 或大约...如果我在 google 中执行此操作地图:
值介于 77.1 英里 和 76.5 英里
之间问题
我的 BELOW 函数部分用于获取旅行时间和距离,但是它在底部的警告框中随机 returns“UNDEFINED
”,或者有此错误消息
"Object doesn't support this action"
使用 console.log 时 returns 此消息:
"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
请有人指出我在这里做错了什么 done/am 因为我非常接近获得我需要的 2 个值
您可以在此处找到使用 Bing Maps REST 服务计算到 JavaScript 中位置之间的路线的示例:https://msdn.microsoft.com/en-us/library/gg427607.aspx
我建议添加 routeAttributes 参数并将其设置为 routeSummariesOnly。这将使响应非常小。 https://msdn.microsoft.com/en-us/library/ff701717.aspx
或者,如果您正在使用 JavaScript 并想要加载地图,请使用 Bing 地图 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/