SASGIS - SAS.Планета
View Issue Details
0001188SAS.Планета[All Projects] Хотелкаpublic26-02-2012 10:0502-10-2012 18:26
vdemidov 
zed 
normalminorN/A
resolvedfixed 
110418 
121010121010 
0001188: Алгоритм проецирования точки на эллипсоиде
Нужен алгоритм проецирования точки на эллипсоиде. То есть функция получает координаты исходной точки, азимут и расстояние в метрах, а возвращает координаты новой точки.
http://ru.wikipedia.org/wiki/Ортодромия
No tags attached.
related to 0002088resolved zed Добавить в IDatum функцию построения N промежуточных точек отрезка 
child of 0000713resolved vdemidov Настраиваемые кольца расстояния вокруг метки положения 
child of 0001116confirmed  При измерении расстояний отображать линии в виде дуг 
child of 0000663resolved zed Создание круглых областей заданного радиуса 
child of 0000094resolved vdemidov Добавить создание точек по азимуту 
child of 0000099confirmed  Добавить инструмент - вычисление азимута между двумя существующими метками 
child of 0000219resolved zed Отображение азимута в инструменте измерений расстояний 
child of 0000143confirmed  Навигация на точку(метку) 
child of 0001051confirmed  Построение лучей азимутов 
child of 0001021resolved zed Измерение растояния 
child of 0001616resolved zed Выделение квадратной области определяемый указанным радиусом вписанной окружности 
? geo84.pas (7,462) 02-10-2012 07:19
https://bugtracker.sasgis.org/file_download.php?file_id=1048&type=bug
Issue History
26-02-2012 10:05vdemidovNew Issue
26-02-2012 10:16vdemidovRelationship addedchild of 0000713
26-02-2012 12:52vasketsovNote Added: 0005659
26-02-2012 13:23vdemidovNote Added: 0005661
26-02-2012 13:52vasketsovNote Added: 0005664
26-02-2012 14:20vdemidovNote Added: 0005665
26-02-2012 14:28vdemidovNote Added: 0005666
26-02-2012 14:35vasketsovNote Added: 0005667
26-02-2012 21:07vdemidovNote Added: 0005670
26-02-2012 21:14vdemidovNote Edited: 0005670bug_revision_view_page.php?bugnote_id=5670#r2856
26-02-2012 21:26vdemidovAdditional Information Updatedbug_revision_view_page.php?rev_id=2858#r2858
26-02-2012 21:34vdemidovNote Added: 0005671
27-02-2012 04:14TolikNote Added: 0005672
27-02-2012 08:56vdemidovRelationship addedchild of 0001116
27-02-2012 09:03vdemidovRelationship addedchild of 0000663
27-02-2012 16:13vdemidovStatusnew => confirmed
27-02-2012 16:13vdemidovTarget Version => 24xxxx
05-03-2012 06:15vdemidovRelationship addedchild of 0000094
05-03-2012 06:15vdemidovRelationship addedchild of 0000099
05-03-2012 08:22vdemidovRelationship addedchild of 0000219
05-03-2012 10:13vdemidovRelationship addedchild of 0000143
05-03-2012 10:57vdemidovRelationship addedchild of 0001051
19-05-2012 07:48Dima2000Note Added: 0007118
19-05-2012 22:09Dima2000Note Edited: 0007118bug_revision_view_page.php?bugnote_id=7118#r3522
21-05-2012 05:17vdemidovNote Added: 0007141
12-07-2012 05:29vdemidovNote Added: 0007799
02-08-2012 16:52vdemidovNote Added: 0008050
02-08-2012 19:49zedNote Added: 0008053
03-08-2012 06:34vdemidovNote Added: 0008060
02-10-2012 07:19zedNote Added: 0009104
02-10-2012 07:19zedFile Added: geo84.pas
02-10-2012 07:23zedNote Edited: 0009104bug_revision_view_page.php?bugnote_id=9104#r4441
02-10-2012 07:33vdemidovNote Added: 0009105
02-10-2012 12:20zedNote Added: 0009111
02-10-2012 12:25vdemidovNote Added: 0009112
02-10-2012 15:50zedNote Added: 0009124
02-10-2012 15:50zedStatusconfirmed => resolved
02-10-2012 15:50zedFixed in Version => 121010
02-10-2012 15:50zedResolutionopen => fixed
02-10-2012 15:50zedAssigned To => zed
02-10-2012 15:50zedTarget Version24xxxx => 121010
02-10-2012 15:59zedNote Added: 0009125
02-10-2012 18:26zedNote Added: 0009126
08-10-2012 14:09vdemidovRelationship addedchild of 0001021
09-10-2012 06:49vdemidovRelationship addedchild of 0001616
13-08-2013 12:46vdemidovRelationship addedrelated to 0002088

Notes
(0005659)
vasketsov   
26-02-2012 12:52   
есть такое, куда залить или отдельно приложить? только не азимут, а смещение x и y.
(0005661)
vdemidov   
26-02-2012 13:23   
Нет. Нужен именно азимут.
(0005664)
vasketsov   
26-02-2012 13:52   
>расстояние в метрах
о каких примерно величинах идёт речь? метры? сотни километров?
о плюсах?

в вики про локсодромию только на сфере написано (((
http://ru.wikipedia.org/wiki/%CB%EE%EA%F1%EE%E4%F0%EE%EC%E0
(0005665)
vdemidov   
26-02-2012 14:20   
А я не про локсодромию, а про навигацию на большом круге. Соответственно расстояния могут быть любыми до половины длинны экватора.
(0005666)
vdemidov   
26-02-2012 14:28   
http://ru.wikipedia.org/wiki/Ортодромия
Только все эти формулы на сфере, а нужно на эллипсоиде.
(0005667)
vasketsov   
26-02-2012 14:35   
>я не про локсодромию
Вообще-то "координаты исходной точки, азимут и расстояние в метрах, а возвращает координаты новой точки" - именно движение по локсодромии. Или имелось ввиду что начальный азимут задаёт направление, а дальше по нему идём прямо и азимут меняется, вплоть за полюс?
(0005670)
vdemidov   
26-02-2012 21:07   
(edited on: 26-02-2012 21:14)
>начальный азимут задаёт направление, а дальше по нему идём прямо и азимут меняется, вплоть за полюс?
Именно.
Локсодромия интересна только при навигации по обычным бумажным картам.

(0005671)
vdemidov   
26-02-2012 21:34   
Нужны алгоритмы аналогичные используемым вот в этом онлайн калькуляторе:
http://planetcalc.ru/722/
(0005672)
Tolik   
27-02-2012 04:14   
Наверно, и 0001116 можно сюда привязать?
(0007118)
Dima2000   
19-05-2012 07:48   
(edited on: 19-05-2012 22:09)
Вики про длину дуги даже эллипса говорит "Получившийся интеграл принадлежит семейству эллиптических интегралов, которые в элементарных функциях не выражаются, и сводится к эллиптическому интегралу второго рода E(t,e)." - т.е. или апроксимировать какой-то сферой (для малых расстояний почему бы нет? Или нужна офигительная точность?) или считать итерационно (разбивать отрезок на кусочки и каждый считать на своей приближенной сфере). Т.е. вопрос лишь в применении, какая точность необходима. Для всех связанных тикетов мне кажется достаточно будет и навигации по сфере, для которой есть точные формулы.

Проверил по тому "идеальному" калькулятору, Москва - Владивосток, расстояние 6445км/6456км, погрешность менее 0.2%, азимуты отличаются менее 0.05° (WGS84 vs сфера). Неужели для чего-то нужна ещё бОльшая точность?

(0007141)
vdemidov   
21-05-2012 05:17   
Я ж не против. Реализуйте хоть на сфере.
(0007799)
vdemidov   
12-07-2012 05:29   
http://www.spywatcher.com.ua/forum/index.php?PHPSESSID=a35d32a4bfd512c148109fd622141327&topic=45.0
(0008050)
vdemidov   
02-08-2012 16:52   
Нужно создать что-то похожее на то что появилось в API Яндекс-Карт
http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/coordSystem.geo.xml
(0008053)
zed   
02-08-2012 19:49   
http://habrahabr.ru/post/143898/

Со своей стороны мы написали две стандартных реализации — для обычной декартовой плоскости и для референсного эллипсоида WGS 84. Для второй реализации мы использовали формулы Винсенти (http://en.wikipedia.org/wiki/Vincenty%27s_formulae). Кстати, непосредственно реализовывал эту логику runawayed (http://habrahabr.ru/users/runawayed/), передаём ему привет :).

Постучись в гости к этому "runawayed", может он и для САСа такое сделает. Или хотя бы кинет исходники (если они не засекречены).
(0008060)
vdemidov   
03-08-2012 06:34   
Ну у меня на хабре аккаунта нету. Так что не смогу. Если кто постучится к runawayed буду благодарен.
(0009104)
zed   
02-10-2012 07:19   
(edited on: 02-10-2012 07:23)
vdemidov
>Нужны алгоритмы аналогичные используемым вот в этом онлайн калькуляторе:
Немного покопался в теме: все расчёты базируются на алгоритме некого поляка Vincenty и непродолжительное гугление по имени вывело на исходники, реализующие этот алгоритм: http://www.programmersheaven.com/download/48584/19/ZipView.aspx

Исходники на всякий случай приаттачил (geo84.pas). Необходимая нам реализация в процедуре: procedure GeoRadial(const Lat1, Lon1, Tc, D: Double; out Lat, Lon: Double);

Оно?

Только сейчас обратил внимание, что и на хабре оказывается про этого же поляка говорили, так что скорее всего оно.

(0009105)
vdemidov   
02-10-2012 07:33   
Стопудово оно. Только нужно убрать жесткую привязку к константам и загнать в класс TDatum. Еще хорошо бы сравнить результаты функции Geodesic с тем что сейчас реализовано.
(0009111)
zed   
02-10-2012 12:20   
Сейчас попробую заняться.

На сколько я понял, вот эта константа:
> f0 = 1/298.257223563; // Flattening

это тоже самое, что и FExct: Double; в TDatum?
(0009112)
vdemidov   
02-10-2012 12:25   
Тоже самое с точность может быть до обратного значения. Я точно не помню. Просто сравни значение для стандартного эллипсоида WGS84
(0009124)
zed   
02-10-2012 15:50   
Оказалось не тоже самое.
(0009125)
zed   
02-10-2012 15:59   
На всякий случай, оставлю тут ссылку на калькулятор, которым я проверял правильность работы алгоритма: http://www.geomidpoint.com/destination/
(0009126)
zed   
02-10-2012 18:26   
>Еще хорошо бы сравнить результаты функции Geodesic с тем что сейчас реализовано.
Сравнил. САС-овский алгоритм оказался немножко менее точный, поэтому переделал и его до кучи.