`terra::rasterize`:具有分类值的点转换为数字

问题描述 投票:0回答:1

我想将分类值从点的形状文件栅格化为栅格。我曾经能够做到这一点,但我的代码不再工作。

这是一个可重现的示例:

points <- tibble::tribble(
  ~x,~y, ~cat,
  -34.125, -58.162,'a',         
  -34.225, -58.462,'b',         
  -34.325, -58.362,'c',         
  -34.425, -58.662,'d',         
  -34.525, -58.762,'e',         
  -34.625, -58.862,'f'
)
points <- st_as_sf(points, coords = c("x", "y"), crs = 4326)
polygons <- st_buffer(points, dist = 0.1) 

v1 <- vect(points)
v2 <- vect(polygons)
r <- rast(v1, res=0.1)

rasterize(v1, r, 'cat')
rasterize(v2, r, 'cat')

结果,我得到:

class       : SpatRaster 
dimensions  : 7, 5, 1  (nrow, ncol, nlyr)
resolution  : 0.1, 0.1  (x, y)
extent      : -34.625, -34.125, -58.862, -58.162  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source(s)   : memory
name        : cat 
min value   :   0 
max value   :   5

class       : SpatRaster 
dimensions  : 7, 5, 1  (nrow, ncol, nlyr)
resolution  : 0.1, 0.1  (x, y)
extent      : -34.625, -34.125, -58.862, -58.162  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source(s)   : memory
categories  : cat 
name        : cat 
min value   :   a 
max value   :   e 

因此,它适用于多边形,但不适用于点。 我希望返回

char
值,而不是数值。

另外,我以前可以使用

first
作为函数,但这似乎不再支持。

谢谢!

r terra rasterize
1个回答
0
投票

出现此问题的原因是,在栅格化点数据时,分类“cat”值会转换为数字代码。发生这种情况是因为栅格化函数在处理点数据时将因子级别转换为其基础整数代码。对于多边形,不会出现此问题,因为

rasterize
函数更适合多边形几何形状处理分类数据。更新代码:

library(tibble)
library(sf)
library(terra)

points <- tibble::tribble(
  ~x, ~y, ~cat,
  -34.125, -58.162, 'a',         
  -34.225, -58.462, 'b',         
  -34.325, -58.362, 'c',         
  -34.425, -58.662, 'd',         
  -34.525, -58.762, 'e',         
  -34.625, -58.862, 'f'
)

points$cat <- as.factor(points$cat)

points <- st_as_sf(points, coords = c("x", "y"), crs = 4326)
v1 <- vect(points)
r <- rast(v1, res = 0.1)

rp <- rasterize(v1, r, 'cat')

rp <- as.factor(rp)

levels(rp) <- data.frame(
  ID = 1:length(levels(points$cat)),
  cat = levels(points$cat)
)

print(rp)

此代码将在栅格化点数据时保留分类值。

© www.soinside.com 2019 - 2024. All rights reserved.