#parsing #field #google-geocoder #street-address
#синтаксический анализ #поле #google-geocoder #уличный адрес
Вопрос:
Я использую Google Geocoding API для обработки адресных данных произвольной формы и пытаюсь разобраться в результатах ( subpremise
, administrative_area_level_2
и т.д.). На данный момент меня интересуют только адреса в США, и я хотел бы отформатировать результаты в виде адреса улицы, города и кода штата. Код состояния кажется простым ( administrative_area_level_1
), но другие более расплывчаты. Является ли city locality
или sublocality
и тем, и другим или даже больше? Сам уличный адрес, похоже, может представлять собой любое количество комбинаций других полей.
В идеале я хотел бы просто взять formatted_address
, удалить код города, штата, почтового индекса и страны и сохранить то, что осталось, в качестве моего «уличного адреса». Существуют ли какие-либо рекомендации по обработке всех этих полей, по крайней мере, для большинства случаев (обычные адреса, адреса с номерами объектов и т.д.)?
Ответ №1:
- Уличный адрес — это
street_number
иroute
- Город — это
locality
- Состояние равно
administrative_area_level_1
- ZIP- это
postal_code
- Страна — это
country
Обратите внимание, что Google игнорирует любой номер устройства (например, ‘Apt 13A’). Вам придется добавить это обратно самостоятельно.
Запуск выборки ваших данных через геокодер и проверка результатов вручную должны подтвердить, что вы получаете то, что вам нужно.
Комментарии:
1. Ну, это не удаляет номер устройства, оно включает его (обычно в
subpremise
из того, что я видел). Я могу прогнать образец до конца и поразить большинство случаев, но я надеялся, что найдется какой-нибудь лучший способ получить все или почти все адреса правильно (даже если у них естьfloor
илиroom
илиpremise
).2. Исправьте, объект place, возвращаемый из API, действительно включает
subpremise
значение, которое содержит номер объекта (проверено с использованием австралийского адреса).
Ответ №2:
Документация, похоже, довольно четко описывает, что означают различные поля.
Вы не сказали, на каком языке вы работаете, но я думаю, что это поможет.
Комментарии:
1. Я работаю в Objective-C для приложения iOS, но мой вопрос касается самого API. В документации дается описание для каждого поля, но моя проблема заключается в том, чтобы преобразовать его обратно в стандартный формат адреса в США. Другими словами, похоже, что города США всегда будут отображаться в
locality
поле, но это все еще неоднозначно.street_address
не отображается в ответах на мои тестовые запросы, и нет объяснения, как создать действительный адрес улицы из оставшихся полей.
Ответ №3:
Я делаю обратное геокодирование на Nearlots.com на страницах поиска. По сути, пользователь помещает маркер где-нибудь на карте, и я печатаю адрес в окне поиска.
Я просто печатаю ‘formatted_address’ и отказываюсь, если его там нет. Это даст вам что-то вроде этого: «275-291 Bedford Ave, Бруклин, NY 11211, USA». Этого более чем достаточно — вы всегда можете вычеркнуть США в конце.
Комментарии:
1.
formatted_address
близко, но мне нужно разделить его на три отдельных поля: адрес улицы, город и код штата. Разрыв на запятых настолько близок, насколько я смог получить, но я предполагаю, что нет никакой гарантии в отношении форматаformatted_address
.
Ответ №4:
Я думаю, вам нужно использовать ‘route’ для адреса улицы.
Я использую тот же сервис, и, исходя из моего опыта, «маршрут» всегда эквивалентен уличному адресу, даже если местоположение на самом деле не является улицей!
Я думаю, вы уже определили, как вычислить название города. и т.д. Это тот же подход, что и я; взгляните на различные результаты API для нескольких разных местоположений и посмотрите, какое поле дает вам наиболее согласованные результаты.
Комментарии:
1.
route
не включает номер в начале адреса улицы, который находится вstreet_number
. И в моем тестировании номера единиц измерения и другие части адреса улицы попадают в другие поля, поэтомуroute
это не полный адрес.2. Извините, я имел в виду, что
route
содержит название улицы, исключая номер дома. Я обнаружил, что название улицы было в основном вroute
моей стране.
Ответ №5:
После многих часов работы над этим я не смог последовательно извлечь данные о квартире / комнате / дополнительном помещении. Наличие этой детали было важнее, чем возможность ее специального разделения, поэтому я обошел ее, используя это.
var componentForm = {
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
function fillInAddress(place) {
for (var component in componentForm) {
document.getElementById(component).value = '';
document.getElementById(component).disabled = false;
}
for (var i = 0; i < place.address_components.length; i ) {
var addressType = place.address_components[i].types[0];
if (componentForm[addressType]) {
var val = place.address_components[i][componentForm[addressType]];
document.getElementById(addressType).value = val;
}
}
var parts = $("#searchField").val().split(",");
$("#street_number").val(parts[0]);
}
Я извлек информацию из автозаполнения в обычном режиме, хотя пропустил «street_number» и «route». Затем выполнил простое разделение значения автозаполнения после выбора и использовал первую часть, вернув адрес улицы в целом (включая фабрику / квартиру / помещение и название улицы).
Эта работа дала мне результаты, которые хорошо подходят для того, что мне нужно. Удачи!