Automatische Kartenrotation in Map Composer QGIS

10

Die Sache ist, dass ich mich wundere, es möglich zu machen, die Kartenrotation in Map Composer automatisch zu berechnen. Ich habe viele Karten in einer Datei mit eigenen Projektionsparametern und möchte die Kartenrotation in Map Composer basierend auf der Projektionsformel (oder etwas anderem?) Definieren.

zB Ort eine bestimmte Karte im Projekt:

Geben Sie hier die Bildbeschreibung ein

Die Projektion ist

Geben Sie hier die Bildbeschreibung ein

In Map Composer sieht die Kartengrenze so aus

Geben Sie hier die Bildbeschreibung ein

Und mit ausgewähltem Drehwinkel für die Karte mit ihren Projektionsparametern:

Geben Sie hier die Bildbeschreibung ein

Der Kartendrehwinkel ist für jede Karte je nach Standort und Projektionsparametern unterschiedlich.

Ist es möglich, diesen Prozess zu automatisieren und den Kartendrehwinkel automatisch zu berechnen, da dieser Wert nicht jedes Mal manuell ermittelt wird (ich möchte einen universellen Komponisten für alle Karten über das Menü zur Atlasgenerierung erstellen)?

Jane
quelle
1
Möchten Sie das Feature so drehen, dass es parallel zu den Kanten des Kartenrahmens verläuft? Könnten Sie den Azimut einer der Seiten des Features berechnen und damit drehen? Wenn es eine Linie wie Rotation = Grad wäre (atan (abs ((y1-y2) / (x1-x2)))), würden Sie einen Winkel in Grad erhalten. Dann würde 90 - Drehung es mit dem Kartenrahmen ausrichten.
Mixedbredie
2
Verwenden Sie einen Atlas? Wenn Sie mit dem Werkzeug "Orientierter Mindestbegrenzungsrahmen" eine Abdeckungsebene generieren, enthält diese Ebene ein Rotationsattribut, das mithilfe datendefinierter Eigenschaften an die Kartenelementrotation gebunden werden kann.
Ndawson
@mixedbredie, Ja, ich möchte meine Karte so drehen, dass die Kartengrenzen parallel zum Kartenrahmen im Kartenbereich sind. Ich habe versucht, den Azimut zu berechnen, aber das Problem ist, dass meine Ebene mit Karten poligonal ist und es nicht zu sagen ist, dass der erste Punkt der Scheitelpunkt oben links oder ein anderer bestimmter Scheitelpunkt (rechts unten usw.) ist. Also, der Winkel befriedigt fast jedes Mal nicht
Jane
Die von @ndawson vorgeschlagene Lösung ist ein Genuss. Verwenden Sie die neue Begrenzungsrahmenebene als verborgene Abdeckungsebene, und alles wird ausgerichtet.
Mixedbredie
1
Öffnen Sie die Processing Toolbox (Strg + Alt + T) und suchen Sie nach "orientiert". Das Tool wird unter QGIS-Geoalgorithmen> Vektor-allgemeine Tools angezeigt.
Mixedbredie

Antworten:

3

Unten eine Lösung, die @ndawson in den Kommentaren der Frage gefunden hat. Bitte zögern Sie nicht, diese Antwort zu kommentieren und zu verbessern.

Führen Sie in der Verarbeitungs-Toolbox das Werkzeug "Orientierter Mindestbegrenzungsrahmen" auf dem bereits verwendeten Kartenumhüllungsraster aus.

Orientiertes Begrenzungsrahmenwerkzeug

Dadurch wird eine Ebene erstellt, die mit Ihrer ursprünglichen Ebene identisch sein sollte. In der Attributtabelle finden Sie ein ANGLE-Feld

OBB-Felder

Sie sollten nun in der Lage sein, dieses ANGLE-Feld im Composer zu verwenden, um das datendefinierte Feld für die Rotation auszufüllen:

Daten definierter Winkel

Das Problem scheint zu sein, dass der Winkel nicht immer einfach zu verwenden ist, da er von der Art und Weise abhängt, wie die anfänglichen Polygone hergestellt werden. Ich habe einige Tests durchgeführt und es hängt davon ab, auf welche Weise Sie Ihre Quellpolygone gezeichnet haben. Möglicherweise müssen Sie die Attributwerte des ANGLe-Felds entsprechend anpassen:

(Rot ist Originalpolygone, Schwarz die OMBB-Werkzeugpolygone). Ich habe für das Beispiel ähnliche Polygone auf zwei verschiedene Arten digitalisiert (nach rechts oder links gehen)

OMBB Beispiel

Um den Winkelwert auf Ihre ursprüngliche Ebene zurückzusetzen, können Sie eine räumliche Standortverbindungsoperation verwenden.

gisnside
quelle
Ich danke dir sehr! Ich habe Ihre detaillierte Antwort aufmerksam beachtet! Das Problem scheint jedoch komplexer zu sein. Ich habe eine Ebene mit allen Karten und ihren Projektionen in der Attributtabelle für jede Karte. Die erste Ebene mit Kartensatz in WGS84, aber beim Vorbereiten einer Karte habe ich die Projektion im Kartenbereich festgelegt, der aus der Attributtabelle stammt (die für jede Karte unterschiedlich ist), und ich benötige einen Kartenrotationswert in DIESER PROJEKTION. Also muss ich jede Karte in ihrer eigenen Projektion erneut speichern und dann OMBB für das Polygon ausführen. Ich habe auf einige Karten getestet, aber der Wert für den Rotationswinkel ohne Erfolg unterscheidet sich von dem über OMBB berechneten Wert
Jane
Es wäre großartig, den Drehwinkelwert in Map Composer basierend auf der Projektionsformel in der Attributtabelle zu berechnen
Jane
Nicht einfach ! Ich sehe nicht ein, wie Sie das auf einfache Weise tun können, insbesondere für den Drehwinkel. Es gibt eine Möglichkeit, Daten mit der Funktion "transformieren" zu projizieren, aber ich bezweifle, dass dies für alles andere als Koordinaten funktioniert. (Gibt die von einem Quell-CRS in ein Ziel-CRS transformierte Geometrie zurück. Syntax: transform (geom, source_auth_id, dest_auth_id) - Beispiel: geom_to_wkt (transform ($ geometr, 'EPSG: 2154', 'EPSG: 4326'))
gisnside