Tengo curiosidad sobre cómo funciona el geocodificador de Google.¿Cómo funciona el geocodificador de Google?
He estado estudiando algunas implementaciones de geocodificadores de código abierto como geocommons' geocoder o PostGIS's new Tiger Geocoder. Esto es más o menos lo que sé hasta ahora (para demostrar con suerte que he estado haciendo mi tarea):
Me doy cuenta de que en el núcleo de los geocodificadores de fuente abierta, hay tres elementos principales.
1.- Un normalizador dirección de que tiene una cadena arbitraria y normaliza (taking the example from here):
normalize_address('address string');
e.g.: SELECT naddy.* FROM normalize_address('29645 7th Street SW Federal Way 98023') AS naddy;
address | predirabbrev | streetname | streettypeabbrev | postdirabbrev | internal | location | stateabbrev | zip | parsed
---------+-------------+-----------------------+------------------+---------------+----------+----------+-------------+-------+--------
29645 | | 7th Street SW Federal | Way | | | | | 98023 |
y:
2.- Un geocodificador que hace algo de coincidencia aproximada mágica para los nombres donde el algoritmo central es el Levenshtein Distance.
Un buen ejemplo es el del artículo de Wikipedia donde se calcula la distancia Levenshtein entre las palabras gatito y sentado (la distancia es de 3 ya que es el número de ediciones necesarias para cambiar una cadena en el otro):
kitten → sitten (substitution of 's' for 'k')
sitten → sittin (substitution of 'i' for 'e')
sittin → sitting (insertion of 'g' at the end).
3.- Alguna interpolación de los segmentos de la calle al final para adivinar dónde está la casa. Descargué un fragmento del Census Tiger street dataset gratuito para crear este ejemplo.
En el ejemplo anterior, el segmento de calle de interés (Schaeffer Hills Dr) tiene una desde el nodo que comienza en 300 (de modo 300 Schaeffer Hills Dr) y una al nodo que termina en 400 (400 Schaeffer Hills Drv). Si coincidía con este Schaeffer Hills Drv, y la solicitud era para la calle 310, entonces el algoritmo simplemente interpolate (atravesaría el 10%) hacia donde está mi flecha verde.
Esto es lo que hacen las herramientas de geocodificador de código abierto. Sin embargo, Google es claramente más inteligente que eso y utiliza todo tipo de sugerencias no tradicionales.
¿Cómo es eso?
Por ejemplo, puedo escribir 680 Mission st (ninguna ciudad, estado, condado, nada en absoluto). La mayoría de los normalizadores de dirección estándar explotarían porque encontrarían demasiadas coincidencias. Pero como estoy en SF, estoy adivinando google usa mi ip para obtener geoip-like information, some expanding bounding como una pista con alguna búsqueda difusa, y de inmediato encuentra el segmento más cercano que coincide y me dice que esa es mi respuesta (que es correcta !).
Estoy buscando respuestas que puedan arrojar más luz sobre cómo funciona el geocodificador Google además de las técnicas que describí anteriormente.
Actualización:
bien, hasta ahora tenemos dos tipos de consejos enumeran
- GeoIP como pistas
- Área de Interés cuadro delimitador (véase el ejemplo de Pablo).
- Otros?
I Sospe t nadie con información precisa podrá responder a su pregunta sin violar un acuerdo de confidencialidad. –
puede que tenga más suerte haciendo esta pregunta aquí: http://gis.stackexchange.com/ –
@Suvi Sí sé sobre gis.stackexchange. Sin embargo, este foro tiene órdenes de magnitud más de ojos y esperaba que pudiera: -/ – rburhum