web-dev-qa-db-ja.com

古い経度からの新しい経度、緯度の計算+ nメートル

座標とメートル単位の距離に基づいて2つの新しい経度と2つの新しい緯度を作成し、特定のポイントの周りにニースの境界ボックスを作成します。これは都市の一部用で、最大±1500メートルです。したがって、地球の曲率を考慮する必要はないと思います。

ので、私は持っています 50.0452345(x)および4.3242234(y)そしてx + 500メートル、x-500メートル、y-500メートル、y + 500メートルを知りたい

多くのアルゴリズムを見つけましたが、ほとんどすべてがポイント間の距離を処理しているようです。

経度ごとのキロメートル数はおよそ

(2*pi/360) * r_earth * cos(theta)

ここで、thetaは緯度で、度はr_earthは約6378 kmです。

緯度ごとのキロメートル数は、すべての場所でほぼ同じで、約

(2*pi/360) * r_earth = 111 km / degree 

だからあなたができる:

new_latitude  = latitude  + (dy / r_earth) * (180 / pi);
new_longitude = longitude + (dx / r_earth) * (180 / pi) / cos(latitude * pi/180);

dxdyが地球の半径と比較して小さく、極に近づかない限り。

103
nibot

受け入れられた答えは完全に正しく、機能します。私はいくつかの調整を行い、これに変わりました:

double meters = 50;

// number of km per degree = ~111km (111.32 in google maps, but range varies
   between 110.567km at the equator and 111.699km at the poles)
// 1km in degree = 1 / 111.32km = 0.0089
// 1m in degree = 0.0089 / 1000 = 0.0000089
double coef = meters * 0.0000089;

double new_lat = my_lat + coef;

// pi / 180 = 0.018
double new_long = my_long + coef / Math.cos(my_lat * 0.018);

これも役立つことを願っています。

20
Numan Karaaslan

緯度の場合:

var earth = 6378.137,  //radius of the earth in kilometer
    pi = Math.PI,
    m = (1 / ((2 * pi / 360) * earth)) / 1000;  //1 meter in degree

var new_latitude = latitude + (your_meters * m);

経度の場合:

var earth = 6378.137,  //radius of the earth in kilometer
    pi = Math.PI,
    cos = Math.cos,
    m = (1 / ((2 * pi / 360) * earth)) / 1000;  //1 meter in degree

var new_longitude = longitude + (your_meters * m) / cos(latitude * (pi / 180));

変数your_metersには、正の値または負の値を含めることができます。

13
ssten

チェックアウトしました: 特定の緯度/経度のx km北にある緯度/経度を見つける方法

これらの計算はせいぜい迷惑です、私はそれらの多くをやった。 Haversine式はあなたの友達になります。

参照: http://www.movable-type.co.uk/scripts/latlong.html

6
Ryan Ternier