
쓰나미 피난 경로가 '강·바다'를 향하는 문제를 구멍 채우기 + 도로 스냅(Road Snap)으로 해결한 방법
요약
쓰나미 피난 경로 생성 시 강이나 바다를 탈출지로 잘못 안내하는 문제를 해결하는 방법을 다룹니다. 데이터의 구멍을 채우는 방식과 OSRM API를 이용한 도로 스냅 기술을 결합하여 실제 보행 가능한 경로를 구현했습니다.
핵심 포인트
- 침수 데이터 내 수역(강, 호수)을 폴리곤의 구멍으로 인식하여 발생하는 오류 해결
- Shapely를 사용하여 폴리곤의 내부 링을 제거하고 수역을 침수 구역에 포함
- OSRM의 nearest API를 활용해 탈출 후보점을 실제 도로 위로 스냅
- 도로와의 거리를 기준으로 바다 방향의 잘못된 경로를 필터링
전국 대응 쓰나미 피난 맵( https://tsunami-hinan.it-study.jp )을 개인 개발하고 있습니다.
이 앱은 '침수 예상 구역 안에 있는 사람'에게, 구역 밖으로 나가는 탈출 루트도 제안합니다. 그런데 구현 초기에, **강 한복판이나 바다를 향하는 “도망칠 수 없는 루트”**가 나타나는 일이 있었습니다. 원인과 수정 방법에 대한 이야기입니다.
침수 구역 내의 기점으로부터 8방향으로 밖을 향해 뻗어 나가서 '처음으로 침수 구역 밖으로 나온 지점'을 탈출지로 설정했습니다.
// 기점으로부터 8방향, 200m씩 밖으로. 처음으로 「구역 외」가 된 점을 탈출지로
for (const brng of [0,45,90,135,180,225,270,315]) {
for (let dist = 200; dist <= 6000; dist += 200) {
...
언뜻 보기에는 괜찮아 보이지만, 침수 데이터의 “틈새”에서 오작동합니다.
강·호수·연못: 침수 예상 데이터에서는 이것들이 '대상 외(=폴리곤의 구멍)'로 되어 있다. 구멍에 들어가는 순간 「구역 외 = 안전」이라고 판정하여, 강 한복판이 탈출지가 된다. -
바다: 침수 구역 외곽의 바깥쪽은 바다다. 바다 쪽으로 뻗으면 「구역 외」가 되어, 바다가 탈출지가 된다.
둘 다 인간은 도망칠 수 없습니다.
수역에는 「안쪽 구멍(강·호수)」과 「바깥쪽(바다·큰 강)」의 두 종류가 있으므로, 대책도 두 가지를 준비했습니다.
강·호수·연못은 「구멍」이므로, 내부 링(Inner Ring)을 제거하여 외곽(Outer Ring)만 남긴다 = 수역을 침수 구역에 포함시킵니다. 쓰나미 피난에서는 「수역 = 위험」 쪽으로 판단하는 것이 안전 측입니다. 데이터 변환(Python / shapely)으로 수행합니다.
from shapely.geometry import Polygon, MultiPolygon
def drop_holes(geom):
if geom.geom_type == "Polygon":
...
이로써 탈출 탐색이 강이나 연못에서 멈추지 않게 됩니다. 모든 현의 폴리곤을 「구멍 제로」로 맞췄습니다.
외곽의 바깥쪽인 바다는 「구멍」이 아니므로, A 방법으로는 사라지지 않습니다. 그래서 탈출 후보마다 OSRM의 nearest (가장 가까운 도로) API를 호출하여,
도로가 너무 먼 지점은 수역으로 간주하여 제외합니다. 이와 함께, 후보점을 도로 위로 스냅(Snap)합니다.
const EXIT_MAX_ROAD_DIST = 150; // m
async function snapExitToRoad(base, ep) {
const url = base.replace('/route/v1/', '/nearest/v1/')
...
실측해 보니 역할 분담이 깔끔하게 나옵니다 (가장 가까운 도로까지의 거리):
| 지점 | 가장 가까운 도로 | 판정 |
|---|---|---|
| 시가지 (육지) | 약 4m | 채택 |
| ... |
바다는 차원이 다르게 멀기 때문에, 임계값 150m로 확실하게 걸러낼 수 있습니다.
- 침수 데이터의 「구멍(강·호수)」과 「바깥쪽(바다)」은 별개다.
구멍 채우기(데이터 측) + 도로 스냅(실행 시)의 2단계 대응으로, 현실적으로 진행할 수 있는 루트만 남길 수 있다. - - 「수역 = 위험 측으로 판단」하는 것은 방재 용도로서 안전 측에서 타당하다.
- 실제 지정 피난소로의 경로는 원래 도로 기반이므로 영향 없음. 수정하는 것은 합성된 탈출 루트뿐이다.
이 처리 덕분에, 「침수 구역 밖으로 나가는」 안내가 실제로 걸을 수 있는 길이 되었습니다.
👉 쓰나미 피난 맵 (무료·등록 불필요·오프라인 대응): https://tsunami-hinan.it-study.jp
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기