호랭이 분석가

[Redshift] 위도와 경도를 이용한 거리 계산 사용자 정의 함수 (UDF) 본문

AWS/Redshift

[Redshift] 위도와 경도를 이용한 거리 계산 사용자 정의 함수 (UDF)

데이터호랑이 2023. 7. 20. 00:16
반응형

Amazon Redshift는 PostgreSQL 기반의 클라우드 데이터 웨어하우스 서비스로, 사용자 정의 함수(UDF)를 지원합니다.

이번 포스트에서는 Redshiftdml PL/Python UDF를 이용하여 두 지점의 위도와 경도를 입력받아

그 거리를 계산하는 함수를 소개하려 합니다.

 

CREATE OR REPLACE FUNCTION my_schema.f_distance_km(latitude1 float8,
                                                   longitude1 float8,
                                                   latitude2 float8,
                                                   longitude2 float8)
    RETURNS float8
    LANGUAGE plpythonu
    IMMUTABLE
    
AS $$
    
    import math
    
    r = 6365
    sin_lat1 = math.sin(latitude1/57.29577951)
    sin_lat2 = math.sin(latitude2/57.29577951)
    cos_lat1 = math.cos(latitude1/57.29577951)
    cos_lat2 = math.cos(latitude2/57.29577951)
    cos_lngs = math.cos((longitude1/57.29577951) - (longitude2/57.29577951))
    
    dist_km = r * math.acos((sin_lat1 * sin_lat2) + (cos_lat1 * cos_lat2 * cos_lngs)
    
    return dist_km

$$
;

 

위 코드의 f_distance_km 함수는 4개의 파라미터를 입력받습니다.

각각 첫 번째 지점의 위도와 경도 그리고 두 번째 지점의 위도와 경도입니다.

함수는 이들을 이용하여 두 지점 사이의 거리를 킬로미터(km) 단위로 계산합니다.

 

이 함수는 지구를 완벽한 구로 가정하고 위도와 경도를 이용하여

두 지점의 거리를 계산하는 공식을 사용합니다.

 

r은 지구의 반경을 의미하며, 위도와 경도는 라디안 단위로 변환이 필요합니다.

그래서 57.29577951로 나누어주는데, 

180 / pi의 값으로 각도를 라디안으로 변환하는 공식입니다.

 

다만 이 함수는 지구의 형태를 완벽한 구로 가정하기 때문에

실제와 약간의 차이가 있을 수 있습니다.

이를 보완하기 위한 더 정밀한 계산 방법들도 있지만

대부분의 경우 이 함수로도 충분히 유용한 결과를 얻을 수 있을 것입니다.

 

SELECT my_schema.f_distance_km(37.7749, -122.4194, 34.0522, -118.2437);

 

위 예제는 샌프란시스코와 로스앤젤레스 사이의 거리의 계산입니다.

 

이 함수를 통해 지리적 위치에 따른 데이터 분석에 큰 도움이 될 수 있습니다.

 

 

 

CREATE FUNCTION - Amazon Redshift

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

Comments