GIS 알아내는 방법 (python)
관련 문서
https://geopy.readthedocs.io/en/stable/
pip install pandas
pip install geopy
import pandas as pd
from geopy.distance import geodesic
def load_building_data(filepath):
"""
CSV 파일에서 건물 데이터를 로드합니다.
Parameters:
- filepath (str): 파일 경로
Returns:
- DataFrame: 건물 데이터가 포함된 DataFrame
- utf-8 혹은 cp949 파일이므로 try,except를 이용해서 진행할 예정.
"""
try:
return pd.read_csv(filepath, encoding='utf-8')
except UnicodeDecodeError:
return pd.read_csv(filepath, encoding='cp949')
def filter_and_sort_buildings(center_coord, buildings_df, radius_km):
"""
주어진 반경 내의 건물들을 필터링하고 거리 순으로 정렬합니다.
Parameters:
- center_coord (tuple): 중심 좌표 (위도, 경도)
- buildings_df (DataFrame): 건물 데이터를 포함하는 DataFrame
- radius_km (float): 검색 반경 (킬로미터)
Returns:
- DataFrame: 필터링 및 정렬된 건물 데이터
"""
# 거리 계산
buildings_df['distance'] = buildings_df.apply(
lambda row: geodesic(center_coord, (row['latitude'], row['longitude'])).km, axis=1)
# 반경 내의 건물 필터링
filtered_df = buildings_df[buildings_df['distance'] <= radius_km]
# 거리 순으로 정렬
sorted_df = filtered_df.sort_values('distance')
return sorted_df
def print_buildings(buildings_df):
"""
건물 데이터를 출력합니다.
Parameters:
- buildings_df (DataFrame): 건물 데이터를 포함하는 DataFrame
"""
for index, row in buildings_df.iterrows():
print(f"{row['name']} - Distance: {row['distance']:.2f} km")
print(f"{len(buildings_df)}곳")
# 사용 예시
filepaths = ['school.csv', 'subway1.csv'] # CSV 파일 경로
center_coord = (37.536454060035, 126.89711732555) # 중심 좌표 서울양평동우체국
radius_km = 1 # 검색 반경 (킬로미터)
for filepath in filepaths:
buildings_df = load_building_data(filepath)
filtered_sorted_buildings = filter_and_sort_buildings(center_coord, buildings_df, radius_km)
print_buildings(filtered_sorted_buildings)
print('--------------------------')
파일 실행시 필요한 라이브러리
data_loader.py
data_processor.py
해당 과정을 거치고 난후 데이터 컬럼명.