Sou bastante novo no PostGIS, mas já li bastante. Uma coisa que tenho procurado é uma função que permite aos usuários criar um "diagrama de aranha" (também chamado de "linhas de desejo" ou "linhas de hub") no PostGIS.
Como exemplo, desenhe linhas de uma mercearia (ponto) para todos os endereços geocodificados de clientes (ponto) dessa mercearia. Obviamente, imagine que houvesse centenas de lojas e milhares de clientes. Eu imaginaria que cada loja teria um ID exclusivo que cada ponto do cliente teria incorporado em um campo para que o software conheça a conexão de origem e destino.
Existe uma função ST_ simples que realizará essa tarefa ou isso exige a combinação de várias consultas para realizar a tarefa?
fonte
A pergunta é mais ou menos respondida, gostaria apenas de adicionar alguns comentários para apontar a flexibilidade e o poder de fazer coisas assim com sql espacial
Enquanto leio a pergunta, ela pode ser dividida em duas perguntas. Uma pergunta GIS e uma pergunta sql sobre como combinar linhas em tabelas diferentes.
A parte gis pode, como mencionado antes, ser melhor resolvida com ST_MakeLine, se houver dois pontos que você deseja conectar à sua linha. Se fossem linhas ou polígonos, você poderia usar ST_Shortestline para obter uma linha das geometrias entre os pontos mais próximos. Isso funcionará com pontos, linhas e polígonos.
A outra parte é sobre como conectar o ponto de armazenamento certo ao ponto de cliente certo.
Essa é uma pergunta básica do banco de dados. Entendimento que dará muito mais prazer ao uso do PostGIS.
A situação mais fácil é uma loja com muitos clientes. Então você só precisa de uma tabela de clientes e seu ponto de loja, e seria algo como:
Se você tiver sua única loja em uma tabela, ficaria assim:
Mas se houver muitas lojas e cada cliente estiver usando apenas uma loja, você obterá uma solução parecida com as outras respostas aqui, por exemplo:
O PostgreSQL manipulará essa consulta da mesma maneira que:
Mas, no mundo real, você provavelmente encontrará a situação em que a maioria dos clientes está usando muitas lojas. Em exemplos anteriores, tivemos a relação de uma loja para muitos clientes, agora temos uma situação de muitos para muitos. Muitos clientes usando muitas lojas.
Depois, há uma solução ruim que você vê às vezes. As pessoas adicionam uma nova linha de cliente para cada loja que ele usa. Isso causará muitos problemas se, por exemplo, você quiser alterar o endereço dele, em muitos lugares. O banco de dados mais correto para fazer isso é criar uma "tabela de links". Não sei se essa é a palavra certa em inglês, mas de qualquer maneira. Essa é uma tabela que contém todos os dados específicos para a relação dos clientes com cada loja que ele usa. Então você tem três mesas. Um com lojas e todos os atributos pertencentes à loja, como quando está aberto e o número de telefone para entrar em contato. Então você tem a tabela de clientes, talvez com endereço e número de telefone para o cliente. Então você tem essa "tabela de links" que deve incluir um ID para a loja, o ID do cliente e talvez informações adicionais, como a frequência de visita a uma loja em particular, a distância da loja ou a linha que você está criando (mas é melhor criar distância e linha rapidamente quando você precisar). Então, com essa nova tabela, sua consulta seria semelhante a:
Então você tem toda a flexibilidade. Digamos, por exemplo, que você adicione à sua tabela de links quantas vezes por mês o cliente visita essa loja. Então você pode escrever uma consulta como esta:
então você pode usar esse atributo, visits_per_month, para definir a espessura de suas linhas no mapa, ilustrando quantas visitas cada loja recebe.
fonte
Uma maneira de fazer o digram spider no PostGIS é usando a função ST_MakeLine . Veja o exemplo abaixo:
fonte