#r #raster #sf #r-stars
Вопрос:
Я хотел бы нарисовать счетчик растров ( l
) только для категории «цель» в x
растре без учета значений NA. Я стараюсь делать:
# Packages
library(stars)
library(sf)
#Vectorizing a raster object to an sf object
tif = system.file("tif/L7_ETMs.tif", package = "stars")
x = read_stars(tif)[, 1:50, 1:50, 1:2]
x[[1]] = round(x[[1]]/5)
x[[1]] = ifelse(x[[1]]<10,NA,"target")
str(x[[1]])
#Polygonizing
l = st_contour(x)
plot(l[1])
Error in CPL_write_gdal(mat, file, driver, options, type, dims, from, :
Not compatible with requested type: [type=character; target=double].
Но это не работает. Пожалуйста, какая-нибудь помощь в этом?
Заранее спасибо,
Alexandre
Ответ №1:
В вашем скрипте есть несколько ошибок, во-первых, st_contour
это указывает на то, что он несовместим с типом символа (ссылаясь на «целевую» строку, заданную вами в растре). Во-вторых, я бы предложил использовать аргумент breaks внутри st_contour
, чтобы установить целевое значение, для которого вы хотите получить контуры. Кроме того, вы можете использовать x[rule] <- NA
для маскировки определенных значений в растре. Я внес другие изменения в ваш код, которые могли бы помочь:
# Let's stay with only the first band, indicated in the final dimension
x = read_stars(tif)[, 1:50, 1:50, 1]
x = round(x/5)
# Calculate the min and max of the raster values
purrr::map(x, min)
# 10
purrr::map(x, max)
# 28
# Mask values lower than 10
# However, this does not make any change, because the lowest value is 10
x[x<10] <- NA
# Take a look at the image
plot(x)
# Obtain the contours
l = st_contour(x,
# Remove NA
na.rm = T,
# Obtain contour lines instead of polygons
contour_lines = TRUE,
# raster values at which to draw contour levels
breaks = 12)
# Plot the contours
plot(l)