Program Tip

이전 + n 미터에서 새로운 경도, 위도 계산

programtip 2020. 10. 26. 08:32
반응형

이전 + 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약 6378km입니다.

위 도당 킬로미터 수는 모든 위치에서 거의 동일합니다.

(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);

만큼 dx그리고 dy땅의 반경에 비해 작고 너무 가까이 극으로하지 않습니다.


받아 들여지는 대답은 완벽하게 옳고 작동합니다. 나는 약간의 조정을하고 이것으로 바뀌었다 :

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);

이것이 도움이되기를 바랍니다.


위도의 경우 :

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는 양수 또는 음수 값을 포함 할 수 있습니다.


체크 아웃 했습니까 ? 주어진 위도 / 경도에서 북쪽으로 xkm 인 위도 / 경도를 어떻게 찾 습니까?

이러한 계산은 기껏해야 성가 시며 많은 작업을 수행했습니다. haversine 공식은 당신의 친구가 될 것입니다.

일부 참조 : http://www.movable-type.co.uk/scripts/latlong.html

참고 URL : https://stackoverflow.com/questions/7477003/calculating-new-longitude-latitude-from-old-n-meters

반응형