Ich möchte Polygone entlang einer Linie erstellen, um sie in einem nächsten Schritt für AtlasCreator zu verwenden.
ArcMap verfügt über ein Tool mit dem Namen " Strip Map Index Features" .
Mit diesem Werkzeug kann ich die Höhe und Breite meiner Polygone (z. B. 8 km x 4 km) auswählen und sie automatisch entlang der Linie erzeugen / drehen.
Eines der generierten Attribute jedes Polygons ist der Drehwinkel, den ich benötige, um meine Nordpfeile anschließend in Atlas Generator zu drehen.
Hat jemand eine Idee, wie man diese Aufgabe in QGIS / mit pyQGIS löst? Gras- oder SAGA-Algorithmen oder ein Prossessing-Toolbox-Modell, das in einem benutzerdefinierten Plugin verwendet werden könnte, wären auch in Ordnung Alle Polygone / Bereiche als eine Art Übersichtskarte.
Edit2: Ich biete ein Kopfgeld an, da ich noch nach einer PyQGIS-Lösung suche, die in einem QGIS-Plugin verwendet werden kann, ohne dass eine Software außerhalb von QGIS installiert werden muss (kein RDBMS wie PostGIS / Oracle)
Antworten:
Interessante Frage! Es ist etwas, das ich selbst ausprobieren wollte, also habe ich es ausprobiert.
Sie können dies in PostGRES / POSTGIS mit einer Funktion tun, die eine Menge von Polygonen erzeugt.
In meinem Fall habe ich eine Tabelle mit einem Merkmal (MULTILINESTRING), das eine Eisenbahnlinie darstellt. Es muss ein CRS in Metern verwendet werden, ich verwende osgb (27700). Ich habe 4 km x 2 km Seiten erstellt.
Hier können Sie das Ergebnis sehen ... das Grüne ist das Straßennetz, das an einem 1 km langen Puffer um die Eisenbahn befestigt ist, der der Höhe der Polygone gut entspricht.
Hier ist die Funktion ...
Verwendung dieser Funktion
Hier ist ein Beispiel; 4 km x 2 km große Seiten, epsg: 27700 und 10% Überlappung
Nachdem Sie dies ausgeführt haben, können Sie von PgAdminIII in eine CSV-Datei exportieren. Sie können dies in QGIS importieren, müssen das CRS jedoch möglicherweise manuell für den Layer festlegen. QGIS verwendet die SRID in EWKT nicht, um das Layer-CRS für Sie festzulegen: /
Lagerattribut hinzufügen
Dies ist wahrscheinlich einfacher in Postgis, es kann in QGIS-Ausdrücken gemacht werden, aber Sie müssen etwas Code schreiben. Etwas wie das...
Vorbehalte
Es ist ein bisschen zusammen gehackt und hatte nur die Chance, an einem Datensatz zu testen.
Nicht 100% sicher, welche zwei Eckpunkte Sie für die Aktualisierung der
query
Lagerattribute auswählen müssen. Möglicherweise müssen Sie experimentieren.Ich muss zugeben, dass ich keine Ahnung habe, warum ich eine derart verschlungene Formel ausführen muss, um das Polygon so zu drehen, dass es mit dem aktuellen Liniensegment übereinstimmt. Ich dachte, ich könnte die Ausgabe von ST_Azimuth () in ST_Rotate () verwenden, aber anscheinend nicht.
quelle
Es gibt verschiedene Lösungen. Dies funktioniert mit einfachen Polylinien und mehreren ausgewählten Objekten
Blockdiagramm:
Parameter
Schleife auf OrderNodes
erstelle deinen ersten punkt als anker
Fügen Sie für jeden Scheitelpunkt das Diktat x, y, id hinzu und berechnen Sie einen Vektor
Sie können diesen Satz ändern, wenn er nicht wirklich klar ist oder nicht kommentiert wird.
quelle
Steven Kays antwortet in Pyqgis. Wählen Sie einfach die Linien in Ihrer Ebene aus, bevor Sie das Skript ausführen. Das Skript unterstützt das Zusammenführen von Linien nicht und kann daher nicht auf Ebenen mit Mehrfachlinienfolgen arbeiten
quelle
Die beiden Antworten (zum Zeitpunkt der Veröffentlichung) sind genial und gut erklärt. Es gibt jedoch auch eine SEHR einfache, aber effektive Lösung dafür (vorausgesetzt, Sie akzeptieren alle Karten, die nach Norden ausgerichtet sind, auf herkömmliche Weise und nicht in zufälliger Richtung nach Norden, basierend auf dem Fluss). Wenn Sie Rotationen wollen, ist es möglich, aber etwas komplexer (siehe unten).
Schauen Sie sich zuerst meinen Beitrag hier an . Auf diese Weise erhalten Sie eine Anleitung zum Erstellen von Kartenabdeckungen für Atlas. Die gewünschte Methode ist eine Anpassung von 'Workflow 2' in der Anleitung. Teilen Sie Ihr lineares Feature nach Scheitelpunkten oder Länge und puffern Sie die Features um einen beliebigen Betrag. Der Betrag, um den Sie puffern, bestimmt teilweise die Überlappung (siehe unten), aber was noch wichtiger ist, es wird ein Feature mit einer Fläche erstellt. Sie können eine beliebige Anzahl von Plugins verwenden, um die Zeilen zu teilen. Die Optionen GRASS v.split.length und v.split.vert sind jedoch gut geeignet (verfügbar in der Processing Toolbox).
Nachdem Sie die Atlas-Generierung in Map Composer aktiviert und Ihren gepufferten Layer ausgewählt haben, wechseln Sie zurück zur Registerkarte Elemente und wählen Sie Ihr Kartenobjekt aus. Aktivieren Sie das Kontrollkästchen "Von Atlas gesteuert", und in Ihrem Anwendungsfall würde ich mich für die Funktion "Margin around" entscheiden. Dadurch wird die Überlappung zwischen den Karten gesteuert (alternativ können Sie einen festen Maßstab bevorzugen).
Sie können Ihren Atlas in der Vorschau anzeigen, indem Sie auf die Schaltfläche Atlas in der oberen Symbolleiste des Komponisten klicken und sehen, wie viele Seiten erzeugt werden. Beachten Sie, dass Sie auswählen können, ob alle Seiten in einer einzelnen PDF-Datei oder als separate Dateien exportiert werden sollen.
In den Eigenschaften des Map Composer-Elements befindet sich ein Drehfeld, mit dem die Karte entlang der Linie gedreht werden kann. Sie müssen einen Ausdruck festlegen (verwenden Sie die kleine Schaltfläche rechts neben dem Drehfeld). Wählen Sie Variable als Ihre Option und dann Bearbeiten. Ein Ausdrucksgenerator öffnet sich und Sie können dort auf die Geometrie oder Felder der Atlas-Features zugreifen. Sie können dann einen Express erstellen, um die Karte entsprechend der Drehung der Features zu drehen (Sie können die Peilung anhand der Start- und Endpunkte jedes Liniensegments und einer Triggerung berechnen). Wiederholen Sie denselben Vorgang, um den Nordpfeil zu drehen (mit demselben Ausdruck oder derselben vorberechneten Variablen).
quelle