CODEKILLER

알림 : [namoosystem.com] Codekiller 나무의사 빨간펜 인강, 재해위험성 검토의견서 QGIS 강의

반응형
산림공간분석 프로그램 제작기

Ck-Geo라는 Application은 시중에 있는 이름은 아닙니다. Codekiller Geo라는 이름의 약어라고 봐주시면 될듯합니다. 산림공간분석하는데 필요한 툴이 머가 있을까요? 아시다시피 QGIS라던지 ArcGiS 등이 있겠죠. 하지만, 이러한 툴들은 사용법이라던지, 플러그인, 분석을 하기 위한 Geometry 제반 지식을 갖추고 있어야 하기에 산림사업법인 등에서 초기 접근은 그리 쉽지는 않습니다. 물론 배우면 누구나 할 수 있습니다. 자!! 여기에서 질문을 던져봅니다. 공간분석을 할 때 매번 비슷한 패턴을 가지고 하는 기능들인데, 왜 작업을 할 때마다 2~4일이라는 기간을 소비할까??? 설계하랴 감리하랴 사무실에서 공간분석을 주구장창 붙들고 있지 못하는 실정이라는 것을 알고 있습니다. 이러한 생각에서 Ck-Geo를 만들어보자는 계획을 세웠습니다. 
 
초기 버젼은 참 어설프기 짝이 없죠~^^; 이 역시 그렇습니다. 하지만 우리는 이제 AI의 도움을 받아 알고리즘을 부탁할 수 있는 시대가 도래했습니다. 생생하게 생각하다 보면 현실이 된다고 ㅋㅋㅋ 무엇이라도 결과물이 나오겠죠머.

무엇부터 시작할까?

어떤 작업을 할 때 무엇부터 시작해야 할까요? 제 스스로 만들어보려는 프로그램이라서 요구사항 분석의 개념이 없습니다. 지시하는 사람도 없습니다. UI? UX? 도 어떻게 구성을 할지 정해지지 않았습니다. 하지만, 목표는 있으니까 시작을 했겠죠~ 어떤 기능이 들어갈지는  머릿속에 이미 결정이 되어 있습니다. 쉬운 것부터 작업을 진행하다가 후반부에 포기하지 말자....... 바로 결론부터 만들어봐서 난이도를 체감해 보는 것이 목표입니다.
 
"가장 난이도 있는 부분을 먼저 해봐서 어느 정도 구색이 맞춰진다면 이 프로그램 제작에 끝을 보자"가 목표입니다. 기본이 되는 것들은 간략히 Coding 하고, 결말을 미리 맛을 보는 거죠. 되는 건지 안 되는 건지를 먼저 확인을 하고 싶습니다.
 
먼저 지적도라던지 DXF을 준비합니다. 산림사이트에서 받아도 되고, 인터넷상에 누군가가 올려놓은 dxf를 가지고 해도 되겠죠~ 저도 누군가 올려놓은 dxf를 이용했습니다. 

<Development Environment>
Platform: Microsoft Windows
Language: C# (WPF Framework)
Architecture: Native Desktop Application
Third-party Libraries: None (Fully In-house Implementation)

1. 좌표계 설정

Ck-Geo 메뉴

기존에 로직 부분은 어느 정도 만들어 놓은 부분도 있었고, 빠르게 결과를 도출하기 위한 메뉴를 구성했습니다. 
이외에도 기능 넣고 싶은 것들은 무수히 많습니다. (경사도분석, 표고분석, 경영계획, 격자분석, Vector머지, 임상도, 토심, 지질도, 위치도 등등) 욕심은 버리고 마지막관문(수계망분석)부터 해보는 거죠. DXF 파일을 Open 할 때 좌표계 설정 부분을 간략히 넣습니다.

좌표계 설정

2. 배경지도도 깔아야 하나?

보통의 경우, GIS 작업을 할 때는 배경지도(위성지도)를 먼저 올리고 벡터레이어를 올리면서 위치를 잡고 시작하죠.. 그냥 간략하게만 메뉴를 넣어서 맵만 올라오는지 정도만 보고, 구색만 갖추고 넘어갑니다. (이런 부분에서 시간을 소비하면 결과를 빨리 볼 수가 없으니까요)

배경지도(Vworld, Google)

3. DXF를 DEM으로 변환하기

DXF 를 DEM으로 변환

어느 소스 부분이 잘못되었는지 회색으로만 나와야 할 부분이 까맣게 나오고 있습니다. DXF를 이용해서 DEM(수치표고모델) 변환한 것에 음영기복도(hillshade)까지 적용해 봤습니다. 약간 이상하게 나오는 부분이 있긴 하지만 DEM은 생성되었으니 넘어가 보도록 하겠습니다. 수계망분석에서 가장 기초가 되는 DEM이 생성되었다는 게 중요합니다. 

4. DEM과 DXF 중첩

DXF 올리기

DEM이 약간 이상하게 나와서 인지~ 까만색의 구멍들이 많습니다^^; 아래에는 DEM을 위에는 DXF를 올리고 중첩해 보니, 입체감 있게 잘 나오네요. 이 부분은 요기까지만 작업하고 넘어가도록 하겠습니다.

5. Filled DEM 생성

수계망 분석을 하려면 어디에 물이 차는지!! 표고가 높은지 낮은 지를 알아야겠죠, 가상으로 물을 채워보는 Filled Dem을 생성합니다. GDAL을 사용해도 좋고, AI를 이용한 알고리즘을 활용해도 결과는 아주 흡사합니다. 저는 GDAL을 이용해 봤습니다. QGIS에서 할 때는 Fill Depressions를 이용해도 되겠죠.

Filled DEM(GDAL)

3번의 사진과 매우 비슷하지만, 정상적으로 Filled Depressions 만들어졌습니다. 이 상태만 보면 정상인지는 알 수 없지만, 뒤로 가면서 정상적인 것을 알 수가 있습니다. 이 작업도 요기까지만 진행하고 패스 하겠습니다.

6. Flow Direction + 향분석

보통은 Flow Direction만을 진행해서 Arrow를 추가하는데, 향분석의 색상까지 같이 적용해 보도록 하겠습니다. 화살표를 더 역동적으로 표현하고 싶지만, 추후작업으로 미루고 다음 작업으로 Go Go!!

Flow Direction + 향분석

7. Flow Accumulation (유량누적도)

Flow Direction의 방향이 후 물이 누적되는 Accumulation을 표현해 보았습니다. 점점 물이 흘러가는 모습을 확인할 수가 있는데, 이는 Filled DEM이 전단계 작업에서는 육안으로 확인이 안 되지만 이번 단계에서 정상적으로 생성됨을 알 수 있습니다.

Flow Accumulation

8. 하천망(수계)

SAGA를 사용할 시절에는 Channel Network이라고 불리었고, 현재는 extract stream이라고 불리는 녀석입니다. 내부 속성 값이 0, 1로만 구성되어 있어서 쉽게 수계가 어딘지를 확인할 수가 있습니다. 단, threshold(임계값)을 입력받게 구성을 해야 하는 특징을 가지고 있습니다. 임계값에 따라서 수계가 많이 나오거나 적게 나오거나 설정이 가능합니다. 전 임계값 100 지정하겠습니다.

Channel Network(하천망)

9. 유역경계 (수계망 분석)

재해위험성 분석에서 유역의 면적 또는 경계 설정을 QGIS의 watershed basins을 이용하는데, 분지가 어디인지를 정확히 구분해 내야 합니다. 영역을 어느 정도 잡아내긴 했지만 Closed Vector이 아니다 보니, 정확한 면적의 계산을 적용할 수가 없습니다. 이 부분은 구역마다 Vector가 Closed 되도록 개발이 더 필요해 보입니다. 여하튼 watershed까지 왔다는 게 중요하겠죠!! 결과만 보기 무척 어렵네요.

유역경계

10. Strahler Order (하천차수 분석)

상급지(상류)부터 물길이 만들어지면서 차수가 증가하는 Strahler Order 분석까지 아주 정상적으로 나왔습니다. 

Strahler Order (하천 차수 분석)

결과

기존 재해위험성 분석 과정 중 수계망 분석에서 많은 시간을 소요하고 계신 분들이 분명 있으실 텐데요.
저 역시 같은 고민을 하다가, 개인적으로 간단한 도구를 하나 만들어 보았습니다. 아직 초기 단계이긴 하지만, 이 도구를 활용하면 해당 작업을 1분 이내로 처리할 수 있을 정도로 많이 단축되었습니다.
 
기존에 짬짬이 개발해 두었던 부분도 있었고, 어떻게 개발할지에 대한 개략적인 설계도 머리에 있었는데, 그런 것보다 가장 중요한 것은 이제는 알고리즘 분야에서 AI가 너무 월등해졌다는 거죠. 산림분야는 오픈소스가 그리 없어서 한동안 버거웠었는데, 이제는 조금은 창의성 있는 것들을 해볼 수 있겠구나 싶네요.
 
오늘은 여기까지만 하고 다음에 다시 이 작업을 할 시간이 있다면 조금 더 MD설계작업을 하고 제대로 해봐야겠네요.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band