2017-11-30 12 views
1

GPS座標に正確な距離を追加したいと考えています。 私は経度と緯度があり、私は距離を追加したい、30メートルと言う。正確な距離をGPS座標に追加する

私は以下の式を見つけましたが、私が試してみると、結果の長さと緯度が最初の座標から37m離れているため正確ではないようです。

public static Coordinates addDistanceToCoordinates(String lat, String lon, double distance) { 
    Double latitude = Double.valueOf(lat); 
    Double longitude = Double.valueOf(lon); 

    double lat0 = cos(Math.PI/180.0 * latitude); 

    double x = longitude + (180/Math.PI)*(distance/6378137)/cos(lat0); 
    double y = latitude + (180/Math.PI)*(distance/6378137); 

    return Coordinates.builder().lon(x).lat(y).build(); 
} 
+0

あなたは "距離を追加する" とはどういう意味ですかでしょうか?あなたはどんな方向にも30mを追加し、異なる座標を得ることができます。あなたはもっと具体的になりますか? – Zingerella

答えて

1

あなたは中央(x,y)を持っていて、x axis 30によってメートルにおよびに移動した場合y axis別の30メートルあなたの中心からの距離 30.

それはMath.sqrt(Math.pow(x, 2) + Math.pow(y, 2));になります。

特に、無限の中心から30メートル離れた点(または最初の座標)があります。

の方向を1つだけの方向に移動する場合は、どちらの軸にも30メートルを追加/減算するだけで済みます。

すでに行ったように:

double x = longitude + (180/Math.PI)*(distance/6378137)/cos(lat0); 

または

double y = latitude + (180/Math.PI)*(distance/6378137); 

ではなく、両方を...


あなたはまだあなたの計算で角度を使用して、オフに優れている、これは両方の軸を動かすと便利になります。x axisから、たとえば、あなたがに向かっている方向50°を知ることによって

double a = Math.toRadians(50); // degrees 

double x = longitude + (180/Math.PI) * (30/6378137)/cos(lat0) * Math.cos(a); 
double y = latitude + (180/Math.PI) * (30/6378137) * Math.sin(a); 

あなたはx axisに移動したい場合は、あなたの質問に戻って来るとによってy axis同じ距離とし、中心から30メートル離れたところで終了すると、角度はdouble a = Math.toRadians(45);(北東に向かう場合) *

実際には、(30/6378137) * Math.cos(a)(30/6378137) * Math.sin(a)の両方を取得すると、x1 = y1 = 3.325924707417923e-06という結果になります。あなたはその後、ピタゴラス

double finalDistance = Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2)) * 6378137; 

を適用した場合

あなたはfinalDistanceがあなたの最初の座標から30 metersであることがわかります。


* 正しい計算はMath.toRadians(45 * (2 * n - 1)); | where n = [1, 2, 3, 4]

+1

非常に精巧な答えをありがとう。私は働くだけではありませんが、今でもそれを得ます:) #gisnoob – Homewrecker

1

コードは北東42.4メートルで、その結果、30メートル北と30メートル東に追加します。

計算では、楕円の代わりに球として地球を仮定していますが、それはほとんどOKですが、最大の差を作ることができます。 0.2%。それは何らかの平均値の代わりに最大の地球直径(赤道 - 赤道)を使用します。その結果、ほとんどの場合出発点に近すぎるポイントになりますが、アジャン、タートは0.2%の誤差を与える可能性があります。

計算では、緯度/経度グリッドが矩形であると仮定しています。距離が短く、北極または南極から離れる限りOKです。

このように、報告している20パーセントのエラーについては説明していません。問題はあなたが私たちに示したコードの外でなければなりません。

最も疑わしい残りの側面は文字列変換です。緯度/経度の値が1メートルの解像度を得るには、小数点以下5桁以上が必要です。

それとも37メートルについてあなたに話したツールが正しいか、データを何らかの形で互換性がないではありません...

関連する問題