Вопрос

Я использую Google geocoding api в своем приложении, но мне трудно надежно проанализировать возвращаемую информацию об адресе.Я надеюсь, что у кого-нибудь есть библиотека или способ анализа информации, чтобы мне не приходилось писать это самостоятельно и освещать каждый случай.

Я использую json api и могу достаточно легко извлечь адресную строку и координаты и сохранить их в базе данных, но проблема заключается в извлечении другой адресной информации надежным способом, чтобы я мог ее сохранить.

Я ознакомился со спецификацией структурированного адреса XAL, которую Google использует для геокодированных данных, но моя проблема заключается в том, что она может обслуживать любой тип адреса в любой стране, что затрудняет анализ результата.

Что-то такое простое, как почтовый индекс, может быть вложено довольно глубоко в любую комбинацию родительских тегов.даже внутри одной страны способ отображения дерева может варьироваться, что затрудняет его анализ, чем ожидалось.

По иронии судьбы, моя конечная цель - сохранить его в дереве (например, rails acts_as_tree или аналогичном) в моей базе данных, чтобы пользователи могли легко находить элементы позже.например, нажмите на страну, штат, затем регион, город, затем пригород и т. Д

Я работаю в rails

Это было полезно?

Решение

Существует гем и плагин, который инкапсулирует все это для вас. Он называется GeoKit .

Можно заставить его использовать Google или несколько других поставщиков услуг геокодирования. Если в ваших моделях есть подходящие поля, он также может выполнять расчеты расстояний (по-настоящему изящная математика для этого делается в SQL).

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

Другие советы

Я делал это пару раз.Их (Google) пример кода работает, но является хрупким, а данные геокодирования, которые вы получаете от Google, в лучшем случае неполны, а в худшем - противоречивы.

В любом случае.Все геокодеры отстой, но, по крайней мере, геокодер Google бесплатный и отстой меньше, чем другие..не слишком ли много требовать последовательности?Вздох.Попробуйте следующее;вы передаете ему метку (обратите внимание, что метод getLocations AJAX может возвращать несколько значений), и это нормализует результат.Если вы хотите пофантазировать, используйте поле placemark.address - иногда оно будет содержать больше информации, чем отдельные поля.Обычно он будет содержать только текст, который вы фактически отправили для геокодирования.

function Mark(placemark) {
  this.latitude = 0.0;
  this.longitude = 0.0;
  this.accuracy = 0;
  this.country = null;
  this.region = null;
  this.city = null;
  this.postalCode = null;
  this.street = null;
  this.address = null;
  this.placemark = placemark;

  if (placemark) {
    if (placemark.Point && placemark.Point.coordinates) {
      this.latitude = placemark.Point.coordinates[0];
      this.longitude = placemark.Point.coordinates[1];
    }

    var elem = placemark.AddressDetails;

    if (elem) {
      this.accuracy = elem.Accuracy;

      if (elem.Country) {
        elem = elem.Country;
        this.country = elem.CountryNameCode;
      }

      if (elem.AdministrativeArea) {
        elem = elem.AdministrativeArea;
        this.region = elem.AdministrativeAreaName;
      }

      if (elem.SubAdministrativeArea) {
        elem = elem.SubAdministrativeArea;
      }

      if (elem.Locality) {
        elem = elem.Locality;
        this.city = elem.LocalityName;
      }

      if (elem.PostalCode) {
        this.postalCode = elem.PostalCode.PostalCodeNumber;
      }

      if (elem.Thoroughfare) {
        this.street = elem.Thoroughfare.ThoroughfareName;
      }
    }
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top