BatonnSoft Development

Geographic Unit

Под декартовыми координатами здесь подразумеваются координаты точки карты в системе координат экрана в метрах
Для преобразований используется азимутальная проекция. Такая проекция получаются путем переноса по определенному закону земной поверхности на плоскость, касательную к земному шару. Касательной точкой карты является центральная точка. Ее географические координаты определяются пользователем. Также пользователь может выбрать вид проекции: гномоническую, стереографическую или ортографическую (см. рисунок ниже).
Выбор именно азимутальной проекции в Radar Training System связан с тем, что, как нам кажется, она более всего подходит для совместного использования с полярной системой координат "Азимут-дальность".
Виды азимутальной проекции

Математическое обеспечение проекции карты разработано в соответствии с руководством Snyder, John P. Map Projections -- A Working Manual / John P. Snyder. - Washington : United States Government Printing Office, 1987. При этом Земля принимается за шар с радиусом 6371,2 км. Точность определения координат вполне приемлема для многих практических задач.
Модуль представляет собой DLL-библиотеку geosys.dll.
Данная библиотека может быть свободно использована в любых проектах с условием указания авторства BatonnSoft.

Ниже приведены примеры вызова функций библиотеки.

C#:


//прямые формулы проекции возвращают декартовы координаты точки карты в системе координат экрана в метрах
//double Fp, double Lp, - широта и долгота точки в градусах, double Fn, double Ln - широта и долгота центральной точки,
//int ptyp - тип проекции карты (Azimutal Orthographic = 1, Azimutal Stereographic = 2, Azimutal Gnomonic = 3), int xnul, int ynul - координаты центральной точки в метрах в системе координат экрана

[DllImport("geosys.dll")]
public static extern int ForwardProjectionX(double Fp, double Lp, double Fn, double Ln, int ptyp, int xnul, int ynul);
[DllImport("geosys.dll")]
public static extern int ForwardProjectionY(double Fp, double Lp, double Fn, double Ln, int ptyp, int xnul, int ynul);

//обратные формулы проекции возвращают широту и долготу точки карты
//int valueX, int valueY - декартовы координаты точки карты в системе координат экрана в метрах,
//double nullF, double nullL - широта и долгота центральной точки,
//int ptyp - тип проекции карты (Azimutal Orthographic = 1, Azimutal Stereographic = 2, Azimutal Gnomonic = 3), int xnul, int ynul - координаты центральной точки в метрах в системе координат экрана

[DllImport("geosys.dll")]
public static extern double InvertProjectionLat(int valueX, int valueY, double nullF, double nullL, int ptyp, int xnul, int ynul);
[DllImport("geosys.dll")]
public static extern double InvertProjectionLong(int valueX, int valueY, double nullF, double nullL, int ptyp, int xnul, int ynul);

Delphi:


type//тип GPS координаты (широта и долгота в Double-формате)
TGPSCoordinate = record
F: Double;
L: Double;
end;

type//типы проекций глобуса на карту
{$MinEnumSize 1}
TProjectionType =
(ptAzOrt, //Azimutal Orthographic
ptAzSte,  //Azimutal Stereographic
ptAzGnm); //Azimutal Gnomonic

type//тип декартовы координаты (координаты карты в метрах в системе TCanvas)
TDekartCoordinate = record
x: Integer;
y: Integer;
end;

//прямая формула проекции
//value координаты точки, null, x, y координаты центральной точки
//плоскостные координаты в метрах в системе TCanvas

function ForwardProjection(value, null: TGPSCoordinate; typ: TProjectionType; x, y: Integer): TDekartCoordinate;
stdcall; external 'geosys.dll';
//обратная формула проекции
//value координаты точки, null, x, y координаты центральной точки
//плоскостные координаты в метрах в системе TCanvas

function InvertProjection(value: TDekartCoordinate; null: TGPSCoordinate; typ: TProjectionType; x, y: Integer): TGPSCoordinate;
stdcall; external 'geosys.dll';


  Download geosys.dll / Скачать geosys.dll