개발/Datebase

/* SQL 오류 (3048): Out of range error: Latitude should be [-90,90] in function ST_Distance_Sphere. */

aihtnyc_h 2024. 11. 25. 20:26
728x90
반응형
SMALL

 

ST_Distance_Sphere 함수에 잘못된 위도(latitude) 값이 전달된 경우 발생합니다. ST_Distance_Sphere 함수는 지리적 좌표계에서 두 지점 간의 거리를 계산하는 MySQL의 공간 함수입니다. 이 함수는 위도와 **경도(longitude)**를 입력받아 두 지점 간의 구면 거리(구의 표면에서의 거리)를 계산합니다.

문제의 원인:

  • 위도 값 범위 오류: ST_Distance_Sphere 함수는 위도(latitude)가 -90도에서 +90도 사이의 값이어야 합니다. 위도의 범위는 지구상의 북극이 +90도, 남극이 -90도입니다. 위도가 이 범위를 벗어나면 "Out of range error"가 발생합니다.
  • 예를 들어, 위도가 100도나 -100도와 같이 잘못된 값으로 전달되면 이 오류가 발생합니다.

해결 방법:

  1. 입력값 검증:
    • ST_Distance_Sphere 함수에 전달되는 위도 값이 -90에서 +90 사이의 값인지 확인하세요.
    • 위도가 그 범위를 벗어난 값으로 전달되지 않도록 애플리케이션에서 검증하거나, 데이터베이스에서 쿼리 전에 필터링합니다.
  2. 쿼리 수정:
    • 쿼리에서 위도 값을 올바른 범위로 변환하거나, 범위가 벗어난 값을 필터링하는 로직을 추가합니다.
    • 예를 들어, 위도가 90도를 초과하거나 -90도 미만인 값을 필터링하려면 WHERE 조건을 추가할 수 있습니다.
  3. 위도 및 경도 값의 데이터 정합성 확인:
    • 데이터베이스에 저장된 위도와 경도 값이 올바른 범위 내에 있는지 확인하고, 잘못된 값이 저장되지 않도록 입력 데이터를 검증합니다.

예시:

sql
 
-- 예시 1: 위도가 범위를 벗어난 값을 필터링하는 쿼리
SELECT * FROM locations 
WHERE latitude BETWEEN -90 AND 90 AND longitude BETWEEN -180 AND 180;
 
 
-- 예시 2: 위도 값을 90도와 -90도 사이로 제한
SELECT ST_Distance_Sphere
( 
  POINT(latitude, longitude)
, POINT(another_latitude
, another_longitude) 
) 
FROM locations 
WHERE latitude BETWEEN -90 AND 90 AND longitude BETWEEN -180 AND 180;

결론:

ST_Distance_Sphere 함수는 위도 값이 -90도에서 +90도 사이에 있어야 하며, 이를 벗어난 값이 입력되면 "Out of range" 오류가 발생합니다. 이 오류를 해결하려면 위도 값이 적절한 범위 내에 있는지 확인하고, 유효성 검사를 추가하거나 데이터 정합성을 점검해야 합니다

728x90
반응형
LIST