• Главная
  • Карта сайта
Не найдено

Обчислення відстані і початкового азимуту між двома точками на сфері

  1. Вступ
  2. формули
  3. Сферична теорема косинусів
  4. Формула гаверсінусов
  5. Модифікація для антиподів
  6. Реалізація на Avenue
  7. Реалізація на мові Python
  8. Реалізація в Excel
  9. Перевірки набір даних

Вимірювання відстані і початкового азимуту між точками без проекційних перетворень

Вступ

Довжина дуги великого кола - найкоротша відстань між будь-якими двома точками знаходяться на поверхні сфери, виміряний вздовж лінії з'єднує ці дві точки (така лінія носить назву ортодромії) і проходить по поверхні сфери або іншій поверхні обертання. Сферична геометрія відрізняється від звичайної евклідової і рівняння відстані також приймають іншу форму. У евклідовой геометрії, найкоротша відстань між двома точками - пряма лінія. На сфері, прямих ліній не буває. Ці лінії на сфері є частиною великих кіл - кіл, центри яких співпадають з центром сфери.

Початковий азимут - азимут, взявши який при початку руху з точки А, слідуючи по великому колу на найкоротшу відстань до точки B, кінцевою точкою буде точка B. При русі з точки A в точку B по лінії великого кола азимут з поточного становища на кінцеву точку B постійно змінюється. Початковий азимут [angles-rhumb.html відмінний від постійного], завдяки якому, азимут з поточної точки на кінцеву не змінюється, але маршрут прямування не є найкоротшим відстанню між двома точками.

Через будь-які дві точки на поверхні сфери, якщо вони не прямо протилежні одна одній (тобто не є антиподами), можна провести унікальний велике коло. Дві точки, поділяють велике коло на дві дуги. Довжина короткої дуги - найкоротша відстань між двома точками. Між двома точками-антиподами можна провести нескінченну кількість великих кіл, але відстань між ними буде однаково на будь-якому колі і дорівнює половині окружності кола, або pi * R, де R - радіус сфери.

На площині (в прямокутній системі координат), великі кола і їх фрагменти, як було згадано вище, являють собою дуги у всіх проекціях, крім гномоніческой, де великі кола - прямі лінії. На практиці це означає, що літаки і інший авіатранспорт завжди використовує маршрут мінімальної відстані між точками для економії палива, тобто політ здійснюється за відстанню великого кола, на площині це виглядає як дуга.

Форма Землі може бути описана як сфера, тому рівняння для обчислення відстаней на великому колі важливі для обчислення найкоротшої відстані між точками на поверхні Землі і часто використовуються в навігації.

Обчислення відстані цим методом більш ефективно і в багатьох випадках більш точно, ніж обчислення його для спроектованих координат (в прямокутних системах координат), оскільки, по-перше, для цього не треба переводити географічні координати в прямокутну систему координат (здійснювати проекційні перетворення) і, по-друге, багато проекції, якщо неправильно обрані, можу привести до значних спотворень довжин в силу особливостей проекційних спотворень.

Відомо, що більш точно описує форму Землі не сфера, а еліпсоїд, проте в даній статті розглядається обчислення відстаней саме на сфері, для обчислень використовується сфера радіусом 6372795 метрів, що може привести до помилки обчислення відстаней порядку 0.5%.

формули

Існує три способи розрахунку сферичного відстані великого кола ( Детальніше ).

Сферична теорема косинусів

У разі маленьких відстаней і невеликої розрядності обчислення (кількість знаків після коми), використання формули може призводити до значних помилок пов'язаних з округленням. Графічне зображення формул тут і далі - з Вікіпедії .

- широта і довгота двох точок в радіанах - широта і довгота двох точок в радіанах

- різниця координат по довготі - різниця координат по довготі

- кутова різниця - кутова різниця

- кутова різниця

Для перекладу кутового відстані в метричний, потрібно кутову різницю помножити на радіус Землі (6372795 метрів), одиниці кінцевого відстані дорівнюватимуть одиницям, в яких виражений радіус (в даному випадку - метри).

Формула гаверсінусов

Використовується, щоб уникнути проблем з невеликими відстанями.

Модифікація для антиподів

Попередня формула також схильна до проблеми точок-антиподів, щоб її вирішити використовується наступна її модифікація.

Реалізація на Avenue

Мовою Avenue, використовуючи останню формулу для обчислення відстані великого кола між двома точками, можна використовувати наступний код. Точки для обчислення передаються іншим скриптом, або додаються до початку даного у вигляді pnt = point.make (long, lat) ( скачати скрипт ):

'Pnt1, pnt2 - точки між якими обчислюються відстані' pi - число pi, rad - радіус сфери (Землі), num - кількість знаків після коми pi = 3.14159265358979 rad = 6372795 num = 7 'отримання координат точок в радіанах lat1 = pnt1.getY * pi / 180 lat2 = pnt2.getY * pi / 180 long1 = pnt1.getX * pi / 180 long2 = pnt2.getX * pi / 180 'косинуси і синуси широт і різниць довгот cl1 = lat1.cos cl2 = lat2.cos sl1 = lat1.sin sl2 = lat2.sin delta = long2 - long1 cdelta = delta.cos sdelta = delta.sin 'обчислення довжини великого кола p1 = (cl2 * sdelta) ^ 2 p2 = ((cl1 * sl2) - (sl1 * cl2 * cdelta)) ^ 2 p3 = (p1 + p2) ^ 0.5 p4 = sl1 * sl2 p5 = cl1 * cl2 * cdelta p6 = p4 + p5 p7 = p3 / p6 anglerad = (p7.atan) .SetFormatPrecision (num)
dist = anglerad * rad
'Обчислення початкового азимуту x = (cl1 * sl2) - (sl1 * cl2 * cdelta)
y = sdelta * cl2
z = (-y / x) .ATan.AsDegrees
if (x <0) then z = z + 180 end
z = - (z + 180 mod 360 - 180) .AsRadians
anglerad2 = z - ((2 * pi) * ((z / (2 * pi)). floor)) angledeg = (anglerad2 * 180) / pi
'повернення значень довжини великого кола і початкового азимуту
distlist = {dist, angledeg}
return distlist

Для виклику процедури розрахунку довжин наведеної вище, можна також скористатися наступним скриптом, результатом його роботи буде розрахунок довжин між точкою testpont до всіх точок активної теми виду і запис результату в поле Newdist атрибутивної таблиці цієї теми:

atheme = av.getactivedoc.getactivethemes.get (0) aftab = atheme.getftab f_shape = aftab.findfield ( "Shape") f_dist = aftab.findfield ( "dist")
f_ang = aftab.findfield ( "ang") 'testpoint - точка відліку testpoint = point.make (25.85, 55.15) aftab.seteditable (true)' для кожної точки теми до яких вважають відстані від точки відліку for each rec in aftab pnts = {} apoint = aftab.returnvalue (f_shape, rec) pnts.add (apoint.getx) pnts.add (testpoint.getx) pnts.add (apoint.gety) pnts.add (testpoint.gety) 'Виклик процедури розрахунку відстаней' "Calc-distance" - назва скрипта з процедурою в проекті param = av.run ( "Calc-distance", pnts) aftab.setvalue (f_dist, rec, param.get (0)) aftab.setvalue (f_ang, rec, param .get (1)) end aftab.seteditable (false)

Реалізація на мові Python

Реалізує повний варіант розрахунку через atan2 (), більш універсальніше, ніж варіант для Avenue. ( скачати скрипт )

import math #pi - число pi, rad - радіус сфери (Землі) rad = 6372795 # координати двох точок llat1 = 77.1539 llong1 = -120.398 llat2 = 77.1804 llong2 = 129.55 # в радіанах lat1 = llat1 * math.pi / 180.lat2 = llat2 * math.pi / 180.long1 = llong1 * math.pi / 180.long2 = llong2 * math.pi / 180.# косинуси і синуси широт і різниці довгот cl1 = math.cos (lat1) cl2 = math.cos (lat2) sl1 = math.sin (lat1) sl2 = math.sin (lat2) delta = long2 - long1 cdelta = math.cos (delta) sdelta = math.sin (delta) # обчислення довжини великого кола y = math.sqrt (math.pow (cl2 * sdelta, 2) + math.pow (cl1 * sl2-sl1 * cl2 * cdelta, 2)) x = sl1 * sl2 + cl1 * cl2 * cdelta ad = math.atan2 (y, x) dist = ad * rad # обчислення початкового азимуту x = (cl1 * sl2) - (sl1 * cl2 * cdelta) y = sdelta * cl2 z = math.degrees (math.atan (-y / x)) if (x <0): z = z + 180.z2 = (z + 180.)% 360. - 180. z2 = - math.radians (z2) anglerad2 = z2 - ((2 * math.pi) * math.floor ((z2 / (2 * math.pi) ))) angledeg = (anglerad2 * 180.) / math.pi print 'Distance >>% .0f'% dist, '[meters]' print 'Initial bearing >>', angledeg, '[degrees]'

Реалізація в Excel

завантажити приклад розрахунку відстані великого кола і початкового азимуту в Excel. Демонструє розрахунки через закон косинусів, гаверсінус, повне рівняння і повне рівняння через atan2 ().

Можна також скористатися наступною функцією:

Public Function Distance_A_B (Lat1 As Double, Long1 As Double, Lat2 As Double, Long2 As Double) 'визначення відстаней між географічними координатами.Координати повинні бути десятковими 'відстань виводиться в метрах With Application.WorksheetFunction Distance_A_B = .Atan2 (Sin (.Pi () * Lat1 / 180) * Sin (.Pi () * Lat2 / 180) + Cos (.Pi () * Lat1 / 180) * Cos (.Pi () * Lat2 / 180) * Cos (Abs (.Pi () * Long2 / 180 - .Pi () * Long1 / 180)), _ ((Cos (.Pi () * Lat2 / 180) * Sin (.Pi () * Long2 / 180 - .Pi () * Long1 / 180)) ^ 2 + (Cos (.Pi () * Lat1 / 180) * Sin (.Pi () * Lat2 / 180) - Sin (.Pi () * Lat1 / 180) * Cos (.Pi () * Lat2 / 180) * Cos (Abs (.Pi () * Long2 / 180 - .Pi () * Long1 / 180) )) ^ 2) ^ 0.5)

* 6372795 End With End Function

Перевірки набір даних

Якщо все вважається правильно, повинні бути отримані наступні результати (координати точок дані як широта / довгота, відстань в метрах, початковий кут в десяткових градусах):

# Точка 1 Точка 2 Відстань Кут 1 77.1539 / -139.398 -77.1804 / -139.55 17166029 180.077867811 2 77.1539 / 120.398 77.1804 / 129.55 225883 84.7925159033 3 77.1539 / -120.398 77.1804 / 129.55 2332669 324.384112704

Посилання по темі

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью