Pregunta

Estoy utilizando la API de geocodificación de Google en mi aplicación, pero me resulta difícil analizar la información de dirección devuelta de manera confiable. Espero que alguien tenga una biblioteca o una forma de analizar la información para evitar que tenga que escribir esto yo mismo y cubrir todos los casos.

Estoy usando la api json y puedo extraer la línea de dirección y las coordenadas con bastante facilidad y los almacena en una base de datos, pero el problema es extraer la información de otra dirección de manera confiable para que pueda almacenarla.

He echado un vistazo a la especificación de dirección estructurada XAL que Google utiliza para los datos geocodificados, pero mi problema es que puede atender a cada tipo de dirección en cada país hace que sea difícil analizar el resultado.

Algo tan simple como un código postal se puede anidar bastante dentro de cualquier combinación de etiquetas principales. incluso dentro de un país, la forma en que aparece el árbol puede variar, lo que dificulta el análisis.

Irónicamente, mi objetivo final es almacenarlo en un árbol (creo que rails act_as_tree o similar) en mi base de datos, para que los usuarios puedan ubicar los elementos fácilmente más adelante. por ejemplo, haga clic en país, estado, luego región, ciudad, luego suburbio, etc.

Estoy trabajando en rieles

¿Fue útil?

Solución

Hay una gema y un complemento que encapsula todo esto para ti. Se llama GeoKit .

Es posible hacer que use Google, o un puñado de otros proveedores de servicios de geocodificación. Si sus modelos tienen los campos adecuados, también puede hacer cálculos de distancia (lo realmente bueno es que las matemáticas para esto se hacen en el SQL).

Lo he estado usando durante mucho tiempo en una de mis aplicaciones de producción para calcular distancias entre códigos postales, por ejemplo. Como mencioné, lo he estado usando en producción durante bastante tiempo, así que no tengo ninguna preocupación sobre la solidez del código.

Otros consejos

He hecho esto un par de veces. Su código de muestra (de Google) funciona, pero es frágil, y los datos de geocodificación que obtiene de Google son, en el mejor de los casos, incompletos y, en el peor de los casos, inconsistentes.

De todos modos. Todos los geocodificadores apestan, pero al menos el de Google es gratis y apesta menos que los demás. ¿Es mucho pedir coherencia? Suspiro. Intente lo siguiente; se lo pasa a Placemark (tenga en cuenta que el método getLocations AJAX puede devolver múltiples) y normalizará el resultado. Si desea obtener fantasía, use el campo placemark.address - en ocasiones contendrá más información que los campos individuales. Normalmente, solo contendrá el texto que realmente envió para geocodificarse.

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;
      }
    }
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top