我正在使用John Baumgrtner的gdal_polygonizeR
(https://johnbaumgartner.wordpress.com/2012/07/26/getting-rasters-into-shape-from-r/)将栅格隐蔽到R中的多边形。-尝试了raster
pkg rasterToPolygons
函数,它花了很多时间; gdal_polygonizeR
更快。无论如何,我都有一个要转换为多边形的533个栅格文件(不同范围)的列表。 gdal_polygonizeR
函数在调用单个列表元素时有效,但是我尝试使用lapply
在所有列表元素上使用它并获得错误消息。参见下面的代码:
#path to folder containing all .tif raster files
dir <- "/path/to/raster/files"
#create a list of the files in the folder
files <- list.files(path = dir, pattern = ".tif$")
#use lapply to import/create list of all files in folder
rasterl_50 <- lapply(paste0(dir, files), raster)
#test gdal_polygonizeR function on single list element
gdal_polygonizeR(rasterl_50[[1]]) #works properly
#loop thru all elements in list
lapply(rasterl_50, gdal_polygonizeR)
输出=前六(6)个元素似乎运行正常,但在[[7]]处出现以下错误消息:
wfp1 <-gdal_polygonizeR(rasterl_50 [[1]]) 创建格式为ESRI Shapefile的输出/var/folders/s9/pm92gdl94h18k4n6026cb8x00000gn/T//RtmpvRRvA4/file23d4dc99d8d.shp。 0 ... 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 100-完成 wfp2 <-gdal_polygonizeR(rasterl_50 [[2]]) 创建格式为ESRI Shapefile的输出/var/folders/s9/pm92gdl94h18k4n6026cb8x00000gn/T//RtmpvRRvA4/file23d7698a853.shp。 0 ... 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 100-完成 wfp3 <-gdal_polygonizeR(rasterl_50 [[3]]) 创建格式为ESRI Shapefile的输出/var/folders/s9/pm92gdl94h18k4n6026cb8x00000gn/T//RtmpvRRvA4/file23d30d4d703.shp。 0 ... 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 100-完成 wfp4 <-gdal_polygonizeR(rasterl_50 [[4]]) 创建格式为ESRI Shapefile的输出/var/folders/s9/pm92gdl94h18k4n6026cb8x00000gn/T//RtmpvRRvA4/file23d24036d07.shp。 0 ... 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 100-完成 wfp5 <-gdal_polygonizeR(rasterl_50 [[5]]) 创建格式为ESRI Shapefile的输出/var/folders/s9/pm92gdl94h18k4n6026cb8x00000gn/T//RtmpvRRvA4/file23d4683ed87.shp。 0 ... 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 100-完成 wfp6 <-gdal_polygonizeR(rasterl_50 [[6]]) 创建格式为ESRI Shapefile的输出/var/folders/s9/pm92gdl94h18k4n6026cb8x00000gn/T//RtmpvRRvA4/file23d4e23b4d1.shp。 0 ... 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 100-完成 wfp7 <-gdal_polygonizeR(rasterl_50 [[7]]) 创建格式为ESRI Shapefile的输出/var/folders/s9/pm92gdl94h18k4n6026cb8x00000gn/T//RtmpvRRvA4/file23d6791d108.shp。 0 ... 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 100-完成 readOGR(dirname(outshape),layer = basename(outshape),verbose =!quiet)中的错误: 找不到功能 另外:警告消息: 在ogrFIDs(dsn = dsn,layer = layer)中: 显示回溯
使用调试重新运行 readOGR(dirname(outshape),layer = basename(outshape),verbose =!quiet)中的错误: 找不到功能
如果有人对使用lapply
或for循环等的解决方案有想法,请答复。谢谢
答案 0 :(得分:0)
解决方案:我必须在每个单独的列表元素上运行distances, indices = model_knn.kneighbors(
test_df.loc[query_index,:].values.reshape(1, -1),
return_distance=True
)
,发现列表中的几个栅格文件不包含任何值(这是由于gdal_polygonizeR
函数先前应用于栅格)的结果。我从列表中删除了这些文件,reclassify
正常运行。这是代码:
lapply
更新: 更好的做法是,首先删除所有NA的栅格:
#remove 'no value' elements from the list
new_rastlist <-
rasterlist[c(-7,-14,-36,-89,-191,-310,-432,-436,-476,-493,-494,-501)]
#then try again to use lapply
polyl <- lapply(rastlist, gdal_polygonizeR)