尝试使用R将值从栅格图层提取到每个shapefile时出错

yks3o0rb  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(258)

我试图从一个光栅图层提取值到一个shapefile图层,但这个过程是非常耗时的,但2小时没有我得到任何结果。一般来说,考虑到多边形和光栅的大小,这个过程应该不会超过两个2分钟的情况下,我已经做了。
我得到的信息是:no loop for break/next, jumping to top level
我的代码是:

library(sf)
library(raster)

#shapefile geometry
shp <- sf::st_read("/vsicurl/http://wesleysc352.github.io/seg_s3_r3_m10_fix_estat_amost_val.shp")

#raster geotiff
raster3<-raster::raster("http://wesleysc352.github.io/1final.tif")

#extract values
ext1<-raster::extract(raster3, shp)

OBS编辑:可复制示例的链接:
形状https://github.com/wesleysc352/wesleysc352.github.io/raw/master/seg_s3_r3_m10_fix_estat_amost_val.zip
光栅https://github.com/wesleysc352/wesleysc352.github.io/raw/master/1final.tif

roejwanj

roejwanj1#

使用exactextractr包中的exact_extract。这需要5秒钟:

> system.time({ext1<-exact_extract(raster3, shp)})
  |======================================================================| 100%
   user  system elapsed 
  4.805   0.296   5.103

它给出了像素数和分数覆盖率的 Dataframe 列表:

> head(ext1[[1]])
  value coverage_fraction
1     4              0.25
2     4              0.50
3     4              0.50
4     4              0.25
5     4              0.25
6     4              0.75
> head(ext1[[2]])
  value coverage_fraction
1     4              0.25
2     4              0.50
3     4              0.25
4     4              0.50
5     4              1.00
6     4              0.50
[etc]

这比extract给你的要多(只是像素值的列表)。
为什么它很慢?不知道,不能真正看到点找出exactextractr何时存在。如果你想知道,尝试你的多边形子集。例如,前十行:

> system.time({ext10<-extract(raster3, shp[1:10,])})
   user  system elapsed 
  2.549   0.029   2.574

2.57秒,外推至:

> nrow(shp)
[1] 2308
> 2.5*2308/10
[1] 577

577秒。如果10分钟后整套程序还在运行,我会把它分成几部分,看看是否有一个几何形状不好的奇怪多边形把它搞得一团糟。但在这段时间里,你可以跑exact_extract大约200次,打一轮高尔夫球/钓鱼/从事你选择的愉快休闲活动。

相关问题