PHP의 우편 번호 사이의 거리를 계산합니다
문제
나는 우편 번호 데이터베이스와 그들의 랑지병/위도 등을 가져 왔습니다.이 페이지. 다음 분야가 있습니다.
지퍼, 위도, 경도, 도시, 주, 카운티, zip_class
데이터는 텍스트 파일에 있었지만 MySQL 테이블에 삽입했습니다. 내 질문은 이제 위의 필드를 사용하여 사용자가 웹 사이트에 입력 할 수있는 두 개의 우편 번호 사이의 거리를 계산할 수있는 방법입니다. PHP의 작업 코드에 감사드립니다
해결책
당신은 또한 거리를 계산하기 위해 웹 서비스를 치는 것도 시도 할 수 있습니다. 다른 사람이 무거운 리프팅을하게하십시오.
다른 팁
이것은 Mike의 답변입니다. 마법 번호. 그것은 나를 위해 잘 작동하는 것 같았습니다 일부 테스트 데이터:
function calc_distance($point1, $point2)
{
$radius = 3958; // Earth's radius (miles)
$deg_per_rad = 57.29578; // Number of degrees/radian (for conversion)
$distance = ($radius * pi() * sqrt(
($point1['lat'] - $point2['lat'])
* ($point1['lat'] - $point2['lat'])
+ cos($point1['lat'] / $deg_per_rad) // Convert these to
* cos($point2['lat'] / $deg_per_rad) // radians for cos()
* ($point1['long'] - $point2['long'])
* ($point1['long'] - $point2['long'])
) / 180);
return $distance; // Returned using the units used for $radius.
}
수학만으로 수행 할 수 있습니다 ...
function calc_distance($point1, $point2)
{
$distance = (3958 * 3.1415926 * sqrt(
($point1['lat'] - $point2['lat'])
* ($point1['lat'] - $point2['lat'])
+ cos($point1['lat'] / 57.29578)
* cos($point2['lat'] / 57.29578)
* ($point1['long'] - $point2['long'])
* ($point1['long'] - $point2['long'])
) / 180);
return $distance;
}
확인하십시오 Haversine 공식 두 지점 사이의 큰 원 거리를 계산합니다. 더 많은 샘플을 찾을 수 있습니다 여기
Haversine 공식 :
- r = 지구 반경 (평균 반경 = 6,371km)
- Δlat = lat2- lat1
- Δlong = long2- long1
- a = sin² (Δlat/2) + cos (lat1) .cos (lat2) .sin² (Δlong/2)
- c = 2.atan2 (√a, √ (1 -a))
- D = RC
(각도는 트리그 함수로 전달하려면 라디안에 있어야합니다).
지퍼 테이블에서는 거리를 얻고 싶은 두 지점의 좌표 (LAT, Long)를 가져와야합니다.
그런 다음 SQL에서 오른쪽 거리를 계산하거나 PHP로 계산할 수 있습니다. 두 방법 모두이 게시물에 요약되어 있습니다.
http://dev.strategystar.net/2011/10/mysql-php-get-distance-betwo-coordinates-inmiles-kilometers/
이 예제의 계산은이 스레드에서 이미 논의 된 공식을 기반으로합니다. 마일과 킬로미터 모두에서 지구의 반경을 제공하므로 두 단위에서 두 지점 사이의 거리를 얻을 수 있습니다.
계산 방법에는 지구의 반경 만 포함되지 않기 때문에 위의 링크는 훌륭합니다!