wake-up-neo.net

Ermitteln Sie die nächstgelegene Haltestelle an der angegebenen Stelle

Ich muss alle Informationen zum öffentlichen Nahverkehr in einer bestimmten Entfernung von einem bestimmten Ort abrufen. Die Art der öffentlichen Verkehrsmittel kann entweder Bus, Zug usw. sein.

Das habe ich gemeint:

Wenn ich Google Map zum Abfragen von "Transit Stop in der Nähe eines Standorts (z. B. Bugis Street Singapore)" verwende, dann werden alle Transit Stop in der Nähe zurückgegeben, die ich möchte. Wie der auf dem Bild. Aber ich brauche seine API, um diese Details herauszufinden. (wie Bus-Nr., ID der Bushaltestelle usw., wie in der Abbildung gezeigt). Aber ich konnte keine finden.

Bus Stop

Hier ist was ich probiert habe

  1. Ich habe versucht, mit der Google Map Nearby Place-API nach einem Ort mit dem Typ transit_station, bus_station, train_station usw. zu suchen. . Aber alle geben null Ergebnis zurück. Ich konnte diese API nur für die Suche nach in der Nähe gelegenen Orten von Interesse verwenden, jedoch nicht in der Nähe des Transits.

  2. Ich habe auch Google Transit API überprüft, aber ich habe nur eine API gefunden, um Transitdaten in Google einzufügen, aber nicht, um sie zu extrahieren. Ich glaube, Google hat die Transit-API noch nicht veröffentlicht.


Zusätzliche Information

Ich habe die Website Gothere.sg überprüft. Und verwirrt wie? weil sie in der Lage sind, den nahe gelegenen Transit zu erkennen. Ist es nur, weil sie die Richtung "Von-Bis" angeben.

Ich habe eine ziemlich ähnliche Frage zum Erkennen von Transit in der Nähe gelesen . Möglicherweise ist es nicht noch möglich, wenn wir Google-APIs verwenden. 

Nichts ist mir unmöglich

Letzter Ausweg

Als letzter Ausweg überprüfe ich auch den Anbieter publictransport.sg . Ich hacke mit der API herum. Und fand heraus, dass es mir mit einem Koordinatensender einen Transitstopp geben kann. Es fehlt jedoch eine nahegelegene API, die in Google Map gefunden wurde. 

Ein Workaround, an den ich im Moment denken könnte, ist die Verwendung des Providers in diesem Fall publictransport.sg , das mir die Stop-ID und ihre Koordinate gibt. Dazu muss ich zunächst den Ortsnamen mithilfe der Google GeoCoding-API in Coordinate übersetzen. Anschließend muss ich eine eigene nahegelegene Berechnung erstellen, um die nahegelegene Station zu finden, indem die gesuchte Koordinate mit allen Stationskoordinaten des Anbieters verglichen wird.

Nun ist es mir möglich, aber sehr schmerzhaft :-)


Zurück zur Frage:

Gibt es eine Möglichkeit, alle Transit-Stop-Daten von einem bestimmten Ort abzurufen (entweder mit Google Maps-API oder einer anderen API)? und wie hast du das gemacht?


Vielen Dank

Vielen Dank, dass Sie meine lange Frage gelesen haben. Ich freue mich über jede Hilfe von Ihnen. Danke im Voraus :-)

44
Yeo

Nun, Sie können die Places-API verwenden, um die nächstgelegenen Haltestellen zu finden. Das funktioniert für mich für den angegebenen Ort.

Mach einfach eine Anfrage mit den Parametern:

  • location (latlng- Objekt des angegebenen Ortes)
  • radius (zu suchender Radius in Metern)
  • types (Array gültiger Typen, z. B. ['bus_station','subway_station'])

Die Geige auschecken: http://jsfiddle.net/doktormolle/aZrvs/

Für das Abrufen weiterer Details (Buslinie Nein, Haltestelle ID) habe ich momentan keine gute Idee. 

Es sollte eine Möglichkeit geben, diese Daten auf maps.google.com mithilfe von AJAX abzurufen. Es gibt also eine Ressourcenquelle. Solange jedoch keine öffentliche API zum Abrufen dieser Ergebnisse vorhanden ist, wäre es nicht legal, diese Ressource zu verwenden.

28
Dr.Molle

Ist das Hinzufügen von & output = json zu Ihrer ersten Abfrage (http://maps.google.com/maps?q=transit%20stop%20near%20New%20Bugis%20Street%20Singapore&output=json) kein legaler Weg, diese Informationen abzurufen?

0
Eduard

Sie können immer noch alle Bus-Service-Nummern, Bus-IDs (Stationsnamen) auflisten, nachdem Sie die Details zu google-places-api erhalten haben, wie @ Dr.Molle: sagte. 

Öffnen Sie die Webseite mit detail ['result'] ['url'] und dann XPath die Zeichenfolge der Bus-ID-Liste. 

Im Folgenden finden Sie ein Beispiel, um die Businformationen von Taipei um einen Ort (Breitengrad, Längengrad) zu erhalten. Weitere Informationen zur Implementierung finden Sie unter 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