2012-11-14 164 views
1

这是我的代码:如何在Google地图上绘制铁路路线?

function trainRoute(startPoint, endPoint) { 
    var polyline = new google.maps.Polyline({ strokeColor: '#af1a1a', strokeWeight: 2 }); 
    var directionsService = new google.maps.DirectionsService(); 
    var directionsDisplay = new google.maps.DirectionsRenderer({ polylineOptions: polyline, suppressMarkers: true }); 
    directionsDisplay.setMap(map); 

    var request = { 
     origin: startPoint, 
     destination: endPoint, 
     travelMode: google.maps.DirectionsTravelMode.TRANSIT 
    }; 

    directionsService.route(request, function (response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay.setDirections(response); 

      var legs = response.routes[0].legs; 
      for (i = 0; i < legs.length; i++) { 
       var steps = legs[i].steps; 
       for (j = 0; j < steps.length; j++) { 
        var nextSegment = steps[j].path; 
        for (k = 0; k < nextSegment.length; k++) { 
         polyline.getPath().push(nextSegment[k]); 
         //bounds.extend(nextSegment[k]); 
        } 
       } 
      } 
     } 
    }); 
} 

使用travelMode: google.maps.DirectionsTravelMode.WALKING我看行,但它不是我要找的。我想我需要.TRANSIT以及更多的选项,比如VehicleType.RAIL

我不知道该怎么做!我尝试过在Google上搜索,但找不到任何东西!


我觉得这是做的正确方法:

var request = { 
    origin: puntoPartenza, 
    destination: puntoArrivo, 
    travelMode: google.maps.TravelMode.TRANSIT 
}; 

directionsService.route(request, function (response, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(response); 

     var legs = response.routes[0].legs; 
     for (i = 0; i < legs.length; i++) { 
      var steps = legs[i].steps; 
      for (j = 0; j < steps.length; j++) { 
       var transitMode = steps[j].travel_mode; 

       if (transitMode == "TRANSIT") { 
        var vehicle = steps[j].transit.line.vehicle.type; 
        if (vehicle == "HEAVY_RAIL") { 
         var nextSegment = steps[j].path; 

         for (k = 0; k < nextSegment.length; k++) { 
          polyline.getPath().push(nextSegment[k]); 
         }        
        } 
       } 


      } 
     } 
    } 
}); 

但:

1)为什么只绘制路线的一部分吗? 2)在DirectionsStatus的返回JSON对象上,还有关于步行和/或TRANSIT的信息。那么travelMode: google.maps.DirectionsTravelMode.TRANSIT的含义是什么?!?!?

,但我得到TypeError: google.maps.TransitVehicle is undefined

+0

你可能会在导航服务在这里找到一些有用的例子:https://developers.google.com/maps/documentation/javascript/directions# TravelModes虽然我想知道API中的TRANSIT支持是否可以指定到RAIL级别(而不是公交车或“索道车”) - 他们最近刚刚为API添加了Transit Directions支持(来源:http:// googlegeodevelopers .blogspot.com.au/2012/06/public-transit-routing-and-layer-now.html) – roy

+0

有没有RAIL或BUS的例子:( – markzzz

+0

您可能需要重新思考Google Maps API如何让您点击它的公共交通层你有文档证明它在Transit层上提供了这些选项?我的猜测是,它目前可能不会。对于上下文来说,这是一个解释(后来)为什么他们为开发人员提供Transit路线的这种困难(而不是步行或驾驶,而不需要世界各地大量公共交通机构许可数据):http ://code.google.com/p/gmaps-api-issues/issues/detail?id = 713#c76 – roy

回答

2

你不能只是弥补语法和期望它的工作Transit VehicleType不包括铁路,但TransitVehicle,没有车辆性能。

交通车辆没有财产车辆。看看“类型”属性。

+0

它是一样的!我犯了同样的错误!我在错误的地方做了一些属性,但谷歌API在这里根本不清楚:( – markzzz

+0

我的意思是:vehicle:google.maps.VehicleType.RAIL失败。我想我需要把transitLine选项放在其他地方,对不对?任何想法? – markzzz

+0

我刚刚意识到信息存储在DirectionsResult对象上,所以我需要绘制折线,因为这个具体!试过一些像“steps [j] .transit.line.vehicle.type;'这样的东西,但是不清楚如何用这个过滤信息:O – markzzz

1

你可以试试这个,它的工作对我来说,

var directionsServiceRequest = { 
        destination: {lat: 39.79, lng: -86.14}, 
        origin: {lat: 41.85, lng: -87.65}, 
        travelMode: google.maps.TravelMode.TRANSIT, 
        transitOptions: {modes:['TRAIN']} 
      };