2016-08-11 11 views
-3

Iは、(600〜1000のような)座標を持つ多くのオブジェクトを持っている例えば:X及びY - アルゴリズム

coordX - 16.88799654 
coordY - 53.452535636 

coordX - 16.78799652 
coordY - 53.1436346423 

coordX - 17.06546333 
coordY - 52.96543332 

..... 

ユーザは、例えば自分の座標X及びYを追加します。

userX = 12.4669945 
userY = 52.234534536 

誰かが、すべてのオブジェクトのリストのための最も近い直線オブジェクトを得るために、アルゴリズムを書く方法を考えている?

+0

あなたは何をしようとしていますか? – learner0000

+0

私はバス停の地図を持っています、ユーザーは彼の座標を与えて、アルゴリズムは彼に最も近いバストストップを見つける。 –

+1

原点からすべての点までの距離を計算し、最も近い点を選択します。 *ポイント間の距離の計算方法は教えてください。 – Andreas

答えて

0

私は座標が測地線(緯度/経度)であると仮定しているため、単純なユークリッド距離は正しくありません。以下はC#で、私はあなたがJavaに翻訳できることを願っています。必要に応じて、単一の機能に簡単化することもできます。

private const double EARTH_RADIUS_MI = 3959; //In statute miles 

    public static float Radians(double degrees) 
    { 
     return (float)(degrees * (Math.PI/180)); 
    } 

    public static double CalculateDistance(Coordinates fromPoint, Coordinates toPoint) 
    { 
     double dLat = Radians(toPoint.Latitude - fromPoint.Latitude); 
     double dLon = Radians(toPoint.Longitude - fromPoint.Longitude); 

     double a = Math.Sin(dLat/2) * Math.Sin(dLat/2) + 
      Math.Cos(Radians(fromPoint.Latitude)) * Math.Cos(Radians(toPoint.Latitude)) * 
      Math.Sin(dLon/2) * Math.Sin(dLon/2); 

     double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); 

     return EARTH_RADIUS_MI * c; 
    }