web-dev-qa-db-ja.com

指定された場所から最も近い乗り継ぎ駅を検出します

特定の場所から一定の距離内にある近くの公共交通機関の情報をすべて取得する必要があります。公共交通機関の種類は、バス、電車などです。

ここに私が意味するものがあります:

Googleマップを使用して "場所の近くの乗換駅(例:ブギスストリートシンガポール)" を検索すると、近くの乗換駅がすべて返されます。写真のように。ただし、これらの詳細を取得するにはAPIが必要です。 (写真に示すように、バスのサービス番号、バス停IDなど)。しかし、何も見つかりませんでした。

Bus Stop

ここに私が試したものがあります

  1. Google Map Neighborhood Place APIを使用して transit_station、 bus_station、train_stationなど 。しかし、それらはすべてゼロの結果を返します。私はこのAPIを使用して、近くの目的地を検索することしかできませんでしたが、近くの乗換案内は検索できませんでした。

  2. また、Google Transit APIを確認しましたが、トランジットデータをGoogleに挿入するが、抽出しないAPIしか見つかりませんでしたでる。 GoogleはまだトランジットAPIを公表していないと思います。


追加情報

サイトを確認しました Gothere.sg 。混乱した方法は?近くの交通機関を検出できるからです。 「From-To」の方向を指定しているからです。

近くの交通機関の検出に関する非常によく似た質問を読んだ 。 Google APIを使用する場合、おそらくまだ不可能です。

しかし、私にとって不可能なことは何もない

最後の手段

最後の手段として、プロバイダーにも確認します publictransport.sg 。 APIをハックします。そして、それは私が何らかの座標で通過停止を提供できることを発見しました。ただし、Googleマップで見つかった近くのAPIがありません。

したがって、現時点で考えられる回避策の1つは、この場合にプロバイダーを使用することです publictransport.sg で、これによりストップIDとその座標が提供されます。これを行うには、まず、Google GeoCoding APIを使用して場所名をCoordinateに変換する必要があります。次に、検索されたCoordinateをプロバイダーが持つすべてのステーション座標と比較して、近くのステーションを見つけるための独自の近くの計算を作成する必要があります。

今、それは私にとっては可能ですが、非常に苦痛です:-)


質問に戻る:

特定の場所からすべての通過停止データを取得する方法はありますか(Google Maps APIまたは他のAPIを使用)。そして、どのようにそれをしましたか?


ありがとう

長い質問を読んでくれてありがとう。あなたからの助けに感謝します。前もって感謝します :-)

45
Yeo

ええと、places-APIを使用して最寄りの乗換駅を見つけることができます。指定された場所でうまく機能します。

パラメータを使用してリクエストを行うだけです:

  • 場所(latlng-指定された場所のオブジェクト)
  • radius(検索する半径(メートル単位))
  • types(有効なタイプの配列、例:['bus_station','subway_station']

フィドルをチェックアウト: http://jsfiddle.net/doktormolle/aZrvs/

さらに詳細な情報を取得するために(バスのサービス番号、バス停ID)、今のところ良いアイデアはありません。

方法があるはずです。maps.google.comのデータはAJAXを使用して取得されるため、リソースがあります。ただし、これらの結果を取得するパブリックAPIがない限り、このリソースを使用することはできません。

28
Dr.Molle

&output = jsonを最初のクエリ(http://maps.google.com/maps?q=transit%20stop%20near%20New%20Bugis%20Street%20Singapore&output=json)に追加することは、この情報を取得する正当な方法ではありませんか?

0
Eduard

@ Dr.Molle:が言ったように、google-places-apiの詳細を取得した後でも、バスサービス番号、バス停ID(駅名)のすべてを列挙できます。

Detail ['result'] ['url']のWebページを開き、バスIDリストの文字列をXPathします。

以下は、場所(緯度、経度)周辺の台北のバス情報を取得する例です。実装の詳細は 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)
0
MikimotoH