簡述下要求:我有中國多種型別的遙感資料,包括溫度、濕度、降水、氣壓等等,每種資料均為多時相,需要裁剪成省級影象,並計算均值,影像為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....