2017-12-29 12 views
-1

두 위도와 경도 사이의 거리를 계산하고 싶습니다.임의의 api없이 두 latlng 사이의 거리를 계산하십시오

내 문제

나는 테이블에 2500 개 우편 번호를 가지고 있고이 10000 개 상점을 가지고, 모든 상점과 우편 번호는 위도, LNG 있습니다.

모든 상점의 배송 거리는 KMS입니다.

배달 거리 내에있는 가게의 모든 우편 번호를 shop_delivery_zips 테이블에 저장하려고합니다. 상점은 배달 거리 범위에있는 모든 우편 번호에서 배달하기를 원하지 않기 때문에 주문할 때지도를 사용할 수 없습니다.

그래서 처음으로 데이터를 전송 거리를 확인하여 shop_delivery_zips 표에 삽입하고 싶습니다.

내 솔루션

첫째, 내가 모든 지퍼 코드로 이동, 위도 가게 사이에 LNG를 거리를 계산하고, 위도 LNG를 압축하여 shop_delivery_zips에 데이터를 저장할하는 코드를 작성합니다 생각 테이블,하지만 그럴 경우, 그때마다 나는 구글 API를 호출 할 때마다 나는 모든 데이터에 대해 할 다음, 나는 구글이 언젠가는 허용하지 않는 2500 * 10000 구글 API 호출을해야만한다. 그래서 나는 그 옵션으로 갈 수 없다.

그래서 두 개의 lat, lng 세트 사이의 거리를 계산할 수있는 방법이 있는지 알고 싶습니다. 계산 구글에 의해 같은 계산할 수 있습니다. 알고 계시다면 그 해결책이나 다른 해결책을 제안 해주십시오.

알려지지 않은 점이 있으면 알려주십시오.

답변

3

나는 (https://github.com/shafiqpab/distance-between-two-addresses-google-maps-api-php/blob/master/index.php에서 촬영) 필요에 따라 계산이 솔루션을 알고 :

//Calculate distance from latitude and longitude 
$theta = $longitudeFrom - $longitudeTo; 
$dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) + 
cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * 
cos(deg2rad($theta)); 
$dist = acos($dist); 
$dist = rad2deg($dist); 
$miles = $dist * 60 * 1.8515; 
$unit = strtoupper($unit); 
// for units in KM 
$kilometers = round($miles * 1.609344, PHP_ROUND_HALF_UP).' km'; 

당신이 찾고있는 무엇인가요?

1

@ tbedner는 수학적으로 올바른 해답을 가지고 있지만, 이 아닙니다.은 계산이 매우 중요하지 않으므로 목록의 모든 위치에 대해이 계산을 수행하려고합니다. 매우 간단하고 쉽게 인덱스를 활용할 수 있으며,이 지역의 더 작은 부분 집합에 복잡한 수학을다음 내부 떨어지

lat BETWEEN $min_lat AND $max_lat 
AND 
lng BETWEEN $min_lng AND $max_lng 

:

먼저 당신은 간단한 경계 상자, 예를 정의 원하는 반경 내에있는 것을 찾으려면 상자를 선택하십시오.

+0

그래서 상점의 배달 거리를 먼저 얻어야합니까?. 예를 들어 설명해 주시거나 대답을 조금 설명해 주시겠습니까? 정말 도움이 될거야. – Vikash

관련 문제