Вычислить вторую точку, зная начальную точку и расстояние

используя значение широты и долготы (точка 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.

спасибо

4 Solutions collect form web for “Вычислить вторую точку, зная начальную точку и расстояние”

Кажется, вы измеряете расстояние (R) в метрах и подшипник (тэта) против часовой стрелки от востока. И для ваших целей (глубины метров) плоская geometry должна быть достаточно точной. В таком случае,

 dx = R*cos(theta) ; theta measured counterclockwise from due east dy = R*sin(theta) ; dx, dy same units as R 

Если theta измеряется по часовой стрелке из-за севера (например, компасные подшипники), расчет для dx и dy несколько отличается:

 dx = R*sin(theta) ; theta measured clockwise from due north dy = R*cos(theta) ; dx, dy same units as R 

В любом случае изменение в gradleусах долготы и широты:

 delta_longitude = dx/(111320*cos(latitude)) ; dx, dy in meters delta_latitude = dy/110540 ; result in degrees long/lat 

Разница между константами 110540 и 111320 обусловлена ​​сплющиванием земли (полярная и экваториальная окружности различны).

Вот обработанный пример, используя параметры из более позднего вашего вопроса:

Учитывая начальное местоположение на долготе -87.62788 gradleусов, широта 41.88592 gradleусов, найдите координаты точки в 500 метрах к северо-западу от места начала.

Если мы измеряем углы против часовой стрелки из-за востока, «северо-запад» соответствует тете = 135 gradleусов. 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 gradleус (лат. Или длинный.), Что есть 1852 метра в морской миле, а морская миля – 1 секунда дуги. Конечно, вы зависите от относительно коротких расстояний, иначе вам придется использовать сферическую тригонометрию.

Вот обновленная версия с помощью Swift:

 let location = CLLocation(latitude: 41.88592 as CLLocationDegrees, longitude: -87.62788 as CLLocationDegrees) let distanceInMeter : Int = 500 let directionInDegrees : Int = 135 let lat = location.coordinate.latitude let long = location.coordinate.longitude let radDirection : CGFloat = Double(directionInDegrees).degreesToRadians let dx = Double(distanceInMeter) * cos(Double(radDirection)) let dy = Double(distanceInMeter) * sin(Double(radDirection)) let radLat : CGFloat = Double(lat).degreesToRadians let deltaLongitude = dx/(111320 * Double(cos(radLat))) let deltaLatitude = dy/110540 let endLat = lat + deltaLatitude let endLong = long + deltaLongitude 

Используя это расширение:

 extension Double { var degreesToRadians : CGFloat { return CGFloat(self) * CGFloat(M_PI) / 180.0 } } 

dx = sin (подшипник)
dy = cos (подшипник)
x = center.x + dist dx;
y = center.y + dist dy;

  • Как получить часовой пояс из местоположения с использованием координат широты и долготы?
  • 3D-координаты на сфере с широтой и долготой
  • Каков самый простой и надежный способ получить текущее местоположение пользователя на Android?
  • Найти расстояние между двумя точками, используя широту и долготу в mysql
  • Давайте будем гением компьютера.