我正在使用谷歌地图方向服务创建一个angularjs指令。我正在做的是在我的控制器中执行getFunction并调整watch变量的范围。范围变量更改后,我使用calculateAndDisplayRoute函数更新我的路线。我正在尝试使用航点功能,但仍然对同一问题感到困惑。 Waypoints数组应该被指定为包含字段“location”和“stopover”的对象数组。我有一个google.maps.Place对象,其中包含从名为wypoints的数组中的地理编码中检索到的对象。我目前的路点数组为8.
我遇到的问题是航点不接受我真正感到困惑的位置部分中的LatLng字段。
以下是我的calculateandDisplayRoute函数:
function calculateAndDisplayRoute(directionsService, directionsDisplay, waypoints) {
var waypts = [];
for (var i = 0; i < waypoints.length; i++) {
waypts.push({
location: waypoints[i].geometry.location,
stopover: true
});
}
directionsService.route({
origin: waypts[0].location,
destination: waypts[waypts.length - 1].location,
waypoints: waypts,
travelMode: google.maps.TravelMode.DRIVING
}, function (response, status) {
if (status === google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
我一直得到的错误是我得到了Zero_results。
当我在这里时,我还有另一个问题,如果我删除所有航路点,我注意到directionService.route有时会给我Zero_result,给我在航点[0]和航路点的起点和终点[ 8],或者最后有时给我路点[0]和航路点[// 0-8之间的某个数字]的起点和终点。我假设这是因为这是同步调用?我不认为它应该重要,因为在函数运行之前定义了航点。
感谢anyhelp!
答案 0 :(得分:1)
更新了小提示,显示所提供点的路线 - http://jsfiddle.net/af6f7su0/140/
您获得零结果的原因是因为您提供的区域的路线不可用。 documentation说
“ZERO_RESULTS”表示地理编码成功但返回 没有结果。如果地理编码器是不存在的,则可能会发生这种情况 地址
我发现你提供的小提琴有重复的placeIds,这会导致Direction Service API返回零结果。我在更新的小提琴中删除了一个重复的placeIds。此外,提供的placeIds的位置几何在某种程度上显示在错误的位置,我修改了小提琴使用formatted_address
而不是location.geometry
。确保所有点落在陆地区域。此外,您已将所有点都包含为waypoints
属性,但只有中间点(第一个和最后一个除外)应该是此属性的有效值。这是更新的calculateAndDisplayRoute
函数:
function calculateAndDisplayRoute(directionsService, directionsDisplay, waypoints) {
var waypts = [];
var intermediatePoints = [];
for (var i = 0; i < waypoints.length; i++) {
waypts.push({
location: waypoints[i].formatted_address,
stopover: true
});
}
intermediatePoints = waypts.slice(1, -1);
directionsService.route({
origin: waypts[0].location,
destination: waypts[waypts.length - 1].location,
waypoints: intermediatePoints,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
}, function(response, status) {
if (status === google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
希望这会有所帮助。如果没有,请告诉我。