x마일 반경 내의 다른 행에 대한 mySQL 경도 및 위도 쿼리
저는 현재 대략 10,000개의 행으로 채워진 데이터베이스를 가지고 있습니다.모두 우편번호의 중심을 기준으로 경도/위도를 갖습니다.지금 확장을 시도하고 있는 쿼리를 발견했지만 어느 정도까지는 잘 작동합니다.그러나 아래의 예에서 저는 반경 25마일 이내에 있는 것들을 찾으려고 노력하고 있는데, 이는 모두 대부분의 경우에 효과가 있는 것으로 보입니다.대부분의 결과는 25마일 기준 내에서 산출되지만, 86마일에서 800마일 사이에서 크게 빗나간 결과를 얻고 있습니다.
예:여기는 제 센터 lat/lon입니다: 37.2790669,-121.874722 = 산호세, 캘리포니아 산호세에서 33.016928,-116.846046 = 산호세에서 약 355마일 떨어진 캘리포니아 샌디에이고입니다.
현재 쿼리는 다음과 같습니다.
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` <= 25 ORDER BY `distance` ASC"
제가 함께 일하는 스토어 로케이터에서 사용하는 쿼리는 다음과 같습니다.
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` < :distance
ORDER BY
`distance`
LIMIT
25
:lat그리고.:long사용자가 통과한 포인트는 다음과 같습니다.lat그리고.long데이터베이스에 저장된 점입니다.
:거리는 마일 단위로 측정되며, 코드 작동 버전에서는 :거리가 실제로 10-50마일 범위의 드롭다운에서 당겨집니다.
그 해결책을 위해 조셴도 덕분에 3959(지구 중심에서 지표까지의 거리를 마일로 환산하면)를 6371(킬로미터 환산 시 3959마일)로 바꾸면 킬로미터로 코드를 바꿀 수 있습니다.
언급URL : https://stackoverflow.com/questions/8994718/mysql-longitude-and-latitude-query-for-other-rows-within-x-mile-radius
'programing' 카테고리의 다른 글
| 소계외세 표시, 우커머스 체크아웃 시 소계외세를 별도의 행으로 추가 (0) | 2023.11.05 |
|---|---|
| jQuery 5초 후 자동 숨김 요소 (0) | 2023.11.05 |
| 장고 1.7에서 초기 마이그레이션에서 다시 마이그레이션하는 방법은 무엇입니까? (0) | 2023.11.05 |
| 애플리케이션을 종료하고 홈 화면을 표시하는 방법? (0) | 2023.11.05 |
| 대용량 My ISAM 테이블의 안정성은 얼마나 안정적입니까? (0) | 2023.11.05 |