레이블이 EPSG5186인 게시물을 표시합니다. 모든 게시물 표시
레이블이 EPSG5186인 게시물을 표시합니다. 모든 게시물 표시

2026-09-23

파이썬으로 공간분석 시작하기 | GeoPandas 기초 | GeoAI 기초 7편

파이썬으로 공간분석 시작하기 | GeoPandas 기초 | GeoAI 기초 7편

📌 3줄 요약

  • GeoDataFrame은 공간 위치 정보를 품은 표 구조로, 엑셀 시트에 지도를 붙인 형태다.
  • 파일 읽기·좌표 변환·공간조인까지 10줄 내외 코드로 처리할 수 있다.
  • 반복 분석이 필요한 재난 현장 데이터에서 코드 기반 접근이 특히 강력하다.

홍수 피해 현장에서 대피소 위치 파일과 침수 구역 파일을 받아 "어느 대피소가 침수 구역 안에 있는지" 확인해야 한다고 상상해 보세요. QGIS에서 두 레이어를 불러와 벡터 > 데이터 관리 도구 > 위치에 따라 레이어 결합 메뉴를 찾아 설정하고 저장하는 과정은 한 번이라면 괜찮습니다. 하지만 태풍 시즌 내내 매일 업데이트되는 침수 구역 파일을 같은 방식으로 반복한다면 어떨까요?

파이썬의 GeoPandas 라이브러리(공간 데이터를 다루기 위해 Pandas 표 구조에 도형 정보를 추가한 도구)는 이 흐름을 코드로 고정해 두고 파일만 바꿔 실행할 수 있게 해줍니다. 이번 글에서는 GeoDataFrame이 무엇인지, 파일을 읽고 좌표계를 바꾸고 두 레이어를 공간적으로 연결하는 흐름을 짧은 코드와 함께 살펴봅니다. 엑셀이나 QGIS로 하던 일을 코드로 옮기면 무엇이 달라지는지도 함께 짚어 드립니다.

🗂️ GeoDataFrame이 일반 표와 어떻게 다른가요?

Pandas의 DataFrame은 행과 열로 이루어진 표입니다. GeoDataFrame은 그 표에 geometry(도형) 열 하나를 추가한 구조입니다. 이 열에는 점, 선, 면 같은 공간 도형이 들어가고, 각 행은 하나의 공간 객체와 그에 딸린 속성 값들을 함께 가집니다. 엑셀 시트에 지도 핀 정보를 열 하나로 붙여 놓은 것과 비슷합니다.

중요한 차이는 CRS(좌표 참조 계, Coordinate Reference System) 정보를 GeoDataFrame이 스스로 기억한다는 점입니다. 6편에서 다룬 EPSG:4326(위경도)과 EPSG:5186(한국 미터 좌표)처럼 어떤 기준으로 위치를 표현하는지가 여기 저장됩니다. 좌표계가 다른 두 파일을 그냥 합치면 위치가 수백 킬로미터 벗어나는 오류가 생기는데, GeoPandas는 CRS를 명시적으로 다루도록 설계되어 이런 실수를 미리 잡아줍니다. 재난 대응 시 서로 다른 기관에서 받은 파일의 좌표계가 다른 경우는 생각보다 자주 있습니다.

📂 ShapeFile이나 GeoJSON은 어떻게 읽나요?

GeoPandas에서 파일을 읽는 기본 함수는 gpd.read_file()입니다. Shapefile(.shp), GeoJSON(.geojson), GeoPackage(.gpkg) 등 일반적인 공간 파일 형식을 별도 변환 없이 읽을 수 있습니다.

import geopandas as gpd

# 대피소 점 데이터 읽기
shelter = gpd.read_file("shelter.geojson")

# 침수 구역 폴리곤 읽기
flood = gpd.read_file("flood_zone.shp")

# 좌표계 확인
print(shelter.crs)   # 예: EPSG:4326
print(flood.crs)     # 예: EPSG:5186

파일을 읽은 뒤 가장 먼저 해야 할 일은 .crs 속성을 출력해 두 파일의 좌표계가 같은지 확인하는 것입니다. 이것이 '해봐야 아는 것'의 첫 번째 관문입니다. 출력 결과가 다르면 공간 연산 전에 반드시 통일해야 합니다. 실무에서는 국토교통부, 소방청, 기상청이 제공하는 공개 데이터의 좌표계가 각각 다른 경우가 있으므로, 데이터를 받으면 CRS를 먼저 확인하는 습관을 들이는 것이 좋습니다.

🌐 좌표계를 바꾸려면 어떤 함수를 쓰나요?

좌표 변환은 .to_crs() 메서드 하나로 처리합니다. 두 레이어를 같은 좌표계로 맞춰야 거리·면적 계산과 공간 조인이 정확하게 작동합니다.

# shelter를 flood의 좌표계에 맞춤
shelter_proj = shelter.to_crs(flood.crs)

# 또는 EPSG 코드로 직접 지정
shelter_proj = shelter.to_crs(epsg=5186)

주의할 점은 .to_crs()가 원본을 수정하지 않고 새 GeoDataFrame을 돌려준다는 것입니다. 원본 변수를 덮어쓰지 않으려면 새 변수에 받아야 합니다. 미터 단위 좌표계(예: EPSG:5186)로 변환해 두면 이후 거리나 면적을 계산할 때 단위가 미터로 나오기 때문에 결과 해석이 훨씬 직관적입니다. 예를 들어 산사태 위험 구역에서 500미터 이내에 있는 주거지를 추출할 때, 미터 단위 좌표계가 아니면 버퍼 반경 값을 위경도 차이로 계산해야 해서 실수가 생기기 쉽습니다.

🏘️ 공간 조인은 어떤 상황에 쓰나요?

공간 조인(Spatial Join)은 두 레이어를 위치 관계를 기준으로 합치는 연산입니다. "이 점이 저 면 안에 있는가"처럼 공간적 포함 관계로 속성을 연결할 때 씁니다. QGIS에서는 벡터 > 데이터 관리 도구 > 위치에 따라 속성 결합 메뉴가 같은 역할을 합니다.

# 침수 구역 안에 있는 대피소 찾기
joined = gpd.sjoin(shelter_proj, flood, how="inner", predicate="within")
print(joined[["name", "flood_level"]])

predicate 옵션에는 "within"(면 안에 포함), "intersects"(경계 포함 교차), "contains" 등을 상황에 따라 골라 씁니다. how="inner"는 조건을 만족하는 행만 남기고, "left"는 왼쪽 레이어의 모든 행을 유지하면서 매칭된 값만 붙입니다. 산불 대피 경로를 설계할 때 도로 선 데이터와 위험 구역 면 데이터를 intersects 조건으로 조인하면, 위험 구역을 통과하는 도로 구간을 자동으로 추려낼 수 있습니다.

💡 엑셀·QGIS로 하던 것을 굳이 코드로 옮겨야 하는 이유가 있나요?

QGIS 메뉴 클릭과 코드 실행은 결과가 같습니다. 차이는 반복성과 기록 가능성에 있습니다. 코드는 파일 이름만 바꾸면 어제와 똑같은 분석을 오늘 다시 실행할 수 있고, 어떤 좌표계로 변환했고 어떤 조건으로 조인했는지가 코드 자체에 남아 있어 동료에게 공유하거나 6개월 뒤에 검토하기가 쉽습니다. 엑셀 VLOOKUP으로 공간 조인을 흉내 낼 수 있지만, 위치 기반 관계는 엑셀이 기본으로 지원하지 않아 중간에 수작업이 들어갑니다.

실제로 해봐야 아는 것이 있습니다. 같은 분석을 QGIS 메뉴로 한 번, GeoPandas 코드로 한 번 각각 실행해 결과 레이어의 행 수와 속성 값이 일치하는지 비교해 보세요. 일치하면 코드가 옳게 작동한다는 확인이 되고, 차이가 생기면 predicate 옵션이나 좌표계 불일치를 의심해야 합니다. 이 검증 습관은 재난 대응 보고서에 들어가는 수치의 신뢰도를 높이는 데 직결됩니다. 버전에 따라 메뉴 이름이나 함수 인자 이름이 다를 수 있으므로, 공식 GeoPandas 문서(geopandas.org)의 API 레퍼런스를 함께 열어두는 것을 권장합니다.

🖥️ 화면에서 따라하기

따라하기 단계

  1. 환경 준비
    터미널에서 pip install geopandas 입력 후 설치 완료 메시지 확인
  2. 파일 읽기
    주피터 노트북 또는 VS Code에서 gpd.read_file("파일경로.shp") 실행
  3. CRS 확인
    shelter.crs, flood.crs 각각 출력해 두 값이 같은지 눈으로 비교
  4. 좌표 변환
    shelter_proj = shelter.to_crs(flood.crs) 입력 후 shelter_proj.crs 재확인
  5. 공간 조인
    gpd.sjoin(shelter_proj, flood, how="inner", predicate="within") 실행
  6. 결과 검토
    joined.shape로 행 수 확인, joined.explore() 로 지도 위 결과 시각화

※ 프로그램 버전에 따라 메뉴 이름이 조금씩 다를 수 있습니다. 위 그림은 순서를 정리한 도식입니다.

✍️ 그대로 복사해 쓰는 프롬프트

GeoPandas 코드 오류 메시지를 붙여 넣고 원인과 수정 방법을 얻을 때 사용

나는 파이썬 GeoPandas를 공부하는 초보자입니다. 아래 오류 메시지와 코드를 보고 원인을 한국어로 설명해 주세요. 설명은 중학생도 이해할 수 있는 수준으로, 전문용어가 나오면 괄호 안에 짧은 풀이를 붙여 주세요. 수정된 코드도 함께 보여 주되, 각 줄에 주석으로 무엇을 하는지 적어 주세요. 지어낸 함수나 존재하지 않는 파라미터는 쓰지 마세요.
[오류 메시지를 여기에 붙여 넣기]
[문제가 생긴 코드를 여기에 붙여 넣기]
확인 항목: AI가 제안한 함수명과 파라미터가 실제 GeoPandas 공식 문서에 있는지 직접 확인하세요.

재난 대응 데이터 분석 시나리오를 코드 흐름으로 정리할 때 사용

나는 [대상 재난, 예: 홍수] 상황에서 [분석 목표, 예: 침수 구역 내 대피소 파악] 작업을 GeoPandas로 처리하려고 합니다. 사용할 파일은 [파일1 설명]과 [파일2 설명]입니다. 아래 순서로 답해 주세요. 1) 필요한 전처리 단계, 2) 좌표계 확인 및 변환 방법, 3) 공간 조인 코드 예시, 4) 결과를 검증하는 방법. 각 단계에 10줄 이하 코드를 포함하고, 가정한 사항은 명확히 표시해 주세요. 사실이 불확실한 내용은 '확인 필요'라고 표시해 주세요.
확인 항목: 제안된 EPSG 코드가 내 데이터에 실제로 맞는지, 파일 경로와 열 이름이 실제 데이터와 일치하는지 반드시 확인하세요.

※ 대괄호 부분을 상황에 맞게 바꿔서 쓰세요. 받은 답은 그대로 쓰지 말고 사실 확인을 거치세요.

🧪 직접 해보기

  • 공공데이터포털(data.go.kr)에서 "대피소" 또는 "민방위 대피시설" 검색 후 GeoJSON 또는 Shapefile 형식으로 내려받아 gpd.read_file()로 읽고 .crs를 출력해 보세요.
  • 읽은 GeoDataFrame에서 .explore() 메서드를 실행해 지도 위에 점이 올바른 위치에 찍히는지 눈으로 확인해 보세요. 화면에 점이 아예 안 보이거나 엉뚱한 곳에 찍히면 좌표계 문제를 의심하세요.
  • QGIS에서 같은 파일을 레이어 > 레이어 추가 > 벡터 레이어로 불러온 뒤 레이어 오른쪽 클릭 > 속성 > 소스 탭에서 표시되는 CRS와 .crs 출력 값이 일치하는지 비교해 보세요.

❓ 자주 묻는 질문

Q. GeoPandas를 설치했는데 import 오류가 납니다. 왜 그런가요?
A. GeoPandas는 GDAL, Fiona, Shapely 같은 C 기반 라이브러리에 의존하기 때문에 pip install만으로 환경에 따라 설치가 실패하는 경우가 있습니다. conda 환경을 사용하거나, conda-forge 채널에서 conda install -c conda-forge geopandas 로 설치하면 의존성 문제가 줄어드는 경우가 많습니다.

Q. .shp 파일을 읽으려면 .dbf, .prj 파일도 같은 폴더에 있어야 하나요?
A. 네, Shapefile은 하나의 파일이 아니라 .shp, .dbf, .prj, .shx 등 여러 파일이 모여 하나의 레이어를 이루는 형식입니다. 이 파일들이 같은 폴더에 함께 있어야 gpd.read_file()이 속성과 좌표계 정보를 모두 읽어올 수 있습니다.

Q. 공간 조인 결과 행 수가 원본보다 늘어났어요. 오류인가요?
A. 오류가 아닐 수 있습니다. 하나의 점이 여러 면 폴리곤과 겹치면 각 폴리곤마다 행이 하나씩 생겨 결과 행 수가 늘어납니다. 의도한 분석에서 중복이 문제라면 how="left"로 바꾸거나 .drop_duplicates()로 정리하면 됩니다. 먼저 joined.index_right.value_counts()로 어느 폴리곤에서 중복이 생겼는지 확인해 보세요.

GeoPandas의 읽기·좌표 변환·공간 조인 흐름을 익히면, 반복적으로 바뀌는 재난 데이터를 매번 수작업으로 처리하지 않아도 됩니다. 코드를 저장해 두면 내일 새로운 침수 구역 파일이 와도 경로만 바꿔 같은 분석을 바로 실행할 수 있습니다. 처음에는 열 이름 오타나 좌표계 불일치로 막히는 경우가 많지만, 그때마다 .columns와 .crs를 출력해 확인하는 습관이 가장 빠른 해결책입니다. 파일을 읽고 조인하는 것까지 익혔다면, 다음 단계는 그 결과를 버퍼링이나 면적 계산 같은 공간 연산으로 발전시키는 것입니다. 다음 편에서는 GeoDataFrame 위에서 거리와 면적을 계산하고, 위험 구역을 자동으로 추출하는 방법을 살펴볼 예정입니다.

GeoAI 기초 시리즈 7편 · 전체 43편


재난안전과 GeoAI 이야기를 더 보고 싶다면 아래 채널도 함께 보세요.

📌 바로가기

좌표계(CRS)가 헷갈릴 때 | EPSG:4326과 5186 | GeoAI 기초 6편

좌표계(CRS)가 헷갈릴 때 | EPSG:4326과 5186 | GeoAI 기초 6편

🎬 1분 브리핑 영상

📌 3줄 요약

  • 지리좌표계는 경·위도, 투영좌표계는 미터 단위로 거리를 잰다.
  • 한국에서 EPSG:4326과 EPSG:5186은 목적에 따라 구분해 써야 한다.
  • 좌표계가 어긋나면 레이어가 엉뚱한 곳에 놓이고 면적 계산이 틀어진다.

QGIS에 홍수 침수 범위 레이어를 불러왔는데, 분명히 서울 데이터인데 지도 위에서 아프리카 근처에 점이 찍혀 있는 경험을 해보신 적 있으신가요? 혹은 두 레이어를 겹쳤더니 딱 맞아야 할 도로와 건물이 수십 미터씩 어긋나 있는 경우도 있습니다. 이런 증상의 가장 흔한 원인이 바로 좌표계, 즉 CRS(Coordinate Reference System, 지구 위 위치를 숫자로 나타내는 기준 체계)가 서로 다르거나 잘못 지정되어 있기 때문입니다.

GIS를 처음 배울 때 좌표계는 그냥 넘어가기 쉬운 개념이지만, 재난안전 업무처럼 공간 정확도가 생명과 직결되는 분야에서는 좌표계 오류 하나가 대피소 위치를 엉뚱한 행정구역에 배치하거나 침수 면적을 잘못 계산하는 결과로 이어질 수 있습니다. 이번 글에서는 지리좌표계와 투영좌표계의 차이, 한국에서 자주 쓰는 EPSG 코드, 그리고 좌표계가 어긋났을 때 어떤 순서로 해결하는지를 차근차근 짚어 보겠습니다.

🌐 지리좌표계와 투영좌표계는 어떻게 다른가요?

지리좌표계(Geographic CRS)는 경도와 위도처럼 각도 단위로 위치를 표현합니다. 지구를 둥근 타원체로 보고 "북쪽으로 몇 도, 동쪽으로 몇 도"라고 말하는 방식입니다. 대표적인 예가 WGS84인데, 이것을 EPSG 코드로 표현하면 EPSG:4326입니다. GPS 기기가 찍어주는 좌표, 스마트폰 지도 앱의 위치 공유, 국제 데이터 교환에 가장 흔히 쓰입니다.

투영좌표계(Projected CRS)는 둥근 지구를 평면 종이 위에 펼칠 때 쓰는 기준입니다. 종이에 펼치면서 어쩔 수 없이 면적이나 모양에 왜곡이 생기는데, 투영법의 종류에 따라 거리 왜곡을 줄이거나 면적 왜곡을 줄이는 방향을 선택합니다. 단위는 미터 또는 피트가 됩니다. 재난안전 업무에서 침수 면적이 몇 제곱킬로미터인지, 대피 경로가 몇 미터인지 계산하려면 반드시 투영좌표계 위에서 작업해야 합니다. 각도 단위인 경위도로는 거리와 면적을 직접 계산할 수 없기 때문입니다.

🗺️ 한국에서 EPSG:4326과 EPSG:5186은 각각 언제 쓰나요?

EPSG:4326은 앞서 말한 WGS84 지리좌표계입니다. 웹 지도, API, GPS 데이터, 국제 공유 데이터에서 자주 만납니다. 좌표값이 경도 126~130, 위도 34~38 범위에 있다면 이 체계일 가능성이 높습니다.

EPSG:5186은 국토지리정보원이 고시한 한국 중부원점 TM(Transverse Mercator, 횡단 메르카토르) 투영좌표계입니다. 국내 공간 분석에서 가장 흔히 권장되는 투영좌표계 중 하나로, 단위는 미터입니다. 국가공간정보포털이나 행정안전부 재난정보 레이어처럼 국내 공공 데이터에서 자주 볼 수 있습니다. 좌표값이 200,000~600,000 범위라면 투영좌표계를 의심해 볼 수 있습니다.

추가로 EPSG:5179(Korea 2000 / Unified CS)도 자주 등장합니다. 전국 단위 지도를 하나의 투영계로 커버하고 싶을 때 씁니다. EPSG:3857은 웹 메르카토르로, OpenStreetMap이나 카카오맵처럼 웹 타일 지도에 주로 쓰이지만 고위도로 갈수록 면적 왜곡이 크기 때문에 정확한 면적·거리 계산에는 적합하지 않습니다. 산불 피해 범위나 홍수 침수 구역의 면적을 공식 보고서에 올릴 때는 EPSG:5186 또는 EPSG:5179 위에서 계산하는 것이 안전합니다.

🔍 좌표계가 어긋났을 때 어떤 증상이 나타나나요?

가장 흔한 증상은 레이어가 엉뚱한 위치에 놓이는 것입니다. 대표적인 경우가 좌표값은 있는데 CRS 정보가 없거나 잘못 할당된 경우입니다. 예를 들어 실제로는 EPSG:5186 미터 좌표인 데이터를 QGIS가 EPSG:4326(경위도)으로 읽으면, 200,000을 경도 200도로 해석해서 지도 밖으로 날아가 버립니다.

두 번째 증상은 레이어는 비슷한 위치에 보이는데 수십 미터에서 수백 미터씩 어긋나는 경우입니다. 이때는 QGIS가 프로젝트 CRS에 맞춰 실시간으로 좌표를 변환하는 '온더플라이(On the Fly) 투영' 기능이 작동하고 있을 가능성이 큽니다. 두 레이어의 CRS가 다르면 겹쳐 보이더라도 실제 지오메트리 데이터는 서로 다른 기준점을 참조하므로 공간 연산(교차, 버퍼, 면적 계산 등) 결과가 틀어집니다. 산사태 위험 구역과 주민 거주지를 겹쳐 취약 인구를 추출하는 분석을 할 때 이 오류가 숨어 있으면 결과를 신뢰할 수 없습니다.

🛠️ 좌표계 오류는 어떤 순서로 해결하면 되나요?

해봐야 아는 것이기도 한데, 먼저 레이어의 현재 CRS 정보를 직접 눈으로 확인하는 것이 첫 번째 단계입니다. QGIS에서는 레이어 패널에서 해당 레이어를 오른쪽 클릭 > 속성(Properties) > 정보(Information) 탭을 열면 "CRS" 항목에 현재 지정된 좌표계 이름과 EPSG 코드가 표시됩니다. 여기서 'Unknown CRS' 또는 전혀 다른 EPSG 코드가 보이면 문제의 원인이 확인된 것입니다.

두 번째는 '정의 설정'과 '재투영'을 구분하는 일입니다. 데이터 파일에 CRS 정보 자체가 없을 때는 레이어 오른쪽 클릭 > 레이어 CRS 설정(Set Layer CRS)으로 올바른 CRS를 할당합니다. 반면 CRS는 이미 맞는데 다른 좌표계로 변환이 필요할 때는 벡터 데이터라면 벡터(Vector) > 데이터 관리 툴(Data Management Tools) > 레이어 재투영(Reproject Layer)을 사용합니다. 래스터라면 래스터(Raster) > 투영(Projections) > 워프(변환)(Warp (Reproject)) 메뉴를 이용합니다. 메뉴 이름은 QGIS 버전에 따라 조금씩 다를 수 있으므로, 못 찾을 때는 상단 처리(Processing) > 툴박스(Toolbox)를 열고 "reproject"로 검색하면 버전과 관계없이 찾을 수 있습니다.

세 번째는 재투영 후 결과를 반드시 확인하는 것입니다. 위성영상이나 행정경계 레이어와 겹쳐 놓고 경계선이 맞는지 눈으로 검토한 뒤, 면적 계산이 필요하다면 필드 계산기($area 함수)로 이상한 값이 나오지 않는지 체크합니다. 대피소 위치 데이터라면 한두 곳을 골라 실제 주소와 좌표를 대조해 보는 것이 가장 확실합니다.

📋 프로젝트를 시작할 때 CRS를 어떻게 통일하면 되나요?

여러 출처의 데이터를 함께 쓰는 프로젝트라면 시작 전에 기준 CRS를 하나로 정해 두는 것이 가장 효율적입니다. 국내 공간 분석을 목적으로 한다면 EPSG:5186이나 EPSG:5179 중 기관에서 자주 쓰는 쪽으로 맞추고, 모든 레이어를 해당 CRS로 재투영한 뒤 저장합니다. QGIS에서 프로젝트 CRS는 프로젝트(Project) > 속성(Properties) > CRS 탭에서 설정할 수 있습니다.

데이터를 받을 때마다 파일명 또는 메타데이터에 EPSG 코드를 기록해 두는 습관도 중요합니다. 특히 공공 포털에서 내려받은 shp 파일은 .prj 파일이 함께 있는지 확인하세요. .prj 파일이 없으면 QGIS가 CRS를 자동으로 인식하지 못해 Unknown CRS로 처리합니다. 홍수 대피 경로를 분석하거나 산불 피해 구역 면적을 산정하는 업무처럼 결과의 정확도가 중요한 경우, 데이터 수신 단계에서 CRS를 확인하는 절차를 작업 체크리스트에 포함시켜 두면 나중에 발생할 수 있는 오류를 미리 막을 수 있습니다.

🖥️ 화면에서 따라하기

따라하기 단계

  1. CRS 확인
    레이어 패널에서 레이어 오른쪽 클릭 > 속성(Properties) > 정보(Information) 탭 > CRS 항목 확인
  2. CRS 할당
    CRS가 Unknown일 때: 레이어 오른쪽 클릭 > 레이어 CRS 설정(Set Layer CRS) > EPSG 코드 입력 후 확인
  3. 벡터 재투영
    벡터(Vector) > 데이터 관리 툴 > 레이어 재투영(Reproject Layer) > 목표 CRS에 EPSG:5186 입력 후 실행
  4. 래스터 재투영
    래스터(Raster) > 투영(Projections) > 워프(Warp) > 목표 CRS에 EPSG:5186 입력 후 실행
  5. 결과 시각 검토
    재투영된 레이어를 기준 레이어(행정경계 등)와 겹쳐 경계 일치 여부 눈으로 확인
  6. 면적 계산 확인
    레이어 오른쪽 클릭 > 속성 테이블 열기 > 필드 계산기 > $area 입력해 이상값 여부 점검

※ 프로그램 버전에 따라 메뉴 이름이 조금씩 다를 수 있습니다. 위 그림은 순서를 정리한 도식입니다.

✍️ 그대로 복사해 쓰는 프롬프트

좌표계 오류 원인과 해결 절차를 단계별로 정리해 달라고 요청할 때

너는 GIS 기술 지원 전문가야. 나는 공간정보를 처음 배우는 실무자야.
아래 상황을 읽고, 좌표계 오류의 원인과 해결 순서를 단계별로 설명해 줘.

상황: [데이터 출처(예: 국가공간정보포털 shp 파일)], [사용 도구(예: QGIS 최신 버전)],
[증상(예: 레이어가 지도 밖에 표시됨 / 두 레이어가 수백 미터 어긋남)]

답변 형식:
1. 추정 원인 (2줄 이내)
2. 확인 절차 (번호 목록, 각 줄 1단계)
3. 해결 방법 (재투영 vs CRS 할당 중 무엇인지 구분해서)
4. 재발 방지를 위한 체크리스트 (3항목 이내)

추측이 필요한 경우 "추정:"이라고 표시하고, 확실하지 않은 수치나 메뉴 이름은 단정하지 마.
결과물을 사람이 반드시 검토해야 하는 항목을 마지막에 별도로 적어 줘.

팀원에게 CRS 통일 기준을 안내하는 내부 가이드 초안을 만들 때

너는 공공기관 GIS 업무 담당자를 돕는 기술 문서 작성 보조자야.
아래 조건에 맞는 내부 가이드 초안을 작성해 줘.

기관: [기관명]
주요 업무: [재난안전 공간분석 / 도시계획 등]
사용 도구: [QGIS / ArcGIS Pro 등]
기준 CRS: [EPSG:5186 또는 EPSG:5179]

포함할 내용:
- 데이터 수신 시 CRS 확인 방법 (1~2줄)
- 재투영이 필요한 경우와 아닌 경우 구분
- 파일 저장 시 명명 규칙 예시 (CRS 코드 포함)
- 담당자가 반드시 육안으로 검토해야 하는 항목

전문용어는 처음 나올 때 괄호로 풀어 써. 위협적이거나 단정적인 표현은 쓰지 마.

※ 대괄호 부분을 상황에 맞게 바꿔서 쓰세요. 받은 답은 그대로 쓰지 말고 사실 확인을 거치세요.

🧪 직접 해보기

  • QGIS에 가지고 있는 shp 파일을 불러온 뒤 레이어 오른쪽 클릭 > 속성 > 정보 탭에서 CRS 항목을 직접 읽어보고, EPSG 코드가 무엇인지 확인해 본다.
  • epsg.io 사이트에서 5186, 4326, 5179, 3857을 각각 검색해 지도 미리보기와 단위(degree/metre)가 어떻게 다른지 비교해 본다.
  • QGIS에서 같은 지역의 shp 파일을 EPSG:4326과 EPSG:5186으로 각각 저장한 뒤 필드 계산기에서 $area 값을 비교해, 경위도 좌표 위에서 계산한 면적이 얼마나 틀리는지 직접 확인해 본다.

❓ 자주 묻는 질문

Q. QGIS에서 레이어를 불러왔는데 지도 위에 아무것도 안 보여요. 좌표계 문제인가요?
A. 가능성이 높습니다. 레이어 패널에서 해당 레이어 오른쪽 클릭 > 레이어로 확대(Zoom to Layer)를 눌러서 레이어가 실제로 어디에 놓여 있는지 먼저 확인하세요. 지도 범위 밖 엉뚱한 곳에 있다면 CRS가 잘못 지정되었거나 할당되지 않은 경우입니다.

Q. CRS를 바꾸면 원본 데이터가 손상되나요?
A. 레이어 CRS 설정(Set Layer CRS)은 파일 자체의 좌표값을 바꾸지 않고 해석 기준만 바꿉니다. 반면 재투영(Reproject Layer)은 좌표값 자체를 새 CRS 기준으로 변환해서 새 파일로 저장합니다. 원본을 보존하려면 재투영 전에 원본 파일을 별도로 백업해 두는 것이 안전합니다.

Q. 웹 지도(카카오맵, 네이버 지도)에서 좌표를 복사했는데 QGIS에 붙이면 왜 안 맞나요?
A. 웹 지도에서 제공하는 좌표는 대부분 EPSG:4326(경위도) 기준입니다. QGIS 프로젝트가 EPSG:5186 같은 투영좌표계로 설정되어 있다면, 좌표 입력 시 반드시 해당 좌표가 EPSG:4326임을 명시하거나, 프로젝트 CRS를 일시적으로 4326으로 바꿔서 입력한 뒤 다시 변환해야 합니다.

좌표계는 GIS 작업의 가장 기초적인 설정이지만, 익숙해지기까지 의외로 많은 시행착오를 겪는 부분이기도 합니다. 핵심만 정리하면, 데이터를 받는 순간 CRS를 확인하고, 분석 전에 모든 레이어를 하나의 투영좌표계로 통일하고, 결과를 눈과 수치 두 가지로 검토하는 세 가지 습관이면 대부분의 오류를 예방할 수 있습니다. 재난안전 분야에서는 이 단순한 확인 절차 하나가 대피소 배치 오류나 침수 면적 오산을 막는 안전망이 됩니다. 좌표계를 제대로 맞췄다면 이제 그 위에서 공간 분석을 수행할 차례인데, 다음 편에서는 벡터 데이터의 버퍼(buffer)와 교차(intersect) 분석이 재난안전 업무에서 어떻게 쓰이는지를 살펴보겠습니다.

GeoAI 기초 시리즈 6편 · 전체 43편


재난안전과 GeoAI 이야기를 더 보고 싶다면 아래 채널도 함께 보세요.

📌 바로가기

GeoAI 위성·드론 영상 분석, 재난대응 산업이 뜬다 | 재난안전과 GeoAI

GeoAI 위성·드론 영상 분석 기술이 재난대응 산업의 중심으로 떠오르고 있다. 누리호 5차 발사, 위성·드론 영상 분석 스타트업, ArcGIS 경사지 위험 분석 서비스까지 오늘의 관련 소식을 정리했다. 📌 3줄 요약 아크넥사는 위성·드론 영상을...