2

好的,事情就是这样。我试图通过显示其中的每条路线来显示包含访问多个位置的整个行程。例如:我可能从纽约出发,然后去波士顿,然后是洛杉矶,然后是旧金山,最后回到纽约。

这是包含多个请求的循环并按顺序显示路由的代码的一部分。

        for (int i=0; i<all; ++i) {
        System.out.println(places.get(pass.charAt(i)-48)+"to"+places.get(pass.charAt(i+1)-48));
    %>
        var start = "<%=places.get(pass.charAt(i)-48) %>";
        var end = "<%=places.get(pass.charAt(i+1)-48) %>";
        var request = {
          origin: start,
          destination: end,
          provideRouteAlternatives: false,
          travelMode: google.maps.DirectionsTravelMode.TRANSIT
        };
        directionsService.route(request, function(response, status) {
          if (status == google.maps.DirectionsStatus.OK) {
            if (first == 1) {
                first = 0;
                responseAll = response;
                responseAll.routes[<%=i%>] = response.routes[0];
            }else {
                responseAll.routes[<%=i%>] = response.routes[0];
                directionsDisplay.setDirections(responseAll);
            }           
          }
        });
    <%}%>

问题是它只是显示了我请求的前三个路由。在这种情况下,纽约到波士顿、波士顿到洛杉矶、洛杉矶到旧金山的路线。我想可能是页面最多可以显示三个路由。所以我通过将代码更改为这个来测试这个想法(它用 5 个路由初始化 DirectionResponse)

                if (first == 1) {
                first = 0;
                responseAll = response;
                for (var a = 0; a!=5;++a) {
                    responseAll.routes[a] = response.routes[0];
                }

然后我发现它可以同时显示超过 5 条路线(尽管在这个测试用例中它们都是相同的路线)。所以事实证明它忽略了第三个请求之后的其他请求。

所以这是我的问题:无论如何要修复它以让它回答所有请求,或者说三个以上的请求?

4

2 回答 2

1
  • 您可以使用多个“中途停留”航点(最多 8 个,加上起点和目的地)发出单个请求。

组合多条路线的示例

  • 您没有检查返回状态的值,您的代码当前的编写方式,如果方向请求失败(状态!= OK),您不会得到通知。要么检查调试器中的状态值,要么尝试添加一个检查,让您知道它失败的原因。这样的事情可能会有所帮助(未经测试):

    directionsService.route(request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        if (first == 1) {
            first = 0;
            responseAll = response;
            responseAll.routes[<%=i%>] = response.routes[0];
        }else {
            responseAll.routes[<%=i%>] = response.routes[0];
            directionsDisplay.setDirections(responseAll);
        }           
      } else { 
        alert("Directions request failed, status = "+status);
      }
    });
    
于 2013-03-10T06:45:05.387 回答
-1

我认为 KML 在与 API 混合时可能对您有所帮助。

于 2013-03-10T06:41:01.140 回答