안녕하세요, 코드의 ㅋ자도 모르는 사람입니다.
챗지피티를 사용해서 주소별 거리계산을 하는 코드를 짰습니다.
기준이 되는 주소 A에 대해 여러개의 주소와의 각각의 도보거리를 계산하는 코드입니다.
Kakao 지도 API를 활용한 거리 계산 자동화 도구
사용자의 주소 목록과 기준 주소 간의 도보 거리(m)를 계산하고, 엑셀로 저장하는 프로그램입니다.
import requests
import pandas as pd
import time
[1] 사용자 설정 부분 -------------------------------
KAKAO_API_KEY = “rest api key”
BASE_ADDRESS = “address”
EXCEL_FILE_PATH = “주소록.xlsx” # 입력 엑셀 파일명 (같은 폴더에 위치)
OUTPUT_FILE_PATH = “정렬된_주소_거리.xlsx” # 결과 파일명
----------------------------------------------------
주소 → 좌표 변환 함수
def get_coords(address, api_key):
url = “https://dapi.kakao.com/v2/local/search/address.json”
headers = {“Authorization”: f"KakaoAK {api_key}"}
params = {“query”: address}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
documents = response.json().get(“documents”)
if documents:
x = float(documents[0][“x”])
y = float(documents[0][“y”])
return x, y
return None, None
거리 계산 함수 (도보)
def get_walking_distance(start_x, start_y, end_x, end_y, api_key):
url = “https://apis-navi.kakaomobility.com/v1/directions”
headers = {“Authorization”: f"KakaoAK {api_key}“}
params = {
“origin”: f”{start_x},{start_y}“,
“destination”: f”{end_x},{end_y}",
“priority”: “RECOMMEND”
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
routes = response.json().get(“routes”)
if routes:
summary = routes[0][“summary”]
distance = summary[“distance”]
duration = summary[“duration”]
return distance, round(duration / 60)
return None, None
메인 실행 함수
def main():
df = pd.read_excel(EXCEL_FILE_PATH)
addresses = df[‘주소’].dropna().unique().tolist()
print("기준 주소 위치를 확인 중...")
base_x, base_y = get_coords(BASE_ADDRESS, KAKAO_API_KEY)
if not base_x:
print("기준 주소 좌표를 찾을 수 없습니다. 주소를 확인해주세요.")
return
results = []
for addr in addresses:
print(f"{addr} 처리 중...")
end_x, end_y = get_coords(addr, KAKAO_API_KEY)
if end_x:
distance, duration = get_walking_distance(base_x, base_y, end_x, end_y, KAKAO_API_KEY)
results.append({"주소": addr, "거리(m)": distance, "도보시간(분)": duration})
else:
results.append({"주소": addr, "거리(m)": None, "도보시간(분)": None})
time.sleep(0.3)
sorted_df = pd.DataFrame(results).sort_values(by="거리(m)")
sorted_df.to_excel(OUTPUT_FILE_PATH, index=False)
print(f"\n✅ 작업 완료! 결과 파일 저장됨: {OUTPUT_FILE_PATH}")
if name == “main”:
main()
해당 코드를 실행해서 나온 결과를 확인해보니 직선거리로 계산해서 도보시간을 산출 한 것 같더라구요.
실제 카카오맵 앱을 실행해서 직접 주소 입력하고 길찾기로 해서 나온 도보시간, 거리와 코드를 실행해서 나온 도보시간, 거리가 조금씩 달랐습니다.
그래서 도보 길찾기 관련 api가 있나 검색해보니 해당건에 대해 이미 많은 질문글들에 도보 길찾기 관련 api는 제공하고 있지 않다는 답변들을 확인할 수 있었습니다.
그래도 해당 질문글들이 좀 오래되었기에 근래에 생겼거나 업데이트 되지는 않았는지 궁금합니다.
그리고 단순하게 하나의 주소에서 다른 여러개의 주소에 대한 도보 이동거리/시간을 계산하는 좋은 방법이 없을지 알고 싶습니다.
TLDR:
- 도보 길찾기(or 이동거리/시간 만이라도) api 아직도 없나요?
- 하나의 주소에 대한 여러개의 주소로의 도보 이동거리/시간을 계산하는 간단한 방법이 있을까요?