파이썬에서 빈 다각형을 만드는 GDAL?


12

파이썬에서 Polygonize 함수를 사용하는 데 문제가 있습니다. 이에 대한 요리 책 예제는 여기 에서 찾을 수 있습니다 .

내 코드의 관련 부분은 다음과 같습니다

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

밴드에 관련 정보가 있음을 알고 있습니다 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.],

QGIS에서 속성 테이블을 열면 비어 있습니다. QGIS 화면 캡처

편집하다:

래스터-> 변환-> 다각형 도구를 사용하여 QGIS에서 변환이 제대로 작동합니다.

다각형 화 될 래스터의 스크린 샷 :

래스터로 다각형 화

그리고 QGIS 도구의 결과 변환 스크린 샷 :

QGIS 도구의 다각형 래스터

Windows 7에서 Enthought 배포판을 사용하고 있습니다. GDAL 버전 1.10.0-3

문제는 GDAL과 요리 책 예제를 사용하여 파이썬에서 래스터를 다각형 화 할 수 없다는 것입니다 .QGIS GUI에서 동일한 래스터를 문제없이 다각형 화 할 수 있습니다


래스터는 어떻게 생겼습니까? 실제로 다각형이 포함되어 있습니까? gdal_polygonize.py를 대신 사용하면 작동합니까?
BradHards

QGIS에서 작업 프로세스의 스크린 샷을 추가하도록 편집
camdenl

실제 문제는 무엇입니까?
Fezter

추가 된 특정 문제
camdenl

3
비슷한 문제 (빈 shapefile 생성 중)가 있었고 필드를 만드는 것이 도움이되지 않았습니다. 내가 잘못하고있는 것은 다각형 화를 호출하기 전에 코드에서 shapefile을 닫지 않았다는 것입니다. 당신은 당신의 예에서 그것을 닫습니다, 나는 다른 사람들의 참조를 위해 이것을 게시하고 있습니다.
스테파니

답변:


19

문제는 래스터 밴드를 저장할 필드를 만들지 않았다는 것입니다. gdal_polygonize.py 파일을 파고 들었을 때 gdal.Polygonize를 호출 할 때 자동으로 수행되지 않는다는 것을 깨달았습니다. 대신 여기에 있는 함수를 사용합니다 .

다음은 필드를 만들고 필드에 밴드를 쓰는 데 필요한 추가 단계입니다.

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

그런 다음 인덱스를 0으로하여이 필드에 밴드를 쓸 수 있습니다.

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

또한 gdal.Polygonize () 함수를 사용하여 파이썬에서 래스터를 다각형으로 가져 오려고합니다. 그러나 마지막 줄에는 런타임 오류가 표시됩니다! 왜?
Shiuli Pervin

지리 참조 된 래스터 파일과 잘 작동합니다. 결과는 너무 많은 다각형이지만 래스터의 윤곽을 보여주는 하나의 큰 다각형 만 원합니다. 누구나 동시에 작동하는 방법을 알고 있습니까?
Shiuli Pervin

여전히 빈 shapefile을 받고 있지만 dbf 파일에 행이 있습니다. 저를 깨끗이하십시오!
Satya Chandra

방금이 문제가 있었지만 더미 필드를 추가하는 대신 색인 -1을 입력 할 수 있습니다. 참조 여기에 필드 경우에만 인덱스> = 0 추가됩니다.
jon_two
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.