如何在一个页面中使用Google Map API Direction Requests显示包含多条路线的完整旅程并全部显示?

时间:2013-03-10 04:17:29

标签: google-maps-api-3

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

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

        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);
            }           
          }
        });
    <%}%>

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

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

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

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

2 个答案:

答案 0 :(得分:1)

  • 您可以使用多个&#34;停留&#34;进行单个请求航点(向上 到8,加上原点和目的地)。

example of multiple routes combined

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

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

答案 1 :(得分:-1)

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