(P5)模型运行及结果可视化(netCDF)
上一篇说到PLAM的输出结果是nc文件,这一篇讲述如何可视化并分析nc文件中的数据(以MyProject_xy.nc为例)。这一篇的内容大致有以下几点1)ncview快速可视化netcdf文件2)panoply软件可视化netcdf文件3)ArcMap处理netcdf文件4)python读取netcdf文件ncview软件可视化netcdf文件前文已经说过,PALM系统是运行在Linux系统上的,
上一篇说到PLAM的输出结果是nc文件,这一篇讲述如何可视化并分析nc文件中的数据(以MyProject_xy.nc为例)。这一篇的内容大致有以下几点
1)ncview快速可视化netcdf文件
2)panoply软件可视化netcdf文件
3)ArcMap处理netcdf文件
4)python读取netcdf文件
ncview软件可视化netcdf文件
前文已经说过,PALM系统是运行在Linux系统上的,ncview可以在Linux系统上快速可视化单个netcdf’文件。
安装
安装比较简单:sudo apt-get install ncview
打开
注意:ncview在任何界面点击右上角的x就会关闭整个软件
打开终端,输入ncview 文件路径,回车,即显示所有的变量和维度
查看变量
以tsurf*_xy为例,它是一个以x,y,time为维度的变量
ncview可以快速可视化单个文件,如果文件较多的话还是不太方便。
panoply软件可视化nc文件
Panoply有着良好的用户界面,它能同时操作多个nc文件
下载安装
官网下载地址:https://www.giss.nasa.gov/tools/panoply/download/
找到对应版本下载即可,官网有环境配置要求的说明
使用
这里主要讲Ubuntu上的使用方法
Ubuntu下载解压后,找到PanoplyJ文件夹,在该文件夹下打开终端,输入
bash panoply.sh打开软件,选择MyProject_xy.nc文件,打开
查看变量
选中tsurf*_xy,点击Create Plot,设置xy轴
导出数据
在首页选中tsurf*_xy,点击File——Export Data——As CSV,保存即可
Panoply可以同时操作多个nc文件,也有良好的用户界面,但是无法对数据进行更多的处理分析,arcmap提供了多维处理的工具,可以起到这个作用。
ArcMap操作netcdf文件
把MyProject_xy.nc文件拷贝到装有ArcMap的电脑上
nc转栅格图像
请参考:https://blog.csdn.net/ceibake/article/details/84787465
该博主对于nc文件的处理有很好的分享,很详细的博客,在此引用。
nc转点要素
打开nc文件
打开后显示的是点要素,显示所有数据
Python读取netcdf
python读取netcdf基本操作如下,下面是我读取MyProject_xy.nc的一小段代码,最后实现了对各个时刻每个地物的平均温度输出到表格之中
def readDataFromNc_file(path):
array_class = np.loadtxt('ysqPalm_area_200*100.txt') #在txt文件中保存的原始图像的各个像素值
array_data = np.ones((array_class.shape[0],array_class.shape[1]))
data = nc.Dataset(path) #读取nc
array_theta = np.asarray(data.variables['tsurf*_xy']) #获得变量
print(array_theta.shape)
#np.savetxt("test.xls",array_theta[0,41,:,:],delimiter=',',fmt='%.3f')
var_time = array_theta.shape[0]
workbook = xlwt.Workbook()
for time in range(var_time):
List_building = list()
List_pavement = list()
List_vegetation = list()
List_water = list()
for i in range(array_class.shape[0]):
for j in range(array_class.shape[1]):
if array_class[i, j] == 0.514:
List_building.append(array_theta[time,0,i,j] - 273.15) # builiding_16
if array_class[i, j] == 0.702:
List_building.append(array_theta[time,0,i,j] - 273.15) # building_8
if array_class[i, j] == 0.804:
List_pavement.append(array_theta[time,0,i,j] - 273.15) # pavement
if array_class[i, j] == 0.447:
List_vegetation.append(array_theta[time,0,i,j] - 273.15) # vegetation
if array_class[i, j] == 0.000:
List_water.append(array_theta[time,0,i,j] - 273.15) # water
array_data[i,j] = array_theta[time,0,i,j] - 273.15
print("{0}:00_建筑物_平均值:{1}".format(time + 8,sum(List_building)/len(List_building)))
print("{0}:00_路面_平均值:{1}".format(time + 8, sum(List_pavement) / len(List_pavement)))
print("{0}:00_植被_平均值:{1}".format(time + 8, sum(List_vegetation) / len(List_vegetation)))
print("{0}:00_水体_平均值:{1}".format(time + 8, sum(List_water) / len(List_water)))
saveAsFig(array_data,time,path)
sheet = workbook.add_sheet("{0}".format(time + 8))
for i in range(array_class.shape[0]):
for j in range(array_class.shape[1]):
sheet.write(i,j,array_data[i,j])
workbook.save("{0}.xls".format(path))
综上所述,对nc文件的处理就介绍到这里。
至此,PALM系统的基本使用就介绍完了,PALM是一个非常强大的软件,它的功能远远不止于此,这里仅是九牛一毛,更多的功能和使用还请参考官方网站。
至此,ENVI-met和PALM-4U微环境模拟就介绍完毕,因为中间涉及到些许研究的数据,所以有些步骤没有说的很完整,这一点还请见谅。中间有不足的地方还请不吝赐教,多多交流,谢谢!
更多推荐
所有评论(0)