Pergunta

Eu estou usando a API de geocodificação do Google em meu aplicativo, mas estou achando difícil analisar as informações de endereço retornado de forma confiável. Im esperando que alguém tem uma biblioteca ou uma maneira de analisar a informação para me impedir de ter que escrever este meu ego e cobrir todos os casos.

Im usando a API JSON e pode extrair a linha de endereço e as coordenadas com bastante facilidade e armazená-los em um banco de dados, mas o problema é extrair a outra informação de endereço em uma maneira confiável para que eu possa armazená-lo.

Eu tive um olhar para a especificação de endereço XAL estruturado que utiliza o Google para os dados georreferenciados, mas o meu problema é o fato de que ele pode atender a todos os tipos de endereços em todos os países torna difícil analisar o resultado.

Algo tão simples como um código postal podem ser aninhados muito profundamente dentro de qualquer combinação de tags pais. mesmo dentro de um país a forma como as aparece árvores pode variar que torna mais difícil que o esperado para análise.

Ironicamente meu objetivo final é para armazená-lo em uma árvore (pense trilhos acts_as_tree ou similar) no meu banco de dados, assim os usuários podem localizar os itens facilmente mais tarde. por exemplo, clique no país, estado, em seguida, região, cidade, então subúrbio etc

Im trabalho em trilhos

Foi útil?

Solução

Não é uma jóia e plugin que encapsula tudo isso para você. É chamado GeoKit .

É possível fazê-lo usar o Google, ou um punhado de outros prestadores de serviços de geocodificação. Se os seus modelos têm os campos apropriados, ele também pode fazer cálculos de distância (a coisa realmente interessante é a matemática para isso é feito no SQL).

Eu tenho de usá-lo por um longo tempo em uma das minhas aplicações de produção para calcular distâncias entre zipcodes por exemplo. Como eu mencionei, eu tenho usado na produção por um bom tempo, então eu não tenho quaisquer preocupações sobre a solidez do código.

Outras dicas

Já fiz isso algumas vezes. Suas obras (do Google) exemplo de código, mas é frágil. - E os dados de geocodificação você voltar do Google é na melhor das hipóteses incompleta e, na pior inconsistente

De qualquer forma. Todos os geocoders chupar, mas pelo menos o do Google é gratuita e suga menos que os outros .. é pedir muito para a consistência? Suspiro. Tente o seguinte; você passá-lo um marcador (note que o método getLocations AJAX pode retornar múltiplo) e vai normalizar o resultado. Se você quiser começar a fantasia, use o campo placemark.address - na ocasião ele irá conter mais informações do que os campos individuais. Normalmente, ele só irá conter o texto que você realmente enviado para ser geocodificados.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top