Directionservice Route Waypoints Literal

时间:2016-01-22 06:34:56

标签: javascript angularjs google-maps google-maps-api-3

我正在使用谷歌地图方向服务创建一个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!

1 个答案:

答案 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);
    }
    });
}

希望这会有所帮助。如果没有,请告诉我。