Procurando o manual do gerador de geometria QGIS?

8

Gostaria de criar alguns mapas de fluxo como os mostrados no post do Underdark: https://anitagraser.com/2016/12/18/details-of-good-flow-maps/

Eu tenho um conjunto de pontos de localização, digamos 50, e gostaria de criar um mapa " todos os pontos para um " para cada ponto, portanto, 50 mapas neste exemplo. E outro conjunto de mapas de " um ponto para todos " para cada ponto, então 50 mapeiam mais.

Em vez de criar todas as camadas de linha extras, eu gostaria de fazer isso usando uma combinação de símbolos geradores de Atlas e Geometria no QGIS.

No entanto, não estou encontrando muitos exemplos para ver como ou se posso fazê-lo.

Então, existe um site onde eu possa encontrar um conjunto exaustivo de exemplos de gerador de geometria QGIS?

Este é um clipe da saída filtrada, mostrando apenas as 10 principais linhas de cada ponto. Criei todas as linhas de um CSV com as coordenadas do ponto usando um WKT. Setas e símbolos de ponto são criados com o gerador de geometria. O resto é controlado pela Atlas.

insira a descrição da imagem aqui

Albert
fonte

Respostas:

8

Até agora não existe esse site. O recurso é bastante novo e exemplos de uso estão começando a surgir agora.

Para o seu caso de uso específico, ainda recomendo criar uma camada de linha com todas as conexões. Você pode filtrar essa camada usando o Atlas e não precisa se preocupar com mais nada.

underdark
fonte
6

Isso é possível usando um 'gerador de geometria' diferente daquele que você originalmente pretendia que eu suspeito. Você pode evitar a geração da camada de linha de todas as conexões usando uma camada virtual:

Alguns pontos:

pontos de amostra

Adicione uma camada virtual usando o seguinte SQL - o JOIN corresponde a todos os pontos e a geometria da linha é gerada usando a função Spatialite MakeLine :

SELECT s.id 'ID1', c.id 'ID2' , MakeLine(s.geometry,c.geometry) 'geometry'
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id

O resultado:

Pontos com linhas de conexão

Essa tabela virtual pode ser filtrada dinamicamente usando a funcionalidade Atlas.

Gerar linhas curvas dinamicamente seria mais complicado, mas ainda deve ser possível. Curvá-los de uma maneira cartográfica apropriada (considerando a distribuição das outras linhas) provavelmente está além do que pode ser alcançado com as camadas virtuais.

Atualizar:

Com um pouco de ajustes e muita referência à lista de funções Spatialite, eu criei linhas curvas:

Pontos com linhas de conexão curvas

A camada virtual SQL para isso está abaixo. Observe que todas as permutações são mostradas e a reversão da ordem dos locais inicial e final gera a curva complementar.

SELECT s.id 'ID1', c.id 'ID2' , 
MakeArc(
    X(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    Y(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    distance(s.geometry,c.geometry) * 1.1180339887,
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),s.geometry) * (180/PI()),
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),c.geometry) * (180/PI()),
    27700,
    2) 'geom' /*line:27700*/
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id
Andy Harfoot
fonte