Đa giác GDAL trong python tạo đa giác trống?


12

Tôi gặp sự cố khi sử dụng hàm Polygonize trong python. Ví dụ sách dạy nấu ăn cho điều này có thể được tìm thấy ở đây .

Phần có liên quan của mã của tôi là:

sourceRaster = gdal.Open('myraster.tif')
band = sourceRaster.GetRasterBand(1)
bandArray = band.ReadAsArray()
outShapefile = "polygonized"
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(outShapefile+".shp"):
    driver.DeleteDataSource(outShapefile+".shp")
outDatasource = driver.CreateDataSource(outShapefile+ ".shp")
outLayer = outDatasource.CreateLayer("polygonized", srs=None)
gdal.Polygonize( band, None, outLayer, -1, [], callback=None )
outDatasource.Destroy()
sourceRaster = None

Tôi biết rằng ban nhạc có thông tin liên quan, đây là một đoạn bandArray:

array([[ 4.,  4.,  3.,  3.,  3.,  2.,  2.,  2.,  2.,  3.,  3.,  3.,  3.,
         3.,  3.,  3.,  3.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,
         4.,  4.,  4.,  4.],

Khi tôi mở bảng thuộc tính trong QGIS, nó trống: Screencapture

Biên tập:

Chuyển đổi hoạt động tốt trong QGIS bằng cách sử dụng Raster -> Chuyển đổi -> Công cụ đa giác

Ảnh chụp màn hình của raster sẽ được đa giác hóa:

raster để đa giác

Và ảnh chụp màn hình chuyển đổi kết quả từ công cụ QGIS:

raster đa giác từ công cụ QGIS

Tôi đang sử dụng bản phân phối Enth think trên Windows 7, phiên bản GDAL 1.10.0-3

Vấn đề là tôi không thể đa giác hóa một raster trong python bằng cách sử dụng GDAL và ví dụ về cookbook, tôi có thể đa giác hóa cùng một raster này mà không gặp vấn đề gì trong GUI củaISIS


Raster của bạn trông như thế nào? Nó thực sự có chứa đa giác? Nó có hoạt động không nếu bạn sử dụng gdal_polygonize.py?
BradHards

Đã chỉnh sửa để thêm ảnh chụp màn hình của quá trình làm việc trong QGIS
camdenl

Vấn đề thực sự ở đây là gì?
Fezter

Đã thêm vấn đề cụ thể
camdenl

3
Tôi đã có một vấn đề tương tự (shapefile trống được tạo) và việc tạo trường không giúp được gì. Điều tôi đã làm sai là tôi đã không đóng shapefile trong mã của mình trước khi gọi đa giác. Bạn đóng nó trong ví dụ của bạn, tôi chỉ đăng bài này để người khác tham khảo.
Stephanie

Câu trả lời:


19

Vấn đề là tôi đã không tạo ra một trường để lưu trữ băng raster. Sau khi đào qua tệp gdal_polygonize.py, tôi nhận ra điều này không tự động được thực hiện khi gọi gdal.Polygonize, mà thay vào đó sử dụng hàm tìm thấy ở đây .

Đây là bước bổ sung cần thiết để tạo một trường và viết một dải cho trường:

newField = ogr.FieldDefn('MYFLD', ogr.OFTInteger)
outLayer.CreateField(newField)

Sau đó chúng ta có thể viết băng tần cho trường này, với chỉ số là 0:

gdal.Polygonize(band, None, outLayer, 0, [], callback=None )

Tôi cũng đang cố gắng sử dụng hàm gdal.Polygonize () để lấy raster của tôi dưới dạng đa giác trong python. Nhưng ở dòng cuối nó đang hiển thị lỗi thời gian chạy !! tại sao?
Shiuli Pervin

Nó hoạt động tốt với các tập tin raster tham chiếu địa lý. Kết quả là quá nhiều đa giác, nhưng tôi chỉ muốn một đa giác lớn hiển thị đường viền của raster. Có ai có ý tưởng làm thế nào nó hoạt động cùng một lúc?
Shiuli Pervin

Tôi vẫn nhận được shapefile trống, nhưng tôi có hàng trong tệp dbf. Hãy làm rõ cho tôi!
Satya Chandra

Tôi chỉ gặp vấn đề này nhưng thay vì thêm trường giả, bạn có thể nhập chỉ mục -1. Xem ở đây trường đó chỉ được thêm nếu chỉ số> = 0.
jon_two
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.