检测距离给定位置最近的公交站点

我需要从一个给定的位置一定距离内获得所有附近的公共交通信息。 公共交通的types可以是巴士,火车等。

这是我的意思:

如果我使用Google地图查询“位置附近的转机站(例如武吉士街新加坡)” ,那么它会将我想要的所有附近的转机站返回给我们。 就像图中所示的一样。 但我需要它的API来获取这些细节。 (如图中所示的巴士服务号,巴士站ID等)。 但是我找不到任何东西。

公交车站

这是我试过的

  1. 我曾尝试使用Google Map Nearby Place API来searchtransit_station,bus_station,train_station等types的地点 。 但他们都返回零结果。 我只能使用此API来search附近的景点,但不能在附近过境。

  2. 我也检查了Google Transit API ,但是我只findAPI来将转接数据插入Google,但是不能将其提取出来。 我认为Google还没有公布过境API。


附加信息

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

我读了一个非常类似的问题检测附近的过境 。 如果我们使用Google API,也许不可能。

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

最后一招

作为最后的手段,我也检查提供商, publictransport.sg 。 我使用API​​进行破解。 发现它可以为我提供一些坐标的中转站。 但它缺less在Google地图上find的附近的API。

因此,我现在可以想到的一个解决方法是在这种情况下使用提供商publictransport.sg ,它给了我停止ID和它的坐标。 为此,首先,我必须使用Google GeoCoding API将位置名称转换为坐标,然后通过将search到的坐标与提供者所有的站点坐标进行比较来创build我自己的附近计算来查找附近的站点。

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


回到问题:

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


谢谢

至less感谢您阅读我冗长的问题。 我感谢你的帮助。 提前致谢 :-)

那么,你可以使用API​​的地方find最近的公交站点,对于我给定的位置,它工作正常。

只要用参数做一个请求:

  • 位置( latlng – 给定位置的对象)
  • 半径(以米为单位search的半径)
  • types(有效types的数组,例如['bus_station','subway_station']

结帐小提琴: http : //jsfiddle.net/doktormolle/aZrvs/

为了检索更多的细节(巴士服务号码,巴士站ID),我现在没有什么好主意。

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

在获得google-places-api详细信息之后,您仍然可以列举所有巴士服务号码,巴士站ID(站名),如@ Dr.Molle所说:

打开详细信息['result'] ['url']的网页,然后XPath显示总线ID列表的string。

以下是一个例子,让台北的巴士信息围绕一个位置(经度,纬度)。 更详细的实现请参阅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)