【发布时间】:2018-05-26 01:14:43
【问题描述】:
我正在尝试在 Python 3 中使用地形/测深信息(基本上是一个包含 x [十进制度经度]、y [十进制度纬度] 和 z [米] 的网格)。
网格文件的扩展名为 .nc,因此是一个 netCDF 文件。通常我会在通用映射工具之类的映射工具中使用它,而不必担心 netCDF 文件的工作原理,但我需要在 Python 脚本中提取特定信息。现在这只是将数据集限制在某些经度/纬度范围内。
但是,现在我对如何获取特定 x 和 y 值的 z 信息有点迷茫。以下是我目前对数据的了解
import netCDF4
#----------------------
# Load netCDF file
#----------------------
bathymetry_file = 'C:/Users/te279/Matlab/data/gebco_08.nc'
fh = netCDF4.Dataset(bathymetry_file, mode='r')
#----------------------
# Getting information about the file
#----------------------
print(fh.file_format)
NETCDF3_CLASSIC
print(fh)
根组(NETCDF3_CLASSIC 数据模型,文件格式 NETCDF3): 标题:GEBCO_08 网格 来源:20100927 尺寸(尺寸):边(2),xysize(933120000) 变量(尺寸):float64 x_range(边),float64 y_range(边),int16 z_range(边),float64间距(边),int32尺寸(边),int16 z(xysize) 组:
print(fh.dimensions.keys())
odict_keys(['side', 'xysize'])
print(fh.dimensions['side'])
: name = 'side', size = 2
print(fh.dimensions['xysize'])
:名称 = 'xysize',大小 = 933120000
#----------------------
# Variables
#----------------------
print(fh.variables.keys()) # returns all available variable keys
odict_keys(['x_range', 'y_range', 'z_range', 'spacing', 'dimension', 'z'])
xrange = fh.variables['x_range'][:]
print(xrange)
[-180。 180.] # 包含整个世界经度的值 -180 到 180
yrange = fh.variables['y_range'][:]
print(yrange)
[-90。 90.] # 包含整个世界纬度的值 -90 到 90
zrange = fh.variables['z_range'][:]
[-10977 8685] # 包含世界的深度/地形范围
spacing = fh.variables['spacing'][:]
[ 0.00833333 0.00833333] # x 和 y 的间距。如果乘以 x 和 y 范围,则等于维度
dimension = fh.variables['dimension'][:]
[43200 21600] # 对应于 z 的形状,如果它是我希望的二维数组(目前是 9333120000 的一维数组 - 即 43200*21600)
z = fh.variables['z'][:] # currently an 1D array of the depth/topography/z information I want
fh.close
基于此信息,我仍然不知道如何访问 z 以获取特定的 x/y(经度/纬度)值。我想基本上我需要将 z 的一维数组转换为对应于经度/纬度值的二维数组。我只是不知道该怎么做。我在一些帖子中看到人们试图将 1D 转换为 2D 数组,但我无法知道他们从世界的哪个角落开始以及他们如何进步。
我知道有一个 3 岁的 similar post,但是,我不知道如何为我的问题找到一个模拟的“扁平数组的索引”——或者如何准确地处理它。有人可以帮忙吗?
【问题讨论】:
标签: python python-3.x maps netcdf