Thêm băng tần vào GeoTiff hiện tại bằng GDAL?


15

Điều này có vẻ như là đơn giản nhưng tôi không thể tìm ra cuộc sống của mình.

Đưa ra một GeoTiff hiện có chứa một băng tần, làm thế nào bạn có thể thêm một băng tần khác vào GeoTiff đó? Có phải cách duy nhất để làm điều này là sử dụng GDALCreate () để tạo tệp đầu ra mới với một băng tần bổ sung và sau đó sao chép băng tần hiện có từ tệp gốc sang tệp mới? Đó là giải pháp duy nhất tôi nghĩ ra cho đến nay nhưng có vẻ như nên có một cách đơn giản để thêm một ban nhạc vào bộ dữ liệu hiện có.


Xin chào @TheOx, tôi có một vấn đề tương tự. Tôi muốn tạo màu hình ảnh tổng hợp từ dải 2,3,4 dải đơn LDCM. Bạn đã có giải pháp cho câu hỏi của bạn chưa?
Jackie

1
@Jackie xem bình luận của kyle trong câu trả lời được chấp nhận về việc sử dụng trình điều khiển vrt để tạo một bản sao, thêm một băng tần, sau đó tạo một bản sao của bản đó trở lại trình duyệt địa lý bằng trình điều khiển GeoTiff.
TheOx

Câu trả lời:


8

Giải pháp, nếu trình điều khiển khởi động nó, là gọi GDALOpen () với quyền truy cập GA_Update, sau đó sử dụng GDALAddBand hoặc GDALDataset :: AddBand . Tuy nhiên, trình điều khiển địa lý không hỗ trợ AddBand.


2
Rất ít trình điều khiển hỗ trợ thêm băng tần, tôi không tin trình điều khiển địa lý làm được. Người duy nhất tôi biết hỗ trợ nó là vrt.

Vâng @kyle đã đúng - trình điều khiển địa lý không hỗ trợ AddBand, nhưng phương pháp trong câu trả lời này là chính xác nếu trình điều khiển hỗ trợ và đó là điều tôi đang tìm kiếm vì vậy tôi chấp nhận nó.
TheOx

Đừng! Quên về chi tiết nhỏ đó. @TheOx Tôi không nghĩ bạn nên chấp nhận câu trả lời của tôi vì nó không đúng. câu hỏi orig liên quan cụ thể đến geotiff.
dùng2856

@Luke: Chỉnh sửa câu trả lời của bạn để chỉ định đó là giải pháp chung nếu trình điều khiển hỗ trợ và tôi sẽ chấp nhận. Dường như không có cách nào khác để làm điều này cho GeoTiff về phương thức trong câu hỏi ban đầu của tôi.
TheOx

1
Sử dụng trình điều khiển vrt, CreateCopy (), AddBand (), CreateCopy () với Trình điều khiển Geotiff.

8

Để mở rộng câu trả lời của Luke và cung cấp một ví dụ cụ thể bằng Python, đây là đoạn trích có thêm dải alpha vào raster nguồn và lưu nó dưới dạng PNG.

from osgeo import gdal

src_ds = gdal.OpenShared(input_path)
mask_ds = gdal.OpenShared(mask_path)
mask = mask_ds.GetRasterBand(1).ReadAsArray()

tmp_ds = gdal.GetDriverByName('MEM').CreateCopy('', src_ds, 0)
tmp_ds.AddBand()
tmp_ds.GetRasterBand(4).WriteArray(mask)

dst_ds = gdal.GetDriverByName('PNG').CreateCopy(output_path, tmp_ds, 0)
del dst_ds

Tôi đã sử dụng MEMtrình điều khiển thay vì trình điều khiển VRTsau không hỗ trợ WriteRaster()WriteArray()(lỗi "Viết qua VRTSourcedRasterBand không được hỗ trợ."). Sử dụng trình điều khiển vrt vẫn có thể có thể thông qua một số phương pháp khác, tôi cho rằng.

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.