Вычисление занимаемой площади из бинарного непроецированного растра

У меня есть серия бинарных растровых слоев (файл ascii), показывающих наличие/отсутствие вида в Европе и Африке. Файл основан на неспроецированных данных широты/долготы (WGS84). Моя цель — вычислить область присутствия с помощью R (у меня нет доступа к ArcGIS).

Я знаю, что в растровом пакете есть функция вычисления площади, но я беспокоюсь, что она не будет точной для непроецированных данных. Я также просмотрел функцию 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

Кто-нибудь знает способ точно рассчитать площадь присутствия с учетом кривизны земли?

Спасибо!


person Heather    schedule 22.01.2015    source источник
comment
Похоже, вы должны сначала спроецировать данные с помощью равновеликой проекции, а затем использовать cellStats (например) для подсчета присутствия/отсутствия. Этот вопрос касается того, как сделать такую ​​проекцию: проекция"> stackoverflow.com/questions/12725458/ . Вам это помогает?   -  person Jealie    schedule 22.01.2015
comment
Привет @Jealie, спасибо за ваше предложение. Однако, если это вообще возможно, я бы хотел избежать повторного проецирования своих данных, поскольку у меня есть большое количество растровых слоев и файлов ascii, которые в настоящее время имеют один и тот же формат.   -  person Heather    schedule 22.01.2015


Ответы (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)

Теперь у вас есть площадь каждой ячейки в км2. Умножая эти значения на растровые объекты со значениями присутствия/отсутствия, а затем используя функцию cellStats( , 'sum'), вы можете получить общую площадь с присутствием.

person Robert Hijmans    schedule 27.01.2015