🖥️ IT, 컴퓨터/🐍 Python

[Python] shp파일 내 피처를 shp 파일로 내보내기 / 전국 시군별, 시도별로 파일 만들기 :: 지오판다스 이용

김 홍시 2024. 10. 28. 13:44
반응형

문제상황

 

 

이와 같이 시/군별로 피처들이 있는데,

이것을 지역별로 별도의 shp를 만들고 싶음 

 

해결방법

시군구 or 시군 등 shp파일 준비

필자는 아래의 shp 파일을 사용함 

https://kimhongsi.tistory.com/entry/%EA%B3%B5%EA%B0%84%EC%9E%90%EB%A3%8C-%EC%A0%84%EA%B5%AD-%EC%8B%9C%EA%B5%B0-shp%ED%8C%8C%EC%9D%BC-%EA%B5%AC-%EC%A0%9C%EC%99%B8-2024%EB%85%84-%EC%B5%9C%EC%8B%A0

 

[공간자료] 전국 시군 shp파일 :: 구 제외 (2024년 최신)

특별시, 광역시의 자치구와 시의 일반구를 제외한 전국 시군 shp파일입니다.대구 군위군을 반영한 2024년 기준 최신 shp 파일입니다.        2024년 최신 시군구 shp는 아래! https://kimhongsi.tistory.c

kimhongsi.tistory.com

 

지오판다스가 기본적으로 설치되어 있어야 함

python에서 아래 코드 입력

 

import geopandas as gpd
import os

# 원본 shp 파일 경로
input_file = "shp파일이있는경로.shp"
# 개별 shp 파일이 저장될 경로
output_folder = "결과물을저장할경로"

# 폴더가 없다면 생성
os.makedirs(output_folder, exist_ok=True)

# 원본 shp 파일 불러오기
gdf = gpd.read_file(input_file)

# 도시별로 분리 및 저장
for city in gdf['SGG_NM'].unique():  # 'city_name_column'을 도시 이름 컬럼명으로 대체
    city_gdf = gdf[gdf['SGG_NM'] == city]
    output_file = os.path.join(output_folder, f"{city}.shp")
    city_gdf.to_file(output_file, driver='ESRI Shapefile')

print("도시별 shapefile 파일 생성 완료!")

 

여기에서

input_file

output_folder

경로는 수정할 것 

 

그러면 아래와 같이 지역별로 shp파일 내보내기가  완료됨

 

 

 

 

 

+) 만약 시도별로 나누고 싶다면

 

import geopandas as gpd
import os

# 원본 shp 파일 경로
input_file = "shp파일이있는경로.shp"
# 개별 shp 파일이 저장될 경로
output_folder = "결과물을저장할경로"

# 폴더가 없다면 생성
os.makedirs(output_folder, exist_ok=True)

# 원본 shp 파일 불러오기
gdf = gpd.read_file(input_file)

# sd 컬럼을 정수형으로 변환 (필요시)
gdf['sd'] = gdf['sd'].astype(int)

# sd와 name 매핑 정보
sd_name_map = {
    11: "서울특별시",
    26: "부산광역시",
    27: "대구광역시",
    28: "인천광역시",
    29: "광주광역시",
    30: "대전광역시",
    31: "울산광역시",
    36: "세종특별자치시",
    41: "경기도",
    51: "강원특별자치도",
    43: "충청북도",
    44: "충청남도",
    52: "전북특별자치도",
    46: "전라남도",
    47: "경상북도",
    48: "경상남도",
    50: "제주특별자치도"
}

# sido별로 분리 및 저장
for sd_value in gdf['sd'].unique():
    # sd 값에 해당하는 데이터 필터링
    sido_gdf = gdf[gdf['sd'] == sd_value]
    
    # 파일 이름 설정
    city_name = sd_name_map.get(sd_value)  # 매핑된 이름을 가져옴
    if city_name:  # 이름이 존재할 경우에만 저장
        output_file = os.path.join(output_folder, f"{city_name}.shp")
        # shapefile 저장
        sido_gdf.to_file(output_file, driver='ESRI Shapefile')
    else:
        print(f"sd 값 {sd_value}에 해당하는 이름을 찾을 수 없습니다.")

print("sido별 shapefile 파일 생성 완료!")

본 코드를 사용한다.

 

그 결과 아래처럼 된다.

 

반응형