46

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

这就是我的意思:

如果我使用谷歌地图查询“某个位置附近的中转站(例如新加坡武吉士街)”,那么它将返回我们所有我想要的附近中转站。就像图片中显示的那样。但我需要它的 API 来获取这些细节。(如公交服务号、公交站牌号等如图)。但我找不到任何东西。

巴士车站

这是我尝试过的

  1. 我曾尝试使用Google Map Nearby Place API 搜索类型为transit_station、bus_station、train_station 等的地方。但他们都返回零结果。我只能使用这个 API 来搜索 Nearby Place of Interest,但不能搜索附近的公交。

  2. 我也检查过Google Transit API,但我只发现 API 可以将过境数据插入 Google,但不能将其提取出来。我认为谷歌还没有公布过境 API。


附加信息

我检查了网站Gothere.sg。和困惑如何?因为他们能够检测到附近的过境。仅仅是因为他们指定了“From-To”方向。

我已经阅读了关于 Detecting near transit 的一个非常相似的问题。如果我们使用 Google API,也许还不可能。

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

最后一招

作为最后的手段,我还与提供商publictransport.sg 联系。我对 API 进行了修改。并发现它可以为我提供一些坐标的中转站。但它缺少在 Google Map 上找到的附近 API。

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

现在,这对我来说是可能的,但非常痛苦:-)


回到问题:

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


谢谢

至少感谢您阅读我冗长的问题。我很感激你的任何帮助。提前致谢 :-)

4

3 回答 3

28

好吧,您可以使用places-API 来查找最近的公交站点,对于给定的位置,它对我来说效果很好。

只需使用参数进行请求:

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

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

为了检索更多详细信息(巴士服务编号,巴士站 ID),我现在没有任何好主意。

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

于 2012-02-19T14:00:16.517 回答
0

正如@Dr.Molle:所说,在获取google-places-api详细信息后,您仍然可以枚举所有巴士服务号码、巴士站ID(车站名称)。

打开detail['result']['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)
于 2014-08-11T04:30:12.953 回答
0

将 &output=json 添加到您的初始查询 (http://maps.google.com/maps?q=transit%20stop%20near%20New%20Bugis%20Street%20Singapore&output=json) 不是获取此信息的合法方式吗?

于 2012-09-16T21:24:42.047 回答