Я пытаюсь работать со спутниковыми данными из полярных регионов. Их можно скачать в формате .nc (netcdf, см. ниже). Они находятся в полярной стереографической проекции в регулярной сетке (https://nsidc.org/data/polar-stereo/ps_grids.html). Я хотел бы оценить площадь каждой ячейки, чтобы рассчитать площадь ледяного покрова, умножив долю ледяного покрова в каждой ячейке на площадь ячейки.
Я могу извлечь площадь ячейки, используя область из {растра}, только когда равномерная сетка находится в географических координатах (широта-долгота). Однако я не смог найти какую-либо функцию R, чтобы сделать это, когда сетка однородна в стереографических координатах.
Я новичок в пространственных данных и проекциях, и, возможно, я упускаю что-то важное.
Ниже некоторая важная информация и фрагмент кода с двумя испытаниями.
СООТВЕТСТВУЮЩИЕ ДАННЫЕ И ИСТОЧНИКИ ИНФОРМАЦИИ
Polar Watch https://polarwatch.noaa.gov/erddap/
Ссылка на данные о концентрации морского льда для загрузки данных
Можно скачать в R с помощью
url1<- "https://polarwatch.noaa.gov/erddap/griddap/nsidcCDRiceSQnhmday.nc?seaice_conc_monthly_cdr[(2019-12-16T00:00:00Z):1:(2019-12-16T00:00:00Z)][(5837500.0):1:(-5337500.0)][(-3837500.0):1:(3737500.0)]"
download.file(url1, destfile='nsidcCDRiceSQnhmday_935c_47bd_a147.nc')
Данные для сетки Концентрация морского льда Сетка широты и долготы, запись климатических данных NOAA/NSIDC V3, Антарктика, 25 км ?широта%5B(4337500.0):1:(-3937500.0)%5D%5B(-3937500.0):1:(3937500.0)%5D,долгота%5B(4337500.0):1:(-3937500.0)%5D%5B(- 3937500.0):1:(3937500.0)%5D" rel="nofollow noreferrer">https://polarwatch.noaa.gov/erddap/griddap/nsidcCDRice_sh_grid.nc?latitude[(4337500.0):1:(-3937500.0)][ (-3937500.0):1:(3937500.0)],долгота[(4337500.0):1:(-3937500.0)][(-3937500.0):1:(3937500.0)]
url2<- "https://polarwatch.noaa.gov/erddap/griddap/nsidcCDRice_sh_grid.nc?latitude[(4337500.0):1:(-3937500.0)][(-3937500.0):1:(3937500.0)],longitude[(4337500.0):1:(-3937500.0)][(-3937500.0):1:(3937500.0)]"
download.file(url2, destfile="nsidcCDRice_sh_grid_c513_9d75_76c1.nc")
https://nsidc.org/data/polar-stereo/ps_grids.html Таблица 4. Проекция Южного полушария на основе WGS 1984 г. Широта истинного происхождения -70
НЕКОТОРЫЕ ИСПЫТАНИЯ
require(raster)
require(ncdf4)
br<-brick("nsidcCDRiceSQnhmday_935c_47bd_a147.nc")
projection(br)<- CRS("+init=epsg:3976 +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs") #https://polarwatch.noaa.gov/tools-training/code-gallery/
br
res(br)
area(br)
который дает
Warning message:
In .local(x, ...) :
This function is only useful for Raster* objects with a longitude/latitude coordinates
Использование сетки, предоставленной в источниках данных
IceFgrid<-nc_open("nsidcCDRice_sh_grid_c513_9d75_76c1.nc")
ygridLatLon <- ncvar_get(IceFgrid, varid="ygrid")
xgridLatLon <- ncvar_get(IceFgrid, varid="xgrid")
longitude <- ncvar_get(IceFgrid, varid="longitude")
latitude <- ncvar_get(IceFgrid, varid="latitude")
nc_close(IceFgrid)
dim(longitude) # Matrix with Longitude of each grid point.
length(xgridLatLon)
length(ygridLatLon)
## Try to convert to data frame and the to raster.
dims <- dim(longitude)
icemap.df <- data.frame(Longitude=array(longitude,dims[1]*dims[2]),
Latitude=array(latitude,dims[1]*dims[2]))
icemap.df$Seaice <- array(1,dims[1]*dims[2])# Here I use 1 for ice cover just
rast<-rasterFromXYZ(icemap.df, crs="+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs")
Но дает
Error in rasterFromXYZ(icemap.df, crs = "+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs") :
x cell sizes are not regular
Любая помощь будет оценена.
Заранее спасибо Ангел