학생부 본선진출팀이 공고되었습니다.

자세히보기

위도, 경도로 실제 거리 구하기
house9895@naver.com
2023-10-11 14:42

안녕하세요 팀 은지짱짱걸입니다. 실제 지구는 구입니다. 따라서 위도, 경도의 데이터를 가지고 흔히 아는

((x2-x1)**2 + (y2-y1)**2)**0.5 처럼 평면좌표계에서 처럼 계산을 하면 실제 거리에서 오차가 생길 수 있습니다.

이 문제를 해결하기 위한 함수로 Haversine이라는 함수가 있습니다.

sealab image

이 함수를 파이썬에서 사용하는 몇가지 방법에 대해서 설명해보겠습니다.

1. Haversine 함수 구현

import math

def haversine(lat1, lon1, lat2, lon2):
    # 지구 반지름(m)
    radius = 6371.0

    # to radian
    lat1 = math.radians(lat1)
    lon1 = math.radians(lon1)
    lat2 = math.radians(lat2)
    lon2 = math.radians(lon2)

    dlat = lat2 - lat1
    dlon = lon2 - lon1

    # Haversine 공식 계산
    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 = radius * c

    return distance

result = haversine(lat1, lon1, lat2, lon2)
print("두 지점 사이의 실제 거리", result, "km")

2. Haversine 라이브러리 사용

pip install haversine
from haversine import haversine, Unit

result = haversine((lat1, lon1), (lat2, lon2), unit=Unit.KILOMETERS)
print("두 지점 사이의 실제 거리", result, "km")

3. geopy 라이브러리 사용

pip install geopy
from geopy.distance import geodesic

result = geodesic((lat1, lon1), (lat2, lon2)).kilometers
print("두 지점 사이의 실제 거리", result, "km")

개인적으로는 2번 haversine 라이브러리 사용하는 것을 제일 많이 쓰는거 같네요