Осмысление результатов Google Geocoding API

#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». Затем выполнил простое разделение значения автозаполнения после выбора и использовал первую часть, вернув адрес улицы в целом (включая фабрику / квартиру / помещение и название улицы).

Эта работа дала мне результаты, которые хорошо подходят для того, что мне нужно. Удачи!