it-swarm.com.ru

Определить ближайшую транзитную остановку из заданного места

Мне нужно получить всю информацию о близлежащем общественном транспорте в пределах определенного расстояния от данного места. Тип общественного транспорта: автобус, поезд и т.д.

Вот что я имел в виду:

Если я использую Google Map для запроса «Транзитная остановка возле местоположения (например, Bugis Street Singapore)» , то он вернет нам все ближайшие транзитные остановки, которые я хочу. Как показано на рисунке. Но мне нужен его API, чтобы получить эти детали. (например, номер автобуса №, идентификатор автобусной остановки и т. д., как показано на рисунке). Но я не смог найти ни одного.

Bus Stop

Вот что я пробовал

  1. Я пытался использовать GOOGLE MAP NEARBY PLACE API для поиска места с типом transition_station, bus_station, train_station и т.д. . Но все они возвращают нулевой результат. Я мог использовать этот API только для поиска ближайшей достопримечательности, но не для близлежащего транзита.

  2. Я также проверил GOOGLE TRANSIT API, но нашел только API для вставки транзитных данных в Google, но не для их извлечения. Я думаю, что Google еще не публиковал API транзита.


Дополнительная информация

Я должен проверить сайт Gothere.sg . А как запутался? потому что они в состоянии обнаружить близлежащий транзит. Это только потому, что они указывают направление «От-К».

Я прочитал довольно похожий вопрос по обнаружению близлежащего транзита . Возможно, это не пока возможно, если мы используем API Google. 

Но нет ничего невозможного для меня

Крайнее средство

В качестве последнего средства я также уточняю у поставщика publictransport.sg . Я взломать с API. И обнаружил, что он может дать мне транзитную остановку с некоторой координатой. Но ему не хватает соседнего API, который можно найти на Google Map. 

Таким образом, одним из обходных путей, о котором я мог подумать в данный момент, является использование поставщика в этом случае: publictransport.sg , который дает мне идентификатор остановки и ее координату. Чтобы сделать это, во-первых, мне нужно перевести название местоположения с помощью Google GeoCoding API в Coordinate, затем я должен создать свой собственный расчет поблизости, чтобы найти ближайшую станцию, сравнивая искомую координату со всеми координатами станции, которые есть у провайдера.

Теперь это возможно для меня, но очень больно :-)


Вернуться к вопросу:

Есть ли способ получить все данные транзитной остановки из заданного местоположения (используя Google Maps API или любой другой API)? и как ты это сделал?


Спасибо

По крайней мере, спасибо за чтение моего длинного вопроса. Я ценю любую помощь от вас. Заранее спасибо :-)

44
Yeo

Ну, вы можете использовать API-адреса мест для поиска ближайших транзитных остановок, у меня это прекрасно работает для данного местоположения.

Просто сделайте запрос с параметрами:

  • location (latlng- объект данного местоположения)
  • радиус (радиус для поиска в метрах)
  • типы (массив допустимых типов, например, ['bus_station','subway_station'])

Оформить скрипку: http://jsfiddle.net/doktormolle/aZrvs/

Для получения более подробной информации (автобусное сообщение №, идентификатор автобусной остановки) у меня сейчас нет хорошей идеи. 

Должен быть способ, чтобы эти данные на maps.google.com были получены с использованием AJAX, поэтому существует ресурс. Но пока нет общедоступного API для получения этих результатов, использование этого ресурса не будет законным.

28
Dr.Molle

Вы можете по-прежнему перечислять все сервисный номер автобуса, идентификатор автобусной остановки (названия станций) после получения сведений о google-place-api, как сказал @ Dr.Molle :. 

Откройте веб-страницу подробностей ['result'] ['url'], а затем 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