1

Stack Overflow Google Maps - How to get the distance between two point in meter? でこのリンクを見つけました。これは、2 つの異なる緯度と経度の値が与えられた場合の km 距離の検索に関する次の解決策を示しています。

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>

var p1 = new google.maps.LatLng(45.463688, 9.18814);
var p2 = new google.maps.LatLng(46.0438317, 9.75936230000002);

alert(calcDistance(p1, p2));

//calculates distance between two points in km's
function calcDistance(p1, p2){
    return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
   }

}

これは素晴らしく機能しますが、データベースから緯度と経度の値を取得し、それぞれを一定の緯度と経度の値と比較して、データベースから取得しているユーザーが特定の範囲内にあるかどうかを判断するアプリを作成しています。設定された緯度と経度。

私はPHPでこれを行っていますが、定数の緯度と経度の値を現在の緯度と経度の値とともに上記のJavaScript関数に渡し、距離を計算してから値をPHP変数に返したいと考えています。つまり、PHP で JavaScript 関数を呼び出し、JavaScript の値を PHP 変数に返したいということです。

これは不可能であると述べている多くのフォーラムを見ていますが、そうであると言う人もいます。誰かがこれについて私を助けたり、別のアプローチを提案したりできますか? PHP 内で昔ながらの微積分を実行し、Google API プラグインを忘れる必要がありますか?

4

1 に答える 1

1

データベースに緯度と経度の値がある場合は、以下のクエリを使用できます。

SELECT a.*,
            3956 * 2 * ASIN(SQRT( POWER(SIN(($lat - lat) * pi()/180 / 2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) *
            POWER(SIN(($long - longi) * pi()/180 / 2), 2) )) as
            distance FROM table
            GROUP BY id HAVING distance <= 500 ORDER by distance ASC

$lat および $long 変数は、ユーザーの現在位置です。lat and longi は、エントリの緯度と経度です。

上記のクエリがどのように機能するかを理解するには、「PHP、MySQL、および Google マップを使用して店舗検索を作成する」も参照してください。

于 2013-02-21T06:36:38.203 に答える