網站首頁 編程語言 正文
一、使用ArcMap提取出第一期數據
1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一個數據
可以發現該數據有正確的像元大小、坐標系等
2.導出該數據作為標準數據
二、使用python批量提取所有數據
1. 查看數據屬性
from netCDF4 import Dataset,num2date infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc" data_set = Dataset(infile) # 讀取nc文件信息 print(data_set)
輸出為
root group (NETCDF3_CLASSIC data model, file format NETCDF3):
? ? title: GRUN
? ? version: GRUN 1.0
? ? meteorological_forcing: GSWP3
? ? temporal_resolution: monthly
? ? spatial_resolution: 0.5x0.5
? ? crs: WGS84
? ? proj4: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
? ? EPSG: 4326
? ? references: Ghiggi et al.,2019. GRUN: An observation-based global gridded runoff dataset from 1902 to 2014. ESSD, doi: https://doi.org/10.5194/essd-2019-32
? ? authors: Gionata Ghiggi; Lukas Gudmundsson
? ? contacts: gionata.ghiggi@gmail.com; lukas.gudmundsson@env.ethz.ch
? ? institution: Land-Climate Dynamics, Institute for Atmospheric and Climate Science, ETH Zürich
? ? institution_id: IAC ETHZ
? ? dimensions(sizes): X(720), Y(360), time(1356)
? ? variables(dimensions): float64 X(X), float64 Y(Y), float64 time(time), float32 Runoff(time, Y, X)
? ? groups:?
可以看到variables
變量X、Y為經緯度,time為時間,Runoff
為需要的結果
2.批量導出結果
from osgeo import gdal from netCDF4 import Dataset,num2date import numpy as np def WriteTiff(im_data,inputdir, path): raster = gdal.Open(inputdir) im_width = raster.RasterXSize #柵格矩陣的列數 im_height = raster.RasterYSize #柵格矩陣的行數 im_bands = raster.RasterCount #波段數 im_geotrans = raster.GetGeoTransform()#獲取仿射矩陣信息 im_proj = raster.GetProjection()#獲取投影信息 if 'int8' in im_data.dtype.name: datatype = gdal.GDT_Byte elif 'int16' in im_data.dtype.name: datatype = gdal.GDT_UInt16 else: datatype = gdal.GDT_Float32 if len(im_data.shape) == 3: im_bands, im_height, im_width = im_data.shape elif len(im_data.shape) == 2: im_data = np.array([im_data]) im_bands, (im_height, im_width) = 1, im_data.shape # 創建文件 driver = gdal.GetDriverByName("GTiff") dataset = driver.Create(path, im_width, im_height, im_bands, datatype) if (dataset != None): dataset.SetGeoTransform(im_geotrans) # 寫入仿射變換參數 dataset.SetProjection(im_proj) # 寫入投影 for i in range(im_bands): dataset.GetRasterBand(i + 1).WriteArray(im_data[i]) del dataset infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc" data_set = Dataset(infile) # 讀取nc文件信息 time = data_set.variables["time"][:] # 獲取時間一列 units = data_set.variables["time"].units # 獲取第一期時間 #讀取樣本tif文件的地理信息 intif = "../03ProcessData/runoff_example.tif" for i in range(0,len(time)): yr = num2date(time[i],units).year # 提取年份 mon = num2date(time[i],units).month # 提取月份 value_data = data_set.variables['Runoff'][i] # 將缺失值改為0 data = value_data.data mask = value_data.mask data[np.where(mask == True)] = 0 outputname = "../01Data/Runoff1992-2014/tif/" + str(yr) + str(mon).zfill(2) + ".tif" WriteTiff(data,intif , outputname) print(outputname)
!注意事項
1.使用時候請自行修改修改輸入輸出文件路徑與變量名稱
2.根據需要處理缺失值
原文鏈接:https://www.cnblogs.com/skypanxh/p/16034602.html
相關推薦
- 2022-09-09 Python?OpenCV?Hough直線檢測算法的原理實現_python
- 2022-03-22 C++using聲明和using編譯指令_C 語言
- 2022-06-25 Python利用format函數實現對齊打印(左對齊、右對齊與居中對齊)_python
- 2022-06-17 Python語法學習之正則表達式的量詞匯總_python
- 2022-06-23 Android通過SeekBar調節布局背景顏色_Android
- 2023-05-23 Python中對數據庫的操作詳解_python
- 2022-05-23 C++的繼承特性你了解嗎_C 語言
- 2022-03-23 Unity3d實現跑馬燈廣播效果_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支