Поскольку вы работаете в географической системе координат c, и особенно когда вы работаете в области высоких широт, вы не можете просто сравнить количество пикселей, отличных от NA, поскольку пиксели в более высоких широтах меньше, чем в более низкие широты. Вы должны использовать широту для вычисления площади каждого пикселя, а затем суммировать их, чтобы получить площадь каждого растра. Вот пример использования кадрированных и замаскированных растров Канады и функции raster::area
, которая учитывает широту каждого пикселя при вычислении площади пикселей:
require(raster)
require(maptools)
##get shapefile of canada
data("wrld_simpl")
can_shp=wrld_simpl[which(wrld_simpl$NAME=="Canada"),]
##create empty raster of the world
rs=raster()
##crop canada
rs_can=crop(rs,can_shp)
##calaculate area of each pixel
crop_area=area(rs_can)
plot(crop_area) ##note cells are smaller at higher latitudes
lines(can_shp)
##calculate crop area
crop_area_total=sum(crop_area[])
##mask canada
mask_area=mask(crop_area,can_shp)
plot(mask_area)
lines(can_shp)
##calculate mask area
mask_area_total=sum(mask_area[],na.rm=T)
mask_area_total
# [1] 9793736
# which is not far from the wikipedia reported 9,984,670 km2
# the under-estimate is due to the coarse resolution of the raster
##calculate percentage
mask_area_total/crop_area_total*100
# [1] 48.67837
NB Вы неправильно пометили широту и долготу :)