Używam QGIS 1.8 Lisboa. Po obliczeniu centroidów z pliku kształtu wielokąta, jeśli niektóre z nich leżą poza obrysem wielokąta, chciałbym przenieść je na wielokąt, z którego pochodzą. Kryterium powinno być jednoznaczne, ponieważ muszę je wykorzystać do wyodrębnienia współrzędnych, które zostaną użyte jako kod identyfikacyjny samego wielokąta. Dlatego procedura powinna wyprowadzać tę samą lokalizację punktu za każdym razem, gdy działa dla tego samego wielokąta (nie przypadkowa pozycja, jak ta podana przez funkcję „losowych punktów”, która daje nowy wynik za każdym razem, gdy jest uruchamiana).
9
Odpowiedzi:
Możesz użyć biblioteki Pythona Shapely, która zapewnia funkcję,
representative_point()
która z pewnością leży w obrębie wielokąta.Oto skrypt w języku Python, który można uruchomić w konsoli QGIS Python. Należy wybrać warstwę wielokąta, dla której chcesz utworzyć atrybut. Funkcja przyjmuje nazwę atrybutu, który chcesz zaktualizować. Atrybut musi już istnieć w warstwie, musi być ciągiem znaków i powinien być wystarczająco długi (30 znaków).
Oto przykład punktów znalezionych przez algorytm:
źródło
Narzędzie Ftools centroid może umieścić centroid poza wielokątem, jeśli jest wklęsły.
ST_PointOnSurface
na pewno zrobi co chcesz. Możesz użyć polecenia z QGIS, jeśli zainstalowałeś przy użyciu SPIT, aby przenieść plik shapefile do PostGIS, a następnie użyć wtyczki PgQuery do uruchomienia zapytania.Alternatywnie, jeśli instalacja PostGIS jest trochę jednorazowa, możesz użyć Spatialite z poziomu QGIS. Następnie możesz użyć wtyczki QSpatiaLite, aby zaimportować dane do SpatiaLite i uruchomić zapytanie (wyróżnienia SpatialLite
ST_PointOnSurface
).źródło
kiedy dobrze cię rozumiem, użyj: Vector-> Research Tools_> Random Points. Teraz wybierz w „Stratified Sampling Design (Individual polygons)” użyj wartości z pola wejściowego i użyj odpowiedniego pola, które daje liczbową wartość punktów, które powinny być wygenerowane dla każdego innego wielokąta
źródło
Wtyczka realcentroids, dostępna do zainstalowania poprzez Wtyczki> Zarządzaj i instaluj Wtyczki działały dla mnie w QGIS 2.2, aby generować punkty podobne do centroidów, wklęsłe wewnątrz każdego wielokąta (punkt będzie leżał bardzo blisko krawędzi). Wypróbowałem narzędzie Losowe punkty, zgodnie z sugestią Kurta, i chociaż podałem 1 punkt na wielokąt, zamiast tego generuje dwa. Dodatkową wadą jest to, że w większości przypadków punkty nie reprezentują środka ciężkości, ponieważ są losowe.
http://www.agt.bme.hu/gis/qgis/realcentroid/
źródło