2012-03-20 15 views
1

PHPには数を比較する関数がありますか?これはお互いに彼らはおそらく非常に近いPHPは2つの数値を一緒に比較します

place 1 

lat: 34.095161 
lng: -117.720638 

compare with 

lat: 34.0948841 
lng: -117.7206854 

place 2 

lat: 34.094572563643 
lng: -117.72184828904 

compare with 

lat: 34.094112 
lng: -117.7250746 

:私は

例を、彼らはsimilar_text()のようなテキスト比較を持って知っている。しかし、私は緯度/経度の値を比較したいと言うと、彼らは非常によく似ているが、非常にわずかな違い私はある範囲を得ることができるようにしたいですか?私が使用できるいくつかのPHP関数はありますか?

おかげ

+1

あなたが望む正確さの程度に 'round()'してみませんか? – Interrobang

+1

'similar_text'は2つの文字列の間の「距離」の種類を計算します。数字については、同等のものは['abs($ lat1 - $ lat2)'](http://www.php.net/manual/en/function.abs.php)です。 – ruakh

+0

@Interrobang丸め誤差とlngが望ましくない結果になるので、数値を丸めるつもりはありません – hellomello

答えて

2

私は機能に組み込まれてないと思います。おそらくユークリッド距離を使って類似度を計算するのは簡単な方法です。

NB
$diff = sqrt((($lat1 - $lat2) * ($lat1 - $lat2)) + (($lng1 - $lng2) * ($lng1 - $lng2))); 
$epsilon = 0.0001; 
if ($diff < $espilon) { 
    echo 'we consider them equal'; 
} else { 
    echo 'they are different'; 
} 

:$ diffのがここでの違いの純粋な定量化である、あなたはその距離ユークリッドアプローチstricto sensuの通過を計算することができ、2Dの点を形成するものとして緯度/経度値を考慮することはできません(here whyを参照)

+0

'pow'の使用は、通常、2つの値を掛けるよりも遅いです。最初の行を 'sqrt($ lat1 - $ lat2)*($ lat1 - $ lat2)+(($ lng1 - $ lng2)*($ lng1 - $ lng2)))'に変更することをお勧めします。結果は読みにくくなりますが、通常はより高速です。 =) –

+0

私はこれが私のコードについてどうやって行くのか考えていると信じています...ありがとう – hellomello

+0

@ElliotBonnevilleあなたは私の答えを編集できました;) – AsTeR

2

はまた取りますHaversine formulaをご覧ください。通常、球上の2点間の距離がどれだけ大きいかを見るために使用されます。

関連する問題