使用哪个关键字从 netCDF 文件中提取数据

问题描述 投票:0回答:1

netCDF 文件的标头为:

netcdf gpw_v4_population_density_rev11_2pt5_min {
dimensions:
        longitude = 8640 ;
        latitude = 4320 ;
        raster = UNLIMITED ; // (20 currently)
variables:
        double longitude(longitude) ;
                longitude:units = "degrees_east" ;
                longitude:long_name = "longitude" ;
        double latitude(latitude) ;
                latitude:units = "degrees_north" ;
                latitude:long_name = "latitude" ;
        int raster(raster) ;
                raster:units = "unknown" ;
                raster:long_name = "raster" ;
        float Population\ Density\,\ v4.11\ \(2000\,\ 2005\,\ 2010\,\ 2015\,\ 2020\)\:\ 2.5\ arc-minutes(raster, latitude, longitude) ;
                Population\ Density\,\ v4.11\ \(2000\,\ 2005\,\ 2010\,\ 2015\,\ 2020\)\:\ 2.5\ arc-minutes:units = "Persons per square kilometer" ;
                Population\ Density\,\ v4.11\ \(2000\,\ 2005\,\ 2010\,\ 2015\,\ 2020\)\:\ 2.5\ arc-minutes:_FillValue = -3.4e+38f ;
                Population\ Density\,\ v4.11\ \(2000\,\ 2005\,\ 2010\,\ 2015\,\ 2020\)\:\ 2.5\ arc-minutes:missing_value = -3.4e+38f ;
                Population\ Density\,\ v4.11\ \(2000\,\ 2005\,\ 2010\,\ 2015\,\ 2020\)\:\ 2.5\ arc-minutes:long_name = "Population Density, v4.11 (2000, 2005, 2010, 2015, 2020): 2.5 arc-minutes" ;
                Population\ Density\,\ v4.11\ \(2000\,\ 2005\,\ 2010\,\ 2015\,\ 2020\)\:\ 2.5\ arc-minutes:min = 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 4., 0., 0., 0., -9999., -9999., 0., 0., 0., 0. ;
                Population\ Density\,\ v4.11\ \(2000\,\ 2005\,\ 2010\,\ 2015\,\ 2020\)\:\ 2.5\ arc-minutes:max = 52542.421875, 53915.54296875, 59666.02734375, 78523.484375, 103340.84375, 207., 767642., 3., 21.5139427185059, 21.5139389038086, 32767., 6., 2015., 6., 6., 6., 2011., 2015., 4., 2016. ;

// global attributes:
                :proj4 = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" ;
                :Conventions = "CF-1.4" ;
                :created_by = "R, packages ncdf4 and raster (version 2.8-4)" ;
                :date = "2018-11-16 10:27:52" ;

我尝试像往常一样阅读它:

import netCDF4 as nc
import numpy as np
import numpy.ma as ma

sample_file = "/home/ubuntu/POP/gpw_v4_population_density_rev11_2pt5_min.nc"
sample_dataset = nc.Dataset(sample_file)
T_latitudes = sample_dataset.variables["latitude"][:]   
T_longitudes = sample_dataset.variables["longitude"][:] 
popu1 = sample_dataset.variables["Population"][:]

这适用于纬度和经度(如预期),但我不确定哪种语法是提取不同人口的正确语法。我尝试了几种语法但没有成功,上面的语法生成了错误:

KeyError: 'Population'
python netcdf netcdf4
1个回答
0
投票

正如@mkrieger在OP下评论的那样,变量名称是相当麻烦的“人口密度,v4.11(2000、2005、2010、2015、2020):2.5弧分”。最重要的是,该文件具有各种使解释变得麻烦的特性,其中两个明显的是:

  • 从文件中看不清楚
    raster
    维度的内容。在 R 中以栅格形式打开文件(数据的原始处理格式)时,图层简称为“Population Density, v4.11 (2000, 2005, 2010, 2015, 2020): 2.5 arc-minutes_raster=1” (注意末尾的“=1”)到“*=20”。您需要一个随附文件来了解各层的含义。很好,但不要说您遵守“CF-1.4”约定,因为这些约定要求文件具有自我描述性。
  • CRS 存储为全局属性“proj4”。虽然这是多余的(它是默认的 CRS),但如果包含它,它应该是一个网格映射变量
© www.soinside.com 2019 - 2024. All rights reserved.