Berechnen von Parametern für die QGIS-Affintransformation?


15

Ich habe einen Vektorgrundriss (DXF), den ich mit dem Dxf2Shp-Plugin in QGIS zu einem leeren Projekt hinzugefügt habe .

Ich habe Tutorials und StackExchange-Threads gelesen, kann aber scheinbar nicht herausfinden, wie ich meine Ebene "georeferenzieren" kann.

Ich gehe davon aus, dass ich irgendwie die Ecken des Gebäudes auswählen und den Lat / Long einstellen kann.

Mein Ziel ist es, ein Shapefile zu exportieren, das ich mit TileMill und TileStache verwenden kann .

Mir wurde klar, dass die Projektkoordinaten tatsächlich Lat / Long-Koordinaten waren:

Bildbeschreibung hier eingeben

und ich muss das Plugin "Affine (Rotation, Translation, Scale)" verwenden, um meine CAD-Zeichnung "zu platzieren".


ähnliche frage
underdark

Antworten:


2

Verwenden von OpenJump zur Berechnung der affinen Transformationsparameter ergibt:

Scale x: 0.02550720529745378
Scale y: 0.025669710194697357
Rotation: -88.6538203230914
Dx: 357101.9 (Translation x)
Dy: 4512814.6 (Translation y)

Wenn diese Parameter richtig angewendet werden, sollte Ihr Shapefile von dem von ihm verwendeten lokalen CRS in WGS84 / UTM Zone 17 Nord (EPSG: 32617) umgewandelt werden. In QGIS können die transformierten Daten dann in ein beliebiges CRS exportiert ("gespeichert als") werden. Zum Beispiel Google Mercator oder Lat / Lon.

Die schlechte Nachricht ist, dass ich das affine QGIS-Plug-In noch nie erfolgreich für Transformationen mit Rotation verwenden konnte. Nach einigen Berichten funktioniert es für andere, aber nicht für mich, also muss es etwas sein, was ich falsch mache. Wenn mir jemand sagen könnte, was das ist, wäre ich dankbar.

Es gab einen Thread hier auf affining Vektoren , die gut lesenswert ist. Die Methode, die ich zum Affinieren von Vektoren verwende, wird hier unten auf der ersten Seite erläutert .

Wenn Sie nicht weiterkommen, können Sie einen Link zum Shapefile veröffentlichen, und wir können alle versuchen, es zu transformieren.

Ein nachträglicher Gedanke. Wenn Sie sich für die OpenJump-Methode entscheiden, benötigen Sie die Koordinaten WGS84 / UTM Zone 17 Nord (EPSG: 32617) für Ihre Lat / Lon-Punkte:

EPSG:32617: 361154.4 4513930.1
lat/long: 40.764622,-82.645056
shapefile coor: 947.3,1242.8

EPSG:32617: 361152.2 4513850.3
lat/long: 40.763903,-82.645064
shapefile coor: 4050.3,1035.7

EPSG:32617: 361246.5 4513886.7
lat/long: 40.764247,-82.643956
shapefile coor: 2710.5,4765.2

2
Es scheint keinen einheitlichen, einfach zu erklärenden Workflow für die affine Transformation in QGIS zu geben. Der Forum-Link in Ihrer Erklärung ist tot. Alle Suchanfragen, wie OpenJump für diese Aufgabe verwendet wird, landen wieder hier. Hast du vielleicht irgendwelche Updates dazu?
Bernd V.

Sie können jetzt GRASS v.transform aus dem Sextante-Toolkit verwenden, um vektoraffinierte Transformationen durchzuführen. Die Dokumentation dazu finden Sie hier: grass.osgeo.org/grass64/manuals/v.transform.html. In Wahrheit müssen Sie sich jedoch nur das Format der Textdatei ansehen. N.
nhopton

27

Zunächst müssen Sie Ihre geografischen Koordinaten in ein kartesisches 2D-Koordinatensystem projizieren, da affine Transformationen nicht für geografische Koordinatensysteme gelten.

Sie können eine affine Transformation von Kontrollpunkten oder von Transformationsparametern aus anwenden. Das QGIS-Plugin fragt Sie nach Transformationsparametern, aber es ist weitaus üblicher, dass ein Benutzer Kontrollpunkte hat.

Von Kontrollpunkten aus können Sie Transformationsparameter berechnen. Für eine affine Transformation gibt es 6 Transformationsparameter. Sie benötigen also mindestens 3 Kontrollpunkte (jeder Kontrollpunkt impliziert 4 Koordinaten: XSource, YSource, XTarget, YTarget). Es wird jedoch empfohlen, dass mehr Kontrollpunkte redundant sind und somit angewendet werden können Least Squares, anhand derer Sie die Qualität der Transformation abschätzen können. Denken Sie daran, dass affine Transformationen sich drehen, verschieben, skalieren (und sogar unterschiedliche Faktoren auf jede Achse anwenden) und Geometrien neigen können.

Kontrollpunkte müssen folgende Form haben:

X SOURCE: Xs
Y SOURCE: Ys
X TARGET: Xt
Y TARGET: Yt

Parameter sind:

a: Scale X 
e: Scale Y
d: Rotation X
b: Rotation Y
c: Translation X
f: Translation Y

Und wir wissen:

Xt = X*a + Y*b + c
Yt = X*d + Y*e + f

Also müssen Sie dieses Gleichungssystem lösen (für 3 Kontrollpunkte):

¦ Xs1 Ys1 1 0 0 0 ¦ | a ¦   ¦ Xt1 ¦
¦ Xs2 Ys2 1 0 0 0 ¦ ¦ b ¦   ¦ Xt2 ¦ 
¦ Xs3 Ys3 1 0 0 0 ¦ ¦ c ¦ = ¦ Xt3 ¦ 
¦ 0 0 0 Xs1 Ys1 1 ¦ ¦ d ¦   ¦ Yt1 ¦ 
¦ 0 0 0 Xs2 Ys2 1 ¦ ¦ e ¦   ¦ Yt2 ¦ 
¦ 0 0 0 Xs3 Ys3 1 ¦ ¦ f ¦   ¦ Yt3 ¦

Wo Parameter a, b, c, d, e und f unbekannt sind.

Nachdem Sie die Parameter a, b, c, d, e und f berechnet haben (zum Beispiel mit diesem Online-Gleichungslöser ), platzieren Sie sie wie folgt in der QGIS-Plug-In-Oberfläche:

X' = a*x + b*y + c
Y' = d*x + e*y + f

oder:

Transformationsparameter affinieren

Ich denke, das löst deine beiden Fragen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.