nc转tif文件,并计算单个栅格的平均值

1、将nc文件转为tif文件

若是一个nc文件中有多年数据,则用MATLAB:

(8条消息) NC文件读取及批量转为TIFF-史上最详细讲解-含代码(ArcGIS/MATLAB)_nc转tif_xiatiandexia123的博客-CSDN博客

一个文件夹里多个nc文件(nc.m)

注:首先用 arcgis-多维工具-将nc文件输出为一个栅格图层 作为参考

clc
clear
ncdisp('F:\DATA\IRR\IWU.ens.Y2011.nc')
sfc=ncread('F:\DATA\IRR\IWU.ens.Y2011.nc','IWUens');
%查看影像的缩略图
% imshow(sfc(:,:,1));
%如果数据需要旋转,使用rot函数进行相应修改
sfc=rot90(sfc);
%加载任意一个tif文件,tif文件需要与转换出来的tif空间边界一致(很重要)
[lizi,r]=geotiffread('F:\DATA\IRR\tif\201101.tif');
%设置输出文件夹
outpath='F:\DATA\IRR\tif\nctif\';
for year = 2011:2017
%逐一读取nc数据
sfc=ncread(['F:\DATA\IRR\IWU.ens.Y',int2str(year),'.nc'],'IWUens');
%循环单个nc文件中的文件数
for t=1:12
%获取第t层数据
sfc0=sfc(:,:,t);
%设置tif文件名称
filename=['IWUens',int2str(year),'_',int2str(t)];
%存储文件
geotiffwrite([outpath,filename,'.tif'],sfc0,r);

end

end

2、tif批量进行裁剪

利用arcgis中模型构建器进行批量裁剪

Arcgis批量掩膜、栅格计算—模型构建器_哔哩哔哩_bilibili

3、计算栅格平均值

arcpy进行计算

(8条消息) ArcPy批量计算栅格数据平均值_arcgis批量计算栅格平均值_bestYou_的博客-CSDN博客ArcPy批量计算栅格数据平均值、最大和最小值_哔哩哔哩_bilibili

# -*- coding: UTF-8 -*-
import os
import glob
import arcpy
from arcpy.sa import *

'''
功能:
    计算输入文件夹inws内,所有栅格数据的平均值
'''

arcpy.CheckOutExtension("ImageAnalyst")  # 检查许可
arcpy.CheckOutExtension("spatial")

# 输入路径  应该注意,中文路径,会导致读不出文件;路径尽量不要有空格,写文件时会报错
inws = r"F:\DATA\IRR\tif\2clip"

OutputFile = open('IRRaverage1.csv', 'w')

# 利用glob包,将inws下的所有tif文件读存放到rasters中
rasters = glob.glob(os.path.join(inws, "*.tif"))

whereClause = "VALUE = 0"  # 去除异常值

# 循环rasters中的所有影像,进行“求平均值”操作
for ras in rasters:
    outSetNull = SetNull(ras, ras, whereClause)  # 去除异常值

    meanValueInfo = arcpy.GetRasterProperties_management(outSetNull, 'MEAN')
    meanValue = meanValueInfo.getOutput(0)
    maxValueInfo = arcpy.GetRasterProperties_management(outSetNull, 'MAXIMUM')
    maxValue = maxValueInfo.getOutput(0)
    minValueInfo = arcpy.GetRasterProperties_management(outSetNull, 'MINIMUM')
    minValue = minValueInfo.getOutput(0)
    print os.path.basename(ras).split('_')[0] + ', mean:' + str(meanValue)+' max: '+str(maxValue)+' min: '+str(minValue) + '\n'

    OutputFile.write(os.path.basename(ras).split('_')[0] + ',' + str(meanValue)+ ',' + str(maxValue)+',' + str(minValue) + '\n')

OutputFile.close()
print("All project is OK!")

arcpy基本可行,但是有时候会遇见栅格统计不可计算的问题,则可用Spyder(python)

Spyder进行计算

(8条消息) 【Python】基于Python统计文件目录内每景栅格图像均值并输出成表_栅格统计值成表_陈修一的博客-CSDN博客

# -*- coding: utf-8 -*-
"""
Created on Wed Jun 28 10:52:55 2023

@author: Administrator
"""

from osgeo import gdal
import glob
import numpy as np
import csv

# 计算栅格图像均值
def calc_grid_mean(tiffile, csvpath):
    open_tif = gdal.Open(tiffile) # 打开tif文件
    # 打开栅格图像的波段
    band = open_tif.GetRasterBand(1).ReadAsArray()
    count_value = [] # 存放像元值的数组
    # 遍历图像矩阵,剔除异常值,读取有效值
    for i in range(len(band)):
        for j in range(len(band[i])):
            if band[i][j] >= -1000:
                count_value.append(band[i][j]) # 将有效值放入新数组
    # 把文件名和参数写入csv
    mycsv = open(str(csvpath), 'a', newline='') # 新建并打开csv
    csv_write = csv.writer(mycsv, dialect='excel')
    tif_info = (str(tif[-18:]), float(np.mean(count_value))) # 把文件名称+均值整合为一行
    csv_write.writerow(tif_info) # 把文件名称+均值写入csv
    print(f'{str(tif[-18:])}, {np.mean(count_value)}') # 在终端中打印出文件名称+均值


csv_path = r'F:\DATA\\IRR\tif\2clip\clipfile\csv.csv' # csv输出路径
tif_dir = glob.glob(r'F:\DATA\IRR\tif\2clip\clipfile\*.tif') # tif目录

for tif in tif_dir: # 遍历文件夹
    calc_grid_mean(tif, csv_path) # 计算均值


 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值