資料nc檔案 利用arcpy批量裁剪nc檔案

2021-10-14 19:10:59 字數 2812 閱讀 3920

簡述下要求:我有中國多種型別的遙感資料,包括溫度、濕度、降水、氣壓等等,每種資料均為多時相,需要裁剪成省級影象,並計算均值,影像為nc格式。

前面介紹了shapfile裁剪tif格式的影像,但是利用相同方式裁剪nc時有錯,顯然問題在於nc並非和tif一樣是單一時刻單一型別的資料,其包含多時間點多資料種類的特性需要進一步思考辦法。

關於nc檔案檢視屬性特徵,可由ncread讀取

裁剪**如下

import arcpy

import datetime

import os

import glob

arcpy.checkoutextension("spatial")

variables = ["pres"]

x_dimension = "lon"

y_dimension = "lat"

band_dimension = ""

dimension = "time"

valueselectionmethod = "by_value"

innetcdf = "e:/手足口病資料(原始+整理)/氣壓遙感資料/pres_cmfd_v0106_b-01_01mo_010deg_197901-201812.nc"

outloc = "e:/手足口病資料(原始+整理)/airpressure/"

every_province_tif = "e:/every_province_tif/"

every_province_masks = glob.glob(every_province_tif + "*.tif")

nc_fp = arcpy.netcdffileproperties(innetcdf)

nc_dim = nc_fp.getdimensions()

for dimension in nc_dim:

if dimension == "time":

top = nc_fp.getdimensionsize(dimension)

for i in range(0, top):

print i

dimension_values = nc_fp.getdimensionvalue(dimension, i)

date_str = str(dimension_values).split(' ')[0]

year = date_str[:date_str.index('/')]

if year in years:

date = datetime.datetime.strptime(date_str, '%y/%m/%d')

print date

dv1 = ["time", dimension_values]

dimension_values = [dv1]

for variable in variables:

nowfile = variable + "_" + date.strftime('%y%m%d')

nowfile = nowfile.translate(none, '/')

for img in every_province_masks:

#對所有掩模檔案遍歷

name = img[img.rindex("") + 1:]

name = name[:name.rindex(".")]

outname = outloc + name + '/' + nowfile + '.tif'

outmask_name =outloc + name + '/' + nowfile + '_province.tif'

if not os.path.exists(outmask_name):

arcpy.makenetcdfrasterlayer_md(innetcdf, variable, x_dimension, y_dimension, nowfile,

band_dimension,

dimension_values, valueselectionmethod)

#nc轉tif

if not os.path.exists(outname):

arcpy.copyraster_management(nowfile, outname, "", "", "", "none", "none", "")

#要裁切成中國區域的時候才用

mask_tif = img

arcpy.gp.extractbymask_sa(outname, mask_tif, outmask_name)

meanvalue = arcpy.getrasterproperties_management(outmask_name,"mean").getoutput(0)

print name,str(meanvalue)

arcpy.delete_management(nowfile, "rasterdataset")

arcpy.delete_management(outname, "rasterdataset")

思路在於用tif檔案裁剪nc而非shp,every_province_tif 包含的是全國各省份tif檔案,如下:

arcpy.makenetcdfrasterlayer_md讀取nc檔案某一屬性特徵,copyraster_management轉為tif,arcpy.gp.extractbymask_sa完成裁剪,再計算出均值。

arcpy批量合併資料庫

最近做生態保護紅線評估調整工作,需要以市州為單位提交資料庫,省級又要以省為單位提交到國家,作業的時候是以縣為單位來做的。這中間就涉及到很多資料庫合併的事情了。本來是打算偷懶,用在網上找的乙個超級工具裡的合併資料庫工具來合,結果用不起,最終還是得靠自己,老老實實寫乙個吧,應該不難。就像這樣,一堆資料庫...

用Arcpy批量對raster檔案進行區統計

import arcpy from arcpy import env from arcpy.sa import import arcpy.da as da arcpy.checkoutextension spatial env.overwriteoutput 1 workingdir d lyj c...

利用陣列處理批量資料

利用陣列前,我們要知道陣列是什麼 一批具有同名同屬性的資料就組成乙個陣列 array 陣列就是一組有序資料的集合 一 一維陣列 一維陣列的元素只需要用陣列名加乙個下標,就能唯一的確定 1.1 怎樣定義一維陣列 int a 10 它就表示定義了乙個整型陣列,陣列名為a,此陣列包含了10個整型元素。1....