Возвращает угол между опорным направлением, заданным географической точкой, и направлением на вторую точку.
Visual Basic:
Function GetAngle(Lat As Double, Lon As Double, Xo As Double, Yo As Double, X As Double, Y As Double, flags As Long) As Double
Lat, Lon - широта и долгота точки земной поверхности в градусах, задающей опорное направление.
Xo, Yo - координаты вершины угла в метрах.
X, Y - координаты второй точки в метрах.
flags - единицы измерения результата: 0 - радианы, 0x01 - градусы.
Угол отсчитывается в вершине Xo, Yo по часовой стрелке - от направления на точку Lat, Lon к направлению на точку X, Y. Результат лежит в диапазоне от 0 до 2π радиан (от 0 до 360 градусов).
Обратите внимание на порядок координат: X - северная координата, Y - восточная.
Метод обобщает GetAzimuth: азимут является частным случаем, когда опорным служит направление на север, то есть Lat = 90, Lon = 0.
Для одного и того же направления значения GetAngle и GetAzimuth могут незначительно расходиться. Это следствие того, что методы используют разные вспомогательные проекции: азимут вычисляется через проекцию Гаусса-Крюгера с центральным меридианом, проходящим через вершину, а GetAngle - через равноугольную проекцию Ламберта с точкой касания в вершине.
Visual Basic:
Sub CRS_GetAngle Set crs = CreateObject("ZuluLib.CRS") crs.InitByCode("EPSG:3857") 'Вершина угла - точка (0, 0). 'Опорное направление задано точкой на экваторе к востоку от вершины. 'Вторая точка смещена от вершины на 1000 м к северу. 'X - северная координата, Y - восточная, flags = 1 - результат в градусах. MsgBox crs.GetAngle(0, 1, 0, 0, 1000, 0, 1) 'вернет 270 с точностью до погрешности вычислений End SubPython:
import zulu def Macro_CRS_GetAngle(): crs = zulu.CRS() crs.InitByCode("EPSG:3857") # Вершина угла - точка (0, 0). # Опорное направление задано точкой на экваторе к востоку от вершины. # Вторая точка смещена от вершины на 1000 м к северу. # X - северная координата, Y - восточная, flags = 1 - результат в градусах. print(crs.GetAngle(0, 1, 0, 0, 1000, 0, 1)) # 269.9999999999887