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.
-gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>
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ą:
- „-order 1” dla liniowego
- „-order 2” dla wielomianu drugiego rzędu
- „-order 3” dla wielomianu trzeciego rzędu
- „-tps” dla cienkiego splajnu płytowego.
Na przykład kod dodany do pola „Dodatkowe opcje tworzenia” może wyglądać następująco:
-order 2 -gcp <ungeoref_x1> <ungeoref_y1> <georef_x1> <georef_y1> -gcp <ungeoref_x2> <ungeoref_y2> <georef_x2> <georef_y2>