2017-12-29 35 views
-1

2つの緯度と経度のセットの間の距離を計算します。任意のapiなしの2つのlat lngの間の距離を計算します

私の問題

私はテーブル内の2500+郵便番号を持っていると私は10000件の+のお店を持って、すべてのお店や郵便番号は、その緯度、LNGを持っています。

各ショップの配送距離はKMSです。

配送距離内にあるショップのすべての郵便番号をshop_delivery_zipsという表に保存します。ショップは配送距離の範囲内にあるすべてのジップで配送したくないため、注文時に地図を使用することはできません。

だから、初めてデータをshop_delivery_zipsテーブルに挿入するには、その配送距離を確認してください。

私のソリューション

まず、私は私がすべてのジッパーコードにアクセスし、お店の緯度、LNGやジップLAT、LNGとshop_delivery_zips内のデータが保存されます間の距離を計算するコードを記述することを考えました私はそれを行う場合は、私は毎回のためのGoogleのapisを呼び出す必要があり、私はすべての私たちのデータのために行う場合、私は2500 * 10000 GoogleのAPIの呼び出しをする必要がありますGoogleは、私はそれらのオプションで行くことができません。

私は2つのlat、lngの間の距離を計算する方法があることを知りたいと思います。同じ計算するためにGoogleの計算を使用することがあります。ご存知の場合は、その解決策または他の解決策を私に提案してください。

明らかでないことがあれば教えてください。

答えて

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

関連する問題