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 - тип азимутальной проекции (orthographic=1, stereographic=2, 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 X, int Y - декартовы координаты точки в системе координат экрана в метрах
//double nullF, double nullL - широта и долгота центральной точки
//int ptyp - тип азимутальной проекции (orthographic=1, stereographic=2, gnomonic=3)
//int xnul, int ynul - координаты центра карты в метрах в системе координат экрана
[DllImport("geosys.dll")]
public static extern double InvertProjectionLat(int X, int Y, double nullF, double nullL, int ptyp, int xnul, int ynul);
[DllImport("geosys.dll")]
public static extern double InvertProjectionLong(int X, int Y, double nullF, double nullL, int ptyp, int xnul, int ynul);
Download source code for using geosys.dll in a C# project
Скачать исходный код использования geosys.dll в проекте C#
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 source code for using geosys.dll in a Delphi7 project
Скачать исходный код использования geosys.dll в проекте Delphi7
Download geosys.dll / Скачать geosys.dll