Я новичок в GDAL и просто мокрые ноги.Как перепрограммировать и область соответствует netCDF и шейп-файлу
Я пытаюсь сравнить растры, хранящиеся в netCDF, с шейп-файлами. Формированные профили являются подразделами области, покрываемой netCDF, а на наборах данных используются несколько разные прогнозы. Я конвертирую набор данных шейп-файла в проекцию netCDF. Файл netCDF содержит растровый массив и 1d массивы для lat, lon, x, y.
Прямо сейчас, в моем коде используется gdal.RasterizeLayer, чтобы растрировать шейп-файл в 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'])
Re-проецировании
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 и интерполировать его для соответствия.
EDIT: Теперь я думаю, что мне нужно индивидуально преобразовать экстенты и использовать это, чтобы переопределить GeoTransform для преобразования проекции. Вглядываясь в него.
просто быстрый комментарий, я просто сделал это на днях, но код на другом компьютере. 1) Я думаю, что растровый и файл формы должен находиться в одной проекции до вызова RasterizeLayer, поэтому вам не нужно перепрограммировать после растеризации и 2) RasterizeLayer будет определять, какие функции растеризовать. 3) вы можете захватить данные растра в виде массива numpy без его перезагрузки. попытается вернуться к этому позже. – user1269942