шейп-файл в растровый файл .tif R

#r #geospatial #raster #spatial #sf

#r #геопространственный #растровый #пространственный #sf

Вопрос:

Я добавил новую переменную для кодирования ячеек моего файла формы, я хочу сохранить этот файл как .tif и получить всю информацию о моей новой переменной. Я сохранил его как новый .shp файл, а затем использую shp2raster функцию, но получаю ошибку.

 beijing10<-sf::read_sf("Landuse/Beijing2010.shp")
beijing10<-mutate(beijing10,land=ifelse(CODE%in%c(41,42),"Cultivated Land","Unused Land"))
st_write(beijing10,"beijing2010new.shp")
shp2raster("beijing2010new.shp",column = "land")
  

ошибка:
Error in p$rasterize(nrow(r), ncol(r), as.vector(extent(r)), values, background) : Not compatible with requested type: [type=character; target=double].

Я тоже пробую это, но у меня не получается 2 класса.

 r <- raster(ncol=180, nrow=180) #can take any value
extent(r) <- extent(beijing10)
rr<-rasterize(beijing10,r,'land')
writeRaster(rr,"beijing2.tif",options=c('TFW=YES'),'land')
  

Есть ли другой вариант получения .tif файла. Может ли кто-нибудь помочь мне понять, как работает преобразование и как я должен добавить правильный код, чтобы мне не нужно было использовать ArcMap для получения файла. Спасибо

Ответ №1:

Вот минимальный, воспроизводимый, автономный пример

 library(raster)
p <- shapefile(system.file("external/lux.shp", package="raster"))
r <- raster(p, res=0.01)
p$land <- ifelse(p$ID_2 > 6, "Cultivated Land", "Unused Land")
  

Ошибка возникает из-за того, что вы пытаетесь растрировать символьную переменную. Это не поддерживается. Однако вы можете использовать коэффициент

 p$land <- as.factor(p$land)
r <- rasterize(p, r, "land")
r
#class      : RasterLayer 
#dimensions : 73, 78, 5694  (nrow, ncol, ncell)
#resolution : 0.01, 0.01  (x, y)
#extent     : 5.74414, 6.52414, 49.45162, 50.18162  (xmin, xmax, ymin, ymax)
#crs        :  proj=longlat  datum=WGS84  no_defs 
#source     : memory
#names      : layer 
#values     : 1, 2  (min, max)