【问题标题】:rasterize ESRI shapefile with holes but FALSE hole slots光栅化 ESRI shapefile 有孔但 FALSE 孔槽
【发布时间】:2012-09-03 15:16:39
【问题描述】:

我有一个使用readOGR() 读入的 shapefile(显示北海的不同沉积物类别)。它有一个 许多多边形中有很多“应该是什么”孔,但使用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()fails 在 SpatialPolygons 上?!?)

【问题讨论】:

    标签: r gis geospatial


    【解决方案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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      相关资源
      最近更新 更多