2011-07-09 24 views
0

私は現在のユーザーの位置と比較して、リストから最も近い緯度/経度の位置を見つけるツールを開発しています。リストはかなり長くなり、スマートフォンで実行されるので、計算をできるだけ簡単かつ迅速にしたいと考えています。私が読んだスレッドから、2つの緯度/経度の位置の間のかなり正確な距離を計算するのはちょっと複雑で、スピードが心配です。私の質問は、私は次のような何かを使って、最も近いリストの位置について合理的な結果を得てそれを使うことができますか?緯度/経度の距離の質問

$distance = sqrt((($firstLongitude-$secondLongitude)*($firstLongitude-$secondLongitude))+(($firstlLatitude-$secondLatitude)*($firstLatitude-$secondLatitude))); 

私はこの例がPHPであることを知っていますが、ロジックは明らかでなければなりません。だから私の質問は、上記のロジックを使用して、緯度/経度のリストからユーザーに最も近い場所を判断して、正しい結果を得るか、または私が見逃す可能性のある問題があるかどうかです。

このアプリは、米国内の場所でのみ動作します(違いがあれば)。

注:私は、これをさらに簡略化し、sqrtの部分を削除できるかどうかは疑問に思っていました。

答えて

1

いいえ、計算結果に正しい結果が表示されません。結果は、これらの緯度/経度が通常の点であると仮定しますが、実際には緯度/経度です。だから計算でもそれを考慮する必要があります。

次の式を使用します。演算式は、いくつかのネットワークまたはUIアクティビティを比較するように

$1 = lat1 
$2 = long1 
$3 = lat2 
$4 = long2 

case when 
($1 = $3 and $2 = $4) then 0 
else 1609.344 * 60 * 1.1515 * (180/pi()) * acos(sin($1 * pi()/180) * sin($3 * pi()/180) + cos($1 * pi()/180) * cos($3 * pi()/180) * cos(($2 - $4) * pi()/180)) 
4

その重くない以下の点が他の各 の万キロ内にある場合、地球は球状であると仮定される場合に正確です。 の距離を比較したい場合はd2を使用してください。距離はkm単位のおおよその距離です。あなたは楕円体としての地球を治療するための必要以上の精度については

deg = pi/180; 
phi1 = lat1 * deg; 
phi2 = lat2 * deg; 
lam12 = (lon2 - lon1) * deg; 

d2 = (cos(phi1) * sin(phi2) - sin(phi1) * cos(phi2) * cos(lam12))^2 
+ (cos(phi2) * sin(lam12))^2; 

a = 6371.009; // kilometers 
distance = a * asin(sqrt(d2)); 

。オンライン測地線電卓( )と (http://geographiclib.sf.net/cgi-bin/Geod)と書面: http://arxiv.org/abs/1102.1215を参照してください。

関連する問題