본문 바로가기
홈 AI 학습 AI 실무 안내서 소방용수 접근성 분석, 공백 구역을 지도로 찾기
L3 심화 · 16분 읽기

소방용수 접근성 분석, 공백 구역을 지도로 찾기

2026.10.26 갱신 공간정보로 소방 자원 배치를 분석하려는 담당자·연구자
#공간정보#GeoPandas#소방용수#접근성
검토 상태: 전문 검토 전 위험도 미분류

업무에 AI를 쓸 때 확인하면 좋은 방법과 점검 항목을 정리한 참고 자료입니다. 실제 업무에 적용할 때는 소속 기관의 기준과 담당자 검토를 함께 확인합니다.

관할 안에서 소방용수시설이 먼 건물이 어디에 모여 있는지 찾는 분석을 다룹니다. 소화전 개수를 센 표만으로는 시설이 한쪽에 몰려 있는지 알 수 없으므로, 건물마다 가장 가까운 소방용수까지의 거리를 재고 설치기준 거리를 넘는 곳을 지도에 표시합니다.

분석 코드는 AI가 짜고 실행할 수 있습니다. 그래도 무엇을 찾는지, 어떤 기준 거리와 자료를 쓰는지, 결과를 어디까지 쓰는지는 사람이 정합니다. 이 분석의 결과는 현장 확인 후보 목록이고, 증설이나 배치 결정이 아닙니다.

이 안내서는 프로젝트 아이디어 소방용수시설 접근성 분석 지도의 기술 배경을 설명합니다.

🎯 이 장의 목표
  • 분석으로 찾을 것(공백 구역 후보)과 결과를 쓰는 곳을 정할 수 있습니다.
  • 소방기본법 시행규칙 별표 3의 설치기준 거리를 원문에서 확인해 기준 거리로 쓸 수 있습니다.
  • 소방용수·건물·관할 경계 자료의 좌표계와 기준일을 확인하고 관서 조사 기록과 대조할 수 있습니다.
  • 거리를 모르는 건물을 공백과 섞지 않고 판단 불가 후보로 나눌 수 있습니다.
  • 지도의 공백 후보를 증설·배치 결정이 아닌 현장 확인 대상으로 넘길 수 있습니다.

AI에게 맡기는 프롬프트

코드를 실행할 수 있는 AI(파일 분석 기능이나 코딩 에이전트)에게 소방용수·건물·관할 경계 파일을 주고 공백 후보를 찾게 할 때 씁니다. 관서의 소방용수 조사 기록은 내부 자료이므로 생성형 AI 입력 확인으로 먼저 확인합니다. 함께 쓰려면 AI에게는 열 이름과 합성 몇 줄만 줘서 코드를 받고, 기관 PC에서 실행한 뒤 건수 집계처럼 값이 없는 결과만 다시 보여 줍니다.

TEXT
[목적] 관할 건물 가운데 가장 가까운 소방용수시설까지의 거리가 설치기준 거리를 넘는 곳을 찾아, 현장 확인 후보 목록과 지도를 만듭니다. 결과는 소방용수 조사의 확인 순서를 정하는 데 쓰고, 증설·배치 결정에는 바로 쓰지 않습니다.
[자료] 붙임 파일: (소방용수시설 CSV, 건물 위치 파일, 관할 경계 파일과 각 파일의 기준일)
관할 경계 밖 인접 지역의 소방용수도 (넣었습니다 / 넣지 못했습니다).
[기준 거리] 소방기본법 시행규칙 별표 3의 수평거리를 씁니다. 주거·상업·공업지역은 100m 이하, 그 밖의 지역은 140m 이하입니다. 건물의 용도지역을 알 수 없으면 두 기준으로 모두 계산하고 용도지역은 [확인 필요]로 남겨 주세요.
[완성 기준]
- 거리를 재기 전에 파일마다 원래 좌표계를 메타데이터와 좌표 범위로 확인한 결과를 보여 주고, 미터 단위 좌표계로 바꿔 계산해 주세요.
- 건물 한 채가 한 행이 되게 해 주세요. 같은 거리의 용수가 둘이면 행이 늘어날 수 있습니다.
- 기준 이내·기준 초과·판단 불가(거리 없음) 세 집합의 건수를 출력하고, 그 합이 전체 건물 수와 같은지 검산 결과를 보여 주세요.
- 후보 목록에는 건물 위치, 가장 가까운 용수까지의 거리, 적용한 기준 거리, 자료 기준일을 넣어 주세요.
[하지 말 것] 설치기준 충족·위반을 판정하거나 증설 위치를 정하지 마세요. 거리 없음을 공백이나 기준 이내로 바꾸지 마세요. 자료에 없는 값은 [확인 필요]로 남겨 주세요.
소방용수 주제의 맥락은 https://119-ai-studio.kr/kg/topic-fire-water.txt 에서 먼저 파악하고, 근거는 원문 주소와 함께 정리해 주세요.
확인 기준은 https://119-ai-studio.kr/fire-water-access.html 안내서를 따릅니다.
작업 전에 빠진 정보가 있으면 먼저 질문해 주세요.

결과를 받은 뒤 확인할 것은 다음과 같습니다.

  • 세 집합의 합이 전체 건물 수와 같은지 봅니다. 합이 더 크면 같은 건물이 두 번 세어진 것입니다.
  • 거리 값의 크기만으로 단위를 판단하지 않고, 계산에 쓴 좌표계의 단위와 위치를 아는 두 지점 사이 거리를 확인합니다.
  • 판단 불가 건수가 0이 아니면 그 건물의 좌표와 주소부터 확인합니다.
  • 결과 문장에 '위반'·'증설 필요' 같은 판정이 없는지 봅니다.

법정 기준과 조사 기록

기준 거리는 임의로 정하지 않고 법령 원문에서 가져옵니다. 소방기본법 시행규칙 별표 3 '소방용수시설의 설치기준'의 공통기준은 소방대상물과의 수평거리를 다음과 같이 정합니다.

지역수평거리
「국토의 계획 및 이용에 관한 법률」에 따른 주거지역·상업지역·공업지역100m 이하
그 밖의 지역140m 이하

같은 규칙 제7조는 소방본부장 또는 소방서장이 소방용수시설 조사를 월 1회 이상 하도록 정합니다. 같은 조는 조사 결과를 특별한 사유가 없으면 전자적 처리가 가능한 방법으로 작성·관리하고 2년간 보관하도록 정합니다. 소방용수시설을 설치하고 유지·관리하는 주체와 예외(수도법에 따른 일반수도사업자가 설치하는 소화전)는 소방기본법 제10조에 있으므로, 국가법령정보센터의 현행 원문으로 확인합니다.

분석에 필요한 점은 다음과 같습니다.

  • 기준이 용도지역에 따라 다르므로 건물마다 용도지역이 필요합니다. 용도지역을 알 수 없으면 두 기준으로 모두 계산하고 [확인 필요]로 둡니다.
  • 관서의 월 1회 조사 기록이 공개 파일보다 최근일 수 있습니다. 두 자료의 시설 목록이나 상태가 다르면 어느 쪽이 맞는지 조사 기록과 현장으로 확인합니다.

이 분석은 기준을 충족했는지 판정하지 않습니다. 기준 거리를 넘는 건물을 현장 확인 후보로 고를 뿐입니다. 조문을 인용하기 전에는 국가법령정보센터 원문에서 현행 조문인지 확인합니다. 같은 조문은 소방법령정보의 소방기본법 시행규칙에서도 볼 수 있습니다(2026-09-03 시행본, 2026-10-26 확인).

조사 동선을 짤 때는 공공 AX의 소방기관·소방용수시설 방문 경로 계획 웹앱(창원소방본부, 소개는 AI 1차 분류 상태)을 참고합니다.

필요한 자료

자료받는 곳확인할 것
소방용수시설 위치전국소방용수시설 표준데이터소화전·급수탑·저수조·비상소화장치가 들어 있고 옥내소화전은 빠집니다. 위도·경도 열이 있고, 상세 페이지의 수정일은 2024-02-13입니다(2026-10-26 조회).
소방용수 조사 기록관서 내부(시행규칙 제7조)공개 파일과 시설 목록·상태를 대조합니다. 내부 자료이므로 외부 AI에 그대로 넣지 않습니다.
건물 위치건축물대장, 주소 검색건축물대장은 속성 조회 자료라서 주소를 좌표로 바꿔 위치를 얻습니다. 용도지역을 지역지구 항목에서 얻을 수 있는지도 확인합니다.
관할 경계SGIS 주소·행정경계경계는 기준연도별로 제공되므로 현재 관할과 대조합니다.

표준데이터를 한 시설 한 행으로 정리하고 중복을 세는 방법은 공공 API JSON을 검산 가능한 CSV로에 있습니다. 분석 도구는 오픈 소스 허브 GEO 분야의 geopandas(공간 연산)와 folium(지도 표시)입니다. 아래 코드는 AI가 만든 코드에서 확인할 부분을 보인 짧은 예입니다.

좌표계와 기준일

위도·경도는 도(度) 단위이고 경도 1도의 실제 길이는 위도에 따라 달라서, 그대로 거리를 재면 미터가 나오지 않습니다. 거리를 재기 전에 미터 단위로 평면에 옮긴 좌표계(투영좌표계)로 바꿉니다. 아래 코드는 대한민국 전역에 쓰는 미터 단위 투영좌표계 EPSG:5179를 씁니다. EPSG:5186처럼 동경 126~128도 지역용 좌표계도 있으므로 파일마다 원래 좌표계를 먼저 확인합니다.

표준데이터 상세 페이지에서는 위도·경도가 어떤 좌표계 기준인지 적힌 부분을 찾지 못했습니다(2026-10-26 조회). 위치를 아는 지점 몇 곳을 지도에 올려 맞는지 본 뒤에 좌표계를 선언합니다.

PYTHON
import pandas as pd
import geopandas as gpd

df = pd.read_csv("전국소방용수시설표준데이터.csv")   # 열리지 않으면 파일의 인코딩을 확인합니다
print(df["데이터기준일자"].value_counts().head())     # 기준일부터 봅니다
# 아래 EPSG:4326은 위치 확인 결과가 경위도(WGS84)로 맞았을 때의 예입니다.
water = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df["경도"], df["위도"]), crs="EPSG:4326")
bldg = gpd.read_file("건물위치.geojson")              # 파일에 적힌 좌표계를 함께 읽습니다
print(water.total_bounds, bldg.crs)                   # 좌표 범위와 좌표계를 먼저 봅니다

water_m, bldg_m = water.to_crs(5179), bldg.to_crs(5179)   # 미터 단위로 바꾼 뒤 거리를 잽니다
⚠️ 흔한 실수
좌표계 변환을 빠뜨리거나 확인 없이 선언해도 코드는 오류 없이 돌고 숫자도 나옵니다. 100m는 위도 방향으로 약 0.0009도라서, 변환 없이 재면 기준 초과 건물이 모두 기준 이내로 잡힙니다.

최근접 거리와 판단 불가

건물마다 가장 가까운 소방용수까지의 거리를 재고, 결과를 기준 이내·기준 초과·판단 불가 세 집합으로 나눕니다.

PYTHON
기준m = 100   # 주거·상업·공업지역 기준(별표 3). 그 밖의 지역은 140
joined = gpd.sjoin_nearest(bldg_m, water_m, how="left", distance_col="용수거리m")
joined = joined[~joined.index.duplicated(keep="first")]   # 같은 거리의 용수가 둘이면 건물 행이 둘로 늘어납니다

이내 = joined[joined["용수거리m"] <= 기준m]
초과 = joined[joined["용수거리m"] > 기준m]
판단불가 = joined[joined["용수거리m"].isna()]
assert len(이내) + len(초과) + len(판단불가) == len(bldg_m)   # 세 집합의 합 = 전체 건물 수
⚠️ 흔한 실수
pandas에서 결측값은 비교하는 숫자와 상관없이 NaN > 100, NaN > 200 모두 False가 되어, 거리를 모르는 건물이 기준 초과에도 기준 이내에도 들지 않습니다. 그래서 isna()로 판단 불가를 따로 세고 세 집합의 합을 검산합니다. 처리 속도를 위해 sjoin_nearest에 max_distance를 주면 그 범위 안에 용수가 없는 건물도 거리가 NaN이 되므로, 이때는 isna()만으로 판단 불가와 공백을 가를 수 없습니다.
📌 핵심
관할 안의 용수만 넣으면 경계 가까운 건물이 실제로는 옆 관할 소화전에 더 가까운데도 기준 초과로 잡힐 수 있습니다. 경계 부근은 인접 관할의 용수도 함께 넣습니다.

공백을 구역 단위로 보려면 용수마다 기준 거리만큼의 원(버퍼)을 그려 관할 경계에서 뺍니다.

PYTHON
boundary_m = gpd.read_file("관할경계.geojson").to_crs(5179)     # SGIS 경계 등에서 받은 파일
covered = water_m.buffer(기준m).union_all()                      # 모든 용수의 기준 거리 범위
gap_area = boundary_m.geometry.union_all().difference(covered)   # 관할 안에서 범위 밖 구역

지도는 GeoPandas의 explore()가 folium으로 만들어 줍니다. 기준 초과와 판단 불가 건물은 다른 색으로 표시하고, 파일별 기준일과 직선거리 가정을 함께 적습니다.

직선거리의 한계

별표 3의 기준은 수평거리이고, 이 분석은 지도 위 직선거리를 잽니다. 직선거리는 소방차가 실제로 가는 거리가 아닙니다. 강·철길·일방통행·경사가 있으면 기준 안의 용수도 실제로는 멀 수 있습니다. 도로 경로 거리는 OpenStreetMap 도로망으로 경로를 계산하는 자체 호스팅 경로 엔진 OSRM으로 잴 수 있습니다. 관서 위치와 교통 자료는 공공 데이터의 출동 경로·도착 판단 묶음에 모여 있습니다.

▸ 소방 활용 포인트
월 1회 소방용수 조사를 계획할 때 기준 거리 밖 건물이 모인 곳을 먼저 확인할 후보로 올립니다. 현장 확인과 조사 기록 대조를 거친 결과만 증설·배치 검토 자료로 담당 부서에 넘깁니다.

설계 판단

분석 단계를 높일수록 현실에 가까워지는 대신 자료·계산·운영 부담이 늘어납니다. 질문에 필요한 정밀도를 단계별로 고릅니다.

방식맞는 질문트레이드오프사람이 확인할 것
직선거리·버퍼넓은 범위에서 현장 확인 후보를 줄일 때도로·지형·통행 제약을 반영하지 못함공백 후보의 좌표·시설 상태
도로 경로 비교우회·단절 경로가 중요하고 믿을 만한 도로 자료가 있을 때도로 자료 갱신과 경로 조건 설계가 필요함도로 자료의 기준일과 통행 조건
현장 확인 중심좌표·시설 상태·도로 자료를 믿기 어려운 후보일 때여러 곳을 한꺼번에 보기 어려움실제 접근 여부와 시설 상태
💡 팁
지도에는 결과와 함께 불확실성을 표시합니다. 좌표 누락, 오래된 기준일, 인접 관할 자료 없음, 직선거리 가정을 같은 후보에 적어 두면 담당자가 왜 현장 확인이 필요한지 알 수 있습니다.

운영 확인 기록

분석 결과와 함께 다음을 남기면 다시 계산할 때 어디서 차이가 생겼는지 찾을 수 있습니다.

  • 좌표계: 원천에 적힌 좌표계, 실제로 해석한 좌표계, 위치를 아는 지점으로 확인한 결과를 기록합니다.
  • 경로 거리: 도로 자료의 기준일과 경로를 찾지 못한 건수를 기록합니다. 경로를 못 찾은 지점은 거리 0이나 공백으로 바꾸지 않고 판단 불가로 보냅니다.
  • 최신성: 자료마다 기준일과 추출일을 따로 남깁니다. 공개 표준데이터와 관서 조사 기록이 다르면 한 날의 현황처럼 합치지 않고 현장 확인 필요로 표시합니다.

운영 시나리오

다음은 특정 지역·시설의 실제 상태와 무관한 가상 운영 사례입니다. 공백 지도의 모양이 달라지면 현실이 바뀐 것으로 단정하지 않고 입력 자료부터 확인합니다.

가상 시나리오 1: 공개 파일과 조사 기록의 시설이 다른 경우

  • 탐지: 공백 후보 지도를 관서의 최근 조사 기록과 대조하니, 공개 파일에 있는 소화전 두 곳이 조사 기록에는 폐지로 적혀 있고 조사 기록에만 있는 소화전이 한 곳 있었습니다.
  • 원인 가설: 공개 표준데이터의 수정일(2024-02-13) 뒤에 폐지·설치된 시설이 공개 파일에 반영되지 않았다고 봅니다.
  • 대응: 지도 공유를 멈추고 두 자료가 다른 시설을 목록으로 뽑아 담당자가 조사 기록과 현장으로 확인합니다. 확인한 목록으로 다시 계산하고, 지도에는 어느 자료의 어느 날짜 기준인지 적습니다.
  • 재발 확인: 분석할 때마다 두 자료의 시설번호를 대조해 한쪽에만 있는 시설 수를 출력하게 하고, 0이 아니면 결과를 내기 전에 사람이 확인합니다.

가상 시나리오 2: 거리가 NaN인 건물이 집계에서 빠진 경우

  • 탐지: 전체 건물 수와 결과를 대조하니 일부 건물이 기준 이내에도 기준 초과에도 없었고, 그 건물의 용수거리m 값은 NaN이었습니다.
  • 원인 가설: AI가 만든 코드가 > 기준m 비교만 쓰고 결측을 따로 세지 않았거나, max_distance를 줘서 범위 밖 건물까지 NaN이 됐다고 봅니다.
  • 대응: 결과 공유를 멈추고 isna()로 거리 결측 건물을 판단 불가 후보로 나눕니다. 건물 좌표 누락, 빈 용수 자료, 조인 범위를 확인하기 전에는 공백이나 기준 이내로 바꾸지 않습니다.
  • 재발 확인: 정상 거리·기준 초과·거리 NaN 합성 행을 함께 넣어 실행하고, 세 집합의 합이 전체 건물 수와 같은지 확인합니다.

한계와 리스크

리스크발생 조건영향완화·사람 승인
좌표계·단위 오해경위도와 미터 좌표를 섞거나 좌표계를 틀리게 선언함거리·버퍼·공백 면적이 의미 없게 변함원천 좌표계와 단위를 기록하고 위치를 아는 지점을 사람이 지도에서 확인
자료 시점 불일치공개 파일·조사 기록·건물·경계의 기준일이 서로 다름폐지·이설된 시설이 남거나 새로 설치한 시설이 빠져 후보가 틀림기준일을 지도와 보고서에 표시하고, 조사 기록과 다른 시설은 담당자가 현장에서 확인
후보를 판정으로 오인직선거리 기준 초과 후보를 설치기준 위반이나 증설 결정처럼 설명함도로·지형·시설 상태를 놓친 자원 판단결과는 현장 확인 후보로만 표시하고, 증설·배치는 소속 기관 기준과 담당 부서 검토로 정함

자주 묻는 질문

Q. 직선거리 기준 안에 있으면 접근성이 충분한가요?

아닙니다. 직선거리는 넓은 범위에서 확인 후보를 줄이는 첫 단계입니다. 도로·지형·시설 상태는 경로 거리와 현장 확인으로 따로 봅니다.

Q. 데이터가 없는 구역을 공백으로 표시해도 되나요?

결측과 공백은 다릅니다. 시설·경계 자료가 없거나 최근접 거리가 NaN이면 isna()로 따로 세어 판단 불가 후보로 둡니다. 그래야 자료가 없는 것을 시설이 없는 것으로 잘못 읽지 않습니다.

Q. 지도만 보고 점검·증설 순서를 확정해도 되나요?

아닙니다. 이 지도는 현장 확인 후보를 정렬할 뿐입니다. 점검·증설·배치는 현장 상태, 조사 기록, 소속 기관 기준을 담당자가 확인해 정합니다.

핵심 정리

  • 이 분석은 기준 거리 밖 건물과 구역을 현장 확인 후보로 찾습니다. 지도에는 기준일과 직선거리 가정을 함께 적고, 증설·배치는 현장 확인 뒤 담당 부서가 정합니다.
  • 기준 거리는 소방기본법 시행규칙 별표 3(주거·상업·공업지역 100m 이하, 그 밖의 지역 140m 이하)을 원문에서 확인해 씁니다.
  • 거리를 재기 전에 파일마다 좌표계와 기준일을 확인하고, 공개 파일을 관서의 월 1회 조사 기록과 대조합니다.
  • 거리 NaN은 기준 비교에서 빠지므로 isna()로 판단 불가를 따로 세고, 세 집합의 합을 전체 건물 수와 맞춥니다.

다음 단계