Trochę czasu zastanawiałem się nad odpowiedzią na to pytanie. Nie jest to od razu oczywiste z wyszukiwarki Google , więc pomyślałem, że warto opublikować odpowiedź tutaj. Istnieje również dodatkowe pytanie dotyczące niesąsiadujących wielokątów .
Natychmiastowa łatwa odpowiedź: użyj polecenia:
centroids <- getSpPPolygonsLabptSlots(polys)
(Stwierdzono to w opisie klasy klasy danych SpatialPolygonsDataFrame R dla nadrzędnego pakietu przestrzennego w R, sp )
Wydaje się, że robi to dokładnie to samo, co
cents <- SpatialPointsDataFrame(coords=cents, data=sids@data, proj4string=CRS("+proj=longlat +ellps=clrk66"))
w poniższym kodzie, który powinien być replikowany w dowolnej instalacji R (wypróbuj!)
#Rcentroids
install.packages("GISTools")
library(GISTools)
sids <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1],
proj4string=CRS("+proj=longlat +ellps=clrk66"))
class(sids)
plot(sids)
writeSpatialShape(sids, "sids")
cents <- coordinates(sids)
cents <- SpatialPointsDataFrame(coords=cents, data=sids@data,
proj4string=CRS("+proj=longlat +ellps=clrk66"))
points(cents, col = "Blue")
writeSpatialShape(cents, "cents")
centroids <- getSpPPolygonsLabptSlots(sids)
points(centroids, pch = 3, col = "Red")
Gdzie centy (niebieskie) i centroidy (czerwone) są identycznymi centroidami (powinno to pojawić się po uruchomieniu kodu):
Na razie w porządku. Ale gdy obliczasz centroidy wielokątów w QGIS (menu: Wektor | Geometria | Centroidy wielokątów), wyniki dla wielokątów niesąsiadujących są nieco inne:
Pytanie to składa się z 3 rzeczy:
- Szybka i łatwa odpowiedź
- Ostrzeżenie dla osób używających R do obliczania centroidów dla niesąsiadujących wielokątów
- Pytanie o to, jak należy to zrobić w R, aby poprawnie uwzględnić wieloczęściowe (niesąsiadujące) wielokąty