raster::distance() 无法识别 NA 细胞
raster::distance() not recognizing NA cells
我想计算从 NA 像元到空间对象的距离。但是,distance() 函数无法识别我创建的 NA 单元格。这是可重现的代码:
制作空间对象:
library(raster)
CAN <- getData("GADM", country = "Canada", level = 1)#level 1 just gives borders for provinces
library(sf)#to make sf object
sf_CAN <- as(CAN,"sf")
st_crop_CAN <- st_crop(sf_CAN, xmin = -60.17, xmax = -59.65, ymin = 43.92, ymax = 44.05) #bounding box gives sable island
创建光栅文件并使用掩码然后使用 distance():
library(marmap)
shelf <- getNOAA.bathy(lon1 = -75, lon2 = -45,
lat1 = 35, lat2 = 60, resolution = 4)
library(raster)
CAN <- getData("GADM", country = "Canada", level = 1)#level 1 just gives borders for provinces
library(sf)#to make sf object
sf_CAN <- as(CAN,"sf")
st_crop_CAN <- st_crop(sf_CAN, xmin = -60.17, xmax = -59.65, ymin = 43.92, ymax = 44.05) #bounding box gives sable island
shelf_dis <- marmap::as.raster(shelf)
values(shelf_dis) <- NA
newR <- mask(shelf_dis,as(st_crop_CAN$geometry, "Spatial"))
dist_sable <- distance(newR)
#error code after distance()
Error in .local(x, y, ...) :
RasterLayer has no NA cells (for which to compute a distance)
我看到的一个问题是 newR 对象的最小值和最大值为 NA,如下所示:
> newR
class : RasterLayer
dimensions : 375, 450, 168750 (nrow, ncol, ncell)
resolution : 0.06666667, 0.06666667 (x, y)
extent : -75, -45, 35, 60 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +no_defs
source : memory
names : layer
values : NA, NA (min, max)
因此无法区分 NA 单元和空间对象,因为只有 NA 单元开始?
我不确定我的方法是否是最好的方法。任何建议或帮助表示赞赏。归根结底,我只是想获取点(未提供)到空间对象的距离。这部分使用 extract() 似乎很容易。我只需要得到这个新的光栅文件!这是我第一次在 R 中进行空间工作。
是的,必须有不是 NA
的单元格才能计算到的距离。一般的做法通常是这样
library(raster)
# example polygons
filename <- system.file("external/lux.shp", package="raster")
p <- shapefile(filename)
pp <- crop(p, extent(5.698, 6.231, 49.442, 49.781))
# create or use existing raster
r <- raster(p, res=0.01)
r <- rasterize(pp, r)
d <- distance(r)
d
#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 : 0, 49114.11 (min, max)
我想计算从 NA 像元到空间对象的距离。但是,distance() 函数无法识别我创建的 NA 单元格。这是可重现的代码:
制作空间对象:
library(raster)
CAN <- getData("GADM", country = "Canada", level = 1)#level 1 just gives borders for provinces
library(sf)#to make sf object
sf_CAN <- as(CAN,"sf")
st_crop_CAN <- st_crop(sf_CAN, xmin = -60.17, xmax = -59.65, ymin = 43.92, ymax = 44.05) #bounding box gives sable island
创建光栅文件并使用掩码然后使用 distance():
library(marmap)
shelf <- getNOAA.bathy(lon1 = -75, lon2 = -45,
lat1 = 35, lat2 = 60, resolution = 4)
library(raster)
CAN <- getData("GADM", country = "Canada", level = 1)#level 1 just gives borders for provinces
library(sf)#to make sf object
sf_CAN <- as(CAN,"sf")
st_crop_CAN <- st_crop(sf_CAN, xmin = -60.17, xmax = -59.65, ymin = 43.92, ymax = 44.05) #bounding box gives sable island
shelf_dis <- marmap::as.raster(shelf)
values(shelf_dis) <- NA
newR <- mask(shelf_dis,as(st_crop_CAN$geometry, "Spatial"))
dist_sable <- distance(newR)
#error code after distance()
Error in .local(x, y, ...) :
RasterLayer has no NA cells (for which to compute a distance)
我看到的一个问题是 newR 对象的最小值和最大值为 NA,如下所示:
> newR
class : RasterLayer
dimensions : 375, 450, 168750 (nrow, ncol, ncell)
resolution : 0.06666667, 0.06666667 (x, y)
extent : -75, -45, 35, 60 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +no_defs
source : memory
names : layer
values : NA, NA (min, max)
因此无法区分 NA 单元和空间对象,因为只有 NA 单元开始?
我不确定我的方法是否是最好的方法。任何建议或帮助表示赞赏。归根结底,我只是想获取点(未提供)到空间对象的距离。这部分使用 extract() 似乎很容易。我只需要得到这个新的光栅文件!这是我第一次在 R 中进行空间工作。
是的,必须有不是 NA
的单元格才能计算到的距离。一般的做法通常是这样
library(raster)
# example polygons
filename <- system.file("external/lux.shp", package="raster")
p <- shapefile(filename)
pp <- crop(p, extent(5.698, 6.231, 49.442, 49.781))
# create or use existing raster
r <- raster(p, res=0.01)
r <- rasterize(pp, r)
d <- distance(r)
d
#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 : 0, 49114.11 (min, max)