Мне нужно получить репрезентативный канадский почтовый индекс, основанный на названии города и провинции. Мой первоначальный подход заключался в использовании API геокодирования Google для преобразования города, провинции в [lat,lng]
обратный геокод, чтобы получить соответствующий адрес и извлечь из него почтовый индекс. Город и провинция берутся из формы, в которой используется автозаполнение Google Maps, поэтому я знаю, что они (по крайней мере, почти) всегда будут действительными. В некоторых тестах это работает нормально, но я быстро обнаружил, что наши фактические данные не работают: Снежное озеро, Манитоба.
https://maps.googleapis.com/maps/api/geocode/json?address=Snow+Lake%2C+Manitoba&key=MYKEY
В разделе геометрии я получаю:
location
lat 54.87856679999999
lng -100.0220321
location_type "APPROXIMATE"
Но всякий раз, когда я ищу это место (включая различные уровни точности), я получаю результаты, которые не включают почтовый индекс.
https://maps.googleapis.com/maps/api/geocode/json?latlng=54.8785668,-100.0220321&key=MYKEY.
Я также пробовал это с place_id
, который возвращается от разных вещей, но безуспешно. Странно то, что если я ищу Snow Lake, Manitoba на обычном сайте Google Maps, он определяет его и сообщает мне почтовый индекс R0B 1M0. Так почему их сайт дает хорошую информацию, а не API? Даже если я заменю местоположение в моем втором URL-адресе местоположением, которое Google Maps имеет в URL-адресе после моего поиска (54.8808471, -100.0274579), я все равно не получу почтовый индекс, как и я, если я использую адрес, который это дает для этого места (531 Lakeshore Drive).
Методом проб и ошибок (глядя на карту Google на предмет названий улиц) я обнаружил, что поиск 117 Balsam St. дает и почтовый индекс, и местоположение, которое я могу изменить геокодирование, чтобы получить почтовый индекс. Но в моих входящих данных нет названий или номеров улиц, только город и провинция, так что это не решение. Этот адрес действительно дает мне ROOFTOP для location_type, а не APPROXIMATE или RANGE_INTERPOLATED, которые я получаю для некоторых других.
Кто-нибудь знает, в чем дело? Есть ли надежный метод, который я могу использовать, чтобы получить то, что мне нужно, из этого API, или это будет просто промах?