从高分辨率 netcdf 文件中提取区域 python
Extract area from high resolution netcdf file python
我正在尝试按经度和纬度从 netcdf 文件中提取一个区域。
然而,分辨率远高于 1x1 度。
那么你将如何提取一个区域,例如经度:30-80 和纬度:30-40。
该文件可在此处找到:https://drive.google.com/open?id=1zX-qYBdXT_GuktC81NoQz9xSxSzM-CTJ
按键和形状如下:
odict_keys(['crs', 'lat', 'lon', 'Band1'])
crs ()
lat (25827,)
lon (35178,)
Band1 (25827, 35178)
这个我试过了,但是分辨率高,不是指实际的longitude/langitude。
from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
file = path + '20180801-ESACCI-L3S_FIRE-BA-MODIS-AREA_3-fv5.1-JD.nc'
fh = Dataset(file)
longitude = fh.variables['lon'][:]
latitude = fh.variables['lat'][:]
band1 = fh.variables['Band1'][:30:80,30:40]
因为您有 variables(dimensions): ..., int16 Band1(lat,lon)
,您可以将 np.where
应用于变量 lat
和 lon
以找到合适的索引,然后 select 根据 Band1
数据为 sel_band1
:
import numpy as np
from netCDF4 import Dataset
file = '20180801-ESACCI-L3S_FIRE-BA-MODIS-AREA_3-fv5.1-JD.nc'
with Dataset(file) as nc_obj:
lat = nc_obj.variables['lat'][:]
lon = nc_obj.variables['lon'][:]
sel_lat, sel_lon = [30, 40], [30, 80]
sel_lat_idx = np.where((lat >= sel_lat[0]) & (lat <= sel_lat[1]))
sel_lon_idx = np.where((lon >= sel_lon[0]) & (lon <= sel_lon[1]))
sel_band1 = nc_obj.variables['Band1'][:][np.ix_(sel_lat_idx[0], sel_lon_idx[0])]
请注意,np.where
应用于 lat
和 lon
returns 一维索引数组。使用 np.ix_
将它们应用于 Band1
中的二维数据。有关详细信息,请参阅 here。
我正在尝试按经度和纬度从 netcdf 文件中提取一个区域。 然而,分辨率远高于 1x1 度。 那么你将如何提取一个区域,例如经度:30-80 和纬度:30-40。 该文件可在此处找到:https://drive.google.com/open?id=1zX-qYBdXT_GuktC81NoQz9xSxSzM-CTJ
按键和形状如下:
odict_keys(['crs', 'lat', 'lon', 'Band1'])
crs ()
lat (25827,)
lon (35178,)
Band1 (25827, 35178)
这个我试过了,但是分辨率高,不是指实际的longitude/langitude。
from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
file = path + '20180801-ESACCI-L3S_FIRE-BA-MODIS-AREA_3-fv5.1-JD.nc'
fh = Dataset(file)
longitude = fh.variables['lon'][:]
latitude = fh.variables['lat'][:]
band1 = fh.variables['Band1'][:30:80,30:40]
因为您有 variables(dimensions): ..., int16 Band1(lat,lon)
,您可以将 np.where
应用于变量 lat
和 lon
以找到合适的索引,然后 select 根据 Band1
数据为 sel_band1
:
import numpy as np
from netCDF4 import Dataset
file = '20180801-ESACCI-L3S_FIRE-BA-MODIS-AREA_3-fv5.1-JD.nc'
with Dataset(file) as nc_obj:
lat = nc_obj.variables['lat'][:]
lon = nc_obj.variables['lon'][:]
sel_lat, sel_lon = [30, 40], [30, 80]
sel_lat_idx = np.where((lat >= sel_lat[0]) & (lat <= sel_lat[1]))
sel_lon_idx = np.where((lon >= sel_lon[0]) & (lon <= sel_lon[1]))
sel_band1 = nc_obj.variables['Band1'][:][np.ix_(sel_lat_idx[0], sel_lon_idx[0])]
请注意,np.where
应用于 lat
和 lon
returns 一维索引数组。使用 np.ix_
将它们应用于 Band1
中的二维数据。有关详细信息,请参阅 here。