2014-03-24 72 views
3

我有亞馬遜州(巴西)的shapefile文件,以及其他州(黑人,Solimões,亞馬遜,馬德拉,普魯斯和Juruá)的六條最大的河流。我想利用河流劃分州,以獲得相互之間的區域(馬德拉 - 普魯斯,普魯斯 - 朱魯瓦等)。我想獲得由這些河流劃定的最後6個區域,每個區域都是不同的多邊形。我怎麼做?如何劃分R中的多邊形?

enter image description here

我只找到「裁剪」的算法,而那些給我說是國家內部的河流的區域,這不是我想要的。

+0

你有河流一樣簡單中心線?因爲你的地圖顯示了很多結構,特別是在1到2之間河流很寬的地方。 – Spacedman

+1

看看[這個答案](http://stackoverflow.com/a/5865603/489704)。 – jbaums

+1

我只是在尋找「剪輯」和「分裂」這兩個詞,@RichardScriven。 「差異」是關鍵字! – Rodrigo

回答

3

繼@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") 

結果(只保留最大的領域後):

enter image description here

+1

感謝您花時間爲您自己的問題提供答案。這是我相信我會在未來回來的。 (PS:接受你自己的解決方案沒有錯。) – jbaums