Passei um tempo tentando descobrir a resposta para essa pergunta. Não é imediatamente óbvio em uma pesquisa no Google , então achei útil postar a resposta aqui. Há também uma pergunta adicional sobre polígonos não contíguos .
Resposta fácil instantânea: use o comando:
centroids <- getSpPPolygonsLabptSlots(polys)
(Isso foi encontrado na descrição da classe da classe de dados SpatialPolygonsDataFrame R para o pacote espacial abrangente em R, sp )
Isso parece fazer exatamente a mesma coisa que
cents <- SpatialPointsDataFrame(coords=cents, data=sids@data, proj4string=CRS("+proj=longlat +ellps=clrk66"))
no código a seguir, que deve ser replicável em qualquer instalação do R (tente!)
#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")
Onde centavos (azul) e centróides (vermelho) são centróides idênticos (o gráfico deve aparecer após a execução do código):
Por enquanto, tudo bem. Mas quando você calcula os centróides de polígono no QGIS (menu: Vetor | Geometria | Centroides de polígonos), há resultados ligeiramente diferentes para polígonos não contíguos:
Portanto, esta pergunta é composta por três coisas:
- Uma resposta rápida e fácil
- Um aviso para pessoas que usam R para calcular centróides para polígonos não contíguos
- Uma pergunta sobre como deve ser feito no R para considerar adequadamente os polígonos de várias partes (não contíguas)