Библиотека предназначена для решения геометрических задач на выгнутой поверхности сфероида или эллипсоида вращения.
С помощью библиотеки можно:
- решить прямую геодезическую задачу;
- решить обратную геодезическую задачу;
- найти точку пересечения двух ортодромий, заданных кординатами концов;
- зная координаты концов ортодромии, найти значение широты по известной долготе;
- зная координаты концов ортодромии, найти значение долготы по известной широте;
Прямой геодезической задачей называют вычисление геодезических координат - широты и долготы точки, лежащей эллипсоиде, по координатам другой точки и по известным длине и дирекционному углу направления, соединяющей эти точки.
Обратная геодезическая задача заключается в определении по геодезическим координатам двух точек на эллипсоиде длины и дирекционного угла направления между этими точками.
Ортодромия - название кратчайшего расстояния между двумя точками на поверхности Земли или другого эллипсоида вращения.
Для решения прямой геодезической задачи, неоходимо создать объект класса DirectProblemService
.
var directEllipsoid = new DirectProblemService(new Ellipsoid());
var directSpheroid = new DirectProblemService(new Spheroid());
В качестве параметра в конструктор следует передать объект реализующий интерфейс IEllipsoid
, в котором задаются полярный и экваториальный радиус, а так же коэффициент полярного сжатия.
Для решения прямой задачи вызвать метод DirectProblem
, в который передать в качестве параметров, начальную точку, азимут = направление и расстояние:
var point1 = new Point(15, 25, 53, CardinalLongitude.W, 28, 7, 38, CardinalLatitude.N);
var azimuth = 21;
var distance = 2000;
var directAnswer = directEllipsoid.DirectProblem(point1, azimuth, distance);
Ответ directAnswer
содержит вторую точку ортодромии Сoordinate
и обратный азимут ReverseAzimuth
.
Для решения обратной геодезической задачи, неоходимо создать объект класса InverseProblemService
.
var inverseEllipsoid = new InverseProblemService(new Ellipsoid());
var inverseSpheroid = new InverseProblemService(new Spheroid());
В качестве параметра в конструктор следует передать объект реализующий интерфейс IEllipsoid
, в котором задаются полярный и экваториальный радиус, а так же коэффициент полярного сжатия.
Для решения обратной задачи вызвать метод OrthodromicDistance
, в который передать в качестве параметров, две точки:
var point1 = new Point(15, 25, 53, CardinalLongitude.W, 28, 7, 38, CardinalLatitude.N);
var point2 = new Point(59, 36, 30, CardinalLongitude.W, 13, 5, 46, CardinalLatitude.N);
var inverseAnswer = inverseEllipsoid.OrthodromicDistance(point1, point2);
Ответ inverseAnswer
содержит прямой и обратный азимуты ForwardAzimuth
, ReverseAzimuth
, а также расстояние между точками Distance
.
Для вычисления точки пересечения ортодромий, неоходимо создать объект класса IntersectService
.
var intersectEllipsoid = new IntersectService(new Ellipsoid());
var intersectSpheroid = new IntersectService(new Spheroid());
В качестве параметра в конструктор следует передать объект реализующий интерфейс IEllipsoid
, в котором задаются полярный и экваториальный радиус, а так же коэффициент полярного сжатия.
Для рассчёта вызвать метод IntersectOrthodromic
, в который передать в качестве параметров, по две точки для каждой из двух ортодромий:
var point1 = new Point(22, 36, 30, CardinalLongitude.E, 13, 5, 46, CardinalLatitude.N);
var point2 = new Point(27, 25, 53, CardinalLongitude.E, 15, 7, 38, CardinalLatitude.N);
var point3 = new Point(20, 36, 30, CardinalLongitude.E, 17, 5, 46, CardinalLatitude.N);
var point4 = new Point(26, 25, 53, CardinalLongitude.E, 13, 7, 38, CardinalLatitude.N);
var intersectCoord = intersectEllipsoid.IntersectOrthodromic(point1, point2, point3, point4);
Ответом будет точка - объект класса Point
, в котором определены долгота и широта, в десятичных градуса (Longitude
,Latitude
) или в радианах (LonR
,LatR
).
Для рассчётов, неоходимо создать объект класса IntermediatePointService
.
var intermediateEllipsoid = new IntermediatePointService(new Ellipsoid());
var ntermediateSpheroid = new IntermediatePointService(new Spheroid());
В качестве параметра в конструктор следует передать объект реализующий интерфейс IEllipsoid
, в котором задаются полярный и экваториальный радиус, а так же коэффициент полярного сжатия.
Для вычисления широты вызвать метод GetLatitude
, в который передать значение долготы, для которого мы вычисляем широту, и две координаты характеризующие ортодромию.
var coord1 = new Point(10, 10);
var coord2 = new Point(30, 50);
var lat = intermediateEllipsoid.GetLatitude(20, coord1, coord2);
Для вычисления долготы вызвать метод GetLongitude
, в который передать значение широты, для которого мы вычисляем долготу, и две координаты характеризующие ортодромию.
var coord1 = new Point(10, 10);
var coord2 = new Point(30, 50);
var lat = intermediateEllipsoid.GetLongitude(20, coord1, coord2);
В обоих случая ответом будет значение типа double
.