Anonymous | Login | Signup for a new account | 21-11-24 13:35 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||||||
0001116 | SAS.Планета | [All Projects] Хотелка | public | 16-01-2012 04:57 | 30-09-2013 21:04 | ||||||||
Reporter | Tolik | ||||||||||||
Assigned To | |||||||||||||
Priority | low | Severity | feature | Reproducibility | N/A | ||||||||
Status | confirmed | Resolution | open | ||||||||||
Platform | OS | OS Version | |||||||||||
Product Version | 110418 | ||||||||||||
Target Version | 29xxxx | Fixed in Version | |||||||||||
Summary | 0001116: При измерении расстояний отображать линии в виде дуг | ||||||||||||
Description | Сейчас расстояние между двумя точками измеряется по кратчайшему расстоянию между ними, но на карте изображается отрезок вместо дуги. Во-первых, это сбивает с толку: непонятно, что мы измерили. Например, если поставить 2 точки на 60-й параллели от меридиана 50 до 130, получится 4189 км (это кратчайший путь). А если на том же самом отрезке поставить несколько промежуточных точек, получится 4476 км (это - грубо - расстояние вдоль параллели). Но визуально разницы нет. Во-вторых, просто очень хочется видеть, какой именно путь самый короткий. | ||||||||||||
Additional Information | GE даёт примерно тот же результат, но рисует дуги. | ||||||||||||
Tags | линейка | ||||||||||||
Attached Files | |||||||||||||
Relationships | ||||||||||||||||
|
Notes | |
(0004998) vdemidov (manager) 16-01-2012 06:06 |
Когда кто-нибудь напишет процедуры для работы с "Большим кругом" на эллипсоиде можно будет подумать. Нужна процедура разбиения отрезка на части, процедура проецирования точки по азимуту и расстоянию. Это по минимуму. А пока увы. |
(0012996) zed (manager) 30-09-2013 18:07 |
Сейчас вроде есть всё необходимое, чтобы рисовать дугу? Алгоритм мне видится такой: 1. Берём 2 точки, между которыми нужно нарисовать дугу и измеряем расстояние между ними (TDatum.CalcDist). При этом, мы получаем начальный азимут. 2. Делим расстояние на 2 и используя начальный азимут из предыдущего шага, находим координаты промежуточной точки. 3. Собственно, можем рисовать дугу. У меня только возник вопрос, где у нас происходит отрисовка этой линии/дуги? В TCalcLineLayer только рендерится текст, но в параметрах присутствует IPathOnMapEdit. Кто его рисует? Мы там можем определить, что рисуем именно линейку, а не путь, чтобы рисовать дугу (TBitmap32.Canvas.Arc). Или можно рисовать дуги и для путей? |
(0012997) zed (manager) 30-09-2013 19:25 |
Доработал 0002088 - теперь у IDatum можно сразу попросить эту промежуточную точку, без лишних телодвижений. Теперь вопрос, как это нарисовать? Хочется рисовать именно дугу, а не несколько ломанных линий. |
(0012998) vdemidov (manager) 30-09-2013 20:37 |
А зачем дугу? ИМХО гораздо проще таки ломаную линию, просто нужно правильно подбирать количество промежуточных точек. Делать это нужно на этапе построения спроецированной линии. Я представляю себе это как-то так: 1. Есть 2 точки в LonLat. 2. Получаем их спроецированные координаты. 3. Смотрим расстояние в пикселях. 4. Сравниваем расстояние, если меньше какого-то определенного числа, то вообще оставляем как есть. 5. Если больше то разбиваем на количество точек пропорциональное расстоянию в пикселах, но не больше максимального. 5а. Как вариант (только сейчас придумал), разбивать отрезок напополам и смотреть насколько промежуточная точка отличается простой середины отрезка и если она больше порогового значения в 2-10 пикселей, то повторять процедуру для каждого из полученных отрезков. |
(0012999) vdemidov (manager) 30-09-2013 20:41 |
Для варианта 5а нужно не забывать, что расстояние в пикселах нужно считать ближайшее через 0-й или 180-мередиан, а то получим бесконечную рекурсию. |
(0013000) zed (manager) 30-09-2013 20:41 |
>А зачем дугу? А почему нет? Чем тебе не нравится вызов Canvas.Arc с четырьмя параметрами, который нарисует честную дугу без всяких аппроксимаций. |
(0013001) vdemidov (manager) 30-09-2013 20:47 |
Ну хотя бы тем, что их понадобиться пробрасывать через кучу уровней включая кэширование и 2 трансформации. Я не возьмусь такое реализовывать и потом поддерживать. |
(0013004) vasketsov (manager) 30-09-2013 21:01 |
>пробрасывать через кучу уровней включая кэширование и 2 трансформации Почему не сделать как отдельный тип геопримитива? Те же метки в виде окружности можно сделать честными, а не 64-угольниками. И дуги можно (окружность будет как частный случай дуги). |
(0013006) vasketsov (manager) 30-09-2013 21:04 |
Проблема конечно будет с операциями над полигонами и окружностями, типа вычитания или объединения, но их пока нет. |
Users who viewed this issue | |
User List | Anonymous (2779x), rass (1x), Tolik (1x), vdemidov (3x) |
Total Views | 2784 |
Last View | 21-11-2024 13:35 |
Issue History | |||
Date Modified | Username | Field | Change |
16-01-2012 04:57 | Tolik | New Issue | |
16-01-2012 04:58 | Tolik | Status | new => acknowledged |
16-01-2012 04:58 | Tolik | Description Updated | View Revisions |
16-01-2012 05:00 | Tolik | Description Updated | View Revisions |
16-01-2012 05:11 | Tolik | Additional Information Updated | View Revisions |
16-01-2012 06:06 | vdemidov | Note Added: 0004998 | |
16-01-2012 09:49 | gpsMax | Tag Attached: линейка | |
27-01-2012 21:29 | vdemidov | Status | acknowledged => confirmed |
27-01-2012 21:29 | vdemidov | Product Version | .Nightly => 110418 |
27-01-2012 21:29 | vdemidov | Target Version | => 29xxxx |
27-02-2012 08:56 | vdemidov | Relationship added | parent of 0001188 |
08-10-2012 14:19 | vdemidov | Relationship added | related to 0001021 |
13-08-2013 12:47 | vdemidov | Relationship added | parent of 0002088 |
30-09-2013 18:07 | zed | Note Added: 0012996 | |
30-09-2013 19:25 | zed | Note Added: 0012997 | |
30-09-2013 20:37 | vdemidov | Note Added: 0012998 | |
30-09-2013 20:41 | vdemidov | Note Added: 0012999 | |
30-09-2013 20:41 | zed | Note Added: 0013000 | |
30-09-2013 20:47 | vdemidov | Note Added: 0013001 | |
30-09-2013 21:01 | vasketsov | Note Added: 0013004 | |
30-09-2013 21:04 | vdemidov | Note Added: 0013005 | |
30-09-2013 21:04 | vdemidov | Note Deleted: 0013005 | |
30-09-2013 21:04 | vasketsov | Note Added: 0013006 |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |