J'ai passé un peu de temps à trouver la réponse à cette question. Ce n'est pas immédiatement évident à partir d'une recherche Google. Nous avons donc pensé qu'il serait utile de poster la réponse ici. Il y a aussi une question supplémentaire sur les polygones non contigus .
Réponse facile instantanée: utilisez la commande:
centroids <- getSpPPolygonsLabptSlots(polys)
(Cela a été trouvé dans la description de classe de la classe de données SpatialPolygonsDataFrame R pour le package spatial global dans R, sp )
Cela semble faire exactement la même chose que
cents <- SpatialPointsDataFrame(coords=cents, data=sids@data, proj4string=CRS("+proj=longlat +ellps=clrk66"))
dans le code suivant, qui devrait être réplicable sur toute installation de R (essayez-le!)
#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")
Où les cent (bleu) et les centroïdes (rouge) sont des centroïdes identiques (le tracé devrait apparaître après l'exécution du code):
Jusqu'ici tout va bien. Mais lorsque vous calculez des centroïdes de polygones dans QGIS (menu: Vecteur | Géométrie | Centroïdes polygonaux), les résultats obtenus pour les polygones non contigus sont légèrement différents:
Donc, cette question est 3-choses:
- Une réponse rapide et facile
- Avertissement pour les personnes utilisant R pour calculer les centroïdes de polygones non contigus
- Une question sur la manière de procéder en R pour prendre en compte correctement les polygones à plusieurs parties (non contigus)