Pindah dari milis gdal-dev:
Pada Senin, 2 Sep 2013 pukul 19:09, David Shean menulis:
Hai daftar, saya mencoba untuk mengemas deret waktu riff GTiff dengan proyeksi / tingkat / resolusi identik sebagai file NetCDF tunggal untuk distribusi. Saya telah menghabiskan satu jam terakhir berkonsultasi dengan dokumen online dan bermain dengan gdal_translate, gdalbuildvrt, dan gdalwarp tanpa hasil.
Apakah ada cara mudah untuk melakukan ini menggunakan utilitas baris perintah gdal yang ada? Saya pikir saya akan bertanya sebelum beralih ke solusi khusus menggunakan NetCDF Python API.
Terima kasih. -David
Pada Selasa, 3 Sep 2013 pukul 10:15, Etienne Tourigny menulis:
apa yang Anda inginkan mungkin di luar ruang lingkup gdal. Dibutuhkan beberapa manajemen metadata yang pintar sehingga gdal_translate menempatkannya dalam satu file ...
Saya akan menyarankan Anda mengkonversi semuanya ke netcdf menggunakan gdal_translate dan kemudian menggunakan python-netcdf4 (bukan yang dari numpy / scipy) untuk menumpuknya di dimensi temporal.
Pada Selasa, 3 Sep 2013, pada jam 7:55, "Signell, Richard" menulis:
David, Jika Anda memposting pertanyaan Anda di GIS stackexchange group /gis// Saya akan memberikan contoh kode yang seharusnya membantu.
-Kaya
====================
Perbarui 9/3/13 17:04 PDT
Ini adalah output gdalinfo untuk salah satu dataset input saya:
gdalinfo 20120901T2024_align_x+22.19_y+3.68_z+14.97_warp.tif
Driver: GTiff/GeoTIFF
Files: 20120901T2024_align_x+22.19_y+3.68_z+14.97_warp.tif
Size is 10666, 13387
Coordinate System is:
PROJCS["unnamed",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Polar_Stereographic"],
PARAMETER["latitude_of_origin",70],
PARAMETER["central_meridian",-45],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]]]
Origin = (-211346.063781524338992,-2245136.291794800199568)
Pixel Size = (5.000000000000000,-5.000000000000000)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=BAND
Corner Coordinates:
Upper Left ( -211346.064,-2245136.292) ( 50d22'39.70"W, 69d23'55.59"N)
Lower Left ( -211346.064,-2312071.292) ( 50d13'22.38"W, 68d48'10.75"N)
Upper Right ( -158016.064,-2245136.292) ( 49d 1'33.33"W, 69d26'16.42"N)
Lower Right ( -158016.064,-2312071.292) ( 48d54'35.06"W, 68d50'27.28"N)
Center ( -184681.064,-2278603.792) ( 49d38' 1.32"W, 69d 7'17.04"N)
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
NoData Value=-32767
Menindaklanjuti pendekatan yang disarankan Luke.
Generasi vrt berfungsi dengan baik:
gdalbuildvrt -separate newtest.vrt *warp.tif
<VRTDataset rasterXSize="10666" rasterYSize="13387">
<SRS>PROJCS["unnamed",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]],PROJECTION["Polar_Stereographic"],PARAMETER["latitude_of_origin",70],PARAMETER["central_meridian",-45],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]]]</SRS>
<GeoTransform> -2.1134606378152434e+05, 5.0000000000000000e+00, 0.0000000000000000e+00, -2.2451362917948002e+06, 0.0000000000000000e+00, -5.0000000000000000e+00</GeoTransform>
<VRTRasterBand dataType="Float32" band="1">
<NoDataValue>-3.27670000000000E+04</NoDataValue>
<ComplexSource>
<SourceFilename relativeToVRT="1">20110619T2024_align_x+15.51_y+1.15_z+12.10_warp.tif</SourceFilename>
<SourceBand>1</SourceBand>
<SourceProperties RasterXSize="10666" RasterYSize="13387" DataType="Float32" BlockXSize="256" BlockYSize="256" />
<SrcRect xOff="0" yOff="0" xSize="10666" ySize="13387" />
<DstRect xOff="0" yOff="0" xSize="10666" ySize="13387" />
<NODATA>-32767</NODATA>
</ComplexSource>
</VRTRasterBand>
<VRTRasterBand dataType="Float32" band="2">
<NoDataValue>-3.27670000000000E+04</NoDataValue>
<ComplexSource>
<SourceFilename relativeToVRT="1">20110802T2024_align_x+16.33_y+2.14_z+12.02_warp.tif</SourceFilename>
<SourceBand>1</SourceBand>
<SourceProperties RasterXSize="10666" RasterYSize="13387" DataType="Float32" BlockXSize="256" BlockYSize="256" />
<SrcRect xOff="0" yOff="0" xSize="10666" ySize="13387" />
<DstRect xOff="0" yOff="0" xSize="10666" ySize="13387" />
<NODATA>-32767</NODATA>
</ComplexSource>
</VRTRasterBand>
...
Tetapi ketika saya mencoba menerjemahkan ke nc, saya mendapatkan kesalahan berikut:
gdal_translate -of netcdf newtest.vrt newtest.nc
Input file size is 10666, 13387
Warning 1: Variable has 0 dimension(s) - not supported.
0...10...20...30...40...50ERROR 1: netcdf error #-62 : NetCDF: One or more variable sizes violate format constraints .
at (netcdfdataset.cpp,SetDefineMode,1574)
ERROR 1: netcdf error #-39 : NetCDF: Operation not allowed in define mode .
at (netcdfdataset.cpp,IWriteBlock,1435)
ERROR 1: netCDF scanline write failed: NetCDF: Operation not allowed in define mode
ERROR 1: An error occured while writing a dirty block
...ERROR 1: netcdf error #-39 : NetCDF: Operation not allowed in define mode .
at (netcdfdataset.cpp,IWriteBlock,1435)
ERROR 1: netCDF scanline write failed: NetCDF: Operation not allowed in define mode
ERROR 1: netcdf error #-62 : NetCDF: One or more variable sizes violate format constraints .
at (netcdfdataset.cpp,~netCDFDataset,1548)
Jadi setelah diperiksa lebih dekat, tampaknya gdal tidak senang dengan proyeksi stereografi kutub yang saya gunakan (EPSG: 3413). Lihat baris 1570-1582 dari netcdfdataset.cpp:
Proyeksi saya memiliki latitude_of_origin yang ditentukan tetapi tidak ada paralel standar seperti yang diharapkan oleh driver netcdf.
Jawaban:
Berikut adalah beberapa kode python yang melakukan apa yang Anda inginkan, membaca file GDAL yang mewakili data pada waktu tertentu dan menulis ke file NetCDF tunggal yang CF-Compliant
GDAL dan NetCDF4 Python dapat sedikit merepotkan untuk dibangun, tetapi kabar baiknya adalah bahwa mereka adalah bagian dari distribusi python paling ilmiah (Python (x, y), Distribusi Python Terpikir, Anaconda, ...)
Pembaruan: Saya belum pernah melakukan stereografi polar di NetCDF yang sesuai dengan CF, tetapi saya akan terlihat seperti ini. Di sini saya berasumsi bahwa
central_meridian
danlatitude_of_origin
dalam GDAL sama denganstraight_vertical_longitude_from_pole
danlatitude_of_projection_origin
dalam CF:sumber
Sangat mudah untuk menempatkan mereka dalam satu NetCDF dengan utilitas GDAL, contoh di bawah ini. Tetapi Anda tidak mendapatkan dimensi temporal / metadata lain dari jawaban @ RichSignell. Tiff baru saja dibuang ke subdataset.
sumber