特定の座標点にメトリック距離を追加できるコードのサンプルをJavaで見つけようとしています。
たとえば、ポイント A の緯度に 2 キロメートルを加算し、ポイント B の経度に 2 キロメートルを差し引いて、ポイント A の北西にある新しい座標点 (ポイント B) を取得したいとします。
そのような関数のサンプル ソース コードはありますか?
高い精度を必要とせず、距離が短い場合、地球は半径約 R = 6370 km の球体であると想定できます。ラジアンで表した緯度の差は単に dNorth / R であり、経度の差は dEast / R / cos(lat) です。
より高い精度を得るには、地球の形状が楕円体に似ていることを考慮する必要があります。
私はそう思います、あなたは大円アルゴリズムを使ってこれを行うことができます.
半径 R の球面上の 2 つの点 P1=(lat1, lon1) と P2=(lat2, lon2) の間の最短距離 (測地線) は、大円距離です。次の式を使用して計算できます。
dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R (1)
たとえば、(40.6892°, -74.0444°) の自由の女神像 = (0.7102 rad, -1.2923 rad) と (48.8583°, 2.2945°) のエッフェル塔の間の距離 = (0.8527 rad, 0.0400 rad) — 仮定半径 6371 km の地球の形状の球面近似 — は次のとおりです。
dist = arccos(sin(0.7102) · sin(0.8527) + cos(0.7102) · cos(0.8527) · cos(-1.2923 - 0.0400)) · 6371 km
= 5837 km
探索中に見つけた別の例は::
例:
lat1: 34
lng1: 34
lat1 に 5km を追加した後、新しいポイントは new_lat1: 34+5km new_lng1: 34 のようになります (lng1 は、緯度のみを追加したものと同じままです)
したがって、問題を2つのステップに分割できます::
加算を使用して座標を計算します。
次に、ステップ1で取得した座標を減算して新しい座標を計算します