Данный:
- Город
- Геоточка
Вопрос: определить, принадлежит ли данная геоточка городу.
Мое текущее решение тривиально:
- Выполните обратное геокодирование (я использую пакет python googlemaps). Это дает словарь результатов.
- Изучите результаты ['Placemark'] [0] ['AddressDetails'] в поисках ключевого слова LocalityName.
- Данная географическая точка считается внутри города, если найденное LocalityName совпадает с названием города.
Все идет нормально. Даже если это не лучший алгоритм, он, безусловно, самый простой. Однако есть проблемы. Возьмем, к примеру:
- Абердин, Великобритания.
- широта = 57,14369, lng = -2,22314
GoogleMaps.reverse_geocode(57.14369, -2.22314)
дает следующий результат:
{ u'Placemark': [ { u'AddressDetails': { u'Accuracy': 6,
u'Country': { u'CountryName': u'UK',
u'CountryNameCode': u'GB',
u'Thoroughfare': { u'ThoroughfareName': u'A944'}}},
u'ExtendedData': { u'LatLonBox': { u'east': -2.2200414,
u'north': 57.1480762,
u'south': 57.1453783,
u'west': -2.2239393}},
u'Point': { u'coordinates': [-2.221984, 57.1467683, 0]},
u'address': u'A944, Aberdeen, Aberdeen City AB15, UK',
u'id': u'p1'}],
u'_id': 7635459717214061L,
u'loc': [-2.2231, 57.1437]}
Проблема в том, что форматированный адрес (A944, Aberdeen, Aberdeen City AB15, UK
) не разбит на детали - возвращенный AddressDetails
по сути бесполезен.
Итак, похоже, что нужно разобрать возвращенный address
вручную, что в общем случае кажется настоящим PITA.
Я хотел бы знать, как другие люди решают эту проблему. Использование API веб-сервисов Google Maps не является обязательным.
Спасибо.