Filtrar por código postal u otras estrategias de recuperación de datos basadas en la ubicación

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

  •  08-06-2019
  •  | 
  •  

Pregunta

Mi pequeño sitio debería agrupar una lista de elementos de una tabla utilizando la ubicación del usuario activo como filtro.Pensar Lista de Craigslist, donde buscas "dvd" pero los resultados no son de toda la base de datos, se filtran por una ubicación que selecciones.Mi pregunta tiene 2 niveles:

  1. ¿Debería ir a-la-craigslist y pedir a los usuarios que utilicen una ubicación a nivel de ciudad?Mi problema con esto es que necesitas generar lo que me parece una lista de ubicaciones hecha a mano y codificada de forma rígida.
  2. ¿Debería ir a-la-zipCode?La idea de simplemente pedirle al usuario que escriba su código postal y luego agrupar todos los elementos que están en el mismo código postal o a cierta distancia de él.

Parece que prefiero la forma del código postal, ya que parece una solución más elegante, pero ¿cómo se puede crear una base de datos de todos los códigos postales e implementar la función que, dado el código postal 12345, obtiene todos los códigos postales a 1 milla de distancia?

Esta debería ser una "tarea" bastante común ya que muchos sitios tienen una necesidad similar a la mía, así que espero no reinventar la rueda aquí.

¿Fue útil?

Solución

Obtener una base de datos de códigos postales no es un problema.Puedes probar este gratis:http://zips.sourceforge.net/

Aunque no sé qué tan actual esté, o puedes usar uno de tantos proveedores.Tenemos una suscripción anual a Código PostalDescargar.com, y por quizás $100 recibimos actualizaciones mensuales con los datos más recientes del código postal completos con lat/longitud del centroide del código postal.

En cuanto a consultar todas las cremalleras dentro de un radio determinado, necesitará una biblioteca espacial de algún tipo.Si solo tiene una tabla de zips con latitudes/longitudes, necesitará un mecanismo orientado a la base de datos.SQL Server 2008 tiene la capacidad incorporada y hay bibliotecas de código abierto y bibliotecas comerciales que agregará dichas capacidades a SQL Server 2005.La base de datos de código abierto PostgreSQL tiene un proyecto, PostGIS, que agrega esta capacidad a esa base de datos.Es aquí: http://postgis.refractions.net/

Es probable que otras plataformas de bases de datos tengan proyectos similares, pero esos son los que conozco.Con una de estas bibliotecas basadas en bases de datos, debería poder consultar directamente cualquier código postal (o cualquier fila de cualquier tipo que tenga columnas de latitud/longitud) dentro de un radio determinado.

Si desea tomar una ruta diferente, puede utilizar herramientas espaciales con una biblioteca de mapas.Aquí también hay opciones de código abierto, como Mapa nítido y muchos otros (Google puede ayudar) que puede utilizar los mapas gratuitos de Tiger para los Estados Unidos como fuente de datos.Sin embargo, esta ruta es algo más complicada y posiblemente menos eficaz si todo lo que necesita es una búsqueda por radio.

Por último, es posible que desee buscar un servicio web.Esto, como usted dice, es una necesidad común, e imagino que hay muchos servicios web a los que puede suscribirse y que pueden proporcionar todos los códigos postales en un radio determinado desde un código postal proporcionado.Una búsqueda rápida en Google arrojó esto:http://www.zip-codes.com/free-zip-code-tools.asp#radiusPero hay MUCHOS recursos disponibles para la búsqueda en esta asignatura.

Otros consejos

¿Cómo se puede implementar la función que, dado el código postal 12345, obtiene todos los códigos postales a 1 milla de distancia?

Aquí hay un ejemplo de cómo hacerlo:

http://www.codeproject.com/KB/cs/zipcodeutil.aspx

Sólo para ser técnico...PostGIS no es un proyecto de la comunidad Postgres...es un proyecto independiente construido sobre Postgres.Si desea ayuda o soporte con PostGIS, querrá ir a su comunidad en lugar de a Postgres.

Puedes utilizar PostGIS.Además, he utilizado las bibliotecas de mapas de deCarta.Tienen tecnología que le permite geocodificar cualquier tipo de datos arbitrario.Entonces puedes consultarlos espacialmente.

descargo de responsabilidad:Trabajo para deCarta

¿No sería más eficiente simplemente determinar qué ciudades están dentro de un radio de 1 milla y almacenar esa información en una tabla?Entonces no tendrás que hacer cálculos en la base de datos todo el tiempo.

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