2012-09-03 45 views
0

我在readOGR()中讀取了shapefile(顯示北海中不同的沉積物類別)。它在很多多邊形中有很多「應該是什麼」的孔,但是使用rasterize()確實消除了所有的孔,因爲它們的孔洞中沒有標記爲TRUE。使用rasterize(...,fun='first')沒有成功。儘管如此,QGIS很好地展示了這些洞。此外,over()正確評估字段值,例如,在一個洞,可能是服用槽「的情節令」這就是爲什麼我想出了類似的優勢:柵格化帶有孔但錯誤插槽的ESRI shapefile

for (i in 1:ncell(raster)){ 
    coo<-xyFromCell(raster,i,spatial=T) 
    col<-colFromX(ra,[email protected][1,1]) 
    row<-rowFromY(ra,[email protected][1,2]) 
    proj4string(coo)<-proj4string(shape) 
    n<-over(coo,shape) 
    raster[col,row]<-n$Prime_FOLK 
} 

光柵化繞開,但它會採取50天內完成。

所以這裏我的問題:

任何人都經歷類似的東西,發現一個解決辦法呢?

(我本來希望包括例如數據,但dput()失敗的SpatialPolygons?!?)

回答

1

是。我也遇到了同樣的問題,因爲沒有正確指定它們,所以沒有正確地進行光柵化。對於我一直使用的形狀文件,第一個多邊形總是主多邊形,第二個多邊形是孔。如果情況並非如此,這可能不適合您的情況。這裏是我寫的代碼,將所有非第一個多邊形更改爲洞= T:

## poly.dat is the SpatialPolygonsDataFrame 

fix.holes<-function(poly.dat){ 
    n.poly.all<-numeric() 
    for (k in 1:nrow([email protected])){ 
    n.poly.all[k]<-length([email protected][[k]]@Polygons) 
    } 
    has.hole<-which(n.poly.all>1) 
    n.poly<-n.poly.all[has.hole] 

    for (k in 1:length(has.hole)){ 
    for (m in 2:n.poly[k]){ 
     [email protected][[has.hole[k]]]@Polygons[[m]]@hole<-T 
    } 
    } 
    return(poly.dat) 
} 
+0

我會檢查這個和報告。非常感謝klar。 – Janhoo