Soy bastante nuevo en PostGIS pero he leído mucho. Una cosa que he estado buscando es una función que permita a los usuarios crear un "diagrama de araña" (también llamado "líneas de deseo" o "líneas centrales") en PostGIS.
Como ejemplo, dibuje líneas desde una tienda de comestibles (punto) a todas las direcciones de clientes geocodificadas (punto) de esa tienda de comestibles. Por supuesto, sin embargo, imagine que había cientos de tiendas y miles de clientes. Me imagino que cada tienda tendría una identificación única que cada punto del cliente habría incrustado dentro de un campo para que el software conozca la conexión de origen y destino.
¿Existe una función ST_ simple que realice esta tarea, o esto requiere combinar múltiples consultas para realizar la tarea?
fuente
La pregunta está más o menos respondida, solo me gustaría agregar algunos comentarios para señalar la flexibilidad y el poder de hacer cosas como esta con sql espacial
Mientras leo la pregunta, se puede dividir en dos preguntas. Una pregunta SIG y una pregunta SQL sobre cómo combinar filas en diferentes tablas.
Como se mencionó anteriormente, la parte gis puede resolverse mejor con ST_MakeLine, si son dos puntos que desea conectar con su línea. Si hubiera sido líneas o polígonos, podría usar ST_Shortestline en su lugar para obtener una línea de las geometrías entre sus puntos más cercanos. Eso funcionará con puntos, líneas y polígonos.
La otra parte trata sobre cómo conectar el punto de tienda correcto con el punto de cliente correcto.
Esa es una pregunta básica de la base de datos. Comprender eso dará mucho más placer al usar PostGIS.
La situación más fácil es una tienda con muchos clientes. Entonces solo necesita una tabla de clientes y su punto de tienda y se vería algo así como:
Si tiene su única tienda en una mesa, se vería así:
Pero si tiene muchas tiendas y cada cliente solo usa una tienda, obtendrá una solución que se parece a las otras respuestas aquí, por ejemplo:
PostgreSQL manejará esa consulta de la misma manera que:
Pero en el mundo real, probablemente se encontrará en la situación de que la mayoría de los clientes utilizan muchas tiendas. En ejemplos anteriores hemos tenido la relación de una tienda con muchos clientes, ahora tenemos una situación de muchos a muchos. Muchos clientes usan muchas tiendas.
Entonces hay una mala solución que a veces ves. La gente agrega una nueva fila de clientes para cada tienda que usa. Eso causará muchos problemas si, por ejemplo, desea cambiar su dirección, debe hacerlo en muchos lugares. La base de datos más correcta para hacerlo es hacer una "tabla de enlaces". No sé si esa es la palabra correcta en inglés, pero de todos modos. Esa es una tabla que contiene todos los datos específicos para la relación de los clientes con cada tienda que utiliza. Entonces tienes tres mesas. Uno con tiendas y todos los atributos que pertenecen a la tienda, como cuando está abierto y el número de teléfono para ponerse en contacto. Luego tiene la tabla de clientes, tal vez con la dirección y el número de teléfono del cliente. Luego tiene esta "tabla de enlaces" que debe incluir una identificación para la tienda, la identificación del cliente y tal vez información adicional, como la frecuencia de visitas a esa tienda en particular, o la distancia a la tienda, o esta línea que está creando (pero es mejor crear la distancia y la línea sobre la marcha cuando la necesite). Luego, con esta nueva tabla, su consulta se vería así:
Entonces tienes toda la flexibilidad. Digamos, por ejemplo, que agrega a su tabla de enlaces cuántas veces al mes el cliente visita esa tienda. Entonces puedes escribir una consulta como esta:
luego puede usar ese atributo, visitas_por_mes para definir el grosor de sus líneas en el mapa que ilustra cuántas visitas recibe cada tienda.
fuente
Una forma de hacer el esquema de araña en PostGIS es mediante el uso de la función ST_MakeLine . Ver ejemplo a continuación:
fuente