с помощью значения Широты и Долготы (Точка A), я пытаюсь вычислить другую Точку B, перенос на расстоянии в X метры 0 радианов от точки A. Тогда отобразите точку B значения Долготы и Широта.
Пример (Псевдо код):
PointA_Lat = x.xxxx;
PointA_Lng = x.xxxx;
Distance = 3; //Meters
bearing = 0; //radians
new_PointB = PointA-Distance;
Я смог вычислить расстояние между двумя Точками, но что я хочу найти, вторая точка, зная расстояние и перенос.
Предпочтительно в PHP или JavaScript.
Спасибо
Кажется, что вы измеряете расстояние (R) в метрах, а подшипник (тета) против часовой стрелки из-за наступления восток. И для ваших целей (undereds of meters), плоская геометрия должна быть достаточно точной. В этом случае
dx = R*cos(theta) ; theta measured counterclockwise from due east
dy = R*sin(theta) ; dx, dy same units as R
, если тета измеряется по часовой стрелке из-за севера (например, компас подшипники), Расчет для DX и DY немного отличается:
dx = R*sin(theta) ; theta measured clockwise from due north
dy = R*cos(theta) ; dx, dy same units as R
в любом случае изменение градусов долготы и широта:
delta_longitude = dx/(111320*cos(latitude)) ; dx, dy in meters
delta_latitude = dy/110540 ; result in degrees long/lat
разница между константами 110540 и 111320 связана с облучкой Земли. (Полярные и экваториальные окружности разные).
Вот сработанный пример, использующий параметры из более позднего вопроса вашего:
, дал начало местоположения на долготе -87,62788 градуса, широта 41,88592 градусов, Найдите координаты точки 500 метров к северо-западу от места начала.
Если мы измеряем углы против часовой стрелки из постороннего востока, «Northwest» соответствует к Theta = 135 градусов. R 500 метров.
dx = R*cos(theta)
= 500 * cos(135 deg)
= -353.55 meters
dy = R*sin(theta)
= 500 * sin(135 deg)
= +353.55 meters
delta_longitude = dx/(111320*cos(latitude))
= -353.55/(111320*cos(41.88592 deg))
= -.004266 deg (approx -15.36 arcsec)
delta_latitude = dy/110540
= 353.55/110540
= .003198 deg (approx 11.51 arcsec)
Final longitude = start_longitude + delta_longitude
= -87.62788 - .004266
= -87.632146
Final latitude = start_latitude + delta_latitude
= 41.88592 + .003198
= 41.889118
Было бы полезно, если бы вы знали, что 3600 секунд дуги - это 1 градус (лат. или длина.), что в морской миле 1852 метра, а в морской миле - 1 секунда дуги. Конечно, вы зависите от расстояний, которые являются относительно короткими, в противном случае вам пришлось бы использовать сферическую тригонометрию.
dx = sin(bearing)
dy = cos(пеленг)
x = центр.x + дистdx;
y = center.y + distdy;