【问题标题】:Calculating area of occupancy from a binary unprojected raster从二进制未投影栅格计算占用面积
【发布时间】:2015-01-22 17:53:53
【问题描述】:

我有一系列二进制栅格图层(ascii 文件),显示欧洲和非洲某个物种的存在/不存在。该文件基于未投影的纬度/经度 (WGS84) 数据。我的目标是使用 R 计算存在区域(我无权访问 ArcGIS)。

我知道光栅包有计算面积的功能,但我担心这对于未投影的数据会不准确。我也看过 raster 包中的 cellStats 函数,可以用它来“求和”占用的单元格数,但我觉得这有同样的问题。

jan<-raster("/filelocation/file.asc")
jan
class       : RasterLayer 
dimensions  : 13800, 9600, 132480000  (nrow, ncol, ncell)
resolution  : 0.008333333, 0.008333333  (x, y)
extent      : -20, 60, -40, 75  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : "/filelocation"
names       : file.asc
values      : -2147483648, 2147483647  (min, max)

area(jan)
class       : RasterLayer 
dimensions  : 13800, 9600, 132480000  (nrow, ncol, ncell)
resolution  : 0.008333333, 0.008333333  (x, y)
extent      : -20, 60, -40, 75  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
names       : layer 
values      : 6.944444e-05, 6.944444e-05  (min, max)

Warning messages:
1: In .local(x, ...) :
  This function is only useful for Raster* objects with a longitude/latitude     coordinates
2: In .rasterFromRasterFile(grdfile, band = band, objecttype, ...) :
  size of values file does not match the number of cells (given the data type)

cellStats(jan,"sum")
[1] 3559779

有谁知道准确计算存在区域的方法,考虑地球曲率?

谢谢!

【问题讨论】:

  • 看起来您应该首先使用等面积投影来投影您的数据,然后使用cellStats(例如)来计算存在/不存在。这个问题处理如何进行这样的投影:stackoverflow.com/questions/12725458/…。对你有帮助吗?
  • 嗨@Jealie,感谢您的建议。但是,如果可能的话,我想避免重新投影我的数据,因为我有大量的栅格图层和 ascii 文件,它们目前都采用相同的格式。

标签: r area wgs84 r-raster maxent


【解决方案1】:

我不知道您的文件发生了什么(为什么会收到警告 #2)。但是这里有一个解决方法

r <- raster(nrow=13800, ncol=9600, xmn=-20, xmx=60, ymn=-40, ymx=75)
# equivalent to r <- raster(jan)
x = area(r)
x
class       : RasterLayer 
dimensions  : 13800, 9600, 132480000  (nrow, ncol, ncell)
resolution  : 0.008333333, 0.008333333  (x, y)
extent      : -20, 60, -40, 75  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 
data source : c:\temp\R_raster_Robert\2015-01-26_213612_1208_85354.grd 
names       : layer 
values      : 0.2227891, 0.8605576  (min, max)

现在您有了每个单元格的面积,单位为 km2。通过将这些值与具有存在/不存在值的 Raster 对象相乘,然后使用 cellStats( , 'sum') 您可以获得存在存在的总面积。

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2020-12-30
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多