Vous recherchez le manuel du générateur de géométrie QGIS?


8

Je voudrais créer des cartes de flux comme celles présentées dans le post d'Underdark: https://anitagraser.com/2016/12/18/details-of-good-flow-maps/

J'ai un ensemble de points de localisation, disons 50, et je voudrais créer une carte " tous les points pour un " pour chaque point, donc 50 cartes dans cet exemple. Et un autre ensemble de cartes " un point pour tous " pour chaque point, donc 50 cartes de plus.

Au lieu de créer toutes les couches de lignes supplémentaires, j'aimerais accomplir cela en utilisant une combinaison de symboles de générateur Atlas et Geometry dans QGIS.

Cependant, je ne trouve pas beaucoup d'exemples pour voir comment ou si je peux le faire.

Alors, y a-t-il un site où je peux trouver un ensemble exhaustif d'exemples de générateur de géométrie QGIS?

Il s'agit d'un extrait de la sortie filtrée affichant uniquement les 10 premières lignes de chaque point. J'ai créé toutes les lignes d'un csv avec les coordonnées du point en utilisant un WKT. Les flèches et les symboles ponctuels sont créés avec le générateur de géométrie. Le reste est contrôlé par Atlas.

entrez la description de l'image ici

Réponses:


8

Il n'y a pas de tel site jusqu'à présent. La fonctionnalité est plutôt nouvelle et des exemples d'utilisation commencent à peine à apparaître.

Pour votre cas d'utilisation spécifique, je recommanderais toujours de créer une couche de ligne avec toutes les connexions. Vous pouvez ensuite filtrer cette couche à l'aide d'Atlas et ne vous soucier de rien d'autre.


6

Ceci est possible en utilisant un 'générateur de géométrie' différent de celui que vous vouliez initialement, je suppose, vous pouvez éviter d'avoir à générer la couche de ligne de toutes les connexions en utilisant une couche virtuelle:

Des points:

exemples de points

Ajoutez une couche virtuelle en utilisant le SQL suivant - le JOIN fait correspondre chaque point à chaque autre, et la géométrie de la ligne est générée à l'aide de la fonction 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

Le résultat:

Points avec lignes de connexion

Cette table virtuelle pourrait ensuite être filtrée dynamiquement à l'aide de la fonctionnalité Atlas.

La génération dynamique de lignes courbes serait plus délicate, mais devrait toujours être possible. Les courber d'une manière cartographique appropriée (compte tenu de la distribution des autres lignes) est probablement au-delà de ce qui peut être réalisé avec des couches virtuelles.

Mise à jour:

Avec un peu de bricolage et beaucoup de référence à la liste des fonctions Spatialite, j'ai généré des lignes courbes:

Points avec lignes de connexion courbes

La couche SQL virtuelle pour cela est ci-dessous. Notez que toutes les permutations sont affichées, et inverser l'ordre de l'emplacement de début et de fin génère la courbe complémentaire.

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.