Làm cách nào để cắt một 'hình ảnh lát gạch' từ bộ dữ liệu raster bằng GDAL?


22

Tôi đang làm việc trên một ứng dụng cần tạo gạch (jpeg) từ bộ dữ liệu raster đã cho. Xu hướng ban đầu của tôi là sử dụng gdal2tiles.py, nhưng hiệu suất của nó có vẻ như có thể được cải thiện.

Điều đó dẫn đến tôi đặt câu hỏi sau: Điều gì sẽ là cách nhanh nhất để cắt một 'hình ảnh lát gạch' từ bộ dữ liệu raster bằng GDAL? Và với 'hình ảnh lát gạch', ý tôi chỉ là một jpeg hoặc png đơn giản.

Trong nguyên mẫu của tôi, tôi sử dụng các ràng buộc MapServer C # MapScript để thực hiện công việc. Đó là, tôi tạo một đối tượng bản đồ, lặp qua tất cả các giới hạn gạch tôi cần cắt, đặt phạm vi đối tượng bản đồ và sau đó lưu hình ảnh kết quả. Hiệu suất của phương pháp này tốt hơn đáng kể so với gdal2tiles.py, nhưng tôi tự hỏi liệu tôi có sử dụng GDAL trực tiếp không nếu tôi không thể làm cho nó nhanh hơn nữa. Bất cứ ai cũng có thể đề xuất một quy trình công việc tương tự với các phương pháp GDAL?

EDIT: Sau một số nghiên cứu ngày hôm nay, tôi tìm thấy câu trả lời ngay trước mặt tôi. Nếu bạn đã tải xuống FWTools, các thư mục csharp \ apps chứa một số lớp để thể hiện các ràng buộc C # GDAL. Trong trường hợp của tôi, GDALRead.cs và GDALReadDirect.cs là những gì tôi đang tìm kiếm.


2
@vadp, @markusn, @mapperz và mọi người khác - vui lòng mô tả. Ngoài liên kết một hoặc hai câu về lý do tại sao bạn nghĩ rằng công cụ này đáng xem và những gì khác biệt với những người khác sẽ hữu ích. Chúng tôi muốn câu trả lời sẽ hữu ích trong tương lai cũng như ngay lập tức. Sớm hay muộn các cuộc đình công liên kết và nếu tất cả những gì chúng ta có là url, thật khó để tìm thấy dự án tiếp theo ở đâu.
matt wilkie

4
Xin chào user890, bạn có thể gửi giải pháp cuối cùng cho câu hỏi và đánh dấu là đã đóng không? trong trường hợp này, có vẻ như việc sử dụng các ràng buộc ngôn ngữ cụ thể đã mang lại cho bạn hiệu suất bạn cần.
scw

Tôi không thể thêm nhận xét, vào bài đăng của riêng mình :( Nhưng gdal_tiler.py cũng hỗ trợ đa xử lý, nhưng theo một cách rất tàn bạo: nó chỉ xử lý các nguồn 'n' ngay lập tức. Tuy nhiên, nó tạo ra một số hiệu ứng tích cực :)
Vadim

Câu trả lời:


5

Ai đó đã dành thời gian để làm cho gdal2tiles.py sử dụng nhiều bộ xử lý: gdal song song

Tôi đã sử dụng điều này và nó dường như làm việc. Nó sử dụng thành công cả 4 lõi đến 100% và cắt giảm tổng thời gian để tạo các ô xuống còn 1/4 thời gian ban đầu.


Bạn có thể kiểm tra gdal2tiles_abul.py gitlab.com/GitLabRGI/geopackage-python . Tôi thích comme
GeospatialIn


1

Trong công ty của tôi, chúng tôi đã viết các kịch bản python tùy chỉnh, sử dụng gdal_warp (đó là trước khi chúng tôi biết gdal2tiles tồn tại). Nó nhanh hơn g2t, esspecialy khi chúng tôi viết lại nó để chạy trên nhiều lõi (sử dụng python threadpool). Ngoài ra, nó tạo ra gạch chất lượng cao hơn (phép nội suy lanczos trên g2t dường như hoạt động kém, trong gdal_warp kết quả là gạch đáng kinh ngạc).

Nó cần một chút nỗ lực để viết các kịch bản, bạn cần tính toán thủ công các hộp giới hạn kết quả, thiết lập một số tùy chọn cho các phép chiếu, v.v.



0

Một tùy chọn khác là sử dụng TileCache (WMS-C). Mặc dù tôi chưa bao giờ sử dụng gdal2tiles, tôi không mong đợi rằng TileCache sẽ mang lại hiệu suất được cải thiện.

Dù sao, các chiến lược sau đây có thể tăng tốc độ ốp lát:

  • Metatiling, nếu sử dụng TileCache (Tôi tự hỏi liệu gdal2tiles có tính năng tương tự không).
  • Trong trường hợp dữ liệu raster là một ortophoto lớn, hãy sử dụng định dạng như ECW . Vì định dạng này có tính năng giải nén một phần , bằng cách sử dụng định dạng này, bạn có thể đạt được hiệu suất đáng kể.

0

tập lệnh gdal_tiler.py từ http://code.google.com.vn/p/tilers-tools có thể là một tùy chọn hữu ích.

Thông thường, nó cho thấy hiệu năng rất tốt so với gdal2tiles.py và nó sẽ hoạt động với bất kỳ nguồn GDAL (tập dữ liệu) nào, đặc biệt, nó không yêu cầu chuyển đổi tập dữ liệu nguồn sang RGB.


-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Nếu geopackage hoặc MBTILES sau đó không python là cần thiết mà nhân thực hiện natively với gdal_translate.EXE. bạn cũng cần chạy gdaladdo để thêm nhiều mức thu phóng. tôi cũng sử dụng qtiles / qmetatiles cho máy tính để bàn qgis. Vẫn không có gì có thể cạnh tranh với phần mềm thương mại maptiler pro. Nếu bạn cần thư mục gạch, chỉ cần chuyển đổi MBTILES sang TMS HOẶC XYZ với mbUtil python


Liên kết không còn hoạt động
AndrewHarvey

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.