上一篇说到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微环境模拟就介绍完毕,因为中间涉及到些许研究的数据,所以有些步骤没有说的很完整,这一点还请见谅。中间有不足的地方还请不吝赐教,多多交流,谢谢!

Logo

更多推荐