위도와 경도를 사용하여 지리적 위치 검색을 위한 MySQL 쿼리 최적화
MySQL에서는 지리적 근접성을 기반으로 데이터를 검색하는 것이 일반적인 작업입니다. 경도 및 위도 값으로 작업할 때 예기치 않은 결과를 방지하려면 효율적인 쿼리를 사용하는 것이 중요합니다.
중심 위도 및 경도로부터 25마일 반경 내에서 행을 찾으려고 시도하는 다음 쿼리를 고려해 보세요.
SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180)) cos(($lat*pi()/180))
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515)
AS `distance` FROM `geo_locations` HAVING `distance` 이 쿼리는 일반적으로 작동하지만 일부 행에 대해서는 부정확한 결과를 생성하여 지정된 행에서 훨씬 더 멀리 떨어져 있음을 표시할 수 있습니다. 반경.
정확성을 높이려면 다음과 같은 최적화된 쿼리를 고려하세요.
SELECT
`id`,
(
6371 *
acos(
cos( radians( :lat ) ) *
cos( radians( `lat` ) ) *
cos(
radians( `long` ) - radians( :long )
)
sin(radians(:lat)) *
sin(radians(`lat`))
)
) `distance`
FROM
`location`
HAVING
`distance` 이 쿼리에서 :lat 및 :long 매개변수는 중심점의 위도와 경도를 나타내고, :distance는 반경(마일)을 나타냅니다.
두 쿼리의 주요 차이점 라디안을 마일로 변환하기 위한 변환 계수로 6371을 사용하는 것입니다. 이 요소는 원래 쿼리에 사용된 3959보다 더 정확합니다. 또한 최적화된 쿼리는 위도와 경도를 기반으로 거리를 계산하기 위해 더 엄격한 공식을 사용합니다.
이러한 최적화를 구현하면 위도 및 경도 값을 사용하여 지리적 위치 검색을 수행할 때 MySQL 쿼리의 정확도를 크게 향상시킬 수 있습니다. 결과가 항상 지정된 반경 거리 내에 있는지 확인합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3