NetCDF转换为图像

6

我有一个netcdf文件,希望使用命令行工具将其转换为图像(joed、png、gif)。

请问有谁可以提供库名称以及可能的转换方法链接?

谢谢, David


创建或展示示例时,您需要提供更多信息,这些是NetCDF中的3D数组还是仅为2D?需要什么样的颜色映射,只是将字节转换为灰度还是带有调色板的其他东西。 - mdsumner
这个问题解决了吗?我已经厌倦了VERDI和GDAL,想要通过编程从大量的netCDF文件中创建大型图像集。我猜我更喜欢Java或Python,但任何语言都会有所改善。 - john_science
7个回答

16

其他人已经提到了使用ArcGIS、IDL和Matlab等商业解决方案,但这里介绍一种使用Python的方法,使用netCDF4模块读取netcdf文件,并使用matplotlib创建图像。netCDF4模块可以读取NetCDF3、NetCDF4文件,也可以通过OPeNDAP服务读取远程NetCDF(或其他文件)。 下面我使用OPeNDAP服务读取地形数据,因此您应该能够在不更改程序的情况下运行程序。netCDF4模块可能有点难以构建,但它已包含在Python(x,y)、Enthought Canopy和Continuum Anaconda发行版中。

import matplotlib.pyplot as plt
import netCDF4

# open a local NetCDF file or remote OPeNDAP URL
url = 'http://www.ngdc.noaa.gov/thredds/dodsC/relief/ETOPO1/thredds/ETOPO1_Bed_g_gmt4.nc'
nc = netCDF4.Dataset(url)

# examine the variables
print nc.variables.keys()
print nc.variables['z']

# sample every 10th point of the 'z' variable
topo = nc.variables['z'][::10,::10]

# make image
plt.figure(figsize=(10,10))
plt.imshow(topo,origin='lower') 
plt.title(nc.title)
plt.savefig('image.png', bbox_inches=0)

这将产生以下图像:在此输入图像描述


你能想到一种方法来做相反的操作吗?将 'example.png' 转换成 'example.nc'? - beatTheSystem42
@beatTheSystem42 首先,这需要知道生成png文件时使用的颜色映射。我不知道iris中是否有任何函数可以实现你想要的功能,但你可以将png文件加载到NumPy数组中,并使用Matplotlib进行反向颜色映射查找,方法是使用相同的颜色映射,但在名称后面加上"_r"(我找不到这些映射的文档,只有一个列表可供参考:链接),然后从结果数组创建一个iris数据立方体并保存。 - HelloGoodbye

3
以下是用于操作NetCDF的官方软件列表。

http://www.unidata.ucar.edu/software/netcdf/software.html

如果有的话,可能就在那里了。但是如果您感兴趣,我对此有一些评论。
您使用的是哪个平台?Linux、Windows等?无论答案是什么,我的想法是,如果没有自己创建命令行工具,您将很难找到一个。
可能使用Java或Python和一些GDAL库之类的东西相对容易创建一些东西。如果您有ArcGIS,我已经用它做了类似的事情,但这不是命令行,因为这很难实现。
您将面临的问题之一是,在使用命令行时,您需要事先设置有关如何导出的其他信息,但这些信息不适用于非GUI环境。
例如,问题是灰度还是彩色。如果是彩色,那么这些颜色是什么,因为这些颜色需要定义。假设我们使用蓝色到红色的颜色渐变,那么红色是高值还是低值。颜色将如何分配给这些值。它会逐渐变化还是分阶段,例如值0-10对应于单个颜色,然后10-20对应于另一种颜色。
虽然不是命令行,但“NcView”可能适合您。

http://meteora.ucsd.edu/~pierce/ncview_home_page.html


2
这可以通过我的新软件包ncplot(可通过pypi或conda-forge获得)来完成。它可以作为命令行工具或在Python中使用,并将从NetCDF文件生成交互式图形。
在命令行上,只需执行以下操作:
ncplot infile.nc

在Python中(最好是在Jupyter笔记本中)。只需执行以下操作:
from ncplot import ncplot
ncplot("infile.nc")

0

0
如果您想要一个命令行工具,可以在不需要进行任何编码的情况下生成简单的图形,则有以下选项: 1. ncview
ncview file.nc 

可以使用“打印到文件”生成ps图,但是由于没有包括色条图例,因此并不是很有用。

2. Panoply

第二种点选方法是使用Panoply。

panoply 

这里提供了一个链接:https://www.giss.nasa.gov/tools/panoply/

3. CDO

第三种方法是使用CDO命令行工具(但请确保已经编译并包含了MAGICS++支持)。

例如,您可以使用以下命令制作一个简单的PNG数据地图:

cdo shaded,device="png" in.nc plot

这将提供一个名为“plot_variablename.png”的文件。

在此处查看文档:https://code.mpimet.mpg.de/projects/cdo/wiki/Tutorial#Plotting


0

GDAL可以做到这一点,您可以以多种方式控制输出的颜色调色板,而rgdal包提供了对其中一些内容的R接口。

R支持通过许多贡献的软件包(即ncdfRNetCDFncdf4)读取NetCDF文件并将其写入图像文件。


0

IDV是NetCDF的一个很好的可视化工具,但据我所知,它没有命令行界面。

我建议使用Matlab。它有NetCDF的读写函数以及一个广泛的绘图库...可能是最好的之一。然后,您可以编译Matlab代码并从命令行运行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接