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) # 计算均值


 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python计算栅格平均值,可以使用ArcPy库中的GetRasterProperties_management函数。首先,设置工作空间和栅格数据的路径。然后,使用GetRasterProperties_management函数获取栅格数据的平均值。以下是一个示例代码: ```python import arcpy from arcpy import env # 设置工作空间和栅格数据路径 env.workspace = r"C:\Users\HP\Desktop\20210323\tweets.gdb" raster_path = r"C:\Users\HP\Desktop\20210323\tweets.gdb\temp_DACA_KDE" # 使用GetRasterProperties_management函数获取栅格数据的平均值 meanValueInfo = arcpy.GetRasterProperties_management(raster_path, 'MEAN') meanValue = float(meanValueInfo.getOutput(0)) # 打印平均值 print("栅格数据的平均值为:" + str(meanValue)) ``` 请注意,你需要将代码中的工作空间路径和栅格数据路径替换为你自己的路径。 #### 引用[.reference_title] - *1* [arcGIS python求取栅格数据的平均值。](https://blog.csdn.net/gognzixiaobai666/article/details/115127555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python批量处理MODIS栅格影像数据——求均值、总和与最大最小值](https://blog.csdn.net/qq_43874102/article/details/124256877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值