Mam warstwę wektorową bez georeferencji, która wymaga georeferencji. W przypadku warstw rastrowych zadanie jest łatwe i jednoznaczne, ale nie mam pojęcia, co mam zrobić z moją warstwą wektorową. Mam kilka punktów kontrolnych o znanych współrzędnych, które powinny stanowić podstawę do transformacji. Powiedzmy, że znam punkty o id-s 1, 2 i 3 powinny mieć współrzędne x1, y1; x2, y2; x3, y3. Oprócz prostego przesuwania może wystąpić pewna transformacja obrotu i skali.
Jakieś pomysły?
Odpowiedzi:
Aby georeferencyjnie warstwę wektorową, wypróbuj wtyczkę qgsAffine.
Więcej informacji znajduje się w menu Gdzie znaleźć qgsaffine?
źródło
Biorąc pod uwagę fakt, że masz pewne punkty kontroli, powinieneś być w stanie użyć transformacji afinicznej do przesunięcia danych wektorowych. Zobacz ten przepis . Proces ten składa się z dwóch części:
Jeśli umieścisz punkty kontrolne w pliku CSV (old_x, old_y, new_x, new_y), możesz po prostu wyciąć i wkleić polecenia R z łącza, aby rozwiązać część współczynników.
źródło
Polecam wtyczkę Vector Bender dla QGIS. Próbowałem i działa dobrze i jest przyjazny dla użytkownika. W zależności od liczby par punktów, które zdefiniujesz, możesz albo:
Można znaleźć krótki film tutaj i radzę Ci przeczytać pomoc Wektor Bender po zainstalowaniu wtyczki.
źródło
Wraz z wydaniem GDAL 1.10 jest to teraz możliwe.
Odbywa się to poprzez wykonanie podstawowej transformacji w ogr2ogr i podanie punktów kontrolnych w znaczniku -gcp. http://www.gdal.org/ogr2ogr.html
Przewodnik znajduje się na stronie : http://gisforthought.com/georeferencing-vector-data-using-qgis-and-ogr2ogr/
źródło
Po prostu musiałem to zrobić i skończyłem na tym:
gcps.points
plikPoniższy skrypt oblicza macierz transformacji afinicznej przy użyciu zapisanych GCP:
źródło
Zobacz moją odpowiedź na Łączenie dwóch wieloboków razem i wypróbuj darmowy openjump.
Myślę, że jego afiniczna transformacja jest znacznie bardziej przyjazna dla użytkownika niż wtyczka qgis affine.
źródło
Kontynuując moje komentarze do odpowiedzi Raynera, GRASS v.transform, który można uruchomić z przybornika Sextante, można wykorzystać do obliczenia parametrów transformacji i zastosowania ich do warstwy wektorowej w celu przeprowadzenia transformacji afinicznej. Wymagany jest plik tekstowy zawierający punkty kontrolne, w pokazanym tutaj formacie .
Jest bardzo łatwy w użyciu i działa dobrze.
źródło
Kilka podanych tutaj odpowiedzi nie jest już opcjami dla QGIS 3 i / lub pozwala jedynie na liniowe transformacje georeferencji pliku wektorowego. To może odpowiedzieć na pytanie PO, ale inni, którzy patrzą na ten post, mogą chcieć innych opcji transformacji plików wektorowych georeferencji.
Problemy z niektórymi rozwiązaniami dla plików wektorowych georeferencji:
Wtyczka qgsAffine pozwala tylko na transformacje liniowe. Oznacza to, że może skalować, obracać i przenosić plik wektorowy, ale nie może zginać ani wypaczać pliku wektorowego. Georeferencer dla plików rastrowych zapewnia więcej opcji i pozwala na różnorodne transformacje, w tym wielomian drugiego rzędu i splajn cienkiej blachy. Nie wydaje się też, aby wtyczka qgsAffine była nadal dostępna w QGIS 3.
Moduł GRASS v.transform jest podobny do wtyczki qgsAffine i pozwala tylko na transformacje liniowe.
Wtyczka Vector Bender wygląda na dobrą opcję, ale nie została w pełni przeniesiona do QGIS 3, więc obecnie nie jest opcją. Wygląda na to, że nie jest już utrzymywany.
Korzystanie z ogr2ogr, jak sugeruje post HeikkiVesanto, jest dobrą opcją. Umożliwia korzystanie z GCP (naziemnych punktów kontrolnych) i określenie, jakiego rodzaju transformacji chcesz. Nigdzie nie mogłem znaleźć instrukcji, jak to zrobić, dlatego zamieściłem kilka instrukcji poniżej:
Wygeneruj zestaw par GCP, z których jeden punkt jest pierwotną lokalizacją w niegeoreferencyjnym pliku wektorowym, a drugi punkt jest pożądaną lokalizacją w georeferencyjnym obszarze roboczym.
Istnieje wiele sposobów generowania GCP. Użyłem wtyczki Georeferencer GDAL w QGIS. Jest to dostępne w menu rozwijanym Raster po zainstalowaniu za pomocą Menedżera wtyczek. Działa tylko na plikach rastrowych, więc najpierw musisz przekonwertować plik wektorowy na plik rastrowy. Jest to możliwe dzięki „Processing Toolbox: GDAL: Konwersja wektorowa: Rasterize (wektor na raster)”. Ustaw rozdzielczość na liczbę, która nadal pozwala zobaczyć funkcje pliku wektorowego.
Georeferencer ma ładny interfejs, który pozwala dodawać wiele punktów GCP. Możesz także przetestować różne transformacje i zobaczyć, które działa najlepiej. I możesz sprawdzić, czy któryś z twoich punktów GCP może być w błędzie, patrząc na ich resztki. Po dodaniu wszystkich punktów GCP i sprawdzeniu, czy podoba ci się wynik, możesz wyeksportować plik GCP z Georeferencji, aby użyć go do georeferencji oryginalnego pliku wektorowego.
Plik GCP musi zostać zmieniony, aby mieć następujący format. Możesz dodać dowolną liczbę punktów GCP, każdy poprzedzony jest -gcp i oddzielony spacją. Uruchomiłem to z ponad 800 punktami GCP i działało świetnie.
Istnieje wiele sposobów zmiany punktów GCP na odpowiedni format. Zaimportowałem je do Excela jako plik csv i utworzyłem kolumnę, aby wyświetlać właściwy format dla każdego punktu. Następnie wkleiłem tę kolumnę do TextEdit i zastąpiłem końce linii spacjami.
Plik wektorowy, do którego chcesz dokonać georeferencji, powinien zostać zaimportowany do twojego obszaru roboczego przy użyciu tego samego SRS, który chcesz dla końcowego pliku georeferencyjnego, który powinien być taki sam SRS jak twój obszar roboczy. Może być daleko od miejsca, w którym powinien być, jeśli pierwotnie używał innego SRS, ale transformacja przeniesie go do właściwej lokalizacji.
Wejdź do ogr2ogr poprzez „Processing Toolbox: GDAL: Konwersja wektorowa: Konwertuj format”. Pozwala to wybrać plik wektorowy, który chcesz georeferencją, oraz plik wyjściowy. W polu „Dodatkowe opcje tworzenia” dodaj polecenie określające żądany typ transformacji, a następnie linię ze wszystkimi punktami GCP.
Polecenia dla różnych typów transformacji obejmują:
Na przykład kod dodany do pola „Dodatkowe opcje tworzenia” może wyglądać następująco:
źródło