Ich habe ein wenig Zeit damit verbracht, die Antwort auf diese Frage zu finden. Aus einer Google-Suche ist dies nicht sofort ersichtlich. Daher ist es möglicherweise hilfreich, die Antwort hier zu veröffentlichen. Es gibt auch eine zusätzliche Frage zu nicht zusammenhängenden Polygonen .
Sofortige einfache Antwort: benutze den Befehl:
centroids <- getSpPPolygonsLabptSlots(polys)
(Dies wurde in der Klassenbeschreibung der R-Datenklasse SpatialPolygonsDataFrame für das übergeordnete räumliche Paket in R, sp gefunden. )
Dies scheint genau dasselbe zu tun wie
cents <- SpatialPointsDataFrame(coords=cents, data=sids@data, proj4string=CRS("+proj=longlat +ellps=clrk66"))
im folgenden Code, der bei jeder R-Installation replizierbar sein sollte (probieren Sie es aus!)
#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")
Wo Cent (blau) und Centroide (rot) identische Centroide sind (dieser Plot sollte erscheinen, nachdem Sie den Code ausgeführt haben):
So weit, ist es gut. Wenn Sie jedoch in QGIS Polygonschwerpunkte berechnen (Menü: Vektor | Geometrie | Polygonschwerpunkte), ergeben sich geringfügig andere Ergebnisse für nicht zusammenhängende Polygone:
Diese Frage besteht also aus drei Dingen:
- Eine schnelle und einfache Antwort
- Eine Warnung für Benutzer, die R verwenden, um Schwerpunkte für nicht zusammenhängende Polygone zu berechnen
- Eine Frage, wie in R mehrteilige (nicht zusammenhängende) Polygone richtig berücksichtigt werden sollen
Antworten:
Erstens kann ich keine Dokumentation finden, die dies sagt
coordinates
odergetSpPPolygonsLabptSlots
den Schwerpunkt zurückgibt. Tatsächlich wird die letztere Funktion jetzt als "Veraltet" angezeigt und sollte eine Warnung ausgeben.Was Sie für die Berechnung des Schwerpunkts als Massenmittelpunkt eines Features benötigen, ist die
gCentroid
Funktion aus demrgeos
Paket. Tunhelp.search("centroid")
wird dies gefunden haben.sollte den Unterschied zeigen und mit den Qgis-Zentroiden identisch sein.
quelle
Hier ist ein Ansatz mit sf. Wie ich demonstriere, sind die Ergebnisse von sf :: st_centroid und rgeos :: gCentroid identisch.
quelle
Um dieses Problem zu lösen, habe ich eine Funktion generiert, die das Polygon negativ puffert, bis es klein genug ist, um ein konvexes Polygon zu erwarten. Die zu verwendende Funktion ist
centroid(polygon)
quelle