SASGIS - SACS.Планета
View Issue Details
0000055SACS.Планета[All Projects] Хотелкаpublic19-08-2010 10:4427-04-2016 06:33
Lex-Chaos 
vasketsov 
normalmajorN/A
assignedopen 
WindowsVistaHome Premium
 
 
0000055: Присвоение точкам нескольких категорий, атрибуты меток и категорий
Хотелось бы присваивать точкам несколько категорий.
SQLite, категории, метки
related to 0000137closed vdemidov SAS.Планета Вложенные категории 
related to 0002451closed vdemidov SAS.Планета Работа с метками. Три режима просмотра содержимого Категории меток (два - "со" вложенными категориями и один - "без") 
related to 0003020confirmed  SAS.Планета Добавить в базе меток понятие "ссылка на метку" 
child of 0002563assigned vasketsov SACS.Планета Хранение меток в СУБД 
rar Marks.SLT.1.2.rar (974) 09-08-2013 12:18
https://bugtracker.sasgis.org/file_download.php?file_id=1466&type=bug
png new_attrib_1.png (16,230) 09-08-2013 22:36
https://bugtracker.sasgis.org/file_download.php?file_id=1468&type=bug
png

png new_attrib_hint.png (13,480) 09-08-2013 22:39
https://bugtracker.sasgis.org/file_download.php?file_id=1469&type=bug
png
Issue History
19-08-2010 10:44Lex-ChaosNew Issue
19-08-2010 10:46vdemidovNote Added: 0000102
19-08-2010 10:46vdemidovStatusnew => acknowledged
19-08-2010 10:46vdemidovProduct Version => 100707
19-08-2010 10:46vdemidovTarget Version => 16xxxx
06-10-2010 06:06TikhNote Added: 0000261
06-10-2010 17:59gpsMaxNote Added: 0000264
06-10-2010 18:01gpsMaxNote Edited: 0000264bug_revision_view_page.php?bugnote_id=264#r81
06-10-2010 18:03gpsMaxNote Edited: 0000264bug_revision_view_page.php?bugnote_id=264#r82
06-10-2010 18:05gpsMaxNote Edited: 0000264bug_revision_view_page.php?bugnote_id=264#r83
07-10-2010 05:18vdemidovNote Added: 0000270
07-10-2010 06:45gpsMaxNote Added: 0000277
07-11-2010 19:40gpsMaxTag Attached: категории
06-04-2011 15:28gpsMaxRelationship addedrelated to 0000137
11-04-2011 07:11vdemidovStatusacknowledged => confirmed
06-06-2011 21:48gpsMaxPrioritynormal => none
26-07-2013 16:26vasketsovProjectSAS.Планета => SACS.Планета
26-07-2013 16:27vasketsovProduct Version100707 =>
26-07-2013 16:27vasketsovTarget Version16xxxx =>
26-07-2013 16:27vasketsovSummaryПрисвоение точкам нескольких категорий => Присвоение точкам нескольких категорий, атрибуты меток (EAV)
26-07-2013 16:28vasketsovNote Added: 0012222
26-07-2013 16:29vasketsovTag Attached: метки
26-07-2013 16:29vasketsovTag Attached: SQLite
26-07-2013 16:29vasketsovAssigned To => vasketsov
26-07-2013 16:29vasketsovStatusconfirmed => assigned
26-07-2013 16:30vasketsovPrioritynone => normal
26-07-2013 16:30vasketsovSeverityminor => major
26-07-2013 16:30vasketsovReproducibilityhave not tried => N/A
31-07-2013 13:56vasketsovNote Added: 0012265
31-07-2013 20:58vasketsovSummaryПрисвоение точкам нескольких категорий, атрибуты меток (EAV) => Присвоение точкам нескольких категорий, атрибуты меток и категорий
09-08-2013 12:18vasketsovFile Added: Marks.SLT.1.2.rar
09-08-2013 13:13vasketsovNote Added: 0012324
09-08-2013 22:36vasketsovNote Added: 0012334
09-08-2013 22:36vasketsovFile Added: new_attrib_1.png
09-08-2013 22:39vasketsovFile Added: new_attrib_hint.png
12-08-2013 15:15JIeT4uKNote Added: 0012340
12-08-2013 15:22vasketsovNote Added: 0012341
12-08-2013 15:22vasketsovNote Edited: 0012341bug_revision_view_page.php?bugnote_id=12341#r5599
12-08-2013 15:33vasketsovNote Edited: 0012341bug_revision_view_page.php?bugnote_id=12341#r5600
12-08-2013 15:34JIeT4uKNote Added: 0012342
12-08-2013 15:35vasketsovFile Added: SASPlanet.rar
12-08-2013 15:39JIeT4uKFile Added: marks_err.png
12-08-2013 15:46vasketsovFile Deleted: marks_err.png
12-08-2013 15:47vasketsovNote Edited: 0012340bug_revision_view_page.php?bugnote_id=12340#r5602
12-08-2013 15:47vasketsovNote Deleted: 0012342
14-08-2013 11:27vasketsovNote Added: 0012397
14-08-2013 20:28vasketsovNote Added: 0012419
15-08-2013 07:57vasketsovFile Deleted: SASPlanet.rar
21-06-2014 14:59zedRelationship addedrelated to 0002451
22-12-2014 19:22vasketsovRelationship addedchild of 0002563
27-04-2016 06:33zedRelationship addedrelated to 0003020

Notes
(0000102)
vdemidov   
19-08-2010 10:46   
Когда-нибудь. Вряд ли скоро. Замена связи "Один ко многим" на "Многие ко многим" очень непростое удовольствие.
(0000261)
Tikh   
06-10-2010 06:06   
А что если добавить независимые от категорий теги к точкам?

Т. е. чтобы точки как были в одной категории, так и остались, но в их коде, который в файле .sml добавился бы атрибут, к примеру: "tags=банкомат, альфа-банк, деньги, банк".

И чтобы в программе можно было выбирать: отображать теги такие-то и такие-то. Поле для текстового ввода, которое работает как фильтр. Что в него вручную ввели, какие теги через запятую, такие отображает. Какие не ввели - не отображает.
(0000264)
gpsMax   
06-10-2010 17:59   
(edited on: 06-10-2010 18:05)
Я вчера тоже думал про теги.

Вот только не надо текстового ввода при поиске. Например, в системах управления контентом каждому тегу присваивается идентификатор и каждой записи (здесь точке/линии/полигону) сопоставляется некоторое количество этих самых идентификаторов. Далее выводится список тегов, вот и всё. Их, тегов, ведь немного будет, не более нескольких десятков.

В SAS можно реализовать это так - сделать отдельный файл tags.sml по образу и подобию categorymarks.sml, и в файле точек marks.sml привязывать идентификаторы тегов, как это сделано с категориями. Правда, есть существенная разница - тегов-то может быть несколько, что возвращает всё к первому комменту про замену связи.

(0000270)
vdemidov   
07-10-2010 05:18   
Любое изменение в структуре файлов *.sml приведет к полной несовместимости старых файлов с новыми. Так что учитывайте это при высказывании пожеланий. От себя скажу, что такие изменения буду вносить в последнюю очередь, когда все остальное уже будет работать так как мне хочется. Смотрим на Target Version этого бага :)
(0000277)
gpsMax   
07-10-2010 06:45   
Остальное - это плагины? Очень хочется увидеть их до начала следующей эпохи майя. :-)
(0012222)
vasketsov   
26-07-2013 16:28   
Буду делать для меток возможность указания произвольного перечня атрибутов и их значений (в т.ч. выбор их из справочников). Только для меток в SQLite.
(0012265)
vasketsov   
31-07-2013 13:56   
Здесь же будет новый тип "метки" - Ссылка. Чтобы можно было метку привязать к ещё одной категории (не дублируя её, хотя возможно получится сделат собственное имя и описание для ссылки). Что касается атрибутов меток, то для ссылок атрибуты будут как для меток, но можно будет по умолчанию взять атрибут из родительской метки, если у ссылки его не будет. Подсчёт числа ссылок не планируется: при удалении ссылки удаляется только ссылка, при удалении метки удаляется сама метка и все её ссылки.
(0012324)
vasketsov   
09-08-2013 13:13   
Приаттаченный файлик Marks.SLT.1.2.sql надо будет разархивировать и положить рядом с Marks.SLT.0.1.sql (рядом с базой меток в SQLite). Это потребуется для обновления структуры БД меток в SQLite - без этого метки в SQLite в новых версиях SACS работать не будут (ввиду отсутствия необходимых таблиц).

Обновление версии БД меток с 1 на 2 является обязательным. Последняя версия SACS, которая работает по 1-й версии БД меток - это последняя ночнушка SACS.Planet.Nightly.130803.671.7z. Теоретически, если старые версии SACS (ревизия <= 671) запускать по 2-й версии БД меток (созданных или обновлённых программой с ревизией > 671), то проблем быть не должно.

При обновлении никаких операций над данными не производится, обновлением только создаются новые таблицы, так что риска потерять данные нет. Тем не менее, для целей самоуспокоения рекомендую сделать бэкап: скопировать базу меток в отдельный архивчик с инфой для восстановления.

В версии 2 (что касается именно БД) добавлено (или ещё будет чуть позже добавлено, но уже без внесения изменений в структуру БД, то есть, только в EXE):
а) создание меток типа "Ссылка" (Link);
б) атрибуты для меток и категорий;
в) плагины отображения меток для категорий.

Пункт а) - Ссылки.

Возможность работать со ссылки включается в форме управления метками на 2-й закладке. Под работой со ссылками подразумевается создание ссылок и отображение их в форме управления метками (там к именам после типа объекта добавляется звёздочка) и в основном окне программы.
Ссылка - это дополнительная связка между меткой и другой категорией. На эту связку навешивается признак видимости, так что оригинальная метка может быть невидимой, а ссылка - видимой. Единственный способ создания ссылок - перетаскивание меток на другие категории. Чтобы отличать это режим от переноса меток между категориями, в контекстном меню предусмотрена галочка для переключения режима drag'n'drop.

Ссылки на ссылки не создаются. При удалении ссылки удаляется только эта самая ссылка. При удалении метки удаляются также все её ссылки.

Ссылки не экспортируются ни в каком виде (при экспорте ссылки в kml будет экспортирована исходная метка). Даже при экспорте в базу SQLite. И соответственно при импорте базы SQLite ссылки оттуда также не прилетят. Так что полный бэкап базы меток экспортом всех категорий и ссылок в SQLite сделать не получится.

NB:
Если кто придумает более прозрачный способ создания ссылок - обсудим. Например, можно было бы создавать дерево в контекстном меню для метки (Создать ссылку -> Категория 1 -> ...) и по выбору конкретного пункта подменю создавать ссылку в выбранной категории. Но пока что при большом числе категорий этот способ представляется неудобным.

Пункт б) - Атрибуты.

В главном меню рядом с управлением метками добавлена пункт для вызова справочника атрибутов. Это общий справочник. Туда можно добавлять записи, настраивать типы, включать или отключать отображение некоторых в хинте (при наведении мышки на объект на карте, на это есть дополнительный общий выключитель), указать доступность атрибута и т.п.

Для объектов в контекстное меню (на карте и в управлении метками) добавлен пункт Attributes. По нажатию на него открывается форма с атрибутами объекта. Форма не модальная, так что их можно наоткрывать много. Атрибут или подставляется из справочника (по кнопочке), либо указывается вводом по коду, если надо быстро и если код атрибута известен хотя бы примерно (если нет кода с точно таким же значением - будет подставлен минимальный код, начинающийся на введённое значение). Значение атрибута для объекта указывается вручную (пока что только так).

NB:
1. Есть ряд недоделок. Например закладка Items в справочнике атрибутов задумана для формирования исчерпывающего перечня (справочника) значения атрибутов для объектов. Соответственно её доделка позволит значение выбирать из справочника, а не указывать руками. Но в целом недоделки совсем не критичны, и пользоваться атрибутами уже можно.
2. Вопрос импорта и экспорта атрибутов будет решаться отдельно. Пока что атрибута не экспортируются и не импортируются. То есть по прежнему для полного бэкапа надо архивировать файл всей базы меток, а не экспортировать всё.
3. Не хватает иконки типа как для формы управления метками, только не с бумажкой, а с буквой А (или какой-нибудь другой понятной). Как только она появится - можно будет понадобавлять её и пункта для вызова атрибутов меток и категорий во многих местах. К сожалению, место произрастания моих рук слабо коррелирует с умением рисовать правильные иконки.
4. Планируется доработка импорта меток, чтобы некоторые атрибуты (по совпадению описания атрибута и импортируемого параметра, если разрешено опцией атрибута) залетали не в описание метки, а в отдельные поля (значения соответствующего атрибута). Например, можно будет настроить так импорт полигонов из росреестра, чтобы в хинт попадало только нужное. Возможно, чтобы некоторые параметры (опять же опцией у атрибутов) вообще не импортировались.

По пункту в) пока без особенных комментариев: в базе всё нужное есть, но в EXE пока что ничего не вытащено, идея - настройка отображения меток (и ссылок) на основании значений их атрибутов, а также на основании DLL, привязанной к категории.

Дополнительно вытащил некоторые внутренние настройки БД меток в форму управления метками (не надо ходить ковырять ini-шку).

Также дополнительно переделал внутреннее хранение данных отображения (appearance) меток. По моим данным, стало чуть быстрее и компактнее в памяти (по счётчикам производительности). Если у кого счётчики "просядут" и например включение меток будет выполняться заметно дольше чем прежде - пишите.

Сегодня постараюсь уже опубликовать сделанное. Напоминаю, это только для меток в SQLite.
(0012334)
vasketsov   
09-08-2013 22:36   
По пункту 4 в разделе б) - допилил импорт полигонов из росреестра, чтобы он нюхал доступные для полигонов атрибуты меток и либо вообще не добавлял параметр никуда, либо в описание, либо в атрибуты меток, либо в оба места.

После возможной настройки справочника атрибутов в описании остаётся только нужное, например вот это:

Кадастровый номер земельного участка:59:39:0020201:14
Вид разрешенного использования (код):Для объектов общественно-делового значения
Категория земель (код):Земли поселений (земли населенных пунктов)
Дата актуальности:4/23/2013
OBJECT_ADDRESS:Пермский край
:р-н Чердынский
:пгт Ныроб
:ул Лесная
:15

А всё остальное либо херится, либо залетает в атрибуты конкретной метки, либо в оба места (см. приаттаченный скриншот).
(0012340)
JIeT4uK   
12-08-2013 15:15   
(edited on: 12-08-2013 15:47)
обновился, теперь при добавлении метки создается только категория (если ее не было), сама метка не сохраняется.

Что я делаю не так?

Ничего не менялось и не настраивалось

С панели кнопок ничего не происходит, а вот если вызвать окно "Управление метками" и там создать , то метка создается

(0012341)
vasketsov   
12-08-2013 15:22   
(edited on: 12-08-2013 15:33)
Возьмите приаттаченный EXE, если неохота ждать "ночнушку" до завтра

(0012397)
vasketsov   
14-08-2013 11:27   
При обычном импорте kml (а также kmz) и gpx (а также gpx.gz) атрибуты также будут подхватываться. Заодно сделал импорт оформления, но не всё что есть. Например, не импортируется сама иконка (касается как kml, так и gpx с тэгом sym для wpt).
(0012419)
vasketsov   
14-08-2013 20:28   
А вот так будем экспортировать и импортировать атрибуты (со значениями, для меток):
https://developers.google.com/kml/documentation/kmlreference#data

<ExtendedData>
<Data name="string">
<displayName>...</displayName> <!-- string --> <value>...</value> <!-- string -->
</Data>
</ExtendedData>