通过LAT/LON投影计算栅格的错误区域

发布于 2025-01-31 08:52:08 字数 1570 浏览 3 评论 0原文

我有一个全球栅格堆栈(三个射手的),其像素值是该像素的土地使用的百分比。这是栅格元数据:

class      : RasterBrick 
dimensions : 3600, 7200, 25920000, 3  (nrow, ncol, ncell, nlayers)
resolution : 1, 1  (x, y)
extent     : 0, 7200, 0, 3600  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : grass_baseline.tif 
names      : grass_2020, grass_2040, grass_2100 

我正在尝试使用afore()函数在中使用将像素值乘以栅格的面积来计算每个像素中的土地使用总面积。栅格软件包。

当我这样做时,我会收到以下错误:

Warning message:
In .couldBeLonLat(x, warnings = warnings) :
  raster has a longitude/latitude CRS, but coordinates do not match that

这是该区域栅格的元数据:

class      : RasterLayer 
dimensions : 3600, 7200, 25920000  (nrow, ncol, ncell)
resolution : 1, 1  (x, y)
extent     : 0, 7200, 0, 3600  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : memory
names      : layer 
values     : -710.0924, 2211922  (min, max)

有人对可能发生的事情有任何洞察力吗?

,如果有相关的话,我从a组装了这个栅格堆栈我将很少有.nc文件与ncdf4软件包中读取为r,并使用以下代码行转换为刷子:

raster(first_nc, xmn=0, xmx=7200, ymn=0, ymx=3600, crs=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs+ towgs84=0,0,0")

然后,我将其中几个rasters合并为堆栈,并使用start导出 package(要保留每个光栅的名称):

stack <- stack(first_nc,second_nc,third_nc)
names(stack) <- c('first_nc','second_nc','third_nc')
stars::write_stars(stars::st_as_stars(stack), "stack.tif")

然后,我将.tif读为一个单独的脚本,这是我试图计算区域的地方。

I have a global raster stack (of three rasters) whose pixel values are the percent of a land use for that pixel. Here's the raster metadata:

class      : RasterBrick 
dimensions : 3600, 7200, 25920000, 3  (nrow, ncol, ncell, nlayers)
resolution : 1, 1  (x, y)
extent     : 0, 7200, 0, 3600  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : grass_baseline.tif 
names      : grass_2020, grass_2040, grass_2100 

I'm trying to calculate the total area of land use in each pixel by multiplying the pixel value by the area of the raster, using the area() function in the raster package.

When I do that, I get the following error:

Warning message:
In .couldBeLonLat(x, warnings = warnings) :
  raster has a longitude/latitude CRS, but coordinates do not match that

Here's the metadata for the area raster:

class      : RasterLayer 
dimensions : 3600, 7200, 25920000  (nrow, ncol, ncell)
resolution : 1, 1  (x, y)
extent     : 0, 7200, 0, 3600  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : memory
names      : layer 
values     : -710.0924, 2211922  (min, max)

Does anyone have any insight into what might be going on?

In case it's relevant, I assembled this raster stack from a few .nc files that I read into R with the ncdf4 package and converted to rasters with the following line of code:

raster(first_nc, xmn=0, xmx=7200, ymn=0, ymx=3600, crs=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs+ towgs84=0,0,0")

I then combined several of these rasters together as a stack and exported using the stars package (to preserve the names of each raster):

stack <- stack(first_nc,second_nc,third_nc)
names(stack) <- c('first_nc','second_nc','third_nc')
stars::write_stars(stars::st_as_stars(stack), "stack.tif")

I then read the .tif into a separate script, which is where I'm trying to calculate the area.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

英雄似剑 2025-02-07 08:52:08

#extent     : 0, 7200, 0, 3600  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +no_defs 

就是0至3600度之间的纬度。这是没有意义的,因为您不能超过90度n,因此无法计算这些单元格的区域。而且指定的经度也不可能是正确的,除非您的数据确实覆盖了20次。

我从我使用NCDF4软件包中读取的几个.nc文件中组装了此栅格堆栈,然后转换为rasters

不好的方法(除非所有其他方法都失败),并解释了奇怪的程度。您应该先尝试的是

library(raster)    
s <- stack(filenames)

或更好地使用Terra软件包(更换栅格),

library(terra)    
s <- rast(filenames)

这是不必要的,但是如果您要设置自己的程度,则更多可靠的值是(-180、180,-90、90 ),或(0,360,-90,90)。

You have

#extent     : 0, 7200, 0, 3600  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +no_defs 

That is, a latitude between 0 and 3600 degrees. That makes no sense as you cannot go beyond 90 degrees N and it is thus not possible to compute area for these cells. And the specified longitude is not likely to be correct either, unless your data really covers the globe 20 times.

I assembled this raster stack from a few .nc files that I read into R with the ncdf4 package and converted to rasters

That is not a good approach (unless all else fails), and explains the odd extent. What you should try first is

library(raster)    
s <- stack(filenames)

Or better use the terra package (the replacement of raster)

library(terra)    
s <- rast(filenames)

It should not be necessary, but if you are going to set the extent yourself, more plausible values would be (-180, 180, -90, 90), or (0, 360, -90, 90).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文