SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0001188 | SAS.Планета | [All Projects] Хотелка / Feature request | public | 26-02-2012 10:05 | 02-10-2012 18:26 |
|
Reporter | vdemidov | |
Assigned To | zed | |
Priority | normal | Severity | minor | Reproducibility | N/A |
Status | resolved | Resolution | fixed | |
Platform | | OS | | OS Version | |
Product Version | 110418 | |
Target Version | 121010 | Fixed in Version | 121010 | |
|
Summary | 0001188: Алгоритм проецирования точки на эллипсоиде |
Description | Нужен алгоритм проецирования точки на эллипсоиде. То есть функция получает координаты исходной точки, азимут и расстояние в метрах, а возвращает координаты новой точки. |
Steps To Reproduce | |
Additional Information | http://ru.wikipedia.org/wiki/Ортодромия |
Tags | No tags attached. |
Relationships | related to | 0002088 | resolved | zed | Добавить в IDatum функцию построения N промежуточных точек отрезка | child of | 0000713 | resolved | vdemidov | Настраиваемые кольца расстояния вокруг метки положения | child of | 0001116 | confirmed | | При измерении расстояний отображать линии в виде дуг | child of | 0000663 | resolved | zed | Создание круглых областей заданного радиуса | child of | 0000094 | resolved | vdemidov | Добавить создание точек по азимуту | child of | 0000099 | confirmed | | Добавить инструмент - вычисление азимута между двумя существующими метками | child of | 0000219 | resolved | zed | Отображение азимута в инструменте измерений расстояний | child of | 0000143 | confirmed | | Навигация на точку(метку) | child of | 0001051 | confirmed | | Построение лучей азимутов | child of | 0001021 | resolved | zed | Измерение растояния | child of | 0001616 | resolved | zed | Выделение квадратной области определяемый указанным радиусом вписанной окружности |
|
Attached Files | geo84.pas (7,462) 02-10-2012 07:19 http://bugtracker.sasgis.org/file_download.php?file_id=1048&type=bug |
|
Issue History |
Date Modified | Username | Field | Change |
26-02-2012 10:05 | vdemidov | New Issue | |
26-02-2012 10:16 | vdemidov | Relationship added | child of 0000713 |
26-02-2012 12:52 | vasketsov | Note Added: 0005659 | |
26-02-2012 13:23 | vdemidov | Note Added: 0005661 | |
26-02-2012 13:52 | vasketsov | Note Added: 0005664 | |
26-02-2012 14:20 | vdemidov | Note Added: 0005665 | |
26-02-2012 14:28 | vdemidov | Note Added: 0005666 | |
26-02-2012 14:35 | vasketsov | Note Added: 0005667 | |
26-02-2012 21:07 | vdemidov | Note Added: 0005670 | |
26-02-2012 21:14 | vdemidov | Note Edited: 0005670 | bug_revision_view_page.php?bugnote_id=5670#r2856 |
26-02-2012 21:26 | vdemidov | Additional Information Updated | bug_revision_view_page.php?rev_id=2858#r2858 |
26-02-2012 21:34 | vdemidov | Note Added: 0005671 | |
27-02-2012 04:14 | Tolik | Note Added: 0005672 | |
27-02-2012 08:56 | vdemidov | Relationship added | child of 0001116 |
27-02-2012 09:03 | vdemidov | Relationship added | child of 0000663 |
27-02-2012 16:13 | vdemidov | Status | new => confirmed |
27-02-2012 16:13 | vdemidov | Target Version | => 25xxxx |
05-03-2012 06:15 | vdemidov | Relationship added | child of 0000094 |
05-03-2012 06:15 | vdemidov | Relationship added | child of 0000099 |
05-03-2012 08:22 | vdemidov | Relationship added | child of 0000219 |
05-03-2012 10:13 | vdemidov | Relationship added | child of 0000143 |
05-03-2012 10:57 | vdemidov | Relationship added | child of 0001051 |
19-05-2012 07:48 | Dima2000 | Note Added: 0007118 | |
19-05-2012 22:09 | Dima2000 | Note Edited: 0007118 | bug_revision_view_page.php?bugnote_id=7118#r3522 |
21-05-2012 05:17 | vdemidov | Note Added: 0007141 | |
12-07-2012 05:29 | vdemidov | Note Added: 0007799 | |
02-08-2012 16:52 | vdemidov | Note Added: 0008050 | |
02-08-2012 19:49 | zed | Note Added: 0008053 | |
03-08-2012 06:34 | vdemidov | Note Added: 0008060 | |
02-10-2012 07:19 | zed | Note Added: 0009104 | |
02-10-2012 07:19 | zed | File Added: geo84.pas | |
02-10-2012 07:23 | zed | Note Edited: 0009104 | bug_revision_view_page.php?bugnote_id=9104#r4441 |
02-10-2012 07:33 | vdemidov | Note Added: 0009105 | |
02-10-2012 12:20 | zed | Note Added: 0009111 | |
02-10-2012 12:25 | vdemidov | Note Added: 0009112 | |
02-10-2012 15:50 | zed | Note Added: 0009124 | |
02-10-2012 15:50 | zed | Status | confirmed => resolved |
02-10-2012 15:50 | zed | Fixed in Version | => 121010 |
02-10-2012 15:50 | zed | Resolution | open => fixed |
02-10-2012 15:50 | zed | Assigned To | => zed |
02-10-2012 15:50 | zed | Target Version | 25xxxx => 121010 |
02-10-2012 15:59 | zed | Note Added: 0009125 | |
02-10-2012 18:26 | zed | Note Added: 0009126 | |
08-10-2012 14:09 | vdemidov | Relationship added | child of 0001021 |
09-10-2012 06:49 | vdemidov | Relationship added | child of 0001616 |
13-08-2013 12:46 | vdemidov | Relationship added | related to 0002088 |
08-08-2025 13:24 | zed | Category | Хотелка => Хотелка / Feature request |
Notes |
|
|
есть такое, куда залить или отдельно приложить? только не азимут, а смещение x и y. |
|
|
|
Нет. Нужен именно азимут. |
|
|
|
>расстояние в метрах
о каких примерно величинах идёт речь? метры? сотни километров?
о плюсах?
в вики про локсодромию только на сфере написано (((
http://ru.wikipedia.org/wiki/%CB%EE%EA%F1%EE%E4%F0%EE%EC%E0 |
|
|
|
А я не про локсодромию, а про навигацию на большом круге. Соответственно расстояния могут быть любыми до половины длинны экватора. |
|
|
|
http://ru.wikipedia.org/wiki/Ортодромия
Только все эти формулы на сфере, а нужно на эллипсоиде. |
|
|
|
>я не про локсодромию
Вообще-то "координаты исходной точки, азимут и расстояние в метрах, а возвращает координаты новой точки" - именно движение по локсодромии. Или имелось ввиду что начальный азимут задаёт направление, а дальше по нему идём прямо и азимут меняется, вплоть за полюс? |
|
|
(0005670)
|
vdemidov
|
26-02-2012 21:07
(edited on: 26-02-2012 21:14) |
|
>начальный азимут задаёт направление, а дальше по нему идём прямо и азимут меняется, вплоть за полюс?
Именно.
Локсодромия интересна только при навигации по обычным бумажным картам.
|
|
|
|
Нужны алгоритмы аналогичные используемым вот в этом онлайн калькуляторе:
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 сфера). Неужели для чего-то нужна ещё бОльшая точность?
|
|
|
|
Я ж не против. Реализуйте хоть на сфере. |
|
|
|
http://www.spywatcher.com.ua/forum/index.php?PHPSESSID=a35d32a4bfd512c148109fd622141327&topic=45.0 |
|
|
|
Нужно создать что-то похожее на то что появилось в 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", может он и для САСа такое сделает. Или хотя бы кинет исходники (если они не засекречены). |
|
|
|
Ну у меня на хабре аккаунта нету. Так что не смогу. Если кто постучится к 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);
Оно?
Только сейчас обратил внимание, что и на хабре оказывается про этого же поляка говорили, так что скорее всего оно.
|
|
|
|
Стопудово оно. Только нужно убрать жесткую привязку к константам и загнать в класс TDatum. Еще хорошо бы сравнить результаты функции Geodesic с тем что сейчас реализовано. |
|
|
(0009111)
|
zed
|
02-10-2012 12:20
|
|
Сейчас попробую заняться.
На сколько я понял, вот эта константа:
> f0 = 1/298.257223563; // Flattening
это тоже самое, что и FExct: Double; в TDatum? |
|
|
|
Тоже самое с точность может быть до обратного значения. Я точно не помню. Просто сравни значение для стандартного эллипсоида 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 с тем что сейчас реализовано.
Сравнил. САС-овский алгоритм оказался немножко менее точный, поэтому переделал и его до кучи. |
|