Suchen Sie ein Handbuch zum QGIS-Geometriegenerator?

8

Ich möchte einige Flusskarten erstellen, wie sie in Underdarks Beitrag gezeigt werden: https://anitagraser.com/2016/12/18/details-of-good-flow-maps/

Ich habe eine Reihe von Positionspunkten, z. B. 50, und ich möchte für jeden Punkt eine Karte " Alle Punkte zu einem " erstellen , also 50 Karten in diesem Beispiel. Und ein weiterer Satz von " Ein Punkt für alle " -Karten für jeden Punkt, also 50 Karten mehr.

Anstatt alle zusätzlichen Linienebenen zu erstellen, möchte ich dies mithilfe einer Kombination aus Atlas- und Geometriegeneratorsymbolen in QGIS erreichen.

Ich finde jedoch nicht viele Beispiele, um zu sehen, wie oder ob ich es schaffen kann.

Gibt es eine Site, auf der ich ausführliche Beispiele für QGIS-Geometriegeneratoren finden kann?

Dies ist ein Clip der gefilterten Ausgabe, der nur die oberen 10 Linien von jedem Punkt zeigt. Ich habe alle Linien aus einer CSV mit den Punktkoordinaten unter Verwendung einer WKT erstellt. Pfeile und Punktsymbole werden mit dem Geometriegenerator erstellt. Der Rest wird von Atlas kontrolliert.

Geben Sie hier die Bildbeschreibung ein

Albert
quelle

Antworten:

8

Bisher gibt es keine solche Seite. Die Funktion ist ziemlich neu und Verwendungsbeispiele tauchen erst jetzt auf.

Für Ihren speziellen Anwendungsfall würde ich dennoch empfehlen, eine Linienebene mit allen Verbindungen zu erstellen. Sie können diese Ebene dann mit Atlas filtern und müssen sich um nichts anderes kümmern.

Unterdunkel
quelle
6

Dies ist möglich, indem Sie einen anderen 'Geometriegenerator' verwenden als den, den Sie ursprünglich beabsichtigt haben. Ich vermute, Sie können vermeiden, dass Sie die Verbindungsschicht aller Verbindungen mithilfe einer virtuellen Schicht generieren müssen:

Ein paar Punkte:

Beispielpunkte

Fügen Sie mithilfe der folgenden SQL eine virtuelle Ebene hinzu: JOIN stimmt jeden Punkt mit jedem anderen überein, und die Liniengeometrie wird mithilfe der Spatialite MakeLine- Funktion generiert :

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

Das Ergebnis:

Punkte mit Verbindungslinien

Diese virtuelle Tabelle könnte dann mithilfe der Atlas-Funktionalität dynamisch gefiltert werden.

Das dynamische Erzeugen gekrümmter Linien wäre schwieriger, sollte aber dennoch möglich sein. Eine kartografisch angemessene Krümmung (unter Berücksichtigung der Verteilung der anderen Linien) geht wahrscheinlich über das hinaus, was mit virtuellen Ebenen erreicht werden kann.

Aktualisieren:

Mit ein wenig Basteln und viel Verweis auf die Spatialite-Funktionsliste habe ich gekrümmte Linien erzeugt:

Punkte mit gekrümmten Verbindungslinien

Die virtuelle Schicht SQL dafür ist unten. Beachten Sie, dass alle Permutationen angezeigt werden und das Umkehren der Reihenfolge von Start- und Endposition die komplementäre Kurve erzeugt.

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
quelle