Skip to content

Repository files navigation

OpsMap — 재난대응 작전도

현장 보고를 보고 → 사람 확정 → 출처·시각·정정 이력 → 작전도·보고서로 연결하는 로컬 재난대응 시제품입니다. 공장화재·산불·화학사고·실종자 수색을 같은 입력·검토 원칙으로 다룹니다.

합성 사고를 사용한 개인 제작 시제품입니다. 공식 지휘·예측 시스템이 아니며 현장 성능은 별도 검증이 필요합니다.

공개 데모 배포

바로 실행: https://opsmap-ksh83.onrender.com

Deploy to Render

render.yamlrun_web.sh가 합성 DB를 자동 생성하고 플랫폼의 PORT에서 서버를 시작합니다. 무료 인스턴스의 로컬 DB와 첨부파일은 재배포·재시작 때 초기화될 수 있으므로 공개 데모와 심사용 시연에만 사용하십시오.

주요 화면

공장화재 작전도

공장화재 작전도

사진 근거 입력과 사람 확인

사진 근거 입력과 사람 확인

산불 확산 민감도 작전도

산불 확산 민감도 작전도

실행

Python 3.11 이상에서 다음과 같이 실행합니다. 최초 실행 때만 합성 사고 4건을 만들고 이후에는 같은 DB를 사용합니다.

git clone https://github.com/ksh83/opsmap.git
cd opsmap
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
./run.sh
  • 시작: http://127.0.0.1:8002/
  • 산불 지도: http://127.0.0.1:8002/sheet?iid=2
  • 기본 DB: data/demo.db — 재기동해도 유지됩니다.
  • 편집: 작전도 상단 ‘이 기기’에 강소방 입력. 다른 이름으로 인수하려면 ‘편집권 잡기’에서 사유를 남깁니다.
  • 종료: 실행한 터미널에서 Ctrl+C.
  • 같은 공유기의 태블릿: HOST=0.0.0.0 ./run.sh 실행 후 http://노트북IP:8002/ 접속.

기존 DB를 사용하려면 OPSMAP_DB=/절대경로/사고.db ./run.sh. 이 경우 표본을 자동 생성하지 않습니다. 원본 DB를 실험에 사용하기 전 복사본을 만드십시오. scripts/seed_sample.py는 기존 파일을 덮어쓰지 않습니다.

3분 시연

  1. 시작 화면에서 산불을 엽니다. 실제 지도 위 T+60 추정면과 T+360 두 풍장 민감도 경계를 확인합니다.
  2. ‘입력·검토’로 이동합니다. 같은 사고가 선택됩니다. 사진을 촬영·첨부하고 강소방으로 항목 풍향, 값 북풍, 출처 무전복창(시연), 근거 사진을 선택해 보고합니다.
  3. 보고값은 미확정입니다. 사람이 ‘확정’을 눌러야 기존 확정값이 바뀝니다.
  4. ‘정정’으로 동풍과 사유를 보고합니다. 작전도는 기존 확정값과 확인 대기 정정을 함께 보여줍니다. 칸을 누르면 근거를 확인합니다.
  5. 보고서 초안을 열어 미확정·정정의 구분을 보여줍니다.
  6. 이미 열린 작전도에서 서버 연결을 끊으면 마지막 수신 시각과 저장된 조회본을 표시합니다. 수기 전환을 설명하고 재연결 복구를 보여줍니다.

산불 지도

참고 이미지는 화면 구성에만 사용했으며 프로그램에 포함하지 않았습니다. 실제 지도 위에 별도 프로젝트 KR-Fireline-3Layer의 Pyretechnics 실행 경로로 계산한 도형을 표시합니다. 두 저장소를 같은 상위 디렉터리에 두거나 KR_FIRELINE_ROOT로 경로를 지정하면 표본 생성 시 연동됩니다.

기본 벡터 지도는 저장소에 포함됩니다. 공개 데모의 위성 배경은 Esri World Imagery 공식 서비스에서 브라우저가 직접 불러오며 화면에 출처를 표시합니다. 위성 타일 파일은 저장소나 Render 서버에 저장·재배포하지 않습니다. 현장용 로컬 실행은 정당한 사용 권한이 있는 기관 자료를 동일한 타일 경로에 배치해 오프라인 전환 기능을 사용할 수 있습니다.

붉은 면은 T+60 공통 추정면, 주황 점선은 남서풍 유지 T+360 경계, 보라 점선은 풍장 변경 T+360 경계입니다. 합성 연료·지형·풍장을 쓴 민감도 결과이며 실제 관측 화선이나 공식 예측이 아닙니다. 모형은 방어선·진화완료선을 생성하지 않으며 이 두 선은 사람이 직접 입력합니다.

범위

  • 개인 제작 검증용 시제품. 사고·인명·피해·자원은 합성 자료이며 건물·지도에는 실제 지리 자료가 포함됩니다.
  • 편집자 이름은 협업 규칙이며 보안 인증이 아닙니다.
  • 인터넷 없이 로컬 서버에 연결해 사용합니다. 서버까지 끊기면 이미 열린 화면의 마지막 수신본을 유지합니다. 서버가 꺼진 상태에서 새 기기 접속·페이지 재로딩까지 보장하지 않습니다.
  • 작전도 캐시는 미확정 보고도 포함하는 ‘조회본’입니다. 브라우저 저장 실패 시 화면에 알립니다. DB 전체 백업의 대체물이 아닙니다.
  • 현직 체크리스트와 위험 판정 기준, 실기기 장갑 조작성, 업무시간 절감 실측은 아직 확인이 필요합니다.
  • 사진 촬영·첨부 후 사람이 항목과 값을 입력합니다. OCR·LLM 자동추출은 구현하지 않았습니다. Pyretechnics 결과와 근거가 붙은 입력·검토·기록 흐름을 검증하는 작품으로 설명하십시오.

라이선스와 지도 데이터

저장소 자체 코드에는 별도 오픈소스 라이선스를 부여하지 않았습니다. 번들 지도 라이브러리·폰트·OpenStreetMap 데이터의 저작권과 라이선스는 제3자 고지를 따릅니다.

검증

# 현재 컴퓨터의 Python 환경
.venv/bin/python -m pytest tests/ -q

최종 결과와 비판적 평가는 검토 보고서, 현장 시연에는 빠른 사용 안내를 참고하십시오.

브라우저 검증 스크립트는 scripts/browser_smoke.cjs입니다. 별도 임시 DB를 만들며 사용 DB를 수정하지 않습니다. Playwright와 Chromium이 있는 환경에서 실행합니다.

PLAYWRIGHT_MODULE=/path/to/node_modules/playwright \
CHROMIUM_PATH=/path/to/chromium \
node scripts/browser_smoke.cjs

About

근거·시각·사람 확인을 중심으로 현장 보고를 작전도와 보고서에 연결하는 재난대응 시제품

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages