从给定位置检测最近的中转站

时间:2012-02-18 11:34:49

标签: google-maps google-maps-api-3 google-places-api gtfs

  

我需要在距离指定位置一定距离内获取附近的所有公共交通信息。公共交通的类型可以是公共汽车,火车等。

这就是我的意思:

如果我使用Google地图查询"Transit Stop near a Location (e.g. Bugis Street Singapore)",那么它会将我想要的所有附近的Transit Stop返回给我们。就像图中所示的那个。但是我需要它的API来获取这些细节。 (如图所示的公共汽车服务号,公交车站ID等)。但我找不到任何。

Bus Stop

这是我尝试过的

  1. 我尝试使用 Google Map Nearby Place API 搜索类型为transit_station, bus_station, train_station,etc..的地方。但他们都返回零结果。我只能使用此API搜索附近的景点,但不能搜索附近的公交。

  2. 我还检查了 Google Transit API ,但我只找到API来将转贴数据插入Google但不提取出来。我认为谷歌还没有宣传过境API。


  3. 其他信息

    我查看了网站Gothere.sg。困惑如何?因为他们能够探测到附近的交通。是否只是因为他们指定了方向" From-To"。

    I have read a pretty similar question on Detecting nearby transit。如果我们使用Google API,也许尚未可能。

      

    但对我来说没有什么是不可能的

    最后的度假胜地

    最后,我还要咨询提供商publictransport.sg。我厌倦了API。并发现它可以为我提供一些坐标的中转站。但它没有附近的API在Google Map上找到。

    目前我能想到的一个解决方法是在这种情况下使用提供程序是publictransport.sg,它为我提供了停止ID及其坐标。要做到这一点,首先,我必须使用Google GeoCoding API将位置名称转换为坐标,然后我必须创建我自己的附近计算,通过将搜索到的坐标与提供商所拥有的所有工作站坐标进行比较来查找附近的工作站。 / p>

    现在,我有可能,但非常痛苦: - )


    回到问题:

    有没有办法从指定位置检索所有公交站点数据(使用Google Maps API或任何其他API)?你是怎么做到的?


    感谢

    至少感谢阅读我冗长的问题。我感谢你的任何帮助。在此先感谢: - )

3 个答案:

答案 0 :(得分:28)

好吧,您可以使用places-API查找最近的中转站点,但对于给定位置,它对我来说没问题。

只需使用参数执行请求:

  • location(latlng - 给定位置的对象)
  • 半径(以米为单位搜索的半径)
  • types(有效类型数组,例如['bus_station','subway_station']

查看小提琴:http://jsfiddle.net/doktormolle/aZrvs/

如需检索更多详情(巴士服务号码,巴士站号码),我现在没有任何好处。

应该有办法,使用AJAX检索maps.google.com上的那些数据,因此有一个资源。但只要没有公共API来获取这些结果,使用此资源就不合法。

答案 1 :(得分:0)

在获取google-places-api详细信息后,您仍然可以列举所有的公交服务号码,公交车站ID(车站名称),如@ Dr.Molle:所述。

打开详细信息的网页['结果'] [' url'],然后XPath打开总线ID列表的字符串。

以下是一个围绕某个位置(纬度,经度)获取台北巴士信息的示例。更多详细实施请参见https://github.com/MikimotoH/gisTools/blob/master/google_place.py

places = get_web_json(
    'https://maps.googleapis.com/maps/api/place/nearbysearch/json?' +
    'key=%s&location=%f,%f' % (apikey, lat, lng) +
    '&rankby=distance&language=zh-TW&types=bus_station')
if places['status'] == 'OK':
    for result in places['results']:
        placeid = result['place_id']
        detail = get_web_json(
            'https://maps.googleapis.com/maps/api/place/details/' +
            'json?key=%s&placeid=%s' % (apikey, placeid) +
            '&language=zh-TW')
        station = detail['result']['name']
        loc = detail['result']['geometry']['location']
        buspage = get_webpage(detail['result']['url'])
        tree = lxml.html.document_fromstring(buspage)
        bus_elm = tree.xpath("/html/body/div[1]/div/div[4]/div[4]/div/div/div[2]/div/div[2]/div[1]/div[2]/div/div/div[2]/div/table/tr/td")[0]
        buses = list(filter(lambda s: len(s.strip()) > 0,
                            bus_elm.text_content().strip().split()))
        yield (station, float(loc['lat']), float(loc['lat']), buses)

答案 2 :(得分:-1)

在初始查询中添加& output = json(http://maps.google.com/maps?q=transit%20stop%20near%20New%20Bugis%20Street%20Singapore&output=json),不是获取此信息的合法途径?