2010-02-28 6 views
0

로드 시간과 관련하여 (사용자가 제공하는) 한 우편 번호와 다른 여러 우편 번호 사이의 거리를 비교하는 데 가장 효율적인 것이 무엇인지 알아 내려고합니다. 우편 번호 (약 200 개의 우편 번호가 있지만 시간이 지남에 따라 증가 할 수 있습니다.) 나는 볼 파크에있는 정확한 것을 필요로하지 않습니다.MySQL의 PHP 우편 번호를 구체적으로 비교하십시오.

나는 미국 전체에 우편 번호 csv 파일을 다운로드했는데 두 우편 번호 사이의 거리를 생성하는 함수가 있습니다 (라디안으로 믿습니다.) 나는 단지 거리를 표시 할 필요가 없습니다. 결과의 첫 번째가 가장 가까운 200 개의 우편 번호를 정렬해야합니다.

나는 csv 파일을 mysql 테이블에 업로드했다. 나는 200 개의 우편 번호를 모두 순환 할 수 있고, 거리를 포함하는 각각의 필드를 업데이트 할 수 있다고 생각했다. 그런 다음 ORDER BY를 사용하여 가장 가까운 곳에서 가장 가까운 곳으로 정렬하십시오.

누구든지 더 효율적인 방법을 알고 있습니까? 이 방법은 검색 쿼리가 실행될 때마다 우편 번호의 전체 db를 업데이트해야합니다. 단지 200 개의 우편 번호로 큰 문제는 아니지만, db가 빌드 될 때로드 시간이 느려질 것이라고 상상합니다. 미리 조언 해 주셔서 감사합니다. 자바 스크립트

답변

2

:

var R = 6371; // km 
var dLat = (lat2-lat1).toRad(); 
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c; 

여기서 두 지점

이것은 Haversine formula 사이의 거리 D =.

관련 문제