Извлечение данных из NetCDF с использованием многоугольника шейп-файла в Python [дубликат]

11

Мне нужно поместить данные из NetCDF, используя определенный шейп-файл. Данные представляют собой температуру поверхности моря и цвет океана с разрешением 1/4 градуса. У меня есть 4 полигона, описывающих США. Северо-восточный континентальный шельф большой морской экосистемы и ее подкомпонентов, которые мне нужно использовать для извлечения данных. Я работаю с ежемесячными составными файлами с 1982 по 2014 год, поэтому эту процедуру извлечения данных необходимо автоматизировать. Файлы уже помещены в приблизительную сетку рабочей области [35, 45, -80, -60].

введите описание изображения здесь

Ранее мы конвертировали файлы данных HDF5 в растры в R и обрабатывали их таким образом, но этот метод действительно неэффективен, и я уверен, что в Python есть лучшее решение с использованием текущих файлов NetCDF.

До сих пор я использовал GDAL и Fiona для чтения шейп-файлов и NetCDF4 для загрузки файлов данных. Я не уверен, как идти о подмножестве данных. Я нашел это:

GDAL для Python: извлечение поддоменов из файла NetCDF?

Но я не имею ни малейшего представления о том, как создать подмножество файла NetCDF, используя что-либо, кроме простого ограничивающего прямоугольника, которым эти многоугольники наверняка не являются.

Точка в подпрограммах многоугольника, вероятно, будет работать вечно, но, возможно, я мог бы установить подмножество данных, используя меньшую ограничивающую рамку, которая поворачивается, чтобы соответствовать этим фигурам, как эта, в качестве начальной отправной точки, а затем выполнить поиск по точке в поли:

Подмножество криволинейного файла netCDF (вывод модели ROMS) с использованием ограничительной рамки lon / lat.

Любые идеи?

РЕДАКТИРОВАТЬ 1:

Я только что натолкнулся на пакет OpenClimateGIS, который, кажется, вполне может отвечать всем требованиям ... Я попробую проверить, смогу ли я заставить его работать: http://ncpp.github.io/ocgis/examples. HTML # Продвинутые Подменят

Райан
источник
Ваша последняя ссылка в правке 1 кажется мертвой. Похоже, это лучшая замена: earthsystemcog.org/projects/openclimategis
Аарон

Ответы:

1

Это может быть адаптировано к вашим потребностям.

Если вы не против вызова командной строки из Python, вы можете сделать что-то вроде gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif. -cwhereи -csqlмогут быть более подходящими опциями gdalwarp для выбора одного из четырех полигонов для отсечения.

elil
источник
1

Взгляните на это: /programming/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile

Вам нужно иметь в виду, что после загрузки NetCDF вы работаете с массивом NumPy.

Что вы пытаетесь вывести? Сводная статистика по полигонам?

Во всяком случае, вот что я бы сделал:

  1. Загрузите ваш шейп-файл и приведите ваши области в поддерживаемый формат (нацеливание на процесс маскирования matplotlib в приведенной выше ссылке звучит хорошо)
  2. Загрузите файл NetCDF и получите данные в один массив X, Y, T numpy.
  3. Маскируйте этот массив, используя полигоны (по одному за раз?)
  4. Экспорт вашей сводной статистики.
Алекс Лейт
источник