대한민국 최신 행정구역(SHP) 다운로드 (2025 version)

Page content

개요

image.png

  • 지오서비스웹(GEOSERVICE-WEB)의 아카이브 통해서 다운로드

관련 영상

https://www.youtube.com/watch?v=1vkI5tmIlgI

회원가입 - 지오서비스웹(GEOSERVICE-WEB)

image.png

  • 회원가입 서비스 계정 약관

image.png

  • 닉네임 / 실명 입력
    • 닉네임 : jjh430
    • 실명 : 정지훈

image.png

  • 비밀번호 입력 : tkfkdgo486!

image.png

  • 이메일 / 휴대폰 입력

image.png

  • 인증코드 확인

image.png

  • 본인 인증 완료 및 로그인

image.png

GEOSERVICE 화면

  • 메인 화면은 아래와 같음

image.png

원하는 지역 최신 행정구역 데이터 추출

  • 왼쪽 상단의 아카이브 선택
  • 검색창에 ‘gizmo’ 입력

image.png

  • 최신행정구역도 선택
  • 여기에서 시군구만 선택해서 다운로드

image.png

image.png

  • 무제한 다운로드를 방지하기 위해 지오코인 제도를 도입함

image.png

QGIS 설치

  • 지도 경계 작업을 수행할 QGIS 파일을 다운로드 받는다.

image.png

  • Skip it and go to download 클릭

image.png

  • 가장 최신 버전보다는 Long Term Version 선택

image.png

image.png

  • MSI 인스톨러로 설치 시작

image.png

image.png

image.png

image.png

image.png

시군구에서 경기도만 추출

  • 먼저 QGIS 실행하기

image.png

  • 탐색기에서 다운로드 받은 파일, sig.shp 파일 탐색 후 더블 클릭

image.png

image.png

  • 레이어에 있는 sig 메뉴에서 마우스 우클릭 > 속성 선택

image.png

  • 데이터소스 인코딩과 지정된 좌표계 확인
    • 데이터소스 인코딩 : windows-949
    • 지정된 좌표계 : PCS_ITRF2000_TM
  • 적용 후 확인 버튼 클릭

image.png

  • 레이어에 있는 sig 메뉴에서 마우스 우클릭 > 속성 테이블 열기

image.png

image.png

  • 표현식을 이용해서 피처 선택 버튼 클릭

image.png

  • 다음 화면에서 수식 입력 후 피처 선택 버튼 클릭 후, 닫기
SIG_CD LIKE '41%'

image.png

  • 다시 작업 페이지로 오면 경기도 지역만 색상 선택이 된 것을 확인할 수 있음

image.png

  • 내보내기 > 선택한 피처를 다른 이름으로 저장 버튼 선택ㅖㅊ

image.png

  • 다음과 같이 지정 후 내보내기

image.png

  • 레이어 탭에서 sig 비활성화 시, 전국지도에서 경기도만 추출된 것 확인 가능

image.png

Python 실습

파일 읽기

  • geopandas, pandas, matplotlib 라이브러리를 불러오고 경기도 시군구 geojson 파일을 읽어온다.
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 경기도 geojson 파일 읽기
gyeonggi = gpd.read_file('20241015_기준_시군구\gyeonggido.geojson', encoding='utf-8')

# 데이터 확인
print("데이터 크기:", gyeonggi.shape)
print("\n처음 5개 행:")
print(gyeonggi.head())

image.png

가상의 지역 데이터 생성

  • 경기도 각 시군구별 인구(50만~150만명)와 GDP(1조~5조원) 가상 데이터를 생성하고 기존 데이터프레임과 병합
# 시군구별 인구 데이터 생성 (50만~150만 사이의 랜덤값)
population_data = pd.DataFrame({
    'SIG_KOR_NM': gyeonggi['SIG_KOR_NM'],
    'population': np.random.randint(500000, 1500000, size=len(gyeonggi))
})

# 시군구별 GDP 데이터 생성 (1조~5조 사이의 랜덤값)
gdp_data = pd.DataFrame({
    'SIG_KOR_NM': gyeonggi['SIG_KOR_NM'],
    'gdp': np.random.randint(1000000, 5000000, size=len(gyeonggi))  # 단위: 백만원
})

# 데이터 합치기
gyeonggi = gyeonggi.merge(population_data, on='SIG_KOR_NM', how='left')
gyeonggi = gyeonggi.merge(gdp_data, on='SIG_KOR_NM', how='left')

# 결과 확인
print("\n인구와 GDP가 추가된 데이터 확인:")
print(gyeonggi.head())

image.png

matplotlib 사용한 지도 시각화

  • matplotlib을 사용하여 경기도 시군구별 인구와 GDP 분포를 시각화
  • 인구 분포: YlOrRd 컬러맵을 사용하여 인구가 많은 지역을 진한 색으로 표시
  • GDP 분포: Greens 컬러맵을 사용하여 GDP가 높은 지역을 진한 색으로 표시
  • 두 개의 subplot을 사용하여 나란히 표시
# 한글 폰트 설정
plt.rcParams['font.family'] = 'Malgun Gothic'

# 인구 데이터 시각화
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 8))

# 인구 분포 지도
gyeonggi.plot(column='population', 
              ax=ax1,
              legend=True,
              legend_kwds={'label': '인구 수'},
              cmap='YlOrRd')
ax1.set_title('경기도 시군구별 인구 분포')
ax1.axis('off')

# GDP 분포 지도 
gyeonggi.plot(column='gdp',
              ax=ax2, 
              legend=True,
              legend_kwds={'label': 'GDP (백만원)'},
              cmap='Greens')
ax2.set_title('경기도 시군구별 GDP 분포')
ax2.axis('off')

plt.tight_layout()
plt.show()

image.png

folium 사용한 지도 시각화

  • folium을 사용하여 경기도 시군구별 인구와 GDP 분포를 인터랙티브 지도로 시각화
  • CartoDB positron 타일을 기본 지도로 사용
  • Choropleth 맵을 사용하여 인구와 GDP 분포를 시각화
  • 인구 분포: YlOrRd 컬러맵을 사용하여 인구가 많은 지역을 진한 색으로 표시
  • GDP 분포: Greens 컬러맵을 사용하여 GDP가 높은 지역을 진한 색으로 표시
  • LayerControl을 추가하여 두 레이어를 선택적으로 표시 가능
import folium

# 경기도 중심점 계산
center_lat = gyeonggi.geometry.centroid.y.mean()
center_lon = gyeonggi.geometry.centroid.x.mean()

# 기본 지도 생성
m = folium.Map(location=[center_lat, center_lon], 
               zoom_start=9,
               tiles='CartoDB positron')

# Choropleth 지도 생성 - 인구 분포
folium.Choropleth(
    geo_data=gyeonggi,
    name='인구 분포',
    data=gyeonggi,
    columns=['SIG_KOR_NM', 'population'],
    key_on='feature.properties.SIG_KOR_NM',
    fill_color='YlOrRd',
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name='인구 수'
).add_to(m)

# Choropleth 지도 생성 - GDP 분포
folium.Choropleth(
    geo_data=gyeonggi,
    name='GDP 분포',
    data=gyeonggi,
    columns=['SIG_KOR_NM', 'gdp'],
    key_on='feature.properties.SIG_KOR_NM',
    fill_color='Greens',
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name='GDP (백만원)'
).add_to(m)

# 레이어 컨트롤 추가
folium.LayerControl().add_to(m)

# 지도 표시
m

image.png