SASGIS - SAS.Планета
View Issue Details
0001285SAS.Планета[All Projects] Багpublic03-05-2012 13:0510-10-2012 11:47
Dima2000 
Garl 
normalminoralways
closedfixed 
WindowsXPProfessional SP3
.Nightly 
120808120808 
0001285: Небольшой глюк в отображении при экспорте в формат SAS4WinCE
Рановато закрыли http://sasgis.org/mantis/view.php?id=1282
В процессе экспорта, пока не записано в файл данных ни одного тайла (ну вот нету тайлов в кэше SAS или не приняты классом экспорта), номер файла данных =-1 и отображается как (.d0-1), что есть некорректно. Такой файл данных классом разумеется не создаётся, т.е. глюк лишь в отображении. Надо проверять DataNum >= 0 и только в этом случае отображать скобку с номером. Или если DataNum < 0, то отображать '(--)'.
SAS4WinCE
related to 0001282closed Garl Экспорт в упакованный формат SAS4WinCE 
Issue History
03-05-2012 13:05Dima2000New Issue
03-05-2012 13:25PapazolNote Added: 0006655
03-05-2012 19:00GarlNote Added: 0006656
03-05-2012 19:15GarlAssigned To => Garl
03-05-2012 19:15GarlStatusnew => assigned
03-05-2012 20:06Dima2000Note Added: 0006657
03-05-2012 20:18Dima2000Note Added: 0006658
03-05-2012 20:36Dima2000Note Edited: 0006658bug_revision_view_page.php?bugnote_id=6658#r3265
04-05-2012 02:57GarlNote Added: 0006659
04-05-2012 05:20GarlNote Added: 0006660
04-05-2012 10:10Dima2000Note Added: 0006661
04-05-2012 10:19Dima2000Note Added: 0006662
04-05-2012 10:20Dima2000Note Edited: 0006662bug_revision_view_page.php?bugnote_id=6662#r3267
04-05-2012 10:39Dima2000Note Added: 0006663
04-05-2012 10:41GarlNote Added: 0006664
04-05-2012 10:42Dima2000Note Edited: 0006663bug_revision_view_page.php?bugnote_id=6663#r3269
04-05-2012 11:22GarlNote Added: 0006665
04-05-2012 11:44Dima2000Note Added: 0006666
04-05-2012 22:23Dima2000Note Added: 0006674
05-05-2012 05:58TolikNote Added: 0006676
05-05-2012 06:01GarlNote Added: 0006677
05-05-2012 06:06TolikNote Added: 0006678
05-05-2012 06:08TolikNote Edited: 0006678bug_revision_view_page.php?bugnote_id=6678#r3273
05-05-2012 06:42PapazolNote Added: 0006679
05-05-2012 09:54Dima2000Note Added: 0006681
05-05-2012 10:05TolikNote Added: 0006683
05-05-2012 10:07GarlNote Added: 0006684
05-05-2012 10:15TolikNote Added: 0006685
05-05-2012 10:17Dima2000Note Added: 0006686
05-05-2012 10:18Dima2000Note Added: 0006687
05-05-2012 10:20Dima2000Note Added: 0006688
05-05-2012 10:21Dima2000Note Edited: 0006688bug_revision_view_page.php?bugnote_id=6688#r3278
05-05-2012 10:21PapazolNote Added: 0006689
05-05-2012 10:22TolikNote Added: 0006690
05-05-2012 10:25Dima2000Note Added: 0006691
05-05-2012 10:27Dima2000Note Added: 0006692
05-05-2012 10:35Dima2000Note Added: 0006694
05-05-2012 10:36TolikNote Added: 0006696
05-05-2012 10:37TolikStatusassigned => resolved
05-05-2012 10:37TolikFixed in Version => 120808
05-05-2012 10:37TolikResolutionopen => fixed
05-05-2012 10:38TolikTarget Version => 120808
05-05-2012 10:38TolikRelationship addedrelated to 0001282
05-05-2012 10:40GarlNote Added: 0006699
13-05-2012 09:52gpsMaxTag Attached: SAS4WinCE
10-10-2012 11:47TolikStatusresolved => closed

Notes
(0006655)
Papazol   
03-05-2012 13:25   
Ничего, это исправится. Поскольку я не успел в той теме поблагодарить всех принявших участие в этом непростом деле, сделаю это сейчас. Спасибо вам!
(0006656)
Garl   
03-05-2012 19:00   
ага сейчас профиксим.
и низкий поклон за то что разбудили желания и дали пинок к созданию очень нужного и полезного дела.
(0006657)
Dima2000   
03-05-2012 20:06   
На форуме у v_max уже обнаружили экспорт в свежей ночнушке и безумно рады. :) Я то надеялся потестить втихаря недельку...
От меня огромное спасибо всем разработчикам (и Garl особенно!) за помощь в подгонке кода к стандартам Планеты. И конечно за встраивание в Планету!
(0006658)
Dima2000   
03-05-2012 20:18   
(edited on: 03-05-2012 20:36)
Garl, я бы предложил следующий код, вместо вашего в репо:
VExt := '(.d' + inttostr(VSAS4WinCE.DataNum) + ')';
if VSAS4WinCE.DataNum < 10 then VExt := '(.d0' + inttostr(VSAS4WinCE.DataNum) + ')';
if VSAS4WinCE.DataNum < 0 then VExt := '';
ProgressInfo.SecondLine := SAS_STR_Processed + ' ' + inttostr(VTilesProcessed) + ' '+VExt;
Ваш будет сразу выводить (.d00), а имхо лучше не показывать скобку вообще пока файл не создан.

(0006659)
Garl   
04-05-2012 02:57   
та можно и так
просто я даже не успеваю увидеть когда оно так делает.
с другой стороны - идёт создание первого тома (d00) и по логике мы правы отображая "d00"
(0006660)
Garl   
04-05-2012 05:20   
как лучше перевести обозначить
"Записывать служебную информацию"
"Дополнять информацией для восстановления"
"Записывать информацию о тайлах"
или ещё варианты ...
(0006661)
Dima2000   
04-05-2012 10:10   
>просто я даже не успеваю увидеть когда оно так делает.
Выделите облсть, где слева много отсутствующих тайлов (к примеру включите лишь 24-й зум) - и пока не найдётся первый присутствующий тайл увидите.

>как лучше перевести обозначить
Я за "Save recovery info" / "Записывать информацию для восстановления".

У меня вот такая мысля пришла. Учитывая что есть распаковщик от v_max и будет мой (с поддержкой этой самой info), получается достаточно удобно обмениваться кусками кэша в этом формате. Хотел спросить о нужности добавления ещё размеров в список, но оказывается в ночнушке можно вводить размер руками. Класс, ничего делать не надо, уже всё есть. :)
(0006662)
Dima2000   
04-05-2012 10:19   
(edited on: 04-05-2012 10:20)
У меня замечание, по исходнику, в проге живьём пока не видел.
Сравните две строки из u_ThreadExportToCE.pas:
ProgressInfo.SecondLine := SAS_STR_Zoom + ': ' + inttostr(Vzoom) + ' ' + SAS_STR_Tiles + ': ' + inttostr(VTilesToProcess);
и
ProgressInfo.SecondLine := SAS_STR_Processed + ' ' + inttostr(VTilesProcessed) + VExt;
Вам не кажется нелогичным показывать в одном месте по разному? Добавка зума может и хорошо, но тогда и во второе место тоже надо, идентично первому.
Или это так и задумано? Тогда извините, надо глянуть как оно в работе выглядит.

(0006663)
Dima2000   
04-05-2012 10:39   
(edited on: 04-05-2012 10:42)
Ещё, давайте наконец разберёмся с расчётом VMaxSize в u_ExportProviderCE.pas.
Что его можно вводить руками это прекрасно, но вот что он уменьшается на 1МБ уже совсем не прекрасно, пока минимум был 256МБ это было несущественно, но теперь, давайте уж сделаем корректно.
Я предлагаю так:
  VMaxSize := Strtointdef(FFrame.cbbMaxVolSize.Text, 0);
  if (VMaxSize < 1) or (VMaxSize > 2047) then raise {Исключение подставьте какое нужно, с указанием недопустимости ввода кривых чисел};
Да, я специально отказался от регэкспа, любой нецифровой символ должен приводить к ошибке (raise), а не вырезать из текста лишь цифры. Указание пользователем множителя (КБ, МБ, ГБ, ТБ) всё равно ведь не поддерживается да и не нужно.
Перевести же в мегабайты можно и в момент вызова конструктора в u_ThreadExportToCE.pas:
  VSAS4WinCE := TSAS4WinCE.Create(FTargetFile, FMaxSize*1048576, FComment, FRecoverInfo);
Или тоже самое в u_ExportProviderCE.pas:
  TThreadExportToCE.Create(..., VMaxSize*1048576, ...);

PS. И убрать из строки ввода размера символы Mb, они есть над строкой в её названии "Max volume size, Mb", считаю этого достаточно. А в поле вводить лишь чистые цифры.

(0006664)
Garl   
04-05-2012 10:41   
кстати да.
(0006665)
Garl   
04-05-2012 11:22   
перевел ввод Мб из ComboBox в SpinEdit. (-1 строка кода и исключение )
(0006666)
Dima2000   
04-05-2012 11:44   
Сделайте Save recovery info изначально включенной. Говорил же об этом выше.
(0006674)
Dima2000   
04-05-2012 22:23   
Вижу, сделали, отлично. Теперь бы поглядеть на это в ночнушке...

И ещё.
Не даёт мне покоя объявление типов в интерфейсе юнита, неправильно это, вдруг где пересечётся с остальной Планетой? Переместите объявление трёх типов данных в private класса, а? Я даю и разрешение и даже прошу. Сам я это проверить не могу, моя дельфи такое не компилит. От такого перемещения ничего испортиться не должно.
(0006676)
Tolik   
05-05-2012 05:58   
> Учитывая что есть распаковщик от v_max и будет мой (с поддержкой этой самой info), получается достаточно удобно обмениваться кусками кэша в этом формате.

А что за распаковщик? Ссылку киньте, пожалуйста.
А может, добавить поддержку этого кэша прямо в САС.Планету? Хотя бы read-only, если полноценный трудно сделать, было бы ещё удобнее.


В сегодняшней ночнушке (120505.5493) всё исправлено.
(0006677)
Garl   
05-05-2012 06:01   
с полноценной поддержкой кэша думаю будут сложности ибо он имеет ограницения на размер файла. да и надо ли оно?

>Переместите объявление трёх типов данных в private класса, а?
как попробую - отпишусь.ь
(0006678)
Tolik   
05-05-2012 06:06   
(edited on: 05-05-2012 06:08)
Я думаю, надо, хотя бы на чтение.
Скачал весь кэш целиком (например, какую-нибудь старую карту города) и пользуйся. Не надо хранить/ копировать много маленьких файлов.
Тем более, если пользуешься и на СЕ/Андроиде.

Напишите подробнее про ограничения, решим, стоит ли открывать хотелку.

(0006679)
Papazol   
05-05-2012 06:42   
Несмотря на имеющиеся ограничения, такой формат вполне мог бы быть использован для хранения отдельных снимков, например, от Роскосмоса или DG. Поскольку эти снимки не имеют версий, перекачивать их не нужно, а хранить в упакованном формате всегда лучше.
(0006681)
Dima2000   
05-05-2012 09:54   
>А что за распаковщик? Ссылку киньте, пожалуйста.
http://4pna.com/showpost.php?p=145833&postcount=153
Мой будет примерно аналогичным, только без .NET и с использованием recovery info для определения имён и расширений файлов при её наличии в файлах (тогда и файл индекса не требуется).

>А может, добавить поддержку этого кэша прямо в САС.Планету? Хотя бы read-only, если полноценный трудно сделать, было бы ещё удобнее.
Я бы с превеликим удовольствием!! Вот тут как раз про это писал - http://sasgis.org/mantis/view.php?id=1282#c6641
Сделать модификацию такого хранилища на лету проблематично, я пока не уверен что можно и нужно. А вот с чтением проблем вообще никаких.
Причём я бы даже добавил чтение такого хранилища в дополнение к существующему, при ненахождении файла на диске обратиться к пакованному архиву.
Т.к. тайлы в архиве хранятся по координатам, без путей, то очевидно поддерживаются все 4 варианта файловых хранилищ из Планеты.

Я готов добавить в класс метод чтения хранилища (хотя по уму это надо отдельный класс сделать, что тоже не проблема) на предмет поиска тайла по координатам. Ну и ещё чего-нибудь до кучи, к примеру сужения ограничивающего box до реально присутствующих в хранилище тайлов по любому зуму.

>Напишите подробнее про ограничения
Ограничения формата? 130млн тайлов (больше не влезет в 2ГБ индекса), 100 файлов данных с тайлами каждый по 2ГБ, по каждым координатам (z,x,y) строго один тайл (иначе в сортированых таблицах индекса будут повторы и какой тайл выберется предсказать невозможно, хотя это и не ошибка). Файл индеса хранит сортированные (для двоичного поиска) таблицы по Z, X[Z], Y[Z,X]. Модификацию формата сделать сложно именно из-за сортированности таблиц индекса, ну ещё из желания уложить их в файл плотно, без дыр.
(0006683)
Tolik   
05-05-2012 10:05   
Ну, я-то предлагал по-простому: ещё 1 тип кэша - SAS4WinCE.
Как я понял, на чтение ограничений нет, на запись серьёзные.
Давайте тогда откроем такую хотелку - поддержка только на чтение.

Вы предлагаете более продвинутую фичу - чтение из дополнительного кэша при остутствии тайла в основном. То есть если нет в 1-м кэше, смотрим в 2-й, если там есть - выводим на экран. Это в режиме Кэш и Интернет+Кэш. Ну, в принципе, можно и такую хотелку открыть, только как это в гуях сделать - не представляю.
(0006684)
Garl   
05-05-2012 10:07   
универсальнее - отдельный тип кэша пусть и ReadOnly.
а теперь внимание вопрос: стоит ли овчинка выделки?
(0006685)
Tolik   
05-05-2012 10:15   
Ну мне как потребителю овчинка нужна.
А вы как программист скажите, сколько стоит выделка :)
(0006686)
Dima2000   
05-05-2012 10:17   
>стоит ли овчинка выделки?
Не знаю. Я не так часто перекачиваю огромные обалсти, чтобы не хранить их в архиве. Зато часто будет не нужен контейнер для миллионов мелких файлов, они будут собраны в архив и только изменения от состояния архива будут россыпью.

Делать отдельный тип кэша - вот этого как раз не знаю зачем. Его же не докачаешь тогда. :(
А вот "чтение из дополнительного кэша при остутствии тайла в основном" - полезная фича! Именно её и предлагаю. В GUI это просто, лишь галка использовать такой кэш и всё. Лежать он должен (это можно потребовать жестко, как и его имя совпадающее с папкой кэша) в корневой папке карты, там где каталоги z1..z24. Сама SAS его модифицировать никогда не будет, это проблема пользователя. Накачал в основной кэш много - раз в неделю/месяц/год запустил упаковку в архив. Интерфейс такой упаковки дело обсуждаемое, к самому принципу поддержки второго хранилища не относится.
(0006687)
Dima2000   
05-05-2012 10:18   
>А вы как программист скажите, сколько стоит выделка :)
Я готов всё написать, только встраивайте! И советуйте как вам удобнее, чтобы я так и написал. :)
(0006688)
Dima2000   
05-05-2012 10:20   
(edited on: 05-05-2012 10:21)
Давайте откроем хотелку и перенесите обсуждение сразу туда, а? Если нет, ну так закроете...
Уже открываю.

(0006689)
Papazol   
05-05-2012 10:21   
Если делать продвинутую фичу, то в режиме Интернет+кэш программа не должна искать тайлы в упакованном формате, потому что, если они есть только там, а в обычном их нет, то они и не будут скачаны.
(0006690)
Tolik   
05-05-2012 10:22   
> Давайте откроем хотелку
Конечно, это будет правильно. Две хотелки. А эту уже пора переводить в resolved.
(0006691)
Dima2000   
05-05-2012 10:25   
Вот хотелка, переносите обсуждение туда - http://sasgis.org/mantis/view.php?id=1290
(0006692)
Dima2000   
05-05-2012 10:27   
> Если делать продвинутую фичу, то в режиме Интернет+кэш программа не должна искать тайлы в упакованном формате, потому что, если они есть только там, а в обычном их нет, то они и не будут скачаны.
Нет, надо и искать, и скачивать - и класть в первый кэш, который хранит дополнения к пакованому.
(0006694)
Dima2000   
05-05-2012 10:35   
Эту закрывать конечно можно, но может сюда ещё пожеланий именно к интерфесу экспорта добавить?
Вот к примеру я бы хотел чтобы при выборе зумов показывался хотя бы очень примерно объём (или количество тайлов) сколько я собрался экспортировать. Как в скачке, по ограничивающему box. Это посчитать быстро. Вопрос лишь как и куда вывести. :)
(0006696)
Tolik   
05-05-2012 10:36   
Одна хотелка или 1 баг - 1 тикет.
(0006699)
Garl   
05-05-2012 10:40   
"доработку нельза закончить, её можно только прекратить" (с)
так и улучшать можно до бесконечности...