ホームページ  >  記事  >  Java  >  緯度と経度を使用して地球上の 2 点間の距離を計算するにはどうすればよいですか?

緯度と経度を使用して地球上の 2 点間の距離を計算するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 01:48:28959ブラウズ

How to Calculate Distance Between Two Points on Earth Using Latitude and Longitude?

緯度と経度に基づく距離計算の紹介

緯度と経度の座標を使用して、地球表面上の 2 点間の距離を計算することは、さまざまなアプリケーションの基本的なタスク。以下では、Java コードのスニペットを使用してこの距離を計算する複雑さを検討し、高度の差を考慮した改善された実装について詳しく説明します。

Java コードのスニペットを使用した距離の計算

Dommer が提供するコードは、簡略化された式を利用して地球の表面上の 2 点間の距離を計算します。

<code class="java">double temp = Math.cos(Math.toRadians(latA))
            * Math.cos(Math.toRadians(latB))
            * Math.cos(Math.toRadians((latB) - (latA)))
            + Math.sin(Math.toRadians(latA))
            * Math.sin(Math.toRadians(latB));
    return temp * RADIUS * Math.PI / 180;</code>

この式は地球が球形であることを想定しており、短い距離でも妥当な結果が得られます。ただし、高度の違いが考慮されていないため、かなりの距離で不正確になる可能性があります。

高度を考慮した距離計算のための Haversine 式の導入

制限に対処するためDommer が使用した公式の次は、地球の形状を表すためのより正確なモデルを組み込んだ Haversine の公式に移ります。この式は、2 点間の距離と高さの差を明示的に説明します。

<code class="java">public static double distance(double lat1, double lat2, double lon1,
        double lon2, double el1, double el2) {

    final int R = 6371; // Radius of the earth
    
    double latDistance = Math.toRadians(lat2 - lat1);
    double lonDistance = Math.toRadians(lon2 - lon1);
    double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
            + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
            * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double distance = R * c * 1000; // convert to meters

    double height = el1 - el2;

    distance = Math.pow(distance, 2) + Math.pow(height, 2);

    return Math.sqrt(distance);
}</code>

この式は距離をより正確に表現するため、正確な地理計算を必要とするアプリケーションに役立ちます。

以上が緯度と経度を使用して地球上の 2 点間の距離を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。