Реализация вычислений на JavaScript при решении геодезических задач на эллипсоиде

NovaInfo 60, с.114-120, скачать PDF
Опубликовано
Раздел: Технические науки
Просмотров за месяц: 4

Аннотация

В статье представлены возможности и алгоритм реализации вычислений на языке JavaScript с использованием веб-браузера при решении геодезических задач на эллипсоиде.

Ключевые слова

JAVASCRIPT, ВЕБ-БРАУЗЕР, ГЕОДЕЗИЧЕСКИЕ ЗАДАЧИ, ЭЛЛИПСОИД

Текст научной работы

Необходимость вычисления направлений и расстояний на поверхности эллипсоида при решении прямой и обратной геодезических задач возникает в процессе реализации публичных картографических online-сервисов (например, API Яндекс.Карты), при организации образовательной деятельности (например, в рамках выполнения лабораторных или расчетно-графических работ по дисциплине "Геодезия"), при строительстве ряда инженерных сооружений [4, 5], в процессе осуществления кадастровой и иной деятельности при управлении территориями [5, 6] и в других случаях. Подобные задачи возможно решать, используя высокоточный алгоритм расчета, разработанный польским ученым Тадеушем Винсенти (Thaddeus Vincenty) [2]. В нашем случае речь пойдет о применении указанного алгоритма при выполнении вычислений в процессе образовательной деятельности.

В последние годы университеты страны обратили внимание на возможности использования компьютерных телекоммуникационных технологий для организации дистанционного обучения, которое в ряде случаев может реализовано с использованием интернет-сайтов преподавателей, кафедр университета т. д. Преподаватели, ведущие технические дисциплины, могут использовать возможности веб-серверов для реализации на своем сайте различных алгоритмов выполнения вычислений в рамках лабораторных или расчетно-графических работ. Это могут быть различные калькуляторы, расчетные формы, которые позволяют студентам быстро и без ошибок выполнять необходимые вычисления в рамках той или иной учебной работы.

При выполнении лабораторных или расчетно-графических работ по дисциплине "Геодезия" возникает необходимость решения прямой и обратной геодезических задач на поверхности эллипсоида. Решение таких задач возможно реализовать на веб-странице (в HTML-документе), например, в виде пары форм с использованием следующих функций на языке JavaScript [1], который находит широкое применение в браузерах как язык сценариев для придания интерактивности веб-страницам и является интерпретируемым языком программирования с объектно-ориентированными возможностями.

1. Функция решения обратной геодезической задачи (рисунок 1).

Вызов функции осуществляется следующей строкой:

function vo (широта_1, долгота_1, широта_2, долгота_2).

На входе имеются географические координаты (широта, долгота) для точек 1 и 2 в радианах, на выходе – расстояние между точками по поверхности эллипсоида и два азимута направления в точках 1 и 2 в радианах.

Форма решения обратной геодезической задачи
Рисунок 1. Форма решения обратной геодезической задачи

Исходный код функции решения обратной геодезической задачи:

function vo (\u03c61, \u03bb1, \u03c62, \u03bb2) {
var L = \u03bb2 – \u03bb1,
    tanU1 = (1 – f) * Math.tan(\u03c61),
    cosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1),
    sinU1 = tanU1 * cosU1,
    tanU2 = (1 – f) * Math.tan(\u03c62),
    cosU2 = 1 / Math.sqrt(1 + tanU2 * tanU2),
    sinU2 = tanU2 * cosU2,
    \u03bb = L,
    \u03bb\u02b9, iterationLimit = 100;
do {
    var sin\u03bb = Math.sin(\u03bb),
        cos\u03bb = Math.cos(\u03bb),
        sinSq\u03c3 = cosU2 * sin\u03bb * cosU2 * sin\u03bb + (cosU1 * sinU2 – sinU1 * cosU2 * cos\u03bb) * (cosU1 * sinU2 – sinU1 * cosU2 * cos\u03bb),
        sin\u03c3 = Math.sqrt(sinSq\u03c3),
        cos\u03c3 = sinU1 * sinU2 + cosU1 * cosU2 * cos\u03bb,
        \u03c3 = Math.atan2(sin\u03c3, cos\u03c3),
        sin\u03b1 = cosU1 * cosU2 * sin\u03bb / sin\u03c3,
        cosSq\u03b1 = 1 – sin\u03b1 * sin\u03b1,
        cos2\u03c3M = cos\u03c3 – 2 * sinU1 * sinU2 / cosSq\u03b1;
    isNaN(cos2\u03c3M) && (cos2\u03c3M = 0);
    var C = f / 16 * cosSq\u03b1 * (4 + f * (4 – 3 * cosSq\u03b1));\
    u03bb\u02b9 = \u03bb;\
    u03bb = L + (1 – C) * f * sin\u03b1 * (\u03c3 + C * sin\u03c3 * (cos2\u03c3M + C * cos\u03c3 * (-1 + 2 * cos2\u03c3M * cos2\u03c3M)))
} while (1E-12 

2. Функция решения прямой геодезической задачи (рисунок 2).

Вызов функции осуществляется следующей строкой:

function vp (широта_1, долгота_1, азимут_1, расстояние).

На входе имеются географические координаты (широта, долгота) точки 1, азимут в точке 1 в радианах и расстояние между точками по поверхности эллипсоида, а на выходе – географические координаты точки 2 (широта, долгота) и азимут направления в точке 2 в радианах.

Форма решения прямой геодезической задачи
Рисунок 2. Форма решения прямой геодезической задачи

Исходный код функции решения прямой геодезической задачи:

function vp (\u03c61, \u03bb1, \u03b11, s) {
var sin\u03b11 = Math.sin(\u03b11),
    cos\u03b11 = Math.cos(\u03b11),
    tanU1 = (1 – f) * Math.tan(\u03c61),
    cosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1),
    sinU1 = tanU1 * cosU1,
    \u03c31 = Math.atan2(tanU1, cos\u03b11),
    sin\u03b1 = cosU1 * sin\u03b11,
    cosSq\u03b1 = 1 – sin\u03b1 * sin\u03b1,
    uSq = cosSq\u03b1 * (a * a – b * b) / (b * b),
    A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 – 175 * uSq))),
    B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 – 47 * uSq))),
    \u03c3 = s / (b * A),
    \u03c3\u02b9;
do {
    var cos2\u03c3M = Math.cos(2 * \u03c31 + \u03c3),
        sin\u03c3 = Math.sin(\u03c3),
        cos\u03c3 = Math.cos(\u03c3),
        \u0394\u03c3 = B * sin\u03c3 * (cos2\u03c3M + B / 4 * (cos\u03c3 * (–1 + 2 * cos2\u03c3M * cos2\u03c3M) – B / 6 * cos2\u03c3M * (–3 + 4 * sin\u03c3 * sin\u03c3) * (–3 + 4 * cos2\u03c3M * cos2\u03c3M)));\
    u03c3\u02b9 = \u03c3;\
    u03c3 = s / (b * A) + \u0394\u03c3
} while (1E-12 

Обычно JavaScript применяется в веб-браузерах, а расширение его возможностей за счет введения объектов позволяет организовать взаимодействие с пользователем, управлять веб-браузером и изменять содержимое документа, отображаемое в пределах окна веб-браузера. Встроенная версия JavaScript запускает сценарии, внедренные в HTML-код веб-страниц. Как правило, эта версия называется клиентским языком JavaScript, чтобы подчеркнуть, что сценарий исполняется на клиентском компьютере, а не на веб-сервере. В основе языка JavaScript и поддерживаемых им типов данных лежат международные стандарты, благодаря чему обеспечивается прекрасная совместимость между реализациями. Некоторые части клиентского JavaScript формально стандартизированы, другие части стали стандартом де-факто, но есть части, которые являются специфическими расширениями конкретной версии браузера. Совместимость реализаций JavaScript в разных браузерах зачастую приносит неудобства программистам, использующим клиентский язык JavaScript [3].

Клиентский JavaScript-код можно интегрировать в HTML-документы четырьмя основными способами:

  • встроенные сценарии между парой тегов ;
  • из внешнего файла, заданного атрибутом src тега