Chciałbym obrócić zestaw punktów wektorowych w QGIS o dowolną liczbę stopni wokół punktu centralnego (lub dowolnego punktu).
Jest to podobne do ostatniego pytania dotyczącego tworzenia regularnej siatki ; zasugerowano, aby użyć narzędzia „Affine Transformation” (co, jak zakładam, oznaczało wtyczkę), aby obrócić lub przesunąć siatkę punktów o dowolny kąt lub odległość. Podejrzewam, że nie rozumiem, jak to działa, i nie byłem w stanie sprawić, by działał.
Tworzę regularną siatkę punktów w QGIS i upewniam się, że strefa UTM jest ustawiona poprawnie zarówno dla warstwy, jak i projektu, włączam edycję dla warstwy, a następnie otwieram okno dialogowe wtyczki (qgsAffine):
Wybieram „całą warstwę”, a następnie, chcąc obrócić całe pole punktów o 15 °, umieszczam 15 w obu polach „obrotu” (które mogą być tam, gdzie dzieje się źle). Operacja powoduje obrócenie punktów gdzieś poza planetą!
Czy to odpowiednie narzędzie do pracy? Idealnie chciałbym obrócić zestaw punktów dotyczących ich wspólnego centrum.
Aktualizacja : qgsAffine to tylko myśl; jeśli możemy to zrobić w dowolnym narzędziu QGIS, będę szczęśliwy!
Aktualizacja 2 : qgsAffine jest użyteczny, JEŻELI znasz odpowiednie numery do podłączenia (patrz odpowiedź poniżej, dziękuję Mike!). Arkusz kalkulacyjny / kalkulator działa dobrze, lub oto funkcja R, aby uzyskać liczby bezpośrednio:
## 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)
}
Tak więc obrócenie siatki punktów w północnej Ugandzie (UTM 36N) affine(578988, 419210, 30)
daje:
scaleX scaleY rotX rotY transX transY
1 0.8660254 0.8660254 0.5 -0.5 287174.7 -233330.5
... które, wprowadzone w oknie dialogowym qgsAffine, poprawnie obraca punkty.
źródło
Odpowiedzi:
Możesz to zrobić w PostGIS za pomocą ST_Affine . Funkcję obracania wokół dowolnego punktu dodano do ST_Rotate dla PostGIS 2.0.
Jeśli masz wcześniejszą wersję (np. PostGIS 1.5 lub nawet wcześniejszą), możesz dodać te funkcje:
Zobacz przykłady na ST_Rotate , aby zorientować się, w jaki sposób używać go obrócić geometrię wokół x , y punktu, w tym centrum ciężkości (wspólny).
Ponieważ wszyscy lubimy matematykę, macierz transformacji z powyższych funkcji jest reprezentowana jako:
Gdzie θ to obrót w kierunku przeciwnym do ruchu wskazówek zegara wokół początku, x0 to wschód / długość geograficzna punktu początkowego, a y0 to północ / szerokość geograficzna. Ta matematyka mogłaby zostać zaadaptowana do dowolnego narzędzia transformacji afinicznej.
Aby skorzystać z narzędzia qgsAffine, musisz zrozumieć, dokąd płyną wartości macierzy. Dobry szablon arkusza kalkulacyjnego jest również wymagany do wykonywania wstępnych obliczeń. Okno dialogowe qgsAffine wygląda mniej więcej tak:
gdzie:
Na przykład, jeśli chcesz obrócić wielokąt o 30 ° zgodnie z ruchem wskazówek zegara wokół 42 ° S, 174 ° E, oto dane wejściowe do arkusza kalkulacyjnego:
Następnie skopiuj / wklej wyniki z arkusza kalkulacyjnego do prawego pola. Za pomocą kolejności kart w oknie dialogowym:
Ten sam przykład z PostGIS wyglądałby mniej więcej tak:
źródło
Nigdzie nie próbowałem obracać warstw wektorowych za pomocą qgsAffine i myślę, że nie jestem sam. To pytanie pojawiło się ostatnio na forum QGIS i znaleziono rozwiązanie, używając (darmowego) OpenJump. Spójrz na ten wątek (pod koniec):
http://forum.qgis.org/viewtopic.php?f=2&t=10126&sid=28473d53d244a4cd2a6f91887811ef02
Oczywiście możesz również użyć tego narzędzia, aby wykonać prosty obrót danych.
źródło