Как рассчитать координаты северо-востока по радиусу и центру на карте - PullRequest
0 голосов
/ 18 марта 2019

У меня есть эта формула:

var bounds = map.getBounds();

var center = bounds.getCenter();
var ne = bounds.getNorthEast();

// r = radius of the earth in statute miles
var r = 3963.0;  

// Convert lat or lng from decimal degrees into radians (divide by 57.2958)
var lat1 = center.lat() / 57.2958; 
var lon1 = center.lng() / 57.2958;
var lat2 = ne.lat() / 57.2958;
var lon2 = ne.lng() / 57.2958;

// distance = circle radius from center to Northeast corner of bounds
var dis = r * Math.acos(Math.sin(lat1) * Math.sin(lat2) + 
  Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1));

Он рассчитывает радиус по NE и центру.Мне нужно: Формула для расчета координат NE по заданному радиусу и центру на карте, написанной с помощью js.

1 Ответ

1 голос
/ 20 марта 2019

Хорошо, сначала, я думаю, это поможет понять, откуда взялась используемая формула. И еще до этого обратите внимание, что я буду использовать стандартные математические координаты. Это отличается от географического long / lat, но должно быть легко преобразовано

Следовательно, точка на сфере равна (x,y,z)= r*(cos p sin t, sin p sin t, cos t). Таким образом, p - это угол от x до y, а t - это угол оси z.

Если у вас есть две точки (p, t) и (q, u), мы можем повернуть первую точку до p = 0, то есть по оси x. Тогда точки имеют координаты (0,t) и (q-p,u). Теперь мы поворачиваем точки вокруг y так, что первая точка становится северным полюсом.

[ cos t, 0, -sin t]   [x]     [ cos t, 0, -sin t]   [ cos(q-p) sin(u)]
[    0   1,   0   ] . [y]  =  [    0   1,   0   ] . [ sin(q-p) sin(u)] 
[ sin t, 0,  cos t]   [z]     [ sin t, 0,  cos t]   [       cos(u)    ]

новый z чем

z_new = sin(t) cos(q-p) sin(u) + cos(t)cos(u)

Естественно, длина дуги отсюда до северного полюса составляет всего

alpha = arcsin( sin(t) cos(q-p) sin(u) + cos(t)cos(u) )

и для истинного расстояния мы должны умножиться на радиус r сферы.

Теперь другой путь. у нас есть точка (p,t), и мы хотим получить (q,u), учитывая, что ее направление составляет угол beta к северу и на расстоянии d. На первом этапе мы установили точку (p,t) как северный полюс. Это делает вторую точку (Pi + beta, d/r) (углы примечания математически положительны, если ccw). Эту систему необходимо повернуть так, чтобы северный полюс перешел к заданному значению (p,t). Это сделано

[  cos t, sin t,  0]   [ cos p, 0,  sin p]   [x]   
[ -sin p, cos t,  0] . [    0   1,   0   ] . [y]  
[   0   ,  0   ,  1]   [ -sin p, 0, cos p]   [z]   

настройка (Pi + beta, d/r) = (gamma, theta) получаем

z_new = -sin(p)cos(gamma)sin(theta)+cos(p)cos(theta)

следовательно:

u = arccos( z_new )

Наконец:

x_new = cos(t) ( cos(p)cos(gamma)sin(theta) + sin(p)cos(theta) ) + sin(theta)sin(gamma)sin(theta)

Как x_new = cos(q)sin(u) и мы знаем u

q = arccos( xnew / sin(u) ) = arccos( xnew / sqrt( 1 - z_new ) )

Надеюсь, я все понял правильно, и помню, что это в типичных математических полярных координатах, и его нужно перевести на использование sin / cos и определение угла в географии .

...