2011-03-01 6 views
1

실제로 내 서버 데이터베이스에는 수백만 개의 레코드가 있고 나는 5 마일 반경 인 사람들 (반경이 5 마일 인 원)을 가져오고 싶습니다. ..내 GPS 근처에있는 모든 위치 찾기 위치

내가 웹 서비스를 통해 아이폰이 데이터를 보내고 ...

어떻게 내 PHP 서버 ....에서이 작업을 수행하는

+1

이 정보는 추가 정보없이 약간 복잡합니다. 지금까지 무엇을 시도 했습니까?이 문제가 어디에 있습니까? 데이터베이스의 데이터는 어떻게 생겼습니까? 이 웹 서비스를 작성하는 방법 또는 SQL 쿼리를 작성하는 방법을 알고 싶습니까? – oezi

+0

@oezi ----- 제 데이터베이스에는 사람 이름, 주소, 우편 번호, 이름 등이 있습니다 ... 그리고 iPhone에서 전송 된 GPS 좌표에 기초하여 전체 세부 정보를 얻고 싶습니다 ...... –

+0

당신의 인물 테이블에 위도/경도가있는 경우 거리를 계산할 수 있기 전에 zip을 위도/경도로 변환해야합니다. –

답변

7

은 아마이 당신에게

을 도울 수 가르쳐주세요

예를 들어, 위도와 경도 37과 -122를 입력하십시오. 현재 주어진 위도와 경도로부터 25 마일 이내에있는 사용자를 검색하려고합니다.

SELECT item1, item2, 
    (3959 * acos(cos(radians(37)) 
        * cos(radians(lat)) 
        * cos(radians(lng) 
         - radians(-122)) 
        + sin(radians(37)) 
        * sin(radians(lat)) 
       ) 
    ) AS distance 
FROM geocodeTable 
HAVING distance < 25 
ORDER BY distance LIMIT 0 , 20; 

검색 거리를 원하는 경우 kms. 그런 다음 위의 쿼리에서 3959를 6371로 바꿉니다.

서버 데이터베이스에있는 사람들의 수백만 개의 레코드 (난 당신이 데이터 보호 법률을 준수하고 희망), 당신은 모든 거리를 계산하는 작업 부하를 감소해야합니다으로

Get nearest places on Google Maps, using MySQL spatial data

+0

그것은 굉장했다. 첫 번째 시도에서 데이터베이스 테이블을 사용하여 작업했습니다. 큰 +1! 감사! – hellozimi

+0

+1 정말 고마워 ...... ...... –

2

; 그렇지 않으면 수백만 건의 레코드 중 하나 하나마다 계산을 수행해야합니다.

PHP를 사용하면 "경계 상자"를 계산할 수 있습니다.이 경계 상자를 사용하여 수백만 명의 사람들 레코드에서 후보자의 하위 집합을 선택한 다음 해당 사람 레코드 집합의 거리 만 계산할 수 있습니다. 이동 가능한 웹 사이트의 this article을 참조하십시오 (예 : PHP 코드에서이 작업을 수행하는 방법과 메서드가 실제로 작동하는 방식에 대한 훌륭한 설명).

+0

+1 감사합니다 ....... –