2008-11-30 14 views
7

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

6

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.

0

, 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.

0

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.

0

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.

4

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)

1

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.

0

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:

  1. codificación geográfica (un solo punto en) el área de búsqueda
  2. cuadro delimitador consulta para obtener un estadio inicial
  3. en la memoria de clasificación/selección
0

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

  1. Código Postal de
  2. Código Postal Para
  3. 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 !.

Cuestiones relacionadas