緯度と経度に基づく距離計算の紹介
緯度と経度の座標を使用して、地球表面上の 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 サイトの他の関連記事を参照してください。