我正在使用Google Maps Directions服务创建angularjs指令。我正在做的是在控制器中执行getFunction并确定watch变量的范围。范围变量更改后,我将使用calculateAndDisplayRoute函数更新方向。我正在尝试使用航点功能,但在同一问题上一直陷入困境。应当将Waypoints数组指定为包含“位置”和“中途停留”字段的对象数组。我有一个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,让我在waypoint [0]和waypoint [8]处的起点和终点,或最后有时给我航点[0]和航点[// 0至8之间的某个数字]的起点和终点。我假设这是因为这是一个异步调用?我认为这并不重要,因为在功能运行之前就已经定义了航路点。
谢谢你的帮助!
最佳答案
更新的小提琴显示了提供的点的路线-http://jsfiddle.net/af6f7su0/140/
结果为零的原因是,您提供的区域的路线不可用。 documentation说
“ ZERO_RESULTS”表示地理编码成功但已返回
没有结果。如果地理编码器不存在,则可能会发生这种情况
地址
我发现您提供的小提琴有重复的placeId,这将导致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);
}
});
}
希望这可以帮助。让我知道是否可以。