当我加载 rgdal 包时,我一直注意到这条消息:
“请注意,rgdal 将于 2023 年底退役,计划尽早使用 GDAL 和 PROJ 过渡到 sf/stars/terra 功能。”
我不知道这意味着什么。这是否意味着有一些 sf/stars/terra 函数使用 rgdal 而其他函数则不使用?或者这是否意味着 sf/stars/terra 根本不使用 rgdal,并且我应该使用这些软件包而不是其他依赖 rgdal 的软件包?
哪些依赖 rgdal 的常见软件包会受到影响?
我有一组光栅文件(在本例中是从http://www.paleoclim.org/下载的),我正在使用 star 包将其读入 R 中。
library("tidyverse")
library("fs")
library("stars")
data_path <- "./paleoclim"
(data_files <- list.files(data_path, pattern = "*.tif"))
#> [1] "BA_v1_2_5m_bio_1_badia.tif"
#> [2] "BA_v1_2_5m_bio_10_badia.tif"
#> [3] "BA_v1_2_5m_bio_11_badia.tif"
#> [...]
#> [39] "EH_v1_2_5m_bio_1_badia.tif"
#> [40] "EH_v1_2_5m_bio_10_badia.tif"
#> [41] "EH_v1_2_5m_bio_11_badia.tif"
#> [...]
#> [58] "HS1_v1_2_5m_bio_1_badia.tif"
#> [59] "HS1_v1_2_5m_bio_10_badia.tif"
#> [60] "HS1_v1_2_5m_bio_11_badia.tif"
#> [...]
(paleoclim <- read_stars(path(data_path, data_files)))
#> stars object with 2 dimensions and 133 attributes
#> attribute(s):
#> BA_v1_2_5m_bio_1_badia.tif BA_v1_2_5m_bio_10_badia.tif
#> Min. :101.0 Min. :213.0
#> 1st Qu.:166.0 1st Qu.:278.0 …Run Code Online (Sandbox Code Playgroud) 我有一个大的光栅文件(5GB),仅包含 1 和 NA。我想将其转换为包含 1 的区域的多多边形,并将相邻单元格溶解为一个多边形。
我已使用将文件导入到 R
r = raster::raster(my_filename)
r
class : RasterLayer
dimensions : 17452, 45000, 785340000 (nrow, ncol, ncell)
resolution : 0.008, 0.008 (x, y)
extent : -180, 180, -55.9875, 83.6285 (xmin, xmax, ymin, ymax)
crs : NA
source : C://...binary_X01_januarysnow.asc
names : binary_X01_januarysnow
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法来创建多边形:
当我在栅格覆盖 appr 的子集上尝试时,这两种方法都按预期工作。西班牙地区,所以我认为问题仅在于数据的大小,而不是我的代码。
stars::st_as_sf(st, as_points = FALSE, merge = TRUE, connect8 = TRUE). 这返回了一个空多边形,可能是因为该文件被读取为星星代理对象,但我不确定,我在网上找不到任何有关该信息的信息。然后我通过使用将栅格强制读取为星形而不是星形代理,read_stars(my_filename, proxy=FALSE)并尝试使用st_as_sf上面的命令,但收到消息“错误:无法分配大小为 …我是该包的新手stars,R正在尝试使用曲线数据进行基本的空间操作。我正在使用 netCDF 气候数据。我能够将 netcdf 与 shapefile 一起读入 r 中,我想用它来指定我想要进行分析的区域。我尝试直接使用裁剪文件,st_crop()但收到以下错误:
Warning message:
In st_crop.stars(test, wrst) : crop only crops regular grids
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用如下代码来扭曲星星对象:
warp <- test %>% st_set_crs(3338) %>% st_warp(st_as_stars(st_bbox(), dx = 2))
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
Error in colrow_from_xy(pts, x, NA_outside = TRUE) :
colrow_from_xy not supported for curvilinear objects
Run Code Online (Sandbox Code Playgroud)
我是否需要“展平”曲线网格才能在给定区域进行分析?如果是这样,我该怎么做?或者,相反,如果我能够进行类似st_crop()或等效的操作或使用曲线网格的raster操作,有人可以为我指出正确的方向吗?非常感谢。calc()stackApply()
我是 R 中的 star 包的新手,并且正在尝试弄清楚如何为二维 star 对象(栅格包中的栅格)中的单元格分配新值。使用光栅我可以执行以下操作
\n> library("raster")\n> library('stars')\n> tif = system.file("tif/L7_ETMs.tif", package = "stars")\n> ras<-brick(tif)[[2]] #create raster layer from 2nd layer of multilayer tif\n> ras[1,1:5] #see first 5 values of top row of ras\n[1] 56 57 52 45 52\n> ras[1,1:4] <-100 #replace first 4 values of top row of ras\n> ras[1,1:5]\n[1] 100 100 100 100 52\nRun Code Online (Sandbox Code Playgroud)\n根据 star 包手册中的 st_subset 说明,分配遵循 \xe2\x80\x98x[i]<-value\xe2\x80\x99 但我很难理解 \xe2\x80\x98i\xe2\x80\ 的使用x99 在这种情况下。我失败的尝试如下,但我希望有人可以提供可行的替代方案。
\n> tif = system.file("tif/L7_ETMs.tif", package = "stars")\n> st<-read_stars(tif)[,,,2] #create …Run Code Online (Sandbox Code Playgroud) r-stars ×5
r ×4
r-raster ×4
r-sf ×2
geospatial ×1
large-data ×1
rgdal ×1
spatial ×1
terra ×1
tidyverse ×1