Я потратил немного времени, чтобы выяснить ответ на этот вопрос. Это не сразу очевидно из поиска в Google , поэтому я подумал, что может быть полезно опубликовать ответ здесь. Существует также дополнительный вопрос о несмежных многоугольниках .
Мгновенный легкий ответ: используйте команду:
centroids <- getSpPPolygonsLabptSlots(polys)
(Это было найдено в описании класса класса данных SpatialPolygonsDataFrame R для всеобъемлющего пространственного пакета в R, sp )
Это похоже на то же самое, что и
cents <- SpatialPointsDataFrame(coords=cents, data=sids@data, proj4string=CRS("+proj=longlat +ellps=clrk66"))
в следующем коде, который должен быть реплицируемым на любой установке R (попробуйте!)
#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")
Где центы (синие) и центроиды (красные) являются идентичными центроидами (этот график должен появиться после запуска кода):
Все идет нормально. Но когда вы вычисляете центроиды многоугольников в QGIS (меню: Вектор | Геометрия | Центроиды многоугольников), результаты для несмежных многоугольников немного отличаются:
Итак, этот вопрос состоит из трех вещей:
- Быстрый и простой ответ
- Предупреждение для людей, использующих R для вычисления центроидов для несмежных полигонов
- Вопрос о том, как это должно быть сделано в R для правильного учета многочастных (несмежных) полигонов