본문 바로가기

Function

하천범람지도를 QGIS에서 이용하는 방법

이 글은 지난 9월 29일 <오픈데이터포럼 9월 열린세미나>에서 발표했던 내용 중, 하천범람지도 이용 방법만 별도로 발췌하여 정리한 내용입니다.

현재 행안부에서 서비스되고 있는 생활안전지도 중 하천범람지도를 QGIS에서 읽어들이고, 래스터와 벡터 형식의 파일로 변환 및 저장하는 방법을 다루었습니다. 

현재 서비스되고 있는 방식으로는 웹 브라우저에서 지점별 조회만 가능하고 막상 분석에 이용할 수 없었습니다. 그래서 일단 임시로 내부 통신 방식(웹서버~클라이언트) 중 일부를 이용하여 Qgis에서 배경지도 레이어로 읽어들인 후 QGIS의 메뉴를 이용하여 분석 가능한 레이어로 변환하게 됩니다. 원래 발표에서는, 정식으로 WMS 방식으로 개방하거나, 이런 불필요한 과정을 거치지 않도록 GeoTIFF나 SHP 파일로 다운로드 받게 해 주었으면 좋겠다고 언급했습니다.

 

이하 변환 설명입니다. 

QGIS의 기본적인 기능들을 알고 있다는 가정하에 설명했습니다.

 

 

침수와 관련된 지도를 찾다가 행안부에서 서비스하는 생활안전지도 중 하천범람지도를 알게 되었다. 원래는 환경부에서 직접 서비스하다가 최근에 행안부의 생활안전지도 하위 카테고리로 이관되었다.

 

 

폭우와 관련된 지도는 두 종류다. 하천이 범람하거나, 배수용량보다 많은 빗물이 시간당 유입되어 침수되는 내수침수로 구분된다. 내수침수는 주로 주변보다 낮은 오목한 지형에서 많이 발생한다. 

 

 

하천 범람지도는 시뮬레이션을 통해 극한 상황에서 하천 주변의 침수 범위와 깊이를 보여주는 지도다.

생활안전지도는 아래 링크에 접속하면 된다

https://www.safemap.go.kr/main/smap.do?flag=2

재난 아이콘을 클릭하면 '하천범람지도'를 다시 찾을 수 있다.

 

5단계의 색상으로 위험도가 구분되어 있다.

 

 

확대하면 자신이 사는 곳의 위험도를 확인할 수 있다.

 

 

현재 위의 예시처럼 직접 지도를 탐색하면서 살펴볼 수 있고, Open API가 제공되므로 웹서비스 구축할 때도 이용할 수 있다. 그런데 분석 용도로는 사용하기 어려우므로, 분석을 위한 사전 변환작업에 대해서 설명해보겠다.

 

우선 래스터 레이어(GeoTIFF)로 변환해보자.

 

 

 

 

 

우선 QGIS 3.X 이상 버젼에서 오른쪽을 보면  WMS 배경지도를 등록할 수 있다. 새로운 연결을 생성하면서 URL에 다음의 링크를 입력한다.

https://geo.safemap.go.kr/geoserver/safemap/wms

 

 

 

 

 

 

그러면 생활안전지도 목록을 읽어들이게 된다.

 

 

 

 

 

 

먼저 오른쪽 하단에서 지도의 좌표계를 EPSG 3857로 설정한다. 이 설정을 나중에 하면 지도를 정상적으로 읽을 수 없다.

그리고 브이월드 등 다른 배경지도를 미리 불러와서 새로 불러들이는 지도의 요소들이 어디인지 파악하기 용이하도록 준비한다.

그리고 지도목록 중 FloodMap을 읽어들인다.

위의 그림처럼 배경지도로 레이어가 추가된다.

 

 

 

 

 

 

이 상태로는 볼 수는 있지만 분석에 이용할 수 없다.

'맵을 래스터로 변환' 기능을 찾아서 위와 같은 셋팅으로 변환한다.

렌더링 범위는 전체로 두지 말고(용량 등의 문제)분석할 영역만으로 제한하는 것을 추천한다.

픽셀당 지도범위는 15 정도로 두는데, 제공되는 하천범람지도가 더 이상의 해상도를 제공하지 않기 때문이다.

변환 결과를 곧바로 파일로 저장하려고 하면 에러가 발생한다. 따라서 비워둠으로써 일단 임시 레이어로 저장하도록 둔 후 나중에 저장해야 한다.

 

 

 

 

 

 

그래서 일부 변환해보면 위처럼 변환된다. 보이는 것은 배경지도와 당연히 똑같다. 그렇지만 이제 분석이 가능한 래스터 레이어가 되었다.

 

 

 

 

 

이제 이 파일을 우선 GeoTIFF로 저장한다.

 

 

 

 

 

저장 옵션에서 좌표계 역시 변환 가능하다. 

 

 

 

 

 

 

 

 

 

저장이 완료되면 위와 같이 변한다. 아무 값이 없던 빈 영역이 검은색으로 바뀌었다.

 

 

 

 

래스터 분석에 이용하려면 지도에 부여된 1등급~5등급이 1차원의 척도로 구분되어 있어야 한다. 그런데 현재 변환된 지도는 RGB 값을 모두 갖고 있고, R, G, B 각각의 차원에서 1등급~5등급이 순서대로 구분되어 있지 않고 엉켜 있으므로 그 정리 작업을 해줘야 한다.

우선 1차원으로 변환한다. 다행히 안티에일리어싱 된 곳이 없고 원본 파일이 경계가 명확하게 구분되어 있으므로 색상 개수에 배경 검은색을 포함한 6개를 입력하면, 문제없이 1차원으로 변환이 깔끔하게 된다.

 

 

 

 

 

 

결과는 1 band로 변환되었으나, 여전히 순서가 뒤섞여 있다. 색상을 정리해서 다른 이름으로 다시 저장해줘야 한다.

 

 

 

 

 

 

 

다행히 단계가 6개가 전부이므로 일일이 클릭해서 색상을 바꿔준다. 위에서는 30, 60, 90, 120, 150으로 했는데, 사실 10, 20, 30, 40, 50 등 다른 수를 써도 된다. 0~255 범위 안에서 순서대로만 정리해주면 된다.

 

 

 

 

 

 

위처럼 하나씩 클릭해서 변환한다.

 

 

 

똑같이 GeoTIFF로 저장하는데, 이번에는 렌더링된 영상으로 옵션을 바꾼다. 즉, 화면에 보이는 색상대로 저장할 수 있다.

 

 

 

 

 

이제 변환된 결과를 확인하면, R, G, B 각각의 band에 모두 0~150이 순서대로 잘 들어가 있음을 확인할 수 있다.

 

 

 

 

그냥 이용해도 상관없지만 그레이 스케일의 1band로 변환하려면 GDAL의 '변환(포맷변경)' 기능을 찾은 후, 위와 같이 추가 명령줄에 -b 1을 써넣어서 변환할 수 있다.

 


내용 추가

지인의 제보로, 위에 설명한 RGB를 PCT로 변환한 단계 이후에 좀 더 간편한 방법을 알게 되어 업데이트 합니다.

 

 

QGIS 기능 중 하나인 래스터 계산기(raster calculater)를 이용하면 굳이 3band로 다시 저장하지 않고, 곧바로 1band 에서 색상을 재정렬할 수 있다.

 

RGB to PCT 변환 직후에 '래스터 계산기'  창을 연다.

산출 레이어 항목에 결과물이 될 레이어 경로와 이름을 넣어주고, 표현식은 아래처럼 입력하면 된다.

 

if("RGB를 PCT로@1"=3, 0,

  if("RGB를 PCT로@1"=1, 1,

    if("RGB를 PCT로@1"=0, 2,

      if("RGB를 PCT로@1"=4, 3,

        if("RGB를 PCT로@1"=5, 4,

          if("RGB를 PCT로@1"=2, 5, 99))))))

 

 

래스터 계산기를 띄우면 좌측상단 '래스터 밴드' 항목에 현재 올라와 있는 레이어들의 밴드 목록이 이미 자동적으로 들어가 있다. 하단의 표현식을 쓸 때 해당 밴드 더블클릭 등으로 손쉽게 입력 가능하다.

 

'RGB를 PCT로@1' 은 현재 PCT로 변환한 레이어의 밴드가 하나뿐이기 때문에 밴드 번호 1번이 @1로 표현되어 있다고 이해하면 된다.

이제, PCT로 변환되었지만 색상 순서가 뒤섞여 있는 레이어를 다시 정리해준다. 원래 서비스의 범례를 참고하면 현재  레어 이름의 3(blank),1,0,4,5,2  순서로 범례 1단계~5단계가 되어 있음을 파악할 수 있다. 그러므로 위와 같이 중첩 if 문을 이용하여 레이어를 정리할 수 있다.

 

이렇게 하면 곧바로 다시 1band로 저장되므로, 단계도 단순화하고 파일 용량도 줄일 수 있다.


여기까지로 해서 래스터 레이어 변환 완료!

 

 

 

 

 

이번에는 벡터 레이어로 변환해보자.

 

 

 

 

간단하다. 최종 변환된 GeoTIFF 파일을 기준으로, '벡터 레이어(폴리곤)으로 변환'기능을 찾아서 실행시킨다.

 

 

 

 

대표

성공적으로 변환되었다.

이제 값에 따라 세부 레이어를 on/off 함으로써 침수 지역을 등급별로 확인할 수 있다.

 

 

 

벡터 레이어와 래스터 레이어로 모두 변환했으므로 이제 여러가지 분석작업에 이용할 수 있다.

 

변환된 벡터 레이어는 화면 우측 '공간처리 툴박스'에서 '무결성 검증' 기능을 찾아 오류를 검사하고 필요할 경우 수정해주면 된다.

 

끝.