GDAL boş poligon oluşturmak python poligonize?


12

Python Polygonize işlevini kullanarak sorun yaşıyorum. Bunun için yemek kitabı örneğini burada bulabilirsiniz .

Kodumun ilgili kısmı:

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

Grubun ilgili bilgilere sahip olduğunu biliyorum, burada bir snippet 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.],

Nitelik tablosunu QGIS'de açtığımda boş: QGIS ekran görüntüsü

Düzenle:

Raster -> Dönüştürme -> Poligonize aracını kullanarak dönüştürme QGIS'de iyi çalışır

Poligonize edilecek olan raster ekran görüntüsü:

çokgenleştirmek için tarama

Ve QGIS aracından elde edilen dönüşümün ekran görüntüsü:

QGIS aracından poligonize tarama

Windows 7, GDAL sürüm 1.10.0-3'te Enthought dağıtımını kullanıyorum

Sorun, GDAL ve yemek kitabı örneğini kullanarak python'da bir raster poligonize edemem, QGIS GUI'de sorun olmadan bu aynı raster poligonize edebilirim


Rasteriniz neye benziyor? Gerçekten çokgenler içeriyor mu? Bunun yerine gdal_polygonize.py kullanırsanız çalışır mı?
BradHards


Burada asıl sorun nedir?
Fezter

Özel bir sorun eklendi
camdenl

3
Benzer bir sorunum vardı (boş şekil dosyası oluşturuluyor) ve alanı oluşturmak yardımcı olmadı. Ne yanlış yapıyordum poligonize çağırmadan önce kodumda şekil dosyasını kapatmamıştı. Örneğinizde kapatıyorsunuz, bunu sadece başkalarının referansı için gönderiyorum.
Stephanie

Yanıtlar:


19

Sorun şu ki, tarama bandını saklamak için bir alan oluşturmuyordum. Gdal_polygonize.py dosyasını inceledikten sonra, bunun burada bulunan işlevi kullanan gdal.Polygonize çağrılırken otomatik olarak yapılmadığını fark ettim .

Alan oluşturmak ve alana bant yazmak için gereken ek adım:

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

Daha sonra grubu bu alana 0 diziniyle yazabiliriz:

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

Ayrıca python benim raster çokgen olarak almak için gdal.Polygonize () işlevini kullanmaya çalışıyorum. Ama son satırda çalışma zamanı hatası gösteriyor !! neden?
Shiuli Pervin

Coğrafi referanslı tarama dosyaları ile iyi çalışır. Sonuç çok fazla çokgen, ama sadece raster taslağını gösteren büyük bir çokgen istiyorum. Herkesin aynı anda nasıl çalıştığı hakkında bir fikri var mı?
Shiuli Pervin

Hala boş şekil dosyası alıyorum, ama dbf dosyasında satırları var. Lütfen beni temizle!
Satya Chandra

Ben sadece bu sorun vardı ama bir kukla alan eklemek yerine, -1 bir dizin girebilirsiniz. Bkz burada alan sadece eğer endeks> = 0 ilave edilmesidir.
jon_two
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.