Ich möchte einen Satz von Vektorpunkten in QGIS um eine beliebige Anzahl von Grad um einen zentralen Punkt (oder einen beliebigen Punkt) drehen.
Dies ähnelt einer aktuellen Frage zum Erstellen eines regulären Rasters . Es wurde dort vorgeschlagen, das Werkzeug "Affine Transformation" (von dem ich annehme, dass es das Plugin bedeutet) zu verwenden, um ein Punktgitter um einen beliebigen Winkel oder Abstand zu drehen oder zu verschieben. Ich vermute, ich verstehe nicht, wie es funktioniert, und konnte es nicht zum Laufen bringen.
Ich erstelle ein regelmäßiges Punktraster in QGIS und stelle sicher, dass die UTM-Zone sowohl für die Ebene als auch für das Projekt korrekt eingestellt ist. Aktiviere die Bearbeitung für die Ebene und öffne dann das Plugin-Dialogfeld (qgsAffine):
Ich wähle 'ganze Ebene' und möchte dann, um das gesamte Punktfeld um 15 ° zu drehen, 15 in beide 'Rotations'-Felder einfügen (wo möglicherweise etwas schief geht). Die Operation führt dazu, dass die Punkte irgendwo außerhalb des Planeten gedreht werden!
Ist das das richtige Werkzeug für den Job? Ich möchte im Idealfall eine Reihe von Punkten um ihr gemeinsames Zentrum drehen.
Update : qgsAffine ist nur ein Gedanke; Wenn wir dies in einem QGIS-Tool tun können , bin ich glücklich!
Update 2 : qgsAffine ist verwendbar, wenn Sie die richtigen Nummern zum Einstecken kennen (siehe Antwort unten, danke Mike!). Tabellenkalkulation / Taschenrechner funktioniert einwandfrei, oder hier ist die R-Funktion, um die Zahlen direkt abzurufen:
## Compute correct affine numbers for qgsAffine plugin
affine <- function(originX, originY, rotAngle) {
A <- rotAngle * pi / 180
scaleX <- scaleY <- cos(A)
rotX <- sin(A)
rotY <- -sin(A)
transX <- originX - cos(A) * originX + sin(A) * originY
transY <- originY - sin(A) * originX - cos(A) * originY
aff <- data.frame(scaleX, scaleY, rotX, rotY, transX, transY)
return(aff)
}
Um ein Punktgitter in Norduganda (UTM 36N) zu drehen, erhalten Sie affine(578988, 419210, 30)
:
scaleX scaleY rotX rotY transX transY
1 0.8660254 0.8660254 0.5 -0.5 287174.7 -233330.5
... die im qgsAffine-Dialogfeld eingegeben werden und die Punkte korrekt drehen.
quelle
Antworten:
Sie können dies in PostGIS mit ST_Affine tun . Die Funktion zum Drehen um einen beliebigen Punkt wurde ST_Rotate für PostGIS 2.0 hinzugefügt .
Wenn Sie eine frühere Version haben (wie PostGIS 1.5 oder noch früher), können Sie folgende Funktionen hinzufügen:
In den Beispielen unter ST_Rotate erhalten Sie eine Vorstellung davon, wie Sie damit eine Geometrie um einen x- , y- Punkt drehen können , einschließlich des Schwerpunkts (gemeinsames Zentrum).
Da wir alle Mathematik mögen, wird die Transformationsmatrix aus den obigen Funktionen wie folgt dargestellt:
Dabei ist θ die Drehung gegen den Uhrzeigersinn um einen Ursprung, x0 ist der Osten / Längengrad des Ursprungspunkts und y0 ist der Norden / Breitengrad. Diese Mathematik könnte möglicherweise an jedes affine Transformationswerkzeug angepasst werden .
Um das qgsAffine-Tool verwenden zu können, müssen Sie wissen, wohin die Werte der Matrix fließen. Für Vorberechnungen ist auch eine gute Tabellenvorlage erforderlich. Der qgsAffine-Dialog sieht ungefähr so aus:
wo:
Wenn Sie beispielsweise ein Polygon um 30 ° im Uhrzeigersinn um 42 ° S und 174 ° E drehen möchten, geben Sie Folgendes in Ihre Tabelle ein:
Kopieren Sie dann die Ergebnisse aus einer Tabelle in das rechte Feld. Verwenden der Tab-Reihenfolge im Dialogfeld:
Das gleiche Beispiel aus PostGIS würde ungefähr so aussehen:
quelle
Ich habe noch nie versucht, Vektorebenen mit qgsAffine zu drehen, und ich glaube, ich bin nicht allein. Diese Frage wurde kürzlich im QGIS-Forum gestellt und mit (kostenlosem) OpenJump wurde eine Lösung gefunden. Schauen Sie sich diesen Thread an (gegen Ende):
http://forum.qgis.org/viewtopic.php?f=2&t=10126&sid=28473d53d244a4cd2a6f91887811ef02
Natürlich können Sie dieses Tool auch verwenden, um Ihre Daten einfach zu drehen.
quelle