SASGIS - SAS.Планета
View Issue Details
0002777SAS.Планета[All Projects] Багpublic31-07-2015 14:0930-12-2021 08:59
zed 
 
normalminoralways
confirmedopen 
141212 
26xxxx 
0002777: Путь из одной точки не отображается ни на одном зуме
Попадаются треки состоящие из одной точки. Они валидны с точки зрения gpx формата, но в SAS абсолютно бесполезны в качестве пути.
Пример трека:

<trk>
    <name>ACTIVE LOG (3)</name>
    <trkseg>
        <trkpt lat="45.03707" lon="41.97465">
            <time>2010-04-24T18:05:40Z</time>
            <ele>578.84567912015</ele>
        </trkpt>
    </trkseg>
</trk>
gpx, import, импорт, пути, путь, трек, треки
related to 0002786resolved vdemidov При экспорте в KML пути должны содержать 2 и более точек 
Issue History
31-07-2015 14:09zedNew Issue
31-07-2015 14:14zedTag Attached: gpx
31-07-2015 14:14zedTag Attached: import
31-07-2015 14:14zedTag Attached: импорт
31-07-2015 14:14zedTag Attached: пути
31-07-2015 14:14zedTag Attached: путь
31-07-2015 14:14zedTag Attached: трек
31-07-2015 14:14zedTag Attached: треки
03-08-2015 08:53vdemidovNote Added: 0016264
03-08-2015 08:53vdemidovStatusnew => confirmed
03-08-2015 08:53vdemidovTarget Version => 150915
03-08-2015 08:55zedNote Added: 0016265
03-08-2015 08:59vdemidovNote Added: 0016266
03-08-2015 12:49zedNote Added: 0016268
03-08-2015 13:30vdemidovNote Added: 0016270
03-08-2015 16:11zedNote Added: 0016277
03-08-2015 16:18vdemidovNote Added: 0016278
03-08-2015 21:39vasketsovNote Added: 0016291
04-08-2015 06:05vdemidovNote Added: 0016299
04-08-2015 06:51zedNote Added: 0016303
04-08-2015 07:05zedNote Added: 0016304
04-08-2015 10:15vasketsovNote Added: 0016306
04-08-2015 10:38zedNote Added: 0016309
04-08-2015 11:31vasketsovNote Added: 0016313
04-08-2015 11:35vdemidovNote Added: 0016314
04-08-2015 11:37zedNote Added: 0016315
04-08-2015 12:22vasketsovNote Added: 0016327
04-08-2015 12:55vdemidovNote Added: 0016334
04-08-2015 13:08vasketsovNote Added: 0016338
04-08-2015 13:10vasketsovNote Edited: 0016338bug_revision_view_page.php?bugnote_id=16338#r6674
04-08-2015 13:25vdemidovNote Added: 0016341
04-08-2015 13:25vdemidovNote Added: 0016342
04-08-2015 13:32vasketsovNote Added: 0016344
05-08-2015 08:37vdemidovNote Added: 0016353
12-08-2015 18:23vdemidovIssue cloned: 0002786
12-08-2015 18:23vdemidovRelationship addedrelated to 0002786
16-09-2015 14:52vdemidovTarget Version150915 => 151010
04-10-2015 15:24vdemidovSummaryНевалидный путь при импорте gpx трека из одной точки => Путь из одной точки не отображается ни на одном зуме
04-10-2015 15:24vdemidovDescription Updatedbug_revision_view_page.php?rev_id=6731#r6731
04-10-2015 15:28vdemidovTarget Version151010 => 151111
06-11-2015 08:23vdemidovTarget Version151111 => 191221
23-07-2019 17:04vdemidovTarget Version191221 => 211230
30-12-2021 08:59zedTarget Version211230 => 26xxxx

Notes
(0016264)
vdemidov   
03-08-2015 08:53   
Согласен, что это неправильно, вот только не знаю на каком уровне исправлять:
Можно исправить импорт GPX (тогда любой новый импорт может вернуть проблему).
Можно исправить экспорт в KML что бы он проверял количество точек в пути.
Можно добавить проверку валидности геометрий при сохранении в базу меток (путь минимум из 2-х точек, полигон минимум из 3-х точек)

Но правильнее всего сделать все три исправления. То есть, добавить гарантию, что в базе меток должны быть валидные геометрии и не допускать добавления невалидных.
(0016265)
zed   
03-08-2015 08:55   
По-моему, нужно исправлять в первую очередь именно импорт GPX.
(0016266)
vdemidov   
03-08-2015 08:59   
Согласен.
(0016268)
zed   
03-08-2015 12:49   
Для этого достаточно в TXmlVectorObjects.InternalMakeTrackObject добавить проверку на FDoublePointsAggregator.Count > 1 вместо проверки на ноль?
(0016270)
vdemidov   
03-08-2015 13:30   
Судя по всему да, но я не уверен.
(0016277)
zed   
03-08-2015 16:11   
А можно ещё пофиксить фабрику TGeometryLonLatFactory.CreateLonLatLine чтобы она не создавала из невалидных данных невалидную геометрию.
(0016278)
vdemidov   
03-08-2015 16:18   
Нельзя. Тогда ты не сможешь новый трек начать рисовать.
(0016291)
vasketsov   
03-08-2015 21:39   
>в базе меток должны быть валидные геометрии
С точки зрения базы меток, линия в одну точку - валидна?
Если НЕТ, то при импорте валидного GPX точка должна дублироваться.
Если ДА, то при экспорте в KML точка должна дублироваться.

Не должно быть потери данных.
Одна точка в треке в gpx может быть просто следствием деления трека на сегменты, что может происходить чисто технически, это никак не является основанием для игнорирования подобных треков из одной точки или замены их на обычные точки (POI).
(0016299)
vdemidov   
04-08-2015 06:05   
> С точки зрения базы меток, линия в одну точку - валидна?
ИМХО не валидна.
(0016303)
zed   
04-08-2015 06:51   
> это никак не является основанием для игнорирования подобных треков
А по-моему, является. Во-первых, он никак не отображается визуально, а во-вторых он не несёт никакой смысловой нагрузки, что в SAS, что ещё в какой программе. И точно так же будет бесполезен трек, если эту точку продублировать. Пусть он станет валиден с точки зрения программы и kml, но он останется бесполезным мусором для конечного пользователя.
(0016304)
zed   
04-08-2015 07:05   
Подскажи лучше, правильно ли я нашёл место, где нужно добавить проверку? И нужно ли там очищать массив точек (по-моему нужно) или просто делать Exit?
(0016306)
vasketsov   
04-08-2015 10:15   
>Во-первых, он никак не отображается визуально
То, что он не отображается в сасе - вообще не аргумент.
Таких кусков может быть очень много, и вместе они дадут вполне себе кусок полилинии.

Ограниченность понимания и реализации БД меток в сасе никак не отменяет того факта, что при импорте валидного gpx и обратном экспорте желательно получать тот же самый gpx; рассуждения о том, чего хочет пользователь, нужны ли ему эти данные, какие атрибуты навешаны на точки в треке (тэги) - это всё не более чем фантазии, которые могут ничего общего с реальностью не иметь.

Реальность - она в том, что полилиния, составленная из кучки сегментов, каждый из которых валиден, является валидной линией и должна корректно отображаться, и формат gpx допускает создание числа сегментов равным числу точек в треке.

>будет бесполезен трек, если эту точку продублировать
Будет в треке информация о том, что в данное время в данной точке был прибор.
Может быть информация о причине разрыва трека (данные по спутникам).
А вообще если бы сас импортировал все атрибуты точек трека, такого вопроса бы у вас просто не возникло.

>ИМХО не валидна
Ок.
А линия из двух точек, если вторая совпадает с первой?

>нужно ли там очищать массив точек
Потеря данных - самое страшное, что может быть.
Так что надо просто проверить, если при создании линии одна точка, то оставить её для следующего возможного сегмента (в который она и уйдёт), а если следующий не сегмент линии (линия кончилась), то тогда добавить кусок из двух таких точек.
(0016309)
zed   
04-08-2015 10:38   
>То, что он не отображается в сасе - вообще не аргумент.
Ну, он и в GoogleEarth не отображается точно так же. Сколько ещё программ надо протестировать, чтобы оно стало аргументом? :)

> что полилиния, составленная из кучки сегментов
Это да, но тут несколько иной случай - полилиния из одного сегмента с одной точкой: http://www.gpslib.ru/tracks/info/9043

C одной стороны, я согласен, что по возможности нужно импортировать всё, что только можно. С другой стороны, без возможности увидеть на карте эту точку или просмотреть какие-либо дополнительные сведения о ней, будешь только тыкаться на эту точку и видеть пустоту. И спрашивать себя: "Что это за фигня?".
(0016313)
vasketsov   
04-08-2015 11:31   
>в GoogleEarth не отображается точно так же
Очевидно, из-за того, что в KML это невалидно?

>Сколько ещё программ надо протестировать
Ровно одну: валидатор GPX.

>несколько иной случай
А как ты предлагаешь различать эти случаи при импорте?
Я потому и предлагаю притягивать такие точки к существующим секциям, а если только одна, то сохранять с дублем (чтобы инфа не пропадала, раз уж в сасе нужен дубль для линии).

>полилиния из одного сегмента с одной точкой
Если валидный с точки зрения GPX объект предлагается вообще не импортировать, то тогда говорить о реализации импорта GPX не приходится.

>без возможности увидеть на карте эту точку
Видимость метки - не главное.
Главное - информация (атрибуты).
Кроме того, в принципе возможно даже найти невидимую метку по имени и перейти к ней, можно объединить несколько невидимых меток в одну, и тогда такая кучка "недолиний" станет видимой.

>просмотреть какие-либо дополнительные сведения о ней
Можно в менеджере меток.

Вообще говоря, аналогичная проблема может быть и для других форматов. Так что это не проблема формата, это исключительно вопрос отношения к информации. А информации там может быть много, это и данные со спутников, и температуры, и высоты-глубины, и скорость и время и прочее. Представь себе, что это всё есть в GPX и ты при импорте это просто похерил, просто потому что там одна точка, а не две, и есть проблемы с тем, чтобы её увидеть ;).

А невалидный LineString надо лечить по месту, так как для экспорта совершенно неважно, насколько наше понимание о валидности данных внутри БД саса соответствует валидности стороннего формата KML. То есть, если на вход LineString приходит одна точка, то стопудово надо её дублировать в экспорте и экспортировать с именем, категорией и прочими данными метки.
(0016314)
vdemidov   
04-08-2015 11:35   
>А линия из двух точек, если вторая совпадает с первой?
Формально сейчас с точки зрения базы вполне валидна, как и линия из одной точки. Проблема в том, что их нельзя увидеть ни на одном зуме и соответственно нельзя даже начать редактировать. Поэтому и стоит вопрос или предусматривать при рендеренге особую обработку таких случаев или запрещать метки с такой геометрией в базе.

А пока такие пути это именно источник вопросов "Что это за фигня?".
(0016315)
zed   
04-08-2015 11:37   
>Очевидно, из-за того, что в KML это невалидно?
Нет, GE понимает gpx напрямую, без конвертирования. И тем не менее, не отображает.

>Я потому и предлагаю притягивать
Ок, согласен на такой вариант. Сделаешь? Там по-моему будет одинаково что для SAS, что для SACS.
(0016327)
vasketsov   
04-08-2015 12:22   
>Сделаешь?
Разумеется. Когда решим всё окончательно.

>предусматривать при рендеренге особую обработку таких случаев
Хм, а разве нужна особая обработка для такого случая? Там же просто bounds по размеру отсекутся, ничего и не будет показано, разве нет?
А начать редактирование по идее можно и из окна управления метками.

Меня вот интересует следующий вопрос: в полигонах есть дырки, граница дырки полигона это полилиния (всегда размерность границы это размерность фигуры минус 1 либо пусто), соответственно, если дырка в полигоне представляет собой выколотую точку, то чем же является тогда граница дырки, если не одиночной линией в одну точку? Рендерить это тоже надо, с учётом того, что под полигоном с выколотой точкой может быть другой, который и должен просвечиваться в этой точке.
(0016334)
vdemidov   
04-08-2015 12:55   
> Хм, а разве нужна особая обработка для такого случая? Там же просто bounds по размеру отсекутся, ничего и не будет показано, разве нет?
В том то и дело, что оно на всех зумах отсечется и никогда на карте не отобразится.
> А начать редактирование по идее можно и из окна управления метками.
Сейчас нельзя. Там сейчас вызывается изменение свойств метки.

>всегда размерность границы это размерность фигуры минус 1 либо пусто
Что-то ты фигню написал. Размерность полигона 2 и размерность дырки тоже 2. Трехмерные полигоны мы по сути не рассматриваем.
(0016338)
vasketsov   
04-08-2015 13:08   
(edited on: 04-08-2015 13:10)
>Что-то ты фигню написал
:))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Размерность точки - 0.
Размерность линии - 1.
Размерность полигона - 2.

>Размерность полигона 2 и размерность дырки тоже 2
Только если дырка является полигоном.
А вообще я писал про ГРАНИЦУ геометрического примитива.

Что ты будешь делать в случае, если дырка в полигоне является одной выколотой точкой?

>Сейчас
Ну, это же не проблема? ;) Значит, технических проблем редактировать такие линии нет.

(0016341)
vdemidov   
04-08-2015 13:25   
Я рассматриваю дырки только в виде полигонов. Все остальное игнорируем.
(0016342)
vdemidov   
04-08-2015 13:25   
> Ну, это же не проблема? ;) Значит, технических проблем редактировать такие линии нет.
Ну, пока только проблема начать редактировать.
(0016344)
vasketsov   
04-08-2015 13:32   
Дырка в виде выколотой точки и так полигоном будет, так как её граница - это полилиния в виде одной точки или пары совпадающих точек.
Вопрос только в том, ты будешь для границы использовать одну точку или две одинаковых.
(0016353)
vdemidov   
05-08-2015 08:37   
>Вопрос только в том, ты будешь для границы использовать одну точку или две одинаковых.
Минимум 3. Полигон считается валидным после 3-х точек. Причем похоже нужно добавлять требование для путей и полигонов что бы MBR был не пустым.