Saya telah menghabiskan sedikit waktu mencari tahu jawaban untuk pertanyaan ini. Ini tidak segera terlihat dari pencarian Google , jadi mungkin bermanfaat untuk mengirim jawabannya di sini. Ada juga pertanyaan tambahan tentang poligon yang tidak berdekatan .
Jawaban mudah instan: gunakan perintah:
centroids <- getSpPPolygonsLabptSlots(polys)
(Ini ditemukan dalam deskripsi kelas dari kelas data SpatialPolygonsDataFrame R untuk paket spasial menyeluruh di R, sp )
Ini tampaknya melakukan hal yang persis sama dengan
cents <- SpatialPointsDataFrame(coords=cents, data=sids@data, proj4string=CRS("+proj=longlat +ellps=clrk66"))
dalam kode berikut, yang seharusnya dapat direplikasi pada instalasi R apa saja (coba!)
#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")
Di mana sen (biru) dan centroid (merah) adalah centroid identik (plot ini seharusnya muncul setelah Anda menjalankan kode):
Sejauh ini baik. Tetapi ketika Anda menghitung poligon centroid di QGIS (menu: Vektor | Geometri | Poligon Centroid), ada hasil yang sedikit berbeda untuk poligon yang tidak berdekatan:
Jadi pertanyaan ini adalah 3 hal:
- Jawaban yang cepat dan mudah
- Peringatan untuk orang yang menggunakan R untuk menghitung centroid untuk poligon yang tidak berdekatan
- Sebuah pertanyaan tentang bagaimana hal itu harus dilakukan dalam R untuk memperhitungkan poligon multi-bagian (tidak berdampingan) dengan benar
Jawaban:
Pertama, saya tidak dapat menemukan dokumentasi yang mengatakan itu
coordinates
ataugetSpPPolygonsLabptSlots
mengembalikan centroid pusat massa. Bahkan fungsi yang terakhir sekarang muncul sebagai 'Usang' dan harus mengeluarkan peringatan.Apa yang Anda inginkan untuk menghitung centroid sebagai pusat fitur adalah
gCentroid
fungsi darirgeos
paket. Melakukanhelp.search("centroid")
akan menemukan ini.harus menunjukkan perbedaan, dan harus sama dengan centroid Qgis.
sumber
di sini adalah pendekatan menggunakan sf. Seperti yang saya tunjukkan, hasil dari sf :: st_centroid dan rgeos :: gCentroid adalah sama.
sumber
Apa yang saya lakukan untuk mengatasi masalah ini adalah menghasilkan fungsi yang secara negatif menyangga poligon hingga cukup kecil untuk mengharapkan poligon cembung. Fungsi yang digunakan adalah
centroid(polygon)
sumber