REMOTE SENSING

QGIS Oceancolor Data Downloader (3) - 반복적으로 구역 통계 실행하기

유병혁 2015. 8. 25. 02:26

앞서 2003년 해수면 온도(Sea Surface Temperature, SST) 데이터를 다운로드

받았었는데요, 해상형 국립공원 3곳을 기준으로 구역 통계를 계산해 보도록 하겠습니다.

참고로, 해상형 국립공원은 다도해해상, 한려해상, 태안해안 3곳이 있습니다.

 

해상형 국립공원 폴리곤과 365장 SST 래스터 영상에 대해 반복적인 구역 통계가

실행되어야 하는데요, 여기서는 QGIS 파이썬 콘솔을 이용하여 코드로 처리해 보도록 하겠습니다.

 

먼저 벡터, 래스터 레이어를 변수로 지정하는 방법을 알아볼까요?!

일단 해당 레이어 파일이 저장되어 있는 폴더를 Prefix Path로 지정해 보겠습니다.

 

# 현재 경로를 Prefix Path로 지정합니다.
help(QgsApplication.setPrefixPath)
QgsApplication.setPrefixPath("D:\Download_SST", True)

 

폴리곤과 래스터 레이어를 지정하는 코드는 아래와 같습니다. 간단하죠?!

# 폴리곤 레이어를 지정합니다.
vlayer = QgsVectorLayer("marine_and_coastal_national_parks.shp", "vlayer", "ogr")
print vlayer.name()
# 래스터 레이어를 지정합니다.
rlayer = QgsRasterLayer("A2003001.L3m_DAY_NSST_4.tif", "rlayer")
print rlayer.name

위와 같은 방식으로 직접 경로, 이름을 통해 지정할 수도 있지만, 아래 그림과 같이

레이어가 이미 등록되어 있는 경우에는 보다 손쉽게 벡터, 래스터 레이어를 지정할 수 있습니다. 

 

 

# 벡터 레이어, 래스터 파일을 지정합니다. vlayer = qgis.utils.iface.mapCanvas().layer(0) rfile = qgis.utils.iface.mapCanvas().layer(1).source() print vlayer.name(), rfile

# 래스터 파일에서 날짜에 해당하는 문자열을 선택합니다. print rfile[21:24]

아래와 같이 파이썬 콘솔에서 구역 통계를 실행하였습니다.

 

# 구역 통계를 실행합니다. from qgis.analysis import QgsZonalStatistics help(qgis.analysis.QgsZonalStatistics) zonalstats = qgis.analysis.QgsZonalStatistics(vlayer, rfile, rfile[21:24] + "_") zonalstats.calculateStatistics(None)

이제 반복문을 통해 해상형 국립공원 폴리곤 내에 속하는 365장의 구역 통계를 계산해 보도록 하겠습니다.

# 반복적으로 구역 통계를 실행합니다.
i = 1
while i <= 365:
     rfile = qgis.utils.iface.mapCanvas().layer(i).source()
     # 구역 통계를 실행합니다.
     zonalstats = qgis.analysis.QgsZonalStatistics(vlayer, rfile, rfile[21:24] + "_")
     zonalstats.calculateStatistics(None)
     i += 1

아래 그림과 같이 폴리곤 내에 연속적으로 구역 통계 결과값이 저장되었습니다.

 

각 해상형 국립공원 별로 SST 시계열 그래프를 그려본 결과는 아래와 같습니다.