프로젝트에서 지도 API를 사용해 지도 관련 기능 구현(현재 위치 마커 표시, 길찾기 등) 중 API를 사용하지 않고 직접 출발지와 도착지의 거리를 계산하기 위해 기본적인 거리계산 알고리즘 3개를 기록하고 복습했다.
두 점 사이의 거리를 계산하는 함수에는 여러 가지 방법이 있다. 가장 일반적인 세 가지는 유클리드 거리, 맨해튼 거리, 그리고 하버사인 공식이다.

import math
def euclidean_distance(lon1, lat1, lon2, lat2):
return math.sqrt((lon2 - lon1)**2 + (lat2 - lat1)**2)
두 점 (x1,y1)와 (x2,y2) 사이의 유클리드 거리는 다음과 같이 계산된다:

3차원 공간에서는 다음과 같이 z좌표도 계산한다:

distance = euclidean_distance(1, 2, 4, 6)
print("Euclidean Distance:", distance)
3차원 예제
3차원 공간에서 두 점 (1, 2, 3)과 (4, 6, 8) 사이의 유클리드 거리를 계산해 보겠습니다.
x 좌표의 차이: 4 - 1 = 3
y 좌표의 차이: 6 - 2 = 4
z 좌표의 차이: 8 - 3 = 5
3^2 + 4^2 + 5^2
9+16+25=50

3차원 유클리드 거리 파이썬 코드
def euclidean_distance_3d(x1, y1, z1, x2, y2, z2):
return math.sqrt((x2 - x1)**2 + (y2 - y1)**2 + (z2 - z1)**2)

def manhattan_distance(lon1, lat1, lon2, lat2):
return abs(lon2 - lon1) + abs(lat2 - lat1)
import math
def haversine(lon1, lat1, lon2, lat2):
R = 6371.0 # 지구의 반지름 (킬로미터)
lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = math.sin(dlat / 2)2 + math.cos(lat1) math.cos(lat2) math.sin(dlon / 2)2
c = 2 math.atan2(math.sqrt(a), math.sqrt(1 - a))
distance = R c
return distance
distance = haversine(126.9780, 37.5665, 129.0756, 35.1796)
print("Haversine Distance:", distance)
import geopy.distance
def vincenty_distance(lon1, lat1, lon2, lat2):
coords_1 = (lat1, lon1)
coords_2 = (lat2, lon2)
return geopy.distance.distance(coords_1, coords_2).km
distance = vincenty_distance(126.9780, 37.5665, 129.0756, 35.1796)
print("Vincenty Distance:", distance)