내가 위치를 사용하여 위치의 테이블을 조회하는이 SQL 쓴이 Google tutorial중복 레코드 크로스 가입하고 Hversine 공식
의 수정을 완료하기 위해 노력하고있어 "이름을."사용 위치의 이름이 주어지면 쿼리는 근접 지역의 피자 레스토랑을 반환합니다. 이것을 달성하기 위해 레스토랑 위치의 내 테이블에 십자가를 긋고, "마커"라는 제목을 붙이고 Haversine 공식을 사용하여 거리를 계산했습니다.
SELECT m.address,
m.name,
m.lat,
m.lng,
(3959 * ACOS(COS(RADIANS(poi.lat)) *
COS(RADIANS(m.lat)) *
COS(RADIANS(m.lng) - RADIANS(poi.lng)) + SIN(RADIANS(poi.lat))*
SIN(RADIANS(m.lat)))) AS distance
FROM markers poi
CROSS JOIN markers m
WHERE poi.address LIKE "%myrtle beach%"
AND poi.id <> m.id HAVING distance < 200
ORDER BY distance LIMIT 0,20
쿼리는 예상 된 결과를 반환하지만 관심의 포인트는이 경우에, 지정된 영역 밖에있는 경우 "머틀 비치,"나는 경기 당 중복 레코드를 얻을. CROSS JOIN이 DISTINCT select로 쉽게 수정 될 수 있기 때문입니다. 그러나 "lng"및 "lat"필드는 FLOAT 유형이므로 중복 된 레코드의 경우에도 거리 계산이 동일하지 않습니다. |
3901 북한 킹스 하이웨이 스위트 룸 1, 머틀 비치, 사우스 캐롤라이나 : 여기
은 수익의 일부입니다 시카고의 동쪽 피자 회사 | 33.716099 -78.855583 | 4.02855621969551251706 S 킹스 하이웨이 # A, 머틀 비치, 사우스 캐롤라이나 | 도미노 피자 : 머틀 비치 | 33.674881 | -78.905144 | 4.0285562196955125
82 Wentworth St, Charleston, SC | Andolinis 피자 | 2.782330 | -79.934235 | 85.68177495224947
82 Wentworth St, Charleston, SC | Andolinis 피자 | 32.782330 | -79.934235 | 89.71000040441085
114 Jungle Rd, Edisto Island, SC | Edisto Beach Inc의 벅스 피자 | 32.503971 -80.297951 | 114.22243529200529
114 Jungle Rd, Edisto Island, SC | Edisto Beach Inc의 벅스 피자 | 32.503971 -80.297951 | 118.2509427998286 "여기에서 이동하는 위치에
어떤 제안
dups를 보여주는 샘플 입력 및 출력을 게시 할 수 있습니까? 그리고 가독성을 위해 [Haversine 함수의 존재]를 가정하는 편집을 제안합니다 (http://stackoverflow.com/questions/6385452/a-custom-mysql-function-to-calculate-the- haversine-distance). – bishop
@Brandon Buster 데이터 샘플을 제공 할 수 있습니까? 또한 관심 장소에 따라 무엇을 의미합니까? 내가보기에는 수동으로 입력 한 데이터는 % myrtle beach %입니다. 너 무슨 짓을하려는거야? 이 질문은 이해하기가 약간 어렵고 설명과 세부 사항이 더 필요합니다. –
죄송합니다. 서로 다른 상황에서 "관심 지점"이라는 용어를 사용했습니다. 이 예제에서 중요한 점은 Myrtle Beach뿐입니다. 내가 원하는 데이터는 200 마일 반경 안에있는 피자 레스토랑입니다. 몇 가지 샘플 데이터와 추가 정보로 게시물을 편집하겠습니다. –