파이썬 콘솔에서 QGIS Zonal Stats Plugin을 사용하십니까?


9

QGIS의 Zonal Stats 플러그인을 사용하여 오버레이 다각형에서 래스터 통계를 추출합니다 (종 분포의 모양 파일이 있으며 각 종 범위 내에서 환경 데이터를 추출하려고합니다). 데이터를 가져와야하는 300 개 정도의 파일이 있으므로 파이썬 콘솔에서 실행할 스크립트를 작성하고 싶지만 파이썬을 사용하는 초보자는 아니며이 작업을 수행하는 방법을 모릅니다.



차드-예, 비슷한 질문이지만 더 구체적입니다. 아무도 다른 질문에 대답하지 않았으며 대신 문제를 해결하는 다른 방법을 제안했습니다. 다른 게시물을 삭제하는 방법을 모르겠습니다
Thomas

다른 질문에서 나는 당신이 원하는 것을 할 수있는 r 스크립트를 지적했으며 Sylvester Sneekly는 당신을 파이썬의 정확한 방법으로 명명했습니다. 파이썬이나 r로 코딩하는 데 익숙하지 않다면 다른 힌트보다 도움이되지 않습니다. 자체 코딩 스크립트 또는 많은 마우스 클릭이 필요합니다. 작동하지 않는 경우 코딩을 배우고 예제를 시도한 후 다시보고하십시오.
Curlew

@ Curlew-실베스터의 방법은 매우 훌륭하게 들리지만 엄청난 학습 곡선을 나타내며 지금은 할 시간이 없습니다. 실베스터의 도움에 감사하지만 그 이후로는 간단한 답이 아니었다. 나는 다른 질문 ( gis.stackexchange.com/questions/23203/… ) 에서 언급 한 게시물에서 내가 읽은 대부분의 코드를 가지고 있었지만 . 실베스터의 방법이 파이썬에서 이것을 수행하는 유일한 방법이라면 어쩌면 얼마나 어려운지 과소 평가했을 것입니다.
Thomas

@ Curlew-R 스크립트가 실제로 작동합니다. 감사합니다. 내가 아직 해결하지 못한 유일한 것은 R에 반환 된 결과를 shapefile의 .dbf 파일에 추가하는 방법입니다 (이에 대한 도움이 있으면 감사하겠습니다).
Thomas

답변:


13

아래 코드는 QGis 1.8.0에서 작동했습니다.

루프가있는 여러 파일을 수용하기 위해이를 수정할 수 있습니다.

from qgis.analysis import QgsZonalStatistics

#specify polygon shapefile vector
polygonLayer = QgsVectorLayer('F:/temp/zonalstat/zonePoly.shp', 'zonepolygons', "ogr") 

# specify raster filename
rasterFilePath = 'F:/temp/zonalstat/raster1.tif'

# usage - QgsZonalStatistics (QgsVectorLayer *polygonLayer, const QString &rasterFile, const QString &attributePrefix="", int rasterBand=1)
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

큰. 매우 감사합니다.
토마스


도움이됐다 니 다행입니다!
vinayan

@vinayan QProgressDialog는 계산이 얼마나 진행되었는지를보고 싶은 시각적 환경에 유용합니다. 명령 행에서는 사용되지 않습니다. None매개 변수로 사용할 수 있으며 정상적으로 작동합니다. 그런 다음 From PyQt4..라인이나 라인이 필요하지 않습니다 progressDialog = . gis.stackexchange.com/questions/23203/…
rudivonstaden

@rudivonstaden-이제 이해가 되네요 .. 답변을 업데이트했습니다
vinayan

2

SAGA GIS에서 원하는 것을 얻는 방법은 다음과 같습니다. 이것은 아마도 당신이 원하는 해결책은 아니지만 작동합니다. 플러그인이 실패하는 이유를 살펴보고 가능한 빨리 업데이트하십시오.

SAGA GIS를 설치 하십시오 (리눅스 배포판에서 apt-get 또는 aptitudbe를 통해 사용 가능해야 함).

  • SAGA를 시작하고 래스터 및 벡터 모양으로로드하십시오 (메뉴 모듈-> 파일-> GDAL / OGR 가져 오기). 아래 프로세스를 볼 수 있습니다.
  • 모듈 "다각형에 대한 그리드 통계"를 실행하십시오 (메뉴 모듈-> 모양-> 그리드-> 그리드 값). 값이 테이블에 직접 추가됩니다. 대화 상자는 다음과 같아야합니다여기에 이미지 설명을 입력하십시오
  • 작업 영역에서 "데이터"탭으로 이동하여 벡터 레이어를 마우스 오른쪽 버튼으로 클릭하고 "다른 이름으로 저장 "을 선택 하여 추가 된 속성으로 모양을 내 보냅니다. 마우스 오른쪽 버튼을 클릭하여 속성 테이블을 표시 한 다음 테이블 쇼를 클릭 할 수도 있습니다.

이것은 당신이 저에게 보낸 데이터 세트에서 작동합니다. SEXTANTE를 통해 QGIS에서 SAGA 모듈을 BATCH 프로세스로 호출 할 수도 있습니다. 이렇게하려면 SEXTANTE 옵션에서 SAGA 모듈을 활성화하십시오.


제안에 감사하지만 이미 saga를 시도했습니다. 결과가 일치하지 않습니다. 즉 동일한 일을 두 번 수행하면 다른 결과가 나타납니다. QGIS의 ZonalStats 플러그인이 작동한다는 것을 알고 있으므로 ZonalStats를 자동화하는 방법을 따르고 있습니다.
Thomas

@vinayan 나는 지역 통계에 대해 주어진 코드를 가지고 있지만 다각형 벡터 레이어에 열을 생성하지만 계산 된 값을 업데이트하지는 않습니다. 왜 그래야만하지?
user99

2
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

기본적으로 Count, Sum 및 Mean 만 계산합니다 ( Raster -> Zonal StatisticsQGIS Desktop에서 알 수 있듯이 더 많은 작업을 수행 할 수 있음).

예를 들어, 사용해야하는 평균 만 계산하려는 경우 :

zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean)
zoneStat.calculateStatistics(None)

모든 옵션에 대해서는 API 를 참조하십시오 .


Min & Max와 같은 두 가지 선택 통계를 얻는 구문을 누구나 도울 수 있습니까? 나는 다른 방법을 시도했지만 성공하지 못했습니다
dorakiara

Qgis 3에서는 래스터 파일 경로를 래스터 파일 자체로 바꿔야합니다! 따라서 rasterFilePath = 'F : /temp/zonalstat/raster1.tif'는 다음과 같이됩니다. rasterFile = QgsRasterLayer ( 'F : /temp/zonalstat/raster1.tif', 'raster') 그런 다음 zoneStat에서 rasterFilePath를 rasterFile로 변경합니다. command zoneStat = QgsZonalStatistics (polygonLayer, rasterFile, 'pre-', 1) zoneStat.calculateStatistics (None)
philsch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.