0

我有一个 shapefile(显示北海不同的沉积物类别),用readOGR(). 它在许多多边形中有很多“应该是什么”的孔,但是使用rasterize()确实消除了所有孔,因为它们没有TRUE在孔槽中标记。使用rasterize(...,fun='first')没有成功。尽管如此,QGIS 很好地显示了这些漏洞。此外,over()正确评估字段值,例如,在一个洞中,可能利用插槽“绘图顺序”,这就是为什么我想出类似的东西:

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

绕过光栅化,但需要 50 天才能完成。

所以这是我的问题:

有没有人经历过类似的事情并找到了解决方法?

(我本来希望包含示例数据,但dput()在 SpatialPolygons 上失败了?!?)

4

1 回答 1

1

是的。我有同样的问题,没有正确地光栅化孔,因为它们没有正确指定。对于我一直使用的形状文件,第一个多边形始终是主多边形,第二个到最后一个是孔。如果您不是这种情况,则这可能不适用于您的情况。这是我编写的将所有非第一个多边形更改为holes=T的代码:

## poly.dat is the SpatialPolygonsDataFrame

fix.holes<-function(poly.dat){
  n.poly.all<-numeric()
  for (k in 1:nrow(poly.dat@data)){
    n.poly.all[k]<-length(poly.dat@polygons[[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]){
      poly.dat@polygons[[has.hole[k]]]@Polygons[[m]]@hole<-T
    }
  }
  return(poly.dat)
}
于 2012-09-13T02:22:07.360 回答