web-dev-qa-db-fra.com

Détecter l'arrêt de transit le plus proche de l'emplacement donné

Je dois obtenir toutes les informations de transport en commun à proximité à une certaine distance d'un lieu donné. Le type de transport en commun peut être un bus, un train, etc.

Voici ce que je voulais dire:

Si j'utilise Google Map pour interroger "Transit Stop près d'un lieu (par exemple, Bugis Street Singapore)" , il nous renverra tous les arrêts de transit à proximité que je souhaite. Comme celui montré dans l'image. Mais j'ai besoin de son API pour obtenir ces détails. (comme le numéro de service du bus, l’identifiant de l’arrêt du bus, etc. comme indiqué sur la photo). Mais je n'en ai trouvé aucun.

Bus Stop

Voici ce que j'ai essayé

  1. J'ai essayé d'utiliser l'API Google Map Nearby Place pour rechercher un lieu avec le type de transit_station, bus_station, train_station, etc. . Mais ils retournent tous zéro résultat. Je ne pouvais utiliser cette API que pour rechercher un lieu d'intérêt à proximité, mais pas le transport en commun à proximité.

  2. J'ai également vérifié Google Transit API, mais je n'ai trouvé API que pour insérer des données de transit dans Google, mais pas pour les extraire. Je pense que Google n'a pas encore annoncé l'API de transit.


Information additionnelle

J'ai vérifier le site Gothere.sg . Et confus comment? parce qu'ils sont capables de détecter le transit à proximité. Est-ce seulement parce qu'ils spécifient la direction "From-To".

J'ai lu une question assez similaire sur Détecter le transit à proximité . Ce n'est peut-être pas encore possible si nous utilisons les API de Google. 

Mais rien n'est impossible pour moi

Dernier recours

En dernier recours, je vérifie également auprès du fournisseur, publictransport.sg . Je pirate avec l'API. Et j'ai découvert que cela pouvait me fournir un arrêt de transport en commun avec quelques coordonnées. Mais il manque une API à proximité qui se trouve sur Google Map. 

Une solution de contournement à laquelle je pensais pour le moment consiste à utiliser le fournisseur dans ce cas-ci était publictransport.sg , qui me donne l’identifiant de l’arrêt et ses coordonnées. Pour ce faire, je dois d'abord traduire le nom de l'emplacement à l'aide de l'API Google GeoCoding en coordonnées, puis créer mon propre calcul à proximité pour trouver la station la plus proche en comparant la coordonnée recherchée à toutes les coordonnées de la station dont dispose le fournisseur.

Maintenant, c'est possible pour moi, mais très pénible :-)


Retour à la question:

Existe-t-il un moyen de récupérer toutes les données des arrêts de transport en commun à partir d'un emplacement donné (à l'aide de l'API Google Maps ou de toute autre API)? et comment as-tu fait ça?


Merci

Au moins merci d'avoir lu ma longue question. J'apprécie toute aide de votre part. Merci d'avance :-)

44
Yeo

Eh bien, vous pouvez utiliser l’API-lieux pour trouver les arrêts de transport en commun les plus proches, cela fonctionne bien pour moi pour l’emplacement donné.

Il suffit de faire une demande avec les paramètres:

  • location (latlng- object de la localisation donnée)
  • rayon (rayon à rechercher en mètres)
  • types (tableau de types valides, par exemple ['bus_station','subway_station'])

Commander le violon: http://jsfiddle.net/doktormolle/aZrvs/

Pour obtenir plus de détails (numéro de bus, identifiant de l'arrêt de bus), je n'ai pas encore de bonne idée. 

Il devrait y avoir un moyen, les données sur maps.google.com seront récupérées en utilisant AJAX, il y a donc une ressource. Mais tant qu'il n'y a pas d'API publique pour récupérer ces résultats, il ne serait pas légal d'utiliser cette ressource.

28
Dr.Molle

Vous pouvez toujours énumérer tous les numéros de service de bus, ID d’arrêt de bus (noms de gare) après avoir obtenu les détails de google-places-api, comme @ Dr.Molle: dit. 

Ouvrez la page Web de détail ['result'] ['url'], puis XPath la chaîne de la liste d'identifiants de bus. 

Vous trouverez ci-dessous un exemple pour obtenir des informations sur les bus de Taipei autour d’un lieu (latitude, longitude). Plus de détails sur la mise en œuvre voir 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