Ekstrak data dari NetCDF menggunakan poligon shapefile dengan Python [duplikat]

11

Saya perlu mengelompokkan data dari NetCDF menggunakan shapefile tertentu. Data tersebut adalah suhu permukaan laut dan warna lautan pada resolusi 1/4 derajat. Saya memiliki 4 poligon yang menggambarkan AS. Northeast continental shelf ekosistem laut besar dan sub-komponen yang perlu saya gunakan untuk mengekstrak data. Saya bekerja dengan file komposit bulanan dari 1982-2014, jadi ini rutin ekstraksi data perlu diotomatisasi. File-file tersebut sudah terdaftar di grid perkiraan area kerja [35, 45, -80, -60].

masukkan deskripsi gambar di sini

Sebelumnya, kami mengonversi file data HDF5 ke raster di R dan memprosesnya dengan cara ini, tetapi metode ini benar-benar tidak efisien dan saya yakin ada solusi yang lebih baik di Python menggunakan file NetCDF saat ini.

Sejauh ini saya telah menggunakan GDAL dan Fiona untuk membaca di shapefile dan NetCDF4 untuk memuat file data. Saya tidak yakin bagaimana cara mengatur ulang data. Aku menemukan ini:

GDAL untuk Python: mengekstraksi subdomain dari file NetCDF?

Tapi saya tidak punya ide foggiest tentang bagaimana cara subset file NetCDF menggunakan apa pun selain kotak ikatan sederhana, yang pasti bukan poligon ini.

Poin dalam rutinitas poligon mungkin akan membutuhkan keabadian untuk bekerja, tapi mungkin saya bisa mengelompokkan data menggunakan kotak pembatas yang lebih kecil yang diputar agar sesuai dengan bentuk ini seperti ini sebagai titik awal awal dan kemudian melakukan pencarian titik-dalam-poli:

Berlangganan file netCDF lengkung (keluaran model ROMS) menggunakan kotak lon / lat bounding.

Ada ide?

EDIT 1:

Saya baru saja menemukan paket OpenClimateGIS yang sepertinya cocok dengan tagihan ... Saya akan coba ini untuk melihat apakah saya bisa membuatnya berfungsi: http://ncpp.github.io/ocgis/examples. html # subset lanjut

Ryan
sumber
Tautan terakhir Anda di Edit 1 tampaknya sudah mati. Ini tampaknya menjadi pengganti terbaik: earthsystemcog.org/projects/openclimategis
Aaron

Jawaban:

1

Ini mungkin dapat disesuaikan untuk kebutuhan Anda.

Jika Anda tidak keberatan memanggil baris perintah dari python, Anda bisa melakukan sesuatu seperti gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif. -cwheredan -csqlmungkin opsi gdalwarp yang lebih tepat untuk memilih salah satu dari empat poligon untuk kliping.

Elil
sumber
1

Lihatlah ini: /programming/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile

Yang ingin Anda ingat adalah bahwa setelah Anda memuat NetCDF Anda, Anda bekerja dengan array NumPy.

Apa yang Anda coba hasilkan? Statistik ringkasan berdasarkan area poligon?

Bagaimanapun, inilah yang akan saya lakukan:

  1. Memuat shapefile Anda dan memasukkan area Anda ke dalam format yang didukung (bertujuan untuk proses topeng matplotlib di tautan di atas terdengar bagus)
  2. Muat file NetCDF Anda dan dapatkan datanya menjadi satu larik X, Y, T numpy
  3. Topeng array itu menggunakan poligon (satu per satu?)
  4. Ekspor statistik ringkasan Anda.
Alex Leith
sumber