[Python] Calculating network distance using Kakao Map API
https://developers.kakaomobility.com/docs/navi-api/directions/
문제 상황
모든 파란 별과 초록 네모 사이의 네트워크 거리를 구해야 한다.
카카오 모빌리티 길찾기 API 확인
이와 같이 설명된 문서를 확인할 수 있다.
요청 파라미터를 확인한다.
이 중에서 필요한 것만 고르자.
필자의 경우 이 두 가지의 요청 파라미터만 사용한다.
요청코드 예제
curl -v -X GET "https://apis-navi.kakaomobility.com/v1/directions?origin=127.11015314141542,37.39472714688412&destination=127.10824367964793,37.401937080111644&waypoints=&priority=RECOMMEND&car_fuel=GASOLINE&car_hipass=false&alternatives=false&road_details=false" \
-H "Authorization: KakaoAK ${REST_API_KEY}" // 카카오디벨로퍼스에서 발급 받은 API 키 값
GPT 4.0이 만들어준 코드
chatGPT 4.0을 이용하여 코드를 만들어달라고 요청했다.
https://chat.openai.com/share/35159c69-3936-4d9b-8f52-506c57e5e953
pip install requests
먼저 requests가 설치되지 않은 경우, 위 명령어를 입력하자.
내가 사용한 코드는 아래와 같다.
import requests
import json
def get_directions(api_key, origin, destination):
url = "https://apis-navi.kakaomobility.com/v1/directions"
# 파라미터 추가
params = {
"origin": origin,
"destination": destination
}
headers = {
"Authorization": f"KakaoAK {api_key}",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
return response.json()
else:
return None
if __name__ == "__main__":
REST_API_KEY = "당신의_API_코드"
origin_input = 126.970186, 37.556011
destination_input = 126.924234, 37.521718
result = get_directions(REST_API_KEY, origin_input, destination_input)
if result:
print(json.dumps(result, indent=4))
else:
print("API 호출에 실패했습니다.")
결과 확인
결과를 확인해보자.
서울역 - 여의도역 길찾기 경로를 예시로 들어보자.
카카오맵 상으로 6.4km, 18분, 택시비 9,500원이다.
서울역과 여의도역의 위도 경도를 입력하였다.
서울역
126.970186, 37.556011
여의도역
126.924234, 37.521718
코드를 돌린 결과
택시요금은 9,200원이, 이동 거리는 6.456km가, 이동 시간은 1105초 (18분 25초)가 소요된다는 결과가 나타났다.
즉 카카오맵과 거의 동일한 결과가 나타나, 코드가 정확하게 작성되었음을 알 수 있다.
여러 경우에 대해 계산해야 하는 경우
# 여러 개인 경우
import requests
import json
def get_directions(api_key, origin, destination):
url = "https://apis-navi.kakaomobility.com/v1/directions"
# 파라미터 추가
params = {
"origin": origin,
"destination": destination,
"priority": "DISTANCE"
}
headers = {
"Authorization": f"KakaoAK {api_key}",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
return response.json()
else:
return None
if __name__ == "__main__":
REST_API_KEY = "8fae3c0f2015c366e0f4592f961bf873"
import pandas as pd
# 원하는 컬럼 이름으로 값을 가져옵니다. 이 예에서는 'origin_longitude', 'origin_latitude', 'dest_longitude', 'dest_latitude'라는 컬럼명을 사용했습니다.
origin_longitude = df['O_x'].tolist()
origin_latitude = df['O_y'].tolist()
dest_longitude = df['D_x'].tolist()
dest_latitude = df['D_y'].tolist()
# 결과를 저장할 리스트 선언
results_list = []
for i in range(len(origin_longitude)):
origin_input = (origin_longitude[i], origin_latitude[i])
destination_input = (dest_longitude[i], dest_latitude[i])
result = get_directions(REST_API_KEY, origin_input, destination_input)
if result:
results_list.append(result)
for i in range(len(results_list)):
info = results_list[i]['routes'][0]
if info['result_code'] == 0:
distance = results_list[i]['routes'][0]['summary']['distance']
print(f"Distance for index {i}: {distance}")
else:
print("길찾기 불가능")
else:
print("API 호출에 실패했습니다.")
특히 마지막 for 문에서는
routes라는 딕셔너리 안에 거리가 저장된다는 점에서 코드를 이와 같이 작성하였음
그 결과, 이와 같이 각 index에 대해 거리(m 기준)만 나오게 된다.
'🖥️ IT, 컴퓨터 > 🐍 Python' 카테고리의 다른 글
[Python] cmd에서 pip install 패키지 설치하기 (0) | 2023.08.22 |
---|---|
[Google Colab] 구글 코랩에서 csv 파일 불러오기 (0) | 2023.08.21 |
[Python] SKlearn의 minmax로 정규화하기 (0) | 2023.08.21 |
[Python] 공공데이터포털 API를 활용한 건축소유자 정보 확인 (예시코드) (4) | 2023.06.23 |
[Python] 생활인구 데이터 가공하기 (서울KT 생활인구/노인인구/PANDAS) (0) | 2023.06.23 |
댓글