Estoy trabajando en un sitio de directorio de negocios local que utilizará tipos de publicaciones personalizadas para las entradas de negocios. Uno de los campos será "Código postal". ¿Cómo puedo configurar una búsqueda basada en la ubicación?
Me gustaría que los visitantes puedan ingresar su código postal y elegir una categoría y mostrar todas las empresas dentro de un determinado radio, o todas las empresas ordenadas por distancia. Vi un par de complementos que dicen hacer esto, pero no son compatibles con WordPress 3.0. ¿Alguna sugerencia?
Respuestas:
Modificaría la respuesta de gabrielk y la publicación de blog vinculada mediante el uso de índices de bases de datos y minimizando el número de cálculos de distancia reales .
Si conoce las coordenadas del usuario y conoce la distancia máxima (por ejemplo, 10 km), puede dibujar un cuadro delimitador de 20 km por 20 km con la ubicación actual en el medio. Obtenga estas coordenadas limitantes y solo almacene consultas entre estas latitudes y longitudes . Todavía no use las funciones de trigonometría en su consulta de base de datos, ya que esto evitará que se utilicen índices. (Por lo tanto, es posible que obtenga una tienda que esté a 12 km de distancia si está en la esquina noreste de la caja delimitadora, pero la descartamos en el siguiente paso).
Solo calcule la distancia (como vuela el pájaro o con las indicaciones de manejo reales, como prefiera) para las pocas tiendas que se devuelven. Esto mejorará drásticamente el tiempo de procesamiento si tiene una gran cantidad de tiendas.
Para la búsqueda relacionada ( "dar las diez tiendas más cercanas" ) puede hacer una búsqueda similar, pero con una suposición de distancia inicial (por lo que comienza con un área de 10 km por 10 km, y si no tiene suficientes tiendas, la expande a 20 km por 20 km y así sucesivamente). Para esta distancia inicial, suponga que una vez calcule el número de tiendas sobre el área total y úsela. O registre la cantidad de consultas necesarias y adáptese con el tiempo.
Agregué un ejemplo de código completo en la pregunta relacionada de Mike , y aquí hay una extensión que le brinda las ubicaciones X más cercanas (rápida y apenas probada):
fuente
Primero necesitas una tabla que se vea así:
... rellenado para cada código postal. Puede ampliar esto agregando campos de ciudad y estado si desea buscar de esa manera.
Luego, a cada tienda se le puede dar un código postal, y cuando necesite calcular la distancia, puede unir la tabla de lat / long a los datos de la tienda.
Luego consultará esa tabla para obtener la latitud y longitud de la tienda y los códigos postales del usuario. Una vez que lo obtenga, puede completar su matriz y pasarla a la función "obtener distancia":
Esto significa una prueba de concepto, no un código que realmente recomendaría implementar. Si tiene 10,000 tiendas, por ejemplo, sería una operación bastante costosa consultarlas todas y recorrerlas y clasificarlas en cada solicitud.
fuente
La documentación de MySQL también incluye información sobre extensiones espaciales. Curiosamente, la función de distancia estándar () no está disponible, pero consulte esta página: http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html para obtener detalles sobre cómo "convertir los dos valores POINT a LINESTRING y luego calculan la longitud de eso ".
Tenga en cuenta que es probable que cada proveedor ofrezca diferentes latitudes y longitudes que representan el "centroide" de un código postal. También vale la pena saber que no hay archivos de "límites" de código postal definidos reales. Cada proveedor tendrá su propio conjunto de límites que coinciden aproximadamente con las listas específicas de direcciones que forman un código postal de USPS. (Por ejemplo, en algunos "límites", necesitaría incluir ambos lados de la calle, en otros, solo uno). y no incluya todos los códigos postales utilizados para la entrega por correo " http://www.census.gov/geo/www/cob/zt_metadata.html
Muchas empresas del centro tendrán su propio código postal. Querrá un conjunto de datos lo más completo posible, así que asegúrese de encontrar una lista de códigos postales que incluya códigos postales de "punto" (generalmente empresas) y códigos postales de "límite".
Tengo experiencia trabajando con los datos del código postal de http://www.semaphorecorp.com/ . Incluso eso no era 100% exacto. Por ejemplo, cuando mi campus adquirió una nueva dirección postal y un nuevo código postal, el código postal estaba fuera de lugar. Dicho esto, fue la única fuente de datos que encontré que incluso TENÍA el nuevo código postal, tan pronto como fue creado.
Tenía una receta en mi libro para saber exactamente cómo satisfacer su solicitud ... en Drupal. Se basó en el módulo Herramientas de Google Maps ( http://drupal.org/project/gmaps , que no debe confundirse con http://drupal.org/project/gmap , también un módulo valioso). Puede encontrar alguna muestra útil código en esos módulos, aunque, por supuesto, no funcionarán de fábrica en WordPress.
fuente