¿Cuál es la mejor forma de consultar una base de datos para los registros dentro de millas náuticas de un código postal?

StackOverflow https://stackoverflow.com/questions/527512

Pregunta

Tengo una lista de registros en mi base de datos y cada registro está asociado con un código postal.

¿Qué es la "mejor práctica" para la consulta de todos los registros en mi base de datos para encontrar todas las entradas que están a millas náuticas del otro código postal?

Cada código postal tiene una latitud / longitud asociado con éste en la base de datos por lo que sé que voy a tener que utilizar. Sin embargo, no puedo imaginar el funcionamiento de cualquier tipo de fórmula de la distancia en cada par de códigos postales, convirtiendo a millas y rechazar las que no lo son dentro de mi radio.

Eso parece muy costoso computacionalmente para una consulta tan común.

También he considerado hacer una todos los pares de pre-cálculo, pero parece demasiado grande para considerar también. Hay aproximadamente ~ 40.000 códigos postales en los EE.UU.. Por lo tanto, una base de datos todos los pares de cada código postal sería (40.000) ^ 2, o 1.6billion entradas.

Sé que esto es un problema común en los sitios web así que espero que alguien me puede apuntar en la dirección correcta para que la mejor manera. Estoy usando SQL Server 2008 y si hay soluciones pre-construidos por ahí, entonces genial, porque realmente no quiero reinventar la rueda en este caso .


pregunta relacionada: Conseguir todos los códigos postales dentro un radio (esto no me ayuda)
Además, sé que de esta SourceForge proyecto, pero es abandonado y ya no está en uso.

¿Fue útil?

Solución

Me ejecutar una consulta que devuelve todos los registros entre corchetes en el sobre cuadrado encompasing el círculo de búsqueda radial (minlat

Si usted quiere conseguir la suposición, SQL Server soporta índices espaciales .

Otros consejos

un sitio que necesita para ejecutar esta consulta una vez por segundo por usuario , y esto es lo que he aprendido:

En primer lugar, asegúrese de que su ubicación de la tabla tiene índices en Lat y Lon. Esa es la diferencia entre 20 ms y 15 s el tiempo de respuesta si tiene millones de registros.

Comience con una consulta del cuadro delimitador para obtener un conjunto de lugares para trabajar. A continuación, calcular las distancias en las que, más o menos, y si eres exigente con exactitud, filtrar algunos hacia fuera.

Francamente, yo no preocuparse de nada antes de la computación. Como digo, corro este tipo de consulta en una tabla lugar con 6.000.000 entradas, y por lo general devuelve resultados en <50 ms. Dependiendo de sus necesidades, algo que realmente sea lo suficientemente rápido.

Buena suerte!

Esto es de hecho un problema muy difícil de resolver. Yo recomendaría hacer algunas trampas por la pre-creación de una base de datos. Crear una cuadrícula de cualquier tipo de cercanía que necesita para encontrar, por ejemplo, tomar cada 10 millas en cada dirección, añadir una entrada a la base de datos para cada postal para ese punto de la cuadrícula y la distancia, y luego cuando una consulta entra, se primera traducir el punto de consulta a uno de sus puntos de la rejilla. Ahora se puede buscar la distancia con bastante facilidad.

Esta solución significa, básicamente, el espacio de negociación de tiempo, para que pueda obtener una base de datos bastante grande rápidamente. La buena noticia es:. Se trata de datos muy fácil de índice

Usted debe mirar GeoNames.org . Puede consultar su servicio web para lo que está buscando, o puede dl base de datos de emabrgo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top