2016-07-13 14 views
1

非常に短い距離の2つのGPS座標の間の距離を計算しようとしています。私はいくつかの方法を見つけましたが、それらはすべて数学のクラスのメソッドを必要とします。私の目的は、次のようなアルゴリズムを実装することです:cn1の数学クラスの機能

 public static double haversine(
     double lat1, double lng1, double lat2, double lng2) { 
    int r = 6371; // average radius of the earth in km 
    double dLat = Math.toRadians(lat2 - lat1); 
    double dLon = Math.toRadians(lng2 - lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) 
     * Math.sin(dLon/2) * Math.sin(dLon/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double d = r * c; 
    return d; 
} 

度とラジアンの間の変換方法は分かっています。 cn1でこれを計算する方法はありますか、またはsin cosやtan関数などのMathUtilよりも多くの数学関数を使用する方法があります。

答えて

1

まさにそれをやっていることMapComponentの静的ユーティリティメソッドがあります:

public static long distance(double latitude1, double longitude1, double latitude2, double longitude2) { 
    double latitudeSin = Math.sin(Math.toRadians(latitude2 - latitude1)/2); 
    double longitudeSin = Math.sin(Math.toRadians(longitude2 - longitude1)/2); 
    double a = latitudeSin * latitudeSin 
      + Math.cos(Math.toRadians(latitude1)) * Math.cos(Math.toRadians(latitude2)) * longitudeSin * longitudeSin; 
    double c = 2 * MathUtil.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    return (long) (6378137 * c); 
} 
+0

こんにちはチェンはお返事ありがとうございました。私はcn1 APIドキュメントでそのメソッドを見ましたが、メソッドをタイプしたときにNetbeansのメソッドヒントには表示されませんでしたので、何か不足していると思いました。しかし、それは素晴らしい仕事です!また、そのメソッドが数学クラスのメソッドを利用できるのはどういうことでしょうか?私が理解する限り、Mathクラスは、MathUtilほど移植性が高くないため、Mathクラスを使用できませんでした。 – roblin

+1

はい。 com.codename1.utilパッケージに含まれていることに注目してください。 –

関連する問題