簡體   English   中英

如何重新投影和區域匹配netCDF和shapefile

[英]How to reproject and area match a netCDF and shapefile

我是GDAL的新手,只是弄濕了我的腳。

我正在嘗試將存儲在netCDF中的柵格與shapefile進行比較。 shapefile是netCDF覆蓋區域的子部分,數據集使用略有不同的投影。 我將shapefile數據集轉換為netCDF投影。 netCDF文件包含柵格陣列和lat,lon,x,y的1d陣列。

現在,我的代碼使用gdal.RasterizeLayer將shapefile光柵化為tiff,然后使用gdal.ReprojectImage將其重新投影為新的tiff。 我的問題是我無法弄清楚如何確定第二次tiff的程度-我需要選擇netCDF數據的小節。

這是我的代碼的相關部分:

#Extract projection information
obs_driver = ogr.GetDriverByName('ESRI Shapefile')  
obs_dataset = obs_driver.Open(obsfiles[0])
layer = obs_dataset.GetLayer()
obs_proj = layer.GetSpatialRef()
mod_proj = obs_proj.SetProjParm('parameter',90)   #Hardcode param difference
xmin,xmax,ymin,ymax = layer.GetExtent()   #Extents pre-reproject

光柵化

tiff1 = gdal.GetDriverByName('GTiff').Create('temp1.tif', 1000, 1000, 1, gdal.GDT_Byte)
tiff1.SetGeoTransform((xmin, pixelWidth, 0, ymin, 0, pixelHeight))
gdal.RasterizeLayer(tiff1,[1],layer,options = ['ATTRIBUTE=attribute'])

重新投影

dst1 = gdal.GetDriverByName('GTiff').Create('temp3.tif', 1000, 1000, 1, gdal.GDT_Byte)
dst1.SetGeoTransform((xmin, pixelWidth, 0, ymin, 0, pixelHeight))
dst1.SetProjection(mod_proj.ExportToWkt())
gdal.ReprojectImage(gdal.Open('./temp1.tif'), dst1, obs_proj.ExportToWkt(), mod_proj.ExportToWkt(), gdalconst.GRA_Bilinear)

並將柵格轉換為數組以進行逐點比較

import matplotlib.pyplot as plt
obs = plt.imread('temp3.tif')

因此,現在我需要獲取該數組的范圍(在新的投影中),以便可以將其與netCDF數組的正確子部分進行匹配,並對其進行插值以進行匹配。

編輯:現在,我在想我需要單獨轉換范圍,並使用它來重新定義投影轉換的GeoTransform。 看着它。

弄清楚了-在轉換數據之前,您需要將范圍轉換為新的投影類型。

#Calculate new x,y positions of extents
tx = osr.CoordinateTransformation(obs_proj,mod_proj)
  #Projection corrected extent of area in question
corr_ext = [0,0,0,0]  #[min,max,ymin,ymax]
(corr_ext[0],corr_ext[2],ignore_z) = tx.TransformPoint(ext[0],ext[2]) #Ignore z componenet - data is 2D
(corr_ext[1],corr_ext[3],ignore_z) = tx.TransformPoint(ext[1],ext[3])

然后使用這些范圍來設置包含重新投影的數據的對象的GeoTransform。 (GeoTransform保留柵格的空間位置信息)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM