2012-08-29 154 views
3

我想要获得在过境路线上行驶的距离 - 特别是旧金山MUNI,但标准NextBus,GTFS, and Google Maps API似乎是通用的。我很喜欢使用这些API中的任何一个,但我不知道如何解决这个问题。GTFS/NextBus /谷歌地图 - 旅行距离

最简单的办法 - 让谷歌地图(在使用web服务,但也存在的JavaScript API):

http://maps.googleapis.com/maps/api/directions/json?origin=37.7954199,-122.397&destination=37.7873299,-122.44691&sensor=false&mode=transit&departure_time=1348109609&alternatives=true

这个JSON包括行驶距离,但有两个问题:

  1. 谷歌不允许你,除非你显示在地图上,我不想这样做使用此数据
  2. 我需要确保返回的距离是正确的路线/线路,因为它可以/将提供多个路线选项。这可能是可行的,但需要更多的逻辑。

编辑:(使用JavaScript API或provideRouteAlternatives: true)只返回最多3条航线,其中在这里经常SF不包括我在寻找(其他运输机构的路线采用alternatives=true,多线路在同一条路线上等)。所以这不是一个很好的选择。

NextBus:

例如路由配置:

http://webservices.nextbus.com/service/publicXMLFeed?command=routeConfig&a=sf-muni&r=1

每个站的坐标给出,但在连接这些点是不一样所走的路线 - 它会削减角落等,我需要这是准确的。实际采取的路线在<path>/<point>下给出,但我没有看到停止和路径坐标之间有任何明显的相关性。另外,NextBus在他们的文档(p.10附近的底部)中说,你不应该连接<path>段之间的点,它们只能用于在地图上绘图并且可以重叠。

GTFS:

的GTFS数据也分开停止和 “形状” 坐标(像NextBus路径)。不幸的是,NextBus和GTFS之间的同一站点(舍入)的坐标略有不同,尽管站点ID /标签是相同的。另外,数据文件的格式为兆字节,我需要将其用于移动应用程序。我想我可以把所有的数据放在一个数据库中,然后查询它们,但是这仍然导致如何将停靠点和形状关联起来。 shapes.txt文件中的“shapes_distance_traveled”列特别有用。尽管如此,MUNI选择离开stop_times.txt的可选“shapes_distance_traveled”字段。

任何意见,将不胜感激,我明白这似乎是一个史诗般的任务,以获得一个简单的价值。也许我会只是扔一个地图合法地使用距离:)

回答

0

你已经明确地完成了你的研究,(+1),正如你所说的,简单的方法是问谷歌。如果它值得您购买,那么您可能需要查看purchasing a business licence以使用Google Maps API,并与他们协商显示地图的要求。这是我可以用Google API考虑的唯一合法方式。或者,您可以尝试用TIGER data set的数据构建您自己的路由引擎,该数据可以从美国人口普查局免费获得,但正如您所说的那样,它可能看起来像是一个史诗般的任务。 :-)

1

除了使用谷歌地图,我还会研究OpenStreetMap的非设计许可。有多个可以使用OSM数据的 routing engines。就个人而言,我会在PostGIS或SQLite中使用路由,但根据您的技能,您可能会选择另一个。

+0

感谢OpenStreetMap的提示 - 乍看之下,公交覆盖似乎非常有限(至少在SF中),但我会检查一下。 – carillonator