다각형의 래스터 통계를 계산하는 방법은 무엇입니까?


14

벡터 레이어의 다각형 당 래스터 포인트 (멀티 밴드)의 합계, 평균 등을 어떻게 계산할 수 있습니까? 이것을 "지역 통계"라고합니다. 먼저 QGIS로 시도했습니다.

그것을 할 수있는 방법이 있지만 너무 느립니다 (래스터를 벡터로 변환, 두 번째 벡터 레이어와 교차, 지오메트리 계산, 숫자 내보내기, 스프레드 시트 또는 다른 프로그램으로 통계 계산, 결과를 다시 가져 오기, 결과가 영원히 걸립니다) 350.000 래스터 포인트).

saga-gis를 사용하는 힌트도 받았습니다. 여기에는 "영역 통계"가 있지만 벡터 레이어의 다각형이 아니라 래스터 밴드의 범주를 기반으로합니다. 이를 사용하려면 벡터 레이어를 래스터로 변환 한 다음 통계를 계산해야합니다.

이것은 이것을 해결하는 잘못된 방법 인 것 같습니다. 둘 이상의 다각형에 속하는 래스터 포인트는 다각형 경계에 의해 교차되기 때문에이를 설명 할 방법이 없습니다. 다각형 기반 통계가이를 처리 할 수 ​​있어야한다고 가정하므로 올바른 모듈을 아직 찾지 못했다고 가정합니다.

사 가기에는 정말 많은 모듈이 있습니다. 이 응용 프로그램에 적합한 것이 무엇인지 알려주십시오.


Rudivonstaden의 솔루션을 시도하고 있으며 마지막 두 명령을 입력하면 다음 오류 메시지가 나타납니다. >>> zonalstats = qgis.analysis.QgsZonalStatistics (vectorlayer, rasterfile) Traceback (가장 최근 호출) : 파일 "<입력>" , <module>의 1 행, AttributeError : 'module'객체에 'analysis'속성이 없습니다. >>> zonalstats.calculateStatistics (None) 역 추적 (가장 최근 호출) : <모듈의 1 행, "<input>"파일 > NameError : name 'zonalstats'is not defined 명령이 올바른지 또는 사용중인 래스터 파일이 올바른 형식인지 궁금합니다. 감사!
Dan Wolf

안녕 댄 Stackexchange는 포럼과 약간 다르게 작동합니다. 목표는 지속적인 논의가 아닌 Q & A 유형 상호 작용을하는 것입니다. 원래 질문에 대한 답변으로 알아야 할 내용이 해결되지 않으면 의견 섹션에서 설명을 요청하거나 새로운 질문을 고려해야합니다.
Jay Guarneri

의견 주셔서 감사합니다, 댄 내 답변에 필요한 수입 명세서가 누락되어 수정되었습니다.
rudivonstaden

답변:


22

나는 똑같은 일을하기 위해 고심하고 있었지만 여러 가지 이유로 QGIS를 사용하기 위해 노력하고 있습니다. GRASS 플러그인과 Sextante 플러그인을 사용하여 v.rast.stats를 사용해 보았습니다. 후자의 접근 방식은 통계를 임시 벡터 레이어에 연결 한 다음 삭제하는 것으로 보이므로 실패했습니다. GRASS 플러그인은 작동했지만 겹치는 다각형을 처리하지 않습니다.

유망한 소리를내는 ZonalStats 플러그인의 소스에서 일부 파기를 한 후에 QGIS에는 실제로 API에 내장 된 영역 통계 메소드가 있으며 Python 바인딩도 있습니다. 그래서만큼 당신 만 찾고 있습니다로 count, sum그리고 mean당신의 다각형 기능에 대한 통계, 파이썬 콘솔 (플러그인> 파이썬 콘솔) 현재 폴리곤 속성 테이블에 통계를 부착 할 수있는 가장 쉬운 방법입니다.

  1. TOC에서 래스터 레이어를 선택하고 콘솔에 다음을 입력하십시오 (래스터 레이어의 소스 파일 이름을 가져옵니다).

    >>> rasterfile = qgis.utils.iface.mapCanvas().currentLayer().source()

  2. 벡터 레이어를 선택하고 콘솔에서 다음 명령을 실행하십시오 (벡터 레이어 자체를 잡습니다).

    >>> vectorlayer = qgis.utils.iface.mapCanvas().currentLayer()

  3. 콘솔에서 다음 3 가지 명령을 실행합니다 (벡터 레이어 및 래스터 파일을 QGIS의 내장 구역 통계 계산기로 전달).

    >>> import qgis.analysis

    >>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)

    >>> zonalstats.calculateStatistics(None)

결과는 다각형 레이어에서 추가 필드로 추가됩니다.

구역 통계

새 필드에 접두사를 합계, 평균 및 개수로 추가하지 않고 접두사를 추가하려면 3 단계의 첫 번째 명령을 다음과 같이 바꿉니다 ( 'zonal_'을 접두사 :

>>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile,"zonal_")

1
+1 qgis.analysis.QgsZonalStatistics ()
Aaron

QGIS에는 Zonal Statistics 플러그인이 있으므로 언급 한 명령을 직접 실행할 필요는 없습니다. docs.qgis.org/2.2/en/docs/user_manual/plugins/… 최대 및 최소를 계산할 가능성이없는 이유가 궁금합니다. 뿐만 아니라 가치.
matandked

나는 당신의 기술을 사용했지만 일부 다각형을 삭제합니다 :(
niahoo

6

마지막으로 그것을 찾았습니다 : Saga-GIS에서 열린 카테고리 다각형 및 데이터 그리드, 모양-> 격자-> 격자 값-> 다각형의 격자 통계



3

이 문제는 얼마 전에 이미 해결 된 것으로 보이지만 최근에 래스터 통계가 필요했기 때문에 수프에 숟가락을 넣을 것입니다.

rudivonstaden이 설명한 QGIS 방법론은 팁 덕분에 매력처럼 작동했습니다. 그러나 필자의 경우 다각형 내 래스터 값에 대한 최소 및 최대 값과 표준을 알고 싶었고 QGIS에서 찾을 수없는 기능이었습니다. 나는 기능을 통해 해결책을 발견 isectpolyrstGME 나에게 차라리 빨리뿐만 아니라 필요하고 단지 통계를 준 GIS 문제 하는것, 기능을 해결하기위한 내 마음에 드는이다.

추신. GME는 약간의 불행한 의존성 (ArcGIS)을 가지고 있습니다. 따라서 프로그램 자체를 모든 사람이 자유롭게 사용할 수 있지만 ArcGIS를 실행해야합니다. 그러나 ArcGIS (모든 수준의 라이센스)가있는 경우 사용해보십시오.

편집하다:

나는 원하는 통계를 얻었지만 나중에 실제 숫자를 본 후 약간 성급하게 결론에 도달했다는 것을 알았습니다. 예, 그러나 래스터의 첫 번째 밴드에 대해서만 통계를 얻습니다. 따라서 3 밴드 래스터 이미지로 작업하면 통계가 불완전합니다. 원래 게시물의 채널 수를 지적 했어야합니다. 멀티 밴드 래스터 이미지로 작업하는 경우 위에서 제안한 stn과 같은 SAGA-GIS를 사용하는 것이 가장 좋습니다.


3
zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)
zonalstats.calculateStatistics(None)

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

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

zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer, rasterfile, QgsZonalStatistics.Mean)
zonalstats.calculateStatistics(None)

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.