Проблема с преобразованием большого растра в полигональный с помощью R

#r #polygon #raster #r-raster

#r #полигон #растровый #r-растр

Вопрос:

У меня довольно большой растр (384 МБ), который я пытаюсь преобразовать в шейп-файл полигона в R. rastertoPolygons Функция из пакета raster, похоже, не справляется с этим, поскольку я попытался запустить ее, но сдался после того, как она работала более 7 часов.

Я также пытался использовать gdal_polygonize.py из GDAL в python с помощью этой функции Джона Баумгартнера, но после запуска функции в течение более 30 минут у меня все еще ничего нет. Я просто не позволяю ему работать достаточно долго? У меня сложилось впечатление, что gdal_polyonize.py предполагалось, что это будет очень быстро, то есть за секунды.

Вот ссылка на мой растровый файл.

Любые рекомендации будут высоко оценены.

Ответ №1:

terra делает это намного быстрее, чем raster (но не быстрее, чем GDAL, потому что это то, что он использует)

 library(terra)
r <- rast("top6loss.tif")
 

Обратите внимание, что у вас 22 миллиарда ячеек (это много по большинству стандартов, и именно поэтому это занимает некоторое время):

 ncell(r)
#[1] 21989436765
 

Он заканчивается через 10 минут на моем ноутбуке

 system.time(p <- as.polygons(r))
#   user  system elapsed 
# 562.34    3.54  568.77 

p
#class       : SpatVector 
#geometry    : polygons 
#dimensions  : 6, 1  (geometries, attributes)
#extent      : -13.54777, 12.33558, -6.134633, 9.781491  (xmin, xmax, ymin, ymax)
#coord. ref. :  proj=longlat  datum=WGS84  no_defs 
 

Это 6 значений

 as.data.frame(p)
#  top6loss
#1     2254
#2     5418
#3    13623
#4    14344
#5    15885
#6    19654
 

Вы можете сохранить файл с помощью

 writeVector(p, "cells.shp")
 

Комментарии:

1. это сработало отлично, большое вам спасибо!