Obliczanie parametrów transformacji afinicznej QGIS?

15

Mam wektorowy floorplan (DXF), który dodałem do pustego projektu w QGIS za pomocą wtyczki Dxf2Shp.

Czytałem samouczki i wątki StackExchange, ale nie mogę się dowiedzieć, jak „georeferencyjnie” moją warstwę?

Zakładam, że mogę jakoś wybrać narożniki budynku i ustawić długość / długość.

Moim celem jest wyeksportowanie pliku kształtu, którego mogę używać z TileMill i TileStache .

Zrozumiałem, że współrzędne projektu były w rzeczywistości współrzędnymi szerokości / długości:

wprowadź opis zdjęcia tutaj

i muszę użyć wtyczki „Affine (Rotation, Translation, Scale)”, aby „umieścić” mój rysunek CAD.

flackend
źródło
podobne pytanie: gis.stackexchange.com/questions/23998/...
podmroku

Odpowiedzi:

2

Użycie OpenJump do obliczenia parametrów transformacji afinicznej daje:

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

Te właściwie zastosowane parametry powinny przekształcić plik shapefile z lokalnego CRS, którego używa, w WGS84 / UTM Zone 17 North (EPSG: 32617). W QGIS przekształcone dane można następnie wyeksportować („zapisać jako”) do dowolnego wymaganego CRS; Na przykład Google Mercator lub lat / lon.

Zła wiadomość jest taka, że ​​nigdy nie byłem w stanie z powodzeniem korzystać z wtyczki afinicznej QGIS do transformacji obejmujących rotację. Według niektórych kont działa dla innych ludzi, ale nie dla mnie, więc to musi być coś, co robię źle. Gdyby ktokolwiek mógł mi powiedzieć, co to jest, byłbym wdzięczny.

Było wątek tutaj na affining wektory, które jest dobrze warto przeczytać. Metodę używaną do wywoływania wektorów wyjaśniono tutaj u dołu pierwszej strony.

Jeśli naprawdę utkniesz, możesz opublikować link do pliku kształtu i wszyscy moglibyśmy spróbować go przekształcić.

Po namyśle. Jeśli zdecydujesz się wypróbować metodę OpenJump, będziesz potrzebować współrzędnych WGS84 / UTM Zone 17 North (EPSG: 32617) dla swoich punktów lat / lon:

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
nhopton
źródło
2
wydaje się, że nie ma spójnego, łatwego do wyjaśnienia przepływu pracy dla transformacji afinicznej w QGIS. Link do forum w twoim wyjaśnieniu jest martwy. Wszystkie wyszukiwania dotyczące używania OpenJump do tego zadania kończą się tutaj ponownie. Czy możesz mieć jakieś aktualizacje na ten temat?
Bernd V.
Możesz teraz używać GRASS v.transform z zestawu narzędzi Sextante do przeprowadzania wektorowych transformacji afinicznych. Dokumentację tego można znaleźć tutaj: grass.osgeo.org/grass64/manuals/v.transform.html, ale tak naprawdę wystarczy przyjrzeć się formatowi pliku tekstowego. N.
nhopton,
27

Najpierw musisz rzutować swoje współrzędne geograficzne na kartezjański układ współrzędnych 2D, ponieważ przekształcenia afiniczne nie dotyczą układów współrzędnych geograficznych.

Możesz zastosować transformację afiniczną z punktów kontrolnych lub parametrów transformacji. Wtyczka QGIS prosi o parametry transformacji, ale użytkownik ma znacznie więcej punktów kontrolnych.

Z punktów kontrolnych można obliczyć parametry transformacji. Do transformacji afinicznej istnieje 6 parametrów transformacji, więc potrzebujesz co najmniej 3 punktów kontrolnych (każdy punkt kontrolny implikuje 4 współrzędne: Xsource, Ysource, Xtarget, Ytarget), ale zaleca się, aby więcej punktów kontrolnych miało nadmiarowość, a tym samym móc zastosować Najmniejsze kwadraty, które pozwoliłyby oszacować jakość transformacji. Pamiętaj, że przekształcenia afiniczne mogą się obracać, przesuwać, skalować (nawet stosując różne czynniki na każdej osi) i pochylać geometrie.

Punkty kontrolne muszą mieć postać:

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

Parametry to:

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

I wiemy:

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

Musisz więc rozwiązać ten układ równań (dla 3 punktów kontrolnych):

¦ 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 ¦

Gdzie parametry a, b, c, d, e i f są nieznane.

Po obliczeniu parametrów a, b, c, d, e i f (na przykład za pomocą tego internetowego rozwiązania równań ) umieść je w interfejsie wtyczki QGIS w następujący sposób:

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

lub:

Parametry transformacji afinicznej

Myślę, że to rozwiązuje twoje dwa pytania.

Germán Carrillo
źródło