Мне нужно поместить данные из NetCDF, используя определенный шейп-файл. Данные представляют собой температуру поверхности моря и цвет океана с разрешением 1/4 градуса. У меня есть 4 полигона, описывающих США. Северо-восточный континентальный шельф большой морской экосистемы и ее подкомпонентов, которые мне нужно использовать для извлечения данных. Я работаю с ежемесячными составными файлами с 1982 по 2014 год, поэтому эту процедуру извлечения данных необходимо автоматизировать. Файлы уже помещены в приблизительную сетку рабочей области [35, 45, -80, -60].
Ранее мы конвертировали файлы данных HDF5 в растры в R и обрабатывали их таким образом, но этот метод действительно неэффективен, и я уверен, что в Python есть лучшее решение с использованием текущих файлов NetCDF.
До сих пор я использовал GDAL и Fiona для чтения шейп-файлов и NetCDF4 для загрузки файлов данных. Я не уверен, как идти о подмножестве данных. Я нашел это:
GDAL для Python: извлечение поддоменов из файла NetCDF?
Но я не имею ни малейшего представления о том, как создать подмножество файла NetCDF, используя что-либо, кроме простого ограничивающего прямоугольника, которым эти многоугольники наверняка не являются.
Точка в подпрограммах многоугольника, вероятно, будет работать вечно, но, возможно, я мог бы установить подмножество данных, используя меньшую ограничивающую рамку, которая поворачивается, чтобы соответствовать этим фигурам, как эта, в качестве начальной отправной точки, а затем выполнить поиск по точке в поли:
Любые идеи?
РЕДАКТИРОВАТЬ 1:
Я только что натолкнулся на пакет OpenClimateGIS, который, кажется, вполне может отвечать всем требованиям ... Я попробую проверить, смогу ли я заставить его работать: http://ncpp.github.io/ocgis/examples. HTML # Продвинутые Подменят
Ответы:
Это может быть адаптировано к вашим потребностям.
Если вы не против вызова командной строки из Python, вы можете сделать что-то вроде
gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif
.-cwhere
и-csql
могут быть более подходящими опциями gdalwarp для выбора одного из четырех полигонов для отсечения.источник
Взгляните на это: /programming/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile
Вам нужно иметь в виду, что после загрузки NetCDF вы работаете с массивом NumPy.
Что вы пытаетесь вывести? Сводная статистика по полигонам?
Во всяком случае, вот что я бы сделал:
источник
Вы можете использовать rioxarray. Вот пример: https://corteva.github.io/rioxarray/stable/examples/clip_geom.html
источник