Hoy en día, la mayoría de los restaurantes y otras empresas tienen una funcionalidad "Find Locations" en sus sitios web que enumera las ubicaciones más cercanas para una dirección/archivo Zip determinado. ¿Cómo se implementa esto? Hacer coincidir el código postal con el DB es una forma fácil de hacerlo pero no siempre funciona, por ejemplo, puede haber una rama más cerca de la ubicación dada, pero podría estar en un zip diferente. Un enfoque que me viene a la mente es convertir el código postal/dirección dado en coordenadas del mapa y enumerar las ramas que caen en un radio predefinido. Agradezco sus ideas sobre cómo esto se hubiera implementado. Si es posible, proporcione detalles de implementación más detallados como cualquier servicio web utilizado, etc.,¿Cómo funciona "Buscar ubicaciones más cercanas"?
Respuesta
Una gran cantidad de marcos geoespaciales le ayudará con esto. En el mundo geoespacial, un código postal es simplemente un "polígono", que es solo un área en un mapa que define límites claros (no un polígono en el sentido matemático). En SQL 2008 spatial, por ejemplo, puede crear un nuevo polígono basado en su polígono original. De esta forma, puede crear dinámicamente un polígono que sea su código postal extendido en una cierta distancia en cada punto. Toma la forma funky del código postal en cuenta. Con una dirección, es fácil, porque solo creas un polígono, que es un círculo alrededor de un punto. A continuación, puede hacer que las consultas le proporcionen todos los puntos dentro del nuevo polígono que creó en cualquiera de los métodos.
Muchos de estos sitios básicamente lo hacen. Le dan todos los puntos dentro de un polígono extendido de 5 millas, y luego tal vez un polígono extendido de 10 millas, y así sucesivamente. En realidad, no están calculando la distancia. La mayoría de las cosas de ma en la web no son sofisticadas en absoluto.
Puede ver algunos ejemplos básicos here para tener una idea general de lo que estoy hablando.
, como usted dijo. Convierta una dirección/ZIP en una coordenada mundial 2D y compárela con otras ubicaciones conocidas. Elija el más cercano. :) Creo que algunos DB (Oracle, MSSQL 2008) incluso ofrecen algunas funciones que pueden ayudar, pero nunca las he usado.
Creo que es bastante universal. Toman la dirección o el código postal y lo convierten en una "coordenada del mapa" (difiere dependiendo de la implementación, probablemente una latitud/longitud) y luego usan las "coordenadas del mapa" de las cosas en la base de datos, es fácil calcular la distancia.
Tenga en cuenta que algunas implementaciones deficientes convierten el código postal en una coordenada que representa el centro del área de código postal, que a veces da malos resultados.
Tus pensamientos sobre cómo hacerlo son cómo probablemente lo haría. Puede geocodificar el codoridinado para el zip y luego hacer cálculos basados en eso. Sé que SQL Server 2008 tiene alguna nueva funcionalidad especial para ayudar a hacer consultas basadas en estas coordenadas lon/lat geocodificadas.
Hay disponible una base de datos zipode/location estándar. Here is one version in Access format que incluye el lat/long del código postal, así como otra información. A continuación, puede utilizar las extensiones PostgreSQL GIS para realizar búsquedas en las ubicaciones, por ejemplo.
(asumiendo por supuesto que extraiga el PP el acceso y la inserta en una base de datos más amigable como PostgreSQL)
En primer lugar, geocodifica la dirección, traduciéndola en (normalmente) latitud y longitud. Luego, realiza una consulta al vecino más cercano en su base de datos para conocer los puntos de interés.
La mayoría de los índices espaciales no admiten directamente las consultas de vecinos más cercanos, por lo que el enfoque habitual es consultar en un cuadro delimitador de un tamaño razonable con el punto geocodificado en el centro, luego ordenar los resultados en memoria para elegir el los más cercanos.
Existen algoritmos geométricos y/o estructuras de datos reales que admiten consultas de ubicación más cercanas O (...) en puntos, líneas y/o datos de región.
Ver this book como un ejemplo de información sobre algunos de ellos, como: diagramas de Voronoi, quadtrees, etc.
Sin embargo creo que las otras respuestas aquí están justo en la mayoría de los casos que se encuentran en el software de hoy en día:
- codificación geográfica (un solo punto en) el área de búsqueda
- cuadro delimitador consulta para obtener un estadio inicial
- en la memoria de clasificación/selección
que tenía una mesa que iba a compilar una tabla de base de datos cada 6 meses que contenía 3 columnas, lo usé durante unos pocos clientes en Australia, que contenía aproximadamente 40k de filas, muy ligero para ejecutar una consulta. esto es bastante rápido, si sólo busca conseguir algo fuera de la tierra para un cliente
- Código Postal de
- Código Postal Para
Distancia
SELECT STORE_ID, Store_AccountName, Store_PostalCode, Store_Address, Store_Suburb, Store_Phone, Store_State, Code_Distance FROM Store, (SELECT Code_To As Code_To, Code_Distance FROM Code WHERE Code_From = @PostalCode UNION ALL SELECT Code_From Como Code_To, Code_Distance FROM Código WHERE Code_To = @PostalCode UNION AL L SELECT @PostalCode Como Code_To, 0 Como Code_Distance) Como código donde Store_PostalCode = Code_To Y Code_Distance < = @distancia ORDER BY Code_Distance
Puede haber un montón de optimización que se puede hacer para acelerar esta consulta !.
- 1. Búsqueda eficiente Ubicaciones geográficas más cercanas
- 2. SQlite Obteniendo las ubicaciones más cercanas (con latitud y longitud)
- 3. Busque las ubicaciones más cercanas a una dirección dada
- 4. Google Maps Buscar las empresas de servicios públicos más cercanas
- 5. PHP Ordenando las coordenadas más cercanas
- 6. Encuentra las publicaciones más recientes y más cercanas, límite 20
- 7. Cómo determinar qué relaciones de aspecto están más cercanas
- 8. ¿Cómo encontrar las ciudades más cercanas en un radio determinado?
- 9. Algoritmo para encontrar 100 estrellas más cercanas al origen
- 10. Buscar todas las ocurrencias y ubicaciones de una subcadena
- 11. Buscar ubicaciones de carpetas del sistema en Python
- 12. ¿Cuál es la manera más rápida de ordenar muchas ubicaciones a distancia?
- 13. Bing API para encontrar ciudades cercanas
- 14. ¿Cómo resuelve Maven conflictos de versiones de dependencias transitivas? la estrategia de victorias más cercanas
- 15. "Buscar la ubicación más cercana" por código postal?
- 16. haciendo coincidir las cadenas más cercanas a un término de búsqueda (perl regex)
- 17. ¿Cómo funciona exactamente GeoLocation de HTML5?
- 18. Buscar vecinos más cercanos - OpenCV
- 19. ¿Puedo usar Google Maps API (Places API) en mi aplicación de iPhone para encontrar las ubicaciones cercanas a mí?
- 20. ¿Encontrar la longitud y la latitud más cercanas en el conjunto?
- 21. ¿Cómo? Publicación de formulario en varias ubicaciones
- 22. ¿Cómo funciona el código "IE6 no más"?
- 23. SQL - encuentra la fila con los valores de dos columnas más cercanas a X e Y
- 24. Buscar todas las ubicaciones de subcadena en NSString (no solo primero)
- 25. Encontrar las teclas más cercanas a un valor dado para los mapas clasificados de Clojure
- 26. Buscando ubicaciones API (C#)
- 27. notepad ++ ¿Cómo indexar archivos para buscar más rápido?
- 28. Buscar cadena más común en una matriz
- 29. ¿Hay alguna manera de encontrar las calles transversales más cercanas para una dirección?
- 30. Cómo resolver el problema del vendedor ambulante en ruby (más de 50 ubicaciones)