1

私は次のようにコードを開始しました:

    public static void main(String[] args) {

//Intro 
    System.out.print("This program calculates the distance between two cities,     given their respective latitude and longitude points.");
    System.out.println();

//Get values for Latitude and Longitude
Scanner console = new Scanner(System.in);
    double lat1 = getCoordinates(" latitude 1: ", console); // Input lat1
    double long1 = getCoordinates(" longitude 1: ", console); // Input long1
    double lat2 = getCoordinates(" latitude 2: ", console); // Input lat2
    double long2 = getCoordinates(" longitude 2: ", console); // Input long2

public static double getCoordinates(String message, Scanner scan)
    {   
    System.out.print("Please enter" + message);
    int degrees = scan.nextInt();
    int minutes = scan.nextInt();
    return Math.toRadians(degrees + (minutes / 60.0));
    }

//Calculate Distance
public static double finalAnswer(double lat1, double long1, double lat2, double long2) {
double radiusOfEarth = 6372.795; //radius of Earth in km
double distance = Math.acos(Math.sin(lat1)*Math.sin(lat2) + 
                  Math.cos(lat1)*Math.cos(lat2) *
                  Math.cos(long2-long1)) * radiusOfEarth;

return distance;
System.out.print("The distance between the two cities is approximately " + distance + "km");

}
}

緯度と経度のポイントごとに度と分 (度、分) を入力できるようにする必要があります。ただし、コードの最後の行で「距離」を出力しようとすると、コンパイル エラーが発生します。また、Eclipse は、lat1、long1、lat2、および long2 が使用されていないことを教えてくれます (「緯度と経度の値を取得する」セクション)。誰かが距離を印刷するのを手伝ってくれますか? ありがとうございました。

4

3 に答える 3

3

あなたのコードで:

..
return distance;
System.out.print("The distance between the two cities is approximately " 
    + distance + "km");
..

これを次のように変更します。

..
System.out.print("The distance between the two cities is approximately " 
    + distance + "km");
return distance;
..

これは、距離を計算するために Javascript で実装された Haversine 式です。(Java に変換するのは簡単なはずです。)

「大圏」距離を計算するための式:

座標 {lat1,lon1} と {lat2,lon2} の 2 点間の大圏距離 d は、次の式で与えられます。

d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))

短い距離の丸め誤差の影響を受けにくい、数学的に同等の式は次のとおりです。

d=2*asin(sqrt((sin((lat1-lat2)/2))^2 + cos(lat1) cos(lat2) (sin((lon1-lon2)/2))^2))

于 2012-11-01T06:18:10.690 に答える
0
于 2012-11-01T06:27:02.640 に答える