Tái cấu trúc tập lệnh trong Python với GDAL


10

Tôi đang gặp nhiều rắc rối với GDAL. Bên cạnh những lúc thiếu tài liệu, dường như có rất ít sự hỗ trợ trong Python. Dù sao, đây chỉ là một kịch bản reproject hàng loạt đi như vậy:

source_file = gdal.Open(filepath.encode("ascii"))
source_wkt = source_file.GetProjectionRef()
source_srs = osr.SpatialReference()
source_srs.ImportFromWkt(source_wkt)                            

reproj_file = gdal.AutoCreateWarpedVRT(source_file, source_wkt, dest_wkt)
gdal.ReprojectImage(source_file, reproj_file, source_wkt, dest_wkt)
reproj_attributes = reproj_file.GetGeoTransform()

driver = gdal.GetDriverByName("GTiff")
dest_file = driver.CreateCopy(outputpath.encode("ascii"), reproj_file, 0)

Phần Dest_srs và des_wkt không được xác định trong đoạn mã này nhưng nó nằm ở đâu đó bên ngoài vòng lặp (vì nó chỉ cần được xác định một lần). Nó dường như hoạt động một lần, tôi có thể nhận được một cái nhìn đẹp từ nó, sau đó đưa cho tôi một 'ERROR 6 WriteBlock () không được hỗ trợ' và các sự cố trăn. Chúng đều là các GeoTIFF được tạo theo cùng một cách với cùng một dữ liệu cơ bản (chỉ thời gian khác nhau).

Ngoài ra, do tính chất của sự từ chối (từ GCS đến PCS), AutoCreateWarpedVRT có xu hướng tạo ra nhiều khoảng trống, nhưng cung cấp cho nó một giá trị 0, đây là một vấn đề vì đó có thể là giá trị dữ liệu thực. Có cách nào đó để đặt giá trị nốt thành -99 thay vào đó không?


6
Tôi cho rằng bạn có một lý do để làm điều này trong python, nhưng chỉ để chắc chắn: bạn có biết rằng mục đích chính của tiện ích gdalwarp là để từ chối các raster? ví dụ gdalwarp -t_srs '+proj=utm +zone=11 +datum=WGS84' raw_spot.tif utm11.tif. Nó đã xuất hiện từ lâu, tính năng phong phú, được thử nghiệm tốt và có khả năng nhanh hơn phương pháp trăn thuần túy.
matt wilkie

Xóa thứ tự ReprojectImage, máy tính của tôi sẽ chỉnh sửa lại hình ảnh mà không gặp lỗi.
Roger Veciana

Câu trả lời:


3

Liên quan đến AutoCreateWarpedVRTkhông gian trống.

Hãy xem vé lỗi gdal này .

Cụ thể nó được nêu ở đó:

Nếu tôi thêm dòng này vào rgbwarped.vrt được tạo trong bước thứ hai, mọi thứ đều ổn:

<Option name="UNIFIED_SRC_NODATA">YES</Option>

Các ứng dụng C ++ có thể đặt tùy chọn này trực tiếp. Các ứng dụng sử dụng AutoCreateWarpedVRT từ liên kết SWIG phải thêm dòng này vào văn bản của VRT được sản xuất theo cách thủ công.


Tôi đã không thử Optionsửa lỗi, nhưng chuyển sang gọi gdalwarpqua đã subprocessgiải quyết vấn đề với NoData bị lột mặt nạ.
j08lue
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.