Tại sao GDALPolygonize chậm hơn nhiều so với ArcGIS Raster to Polygon?


9

Tôi đang cố gắng đa giác hóa một raster bằng GDALPolygonize () trong tập lệnh Python. Kịch bản bắt đầu đa giác hóa ngày hôm qua lúc 5 giờ chiều và hiện vẫn đang đa giác hóa lúc 9:30 sáng. Tôi không biết nó đi được bao xa, nhưng tôi biết nó vẫn còn bởi vì khi tôi làm mới Windows explorer tôi có thể thấy sự thay đổi kích thước tệp cho shapefile đầu ra.

Raster của tôi khá lớn, nhưng tôi vẫn không hy vọng nó sẽ kéo dài như vậy. Raster của tôi là 35.486 Cột và 23.682 Hàng với kích thước ô 1 mét. Nó là một raster nhị phân trong đó giá trị 1 đại diện cho dữ liệu và 0 là NoData.

Khi tôi đa giác trong ArcGIS bằng cách sử dụng Raster thành Đa giác trong Hộp công cụ chuyển đổi, mất 56 giây. Shapefile kết quả là 200mb trong khi shapefile vẫn được tạo bởi GDALPolygonize vẫn chỉ là 100mb. Điều đó khiến tôi nghĩ rằng GDAL đã hoàn thành được một nửa sau khi chạy cả đêm.

Thông số kỹ thuật: Windows 7 64bit, RAM 8gb, GDAL 1.10 64bit, ArcGIS Desktop 10.2, Công cụ địa lý nền 64 bit cho ArcGIS Desktop, Python 2.7.3 64bit

CẬP NHẬT Ngày 2 - GDALPolygonize vẫn đang chạy. Nó đã đi qua đêm 2 đêm liên tiếp và suốt cả ngày mà không hoàn thành. ArcGIS mất 56 giây.


cập nhật nhanh từ năm 2018: gdal_polygonize vẫn còn mất hơn 56 giây. Tôi có một raster 12000x12000 và gdal đã làm việc được hơn một giờ. Nó không nhiều so với ngày, nhưng nó nhiều hơn 60 lần so với 56 giây, vì vậy tôi có cảm giác tôi sẽ xem xét một quy trình đang chạy khi tôi quay lại để kiểm tra máy vào sáng mai.
thymaro

Câu trả lời:


4

Tôi có cùng kinh nghiệm. Thuật toán thực sự chậm đối với các raster khổng lồ, mặc dù khá nhanh đối với các thuật toán nhỏ hơn. Có một cách giải quyết khác:

  1. Tách tệp raster lớn thành các tệp nhỏ hơn bằng gdalwarp (sử dụng -te để xác định phạm vi cho mỗi tệp):

gdalwarp -te 12.08 48.5 12.5 51.1 original_file.tif part1.tif

  1. Đa giác hóa mỗi trong số chúng thành shapefile riêng biệt:

gdal_polygonize.py part1.tif -f "ESRI Shapefile" part1.shp

  1. Hợp nhất các shapefiles với nhau:

ogr2ogr -f "ESRI Shapefile" -update -append merge.shp part1.shp -nln merge

  1. Hòa tan shapefile mới:

ogr2ogr "output.shp" "input.shp" -dialect sqlite -sql "SELECT ST_Union(geometry), field FROM input GROUP BY field"

Tôi biết, nó điên như địa ngục, nhưng lần cuối cùng nhanh hơn nhiều.

Stanley


1
Bạn có thể có thể gói nó thành một kịch bản để bạn chỉ phải tự mình làm điều gì đó một lần
henrik-dmg

Xin chào Stanley, cảm ơn vì câu trả lời này. Tôi đang cố gắng làm một cái gì đó tương tự như vậy bởi vì các raster của tôi đang mất nhiều thời gian để đa giác hóa. Phương pháp này có hợp nhất các đa giác trên các cạnh lại với nhau như thể bạn không bao giờ chia các raster ở vị trí đầu tiên không? Bạn có thể mở rộng các câu lệnh SQL trong lệnh cuối cùng không? Tôi không biết SQL và đang cố gắng tìm ra cách để làm cho điều này hoạt động với dữ liệu của tôi.
dùng20408

thay vì sử dụng gdalwarp, bạn không thể xếp raster của mình bằng cách tạo tệp vrt khi lưu nó? Ít nhất, đó là cách tôi học được để cắt các raster của mình và tôi không phải làm điều đó cho từng ô riêng biệt.
thymaro
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.