SASGIS - SAS.Планета
View Issue Details
0001115SAS.Планета[All Projects] Багpublic16-01-2012 04:3318-10-2012 13:03
Tolik 
vdemidov 
lowminoralways
resolvedfixed 
120808 
131111131111 
0001115: При использовании BerkeleyDB не работает Open Primary Map Tile Folder
А также и Open Overlay Layer Tile Folder.
В ОС передаётся путь типа C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb\x2472\y1282.png, надо его обрезать до корректного.
Кстати, эта ссылка получена путём Copy to Clipboard -> Pathname to Tile in Cache.
Разделитель между 9.5.sdb и x2472 надо сделать каким-то другим, чтобы ОС не думала, что 9.5.sdb - это директория.
БД
Issue History
16-01-2012 04:33TolikNew Issue
16-01-2012 04:37TolikStatusnew => acknowledged
16-01-2012 06:09vdemidovNote Added: 0005000
16-01-2012 09:49gpsMaxTag Attached: БД
16-01-2012 10:40vasketsovNote Added: 0005008
16-01-2012 11:20TolikNote Added: 0005011
16-01-2012 11:23vdemidovNote Added: 0005012
16-01-2012 11:48TolikNote Added: 0005013
16-01-2012 13:04vasketsovNote Added: 0005016
16-01-2012 17:01GarlNote Added: 0005018
16-01-2012 17:02GarlNote Edited: 0005018bug_revision_view_page.php?bugnote_id=5018#r2502
16-01-2012 21:05vasketsovNote Added: 0005025
24-01-2012 14:54vdemidovStatusacknowledged => confirmed
24-01-2012 14:54vdemidovTarget Version => 24xxxx
25-01-2012 08:53zedNote Added: 0005217
25-01-2012 08:55GarlNote Added: 0005218
25-01-2012 09:08vdemidovNote Added: 0005219
25-01-2012 09:11vdemidovNote Added: 0005220
09-08-2012 06:49vdemidovProduct Version.Nightly => 120808
18-10-2012 13:03vdemidovStatusconfirmed => resolved
18-10-2012 13:03vdemidovFixed in Version => 131111
18-10-2012 13:03vdemidovResolutionopen => fixed
18-10-2012 13:03vdemidovAssigned To => vdemidov
18-10-2012 13:03vdemidovTarget Version24xxxx => 131111

Notes
(0005000)
vdemidov   
16-01-2012 06:09   
Не совсем. Нужно просто различать имя тайла и имя файла в котором тайл находится. Я об этом как-то не подумал раньше. А смысла плодить новые разделители ИМХО нет.
(0005008)
vasketsov   
16-01-2012 10:40   
>надо сделать каким-то другим
Надо бы конечно. С точки зрения имён объектов в кэше саса это вторичное пространство имён, и при разборе ссылки всегда должна быть понятна точка перехода в него. В частности, в ядре WinNT вторичное пространство имён - это реестр и файловая система, ссылку на объекты во вторичном пространстве имён никогда не спутаешь на обычные ссылки на объекты (не пишу про имя объекта, потому что формально с точки зрения ядра NT файл - не именованный объект).
Вот только хороший разделитель не придумать. Голосую за двойной слеш (точнее, повторение первого слеша, если он в другую сторону направлен), обработать его нахождение в строке будет проще всего, а о неустранимых недостатках говорить (без наличия драйвера режима ядра, который бы позволял входить в файлы BDB как в обычные папки) пока рано. Может конечно я чего и не догоняю, и надо делать вставку \??\, но не во всех файловых системах нельзя писать ? в именах файлов.
(0005011)
Tolik   
16-01-2012 11:20   
Всё равно эта строка не является путём к файлу, так что можно использовать любой разделитель, хоть ::, хоть |. Но можно и не менять, если это вызовет какие-то трудности.
(0005012)
vdemidov   
16-01-2012 11:23   
Я веду к тому что просто нет смысла парсить, то что мы сами формируем. А раз так то нет смысла вводить отдельные разделители. Вон в том же Total Commander после входа в архив путь в заголовке показывается "c:\Downloads\JNXLib.rar\samples\" и ничего. Лично мне нравится. Так что нужно просто что бы сам САС формировал правильный путь для открытия папки, где лежит файл в виде C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb
А вот если его просят скопировать имя тайла в буфер, то уже можно сгенерить полный путь C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb\x2472\y1282.png А уж пользователь пусть разбирается что это за контейнер.
Ведь можно же сделать и zip контейнеры с группировкой, например по 256 тайлов, а в них нынче даже винда заходит как в папки, не говоря уже о Total Commander и тд.
(0005013)
Tolik   
16-01-2012 11:48   
Согласен, что нет смысла парсить. Я имел в виду разделитель, визуально понятный. Читабельный. Но я не настаиваю.
(0005016)
vasketsov   
16-01-2012 13:04   
>Всё равно эта строка не является путём к файлу
Проблема в том, то она МОЖЕТ быть путём к файлу.

Дело в том, что вообще говоря не понятно, JNXLib.rar это файл или настоящая папка. Причём в случае саса в строке C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb\x2472\y1282.png всё что после "yanarodscheme" сас создаёт уже исключительно самостоятельно, без участия пользователя. То есть неискушённый юзер совершенно может быть не в курсе, папка это (допускающая дальнейший разбор) или файл (следствие вольного формирования имени), и можно легко прогнозировать дальнейшие непонятки вида "почему не открывается". А в формировании пути к тайлам хотелось бы полностью исключить возможности двоякого толкования.
Вот если будет формирование перечня тайлов для скачки внешней тулзой - она уже не сможет понять автоматически тип кэша и куда что складывать, ведь нельзя заранее предполагать невозможность скачивания только одного зума (без z13) - соответственно тулза настраивается на один зум - и обламывается в создании папки 9.5.sdb.
Или что ещё важно - после скачки - заведомо невозможно будет сохранить тайл на диске либо корректно обработать ошибку сохранения, имея только сам тайл и его полный путь. Если файла sdb нет, будет создана папка со всеми вытекающими.
То есть конечно можно решать проблемы по мере из возникновения, но ещё проще не создавать проблемы минимальной доработкой. Да даже в ForceDirectories скормить такой путь может оказаться весьма неприятным, а автономно (без дополнительной логики обработки ".sdb", причём ТОЛЬКО для кэша беркли) его не "вычистить".
(0005018)
Garl   
16-01-2012 17:01   
(edited on: 16-01-2012 17:02)
я сразу предлагал юзать : как разделитель.
C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb:x2472\y1282.png
или как вариант :\
C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb:\x2472\y1282.png

(0005025)
vasketsov   
16-01-2012 21:05   
Двоеточие юзается в качестве разделителя для файловых потоков на NTFS. Нельзя двоеточие.
(0005217)
zed   
25-01-2012 08:53   
Так как в итоге решать эту багу? Добавить ещё один метод в хранилище, по которому отдавать имя контейнера или что?
(0005218)
Garl   
25-01-2012 08:55   
по мне: так можно и оставить как есть сейчас.
(0005219)
vdemidov   
25-01-2012 09:08   
Какие вообще в перспективе возможны тайлохранилища:
1. Папка в которой по папкам раскиданы файлы. 1 тайл в 1 файле. (То что есть уже давно)
2. Папка в которой по папкам раскиданы контейнеры. N тайлов в 1 файле. (Текущая реализация с БерклиДБ)
3. Папка в которой лежит большой контейнер. Все тайлы в 1 файле. (Например на базе SQLite)
4. База на сервере БД, сервере приложений или еще что-то.
Какие еще варианты? Я больше придумать не могу.
Поэтому для унификации предлагаю и в 4-м случае сделать папку, в которой хранить например файлик с параметрами подключения к базе и тд.
Получается что папка всегда есть.
(0005220)
vdemidov   
25-01-2012 09:11   
Тоесть нужно сделать метод у тайлохранилища, который будет всегда отдавать максимально полный путь к месту где хранится тайл. В 1-м случае это будет сам файл с тайлом.
Во 2-м и 3-м это файл контейнера.
В 4-м это файл с параметрами подключения к базе.