我有亞馬遜州(巴西)的shapefile文件,以及其他州(黑人,Solimões,亞馬遜,馬德拉,普魯斯和Juruá)的六條最大的河流。我想利用河流劃分州,以獲得相互之間的區域(馬德拉 - 普魯斯,普魯斯 - 朱魯瓦等)。我想獲得由這些河流劃定的最後6個區域,每個區域都是不同的多邊形。我怎麼做?如何劃分R中的多邊形?
我只找到「裁剪」的算法,而那些給我說是國家內部的河流的區域,這不是我想要的。
我有亞馬遜州(巴西)的shapefile文件,以及其他州(黑人,Solimões,亞馬遜,馬德拉,普魯斯和Juruá)的六條最大的河流。我想利用河流劃分州,以獲得相互之間的區域(馬德拉 - 普魯斯,普魯斯 - 朱魯瓦等)。我想獲得由這些河流劃定的最後6個區域,每個區域都是不同的多邊形。我怎麼做?如何劃分R中的多邊形?
我只找到「裁剪」的算法,而那些給我說是國家內部的河流的區域,這不是我想要的。
繼@jbaums評論,我用gDifference,從包rgeos:
intflv <- gDifference(state,rivers)
但由於「狀態」只有一個多邊形,intflv成爲SpatialPolygons只有一個多邊形對象,由數千子的多邊形。爲了在GIS軟件中更好地工作,我希望它成爲所有數以千計的多邊形的對象,每個都是一個單獨的子多邊形。所以我做:
l <- list()
total <- length([email protected][[1]]@Polygons)
for (i in 1:total) {
print(paste(i,total,sep="/"))
flush.console()
P <- [email protected][[1]]@Polygons[[i]]
l[[length(l)+1]] <- Polygons(list(P),i)
}
sp <- SpatialPolygons(l)
d <- data.frame(IDs=1:total)
intflv1 <- SpatialPolygonsDataFrame(sp,data=d)
writeOGR(intflv1,"shp","intflv","ESRI Shapefile")
結果(只保留最大的領域後):
感謝您花時間爲您自己的問題提供答案。這是我相信我會在未來回來的。 (PS:接受你自己的解決方案沒有錯。) – jbaums
你有河流一樣簡單中心線?因爲你的地圖顯示了很多結構,特別是在1到2之間河流很寬的地方。 – Spacedman
看看[這個答案](http://stackoverflow.com/a/5865603/489704)。 – jbaums
我只是在尋找「剪輯」和「分裂」這兩個詞,@RichardScriven。 「差異」是關鍵字! – Rodrigo