我正在使用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);
    }
    });
}


希望这可以帮助。让我知道是否可以。

08-18 09:20