이번 글은 QGIS 3.4 Orfeo ToolBox(OTB)에서 SRTM 타일을 자동 다운로드하고
원하는 방식대로 병합하거나 관심 영역(ROI)을 추출하는 방법을 학습해 보도록 하겠습니다.
학습을 위해 KDPA에서 내려받은 소백산국립공원 폴리곤을 이용하겠습니다.
소백산국립공원 일원의 SRTM 타일을 다운로드 받아보겠습니다.
해당 기능은 'OTB > DownloadSRTMTiles'를 실행하시면 됩니다.
DownloadSRTMTiles 실행 창은 아래와 같습니다.
Input images list 또는 image vector data list를 통해 SRTM 타일을 내려받고자 하는 영역을 지정해줍니다.
여기서는 소백산국립공원 벡터데이터를 지정해주시면 되겠죠?!
이제 Tile directory를 통해 SRTM 타일을 내려받을 폴더를 지정한 후, 실행 버튼을 클릭합니다.
자, 해당 폴더에 소백산국립공원에 해당하는 SRTM 타일 2장을 내려받았습니다.
탐색기 패널을 이용하시면 zip 파일 내에 있는 래스터를 바로 레이어로 추가하실 수 있습니다.
SRTM 타일 2장을 열어본 화면입니다. 이제 이 타일 2장을 한 번 병합해볼까요?!
래스터 병합은 'OTB > Image Manipulation > Mosaic'을 이용하시면 됩니다.
Mosaic 창 실행 화면입니다. Input Images에 SRTM 타일 2장을 선택하고 Output image 지정 후 실행해 보겠습니다.
결과는 아래와 같은데요, 일부 해양 영역이 음수(-) 값으로 지정되어 있는 것을 보실 수 있습니다. 이 부분을 No-data로 조정해 보겠습니다.
'OTB > Image Manipulation > ManageNoData'를 클릭합니다.
앞서 병합된 래스터를 Input image에 할당하고,
No-data handling mode를 changevalue로 지정해 주겠습니다.
The new no-data value에 해양 화소값에 해당하는 -32768을 입력해 줍니다.
실행하면 아래와 같이 해당 값이 no-data로 처리됩니다. 이번에는 이 래스터는 원하는 관심영역(ROI)으로 추출해 볼까요?!
해당 기능은 'OTB > ExtractROI'를 통해 작업하실 수 있는데요, 이번에는 파이썬 프로그래밍을 통해 해당 기능을 구현해 보겠습니다.
파이썬 3에서 Orfeo ToolBox(OTB) 호출하기 | http://blog.daum.net/geoscience/1322
먼저 ROI를 XY좌표로 지정하는 mode extent 모드를 구현해 보겠습니다. XY좌표를 확인하기 위해 '보기 > 꾸미기 > 그리드'를 실행합니다.
Grid Properties에서 XY 간격, 글꼴, 좌표 정밀도 등을 적당히 수정하고 확인 버튼을 클릭해 보겠습니다.
아래와 같이 그리드가 표시되는데요, 이 값을 참고하여 소백산국립공원을 아우르는 XY좌표를 선정해 보겠습니다.
OTB CookBook에서 해당 기능을 검색하시면 Example 코드가 제공됩니다. 이 코드를 수정하면 되겠죠?!
ExtractROI - Extract ROI | https://www.orfeo-toolbox.org/CookBook/Applications/app_ExtractROI.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/usr/bin/python # Import the otb applications package import otbApplication # 디렉터리 위치 변경하기 import os os.chdir('D:\GEODATA') # The following line creates an instance of the ExtractROI application ExtractROI = otbApplication.Registry.CreateApplication("ExtractROI") # The following lines set all the application parameters: ExtractROI.SetParameterString("in", "SOBAEK_SRTM_MOSAIC_NODATA.tif") ExtractROI.SetParameterString("mode","extent") ExtractROI.SetParameterFloat("mode.extent.ulx", 128.2) ExtractROI.SetParameterFloat("mode.extent.uly", 37.2) ExtractROI.SetParameterFloat("mode.extent.lrx", 128.8) ExtractROI.SetParameterFloat("mode.extent.lry", 36.8) ExtractROI.SetParameterString("mode.extent.unit", "lonlat") ExtractROI.SetParameterString("out", "ExtractROI-extent.tif") # The following line execute the application ExtractROI.ExecuteAndWriteOutput() | cs |
extent mode로 ROI를 추출한 결과는 아래와 같습니다.
이번에는 mode fit을 이용하여 소백산국립공원 벡터를 기준으로 ROI를 추출해 봅니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/usr/bin/python # Import the otb applications package import otbApplication # 디렉터리 위치 변경하기 import os os.chdir('D:\GEODATA') # The following line creates an instance of the ExtractROI application ExtractROI = otbApplication.Registry.CreateApplication("ExtractROI") # The following lines set all the application parameters: ExtractROI.SetParameterString("in", "SOBAEK_SRTM_MOSAIC_NODATA.tif") ExtractROI.SetParameterString("mode","fit") ExtractROI.SetParameterString("mode.fit.vect", "SOBAEK_BNDRY.shp") ExtractROI.SetParameterString("out", "ExtractROI-fit.tif") # The following line execute the application ExtractROI.ExecuteAndWriteOutput() | cs |