Notes |
|
|
И какое решение предлагается? Перепроецировать карту при экспорте? |
|
|
|
Или для начала исключить из выбора все карты с негугловской проекцией? |
|
|
(0013076)
|
zed
|
16-10-2013 12:41
|
|
Перепроецировать, как это сделано в других экспортах. |
|
|
|
Ну добавь. Вроде бы дело не особо сложное. |
|
|
(0013078)
|
zed
|
16-10-2013 12:49
|
|
Сложное ввиду того, что используется один родительский класс (TThreadExportEnumerator) для нескольких экспортов. |
|
|
|
Ну так выкинь его. Он только в этом экспорте и используется. Там все равно нужно по-другому экспорты переделывать. |
|
|
(0013080)
|
zed
|
16-10-2013 13:00
|
|
Ну, т.е. это надо полностью переделать экспорт в RMaps :(
Мне это пока не интересно. Для себя я там однажды по-быстрому набыдлокодил и нормально экспортнул, когда надо было. А приводить это к нормальному виду мне как-то лень. Тем более, что ковырял я тогда SACS... |
|
|
|
Значит на ближайшее время поставлю ограничение на выбор карт, а там может доброволец найдется. |
|
|
(0013082)
|
zed
|
16-10-2013 13:19
|
|
Как вариант - могу залить свой код. Пускай живёт в качестве временного костыля. |
|
|
|
Если там уж совсем костыли, то не нужно. |
|
|
(0013084)
|
zed
|
16-10-2013 13:26
(edited on: 16-10-2013 13:32) |
|
Там такие сомнительные моменты:
VJpegSaver := TLibJpegTileSaver.Create(95, TInternalPerformanceCounterFake.Create);
VFactory := TCoordConverterFactorySimple.Create;
Костыльность в том, что эти интерфейсы нужно пробрасывать снаружи. Плюс, появляется безусловная рекомпрессия тайлов, даже для тех карт, у которых не нужно изменять проекцию. И всё сохраняется в jpeg.
|
|
|
|
|
|
(0013117)
|
usver
|
24-10-2013 05:59
|
|
Это не баг, это хотелка. Существуют программы для Android (например, Locus и Rmaps), которые прекрасно работают с картами RMaps (SQLite) с эллиптической проекцией. Поэтому не нужно вводить ограничение на выбор карт. |
|
|
(0013371)
|
zed
|
02-12-2013 17:07
|
|
Полностью переделал экспорт:
- добавил наложение слоёв
- сделал автоматическое (при необходимости) перепроецирование тайлов в проекцию гугла
- добавил галочку, по которой возможен экспорт в проекциях, отличных от проекции гугла (т.е. сохранилось старое поведение, когда мы не контролируем проекцию)
Автоматическое перепроецирование сделал прошаренным - если экспортируем только карту (или только слой) и проекция карты/слоя совпадает с гугловской, то происходит прямое копирование тайлов, даже если галочка Direct tiles copy не установлена.
Всех заинтересованных прошу активно протестировать фичу. Если что - пишите сюда, тикет ещё пока не закрываю. |
|
|
(0013372)
|
usver
|
03-12-2013 06:20
|
|
Большое спасибо, это очень нужная функция, давно ждал ее появления.
К сожалению, первый блин получился комом. Сейчас функция экспорта получает неправильные границы выделенной области. Причем получение границ зависит от того, как выбираются зумы на вкладке экспорта - если выбрать диапазон зумов двойным щелчком, то границы выделенной области правильные, а если выбирать индивидуальные зумы одиночными щелчками, то экспортируются тайлы из верхнего левого угла карты. |
|
|
(0013373)
|
usver
|
03-12-2013 06:25
|
|
Дополнительная хотелка.
Не могли бы Вы заодно добавить экспорт в формат MBTiles (https://github.com/mapbox/mbtiles-spec)?
Этот формат очень похож на RMaps - такая же база sqlite3, только с другими названиями столбцов. Отличий от RMaps всего три: другое расширение файла (mbtiles вместо sqlitedb); зумы указываются как «z», а не как «17-z» (т. е. Zmbtiles=17-Zrmaps); координаты «y» тайлов отсчитываются не от верхнего края карты, а от нижнего (т. е. Ymbtiles=2^z-1-Yrmaps).
Мне кажется, что из-за сходства форматов нет смысла создавать отдельный экспорт в MBTiles. Можно переименовать экспорт «RMaps (SQLite)» в «RMaps/MBTiles (SQLite)», а на саму вкладку экспорта добавить галочку «MBTiles». |
|
|
(0013374)
|
zed
|
03-12-2013 07:52
(edited on: 03-12-2013 07:54) |
|
> К сожалению, первый блин получился комом
Пофиксил.
> Дополнительная хотелка.
Уже есть: 0001379
|
|
|
(0013376)
|
usver
|
03-12-2013 09:54
|
|
Протестировал смену проекции и наложение слоя - все замечательно работает.
Два пожелания:
Сейчас при наложении слоя и при смене проекции графический формат создаваемых тайлов соответствует графическому формату тайлов основной карты.
Если исходные тайлы в формате PNG, то получается очень большой выходной файл. Хотелось бы иметь возможность выбора графического формата создаваемых тайлов и задания степени сжатия.
Если выбрана опция «Recreate target database», и целевая база данных существует и открыта в другой программе, то SAS не может ее удалить и записывает новые тайлы в существующий файл. Мне кажется, было бы лучше, если бы в этом случае экспорт прерывался и выводилось сообщение «Невозможно удалить целевую базу данных».
По поводу мой хотелки:
То, что есть в SACS - это совсем не то, что я прошу реализовать.
Во-первых, в SACS своя уникальная реализация MBtiles, которая не соответствует официальной спецификации, поэтому созданные в SACS файлы можно использовать только в самой SACS, для других программ они не подходят.
Во-вторых, в SACS кэш, а не экспорт, т. е. недоступны функции смены проекции и наложения слоя. |
|
|
(0013377)
|
zed
|
03-12-2013 10:02
|
|
> Хотелось бы иметь возможность выбора графического формата
Да, тоже про это думал. Может сделаю.
> Если выбрана опция «Recreate target database»
Угу, надо фиксить.
> По поводу мой хотелки
А я про SACS ничего не говорил. Про MBTiles есть отдельная хотелка, вот туда все свои мысли и пишите. |
|
|
(0013378)
|
zed
|
03-12-2013 11:04
|
|
Исправил ошибки, добавил настройки выходного формата тайлов. В аттаче exe для тестов. |
|
|
(0013381)
|
usver
|
03-12-2013 16:28
(edited on: 03-12-2013 16:30) |
|
Экспорт слоя наложения без основной карты.
Если выбрать карту «No», а потом поставить флажок «Direct tiles copy», то список выбора слоя становится недоступным. Мне кажется, было бы логичнее, если бы при выборе карты «No» и установке флажка «Direct tiles copy» список выбора слоя оставался активным, а список выбора карты становился недоступным.
При экспорте гибридного слоя яндекса (без основной карты) с преобразованием проекции прозрачные тайлы получаются только при настройках формата изображения Auto или PNG (32 бит)/сжатие 1. При выборе PNG с другой глубиной цвета или другим сжатием «прозрачная» часть тайлов становится черной. Это ограничение формата PNG или баг?
|
|
|
(0013382)
|
zed
|
03-12-2013 17:00
|
|
> Если выбрать карту «No»
Логично.
> При экспорте гибридного слоя яндекса
Сжатие как бы не должно было влиять на прозрачность, а вот битность - да, влияет. |
|
|
(0013383)
|
zed
|
03-12-2013 17:44
|
|
> Сжатие как бы не должно было влиять на прозрачность
Даже больше скажу, сжатие в пределах 1..4 должно давать идентичную картинку:
case APngCompress of
1..4:
FFlag := PNG_Z_BEST_SPEED;
5..7:
FFlag := PNG_Z_DEFAULT_COMPRESSION;
8, 9:
FFlag := PNG_Z_BEST_COMPRESSION;
else // 0
FFlag := PNG_Z_NO_COMPRESSION; |
|
|
|
>Даже больше скажу, сжатие в пределах 1..4 должно давать идентичную картинку:
Оно всегда должно давать идентичную картинку. В png нет сжатия с потерпями. |
|
|
(0013385)
|
zed
|
03-12-2013 17:50
|
|
Да, я имел в виду, что должны получаться бинарно-идентичные файлы :) |
|
|
|
>> Если выбрать карту «No»
> Логично.
Вообще то не очень логично. Теряется возможность экспортировать слои без пересохранения. Дизаблить выбор слоя нужно только если стоит Direct tiles copy и выбрана карта. А если выбрано No, то нужно давать возможность выбрать слой. |
|
|
(0013387)
|
zed
|
03-12-2013 17:52
|
|
Ну так именно это и предлагалось и именно с этим я и согласился. |
|
|
(0013388)
|
usver
|
03-12-2013 17:53
|
|
Я пробовал 32 bit и сжатие 1 и 9. При сжатии 1 тайлы прозрачные, при сжатии 9 - черные. |
|
|
(0013389)
|
zed
|
03-12-2013 17:55
|
|
|
|
(0013390)
|
usver
|
03-12-2013 18:07
(edited on: 03-12-2013 18:09) |
|
Полные результаты для 32-bit:
Сжатие Размер Прозрачность
0 1460Мб прозрачный
1 140Мб прозрачный
5 139Мб прозрачный
9 101Мб черный
А ни как нельзя 8-бит прозрачными сделать? В слое наложения богатых цветов нет, лишние биты только место зря занимают. Причем много места. У 8-бит с сжатием 1 раземер 41 Мб
|
|
|
(0013391)
|
zed
|
03-12-2013 20:00
|
|
> 9 101Мб черный
Весьма странно. Есть возможность проверить в другой программе? У меня на тестовом png не воспроизводится.
> А ни как нельзя 8-бит прозрачными сделать?
Вообще, задумывалось что там должна сохраняться прозрачность, но по факту похоже что это не всегда работает. И это связано с ограничением используемой библиотеки, которая не умеет из 32-х битных битмапок сразу делать 8-битные прозрачные. |
|
|
(0013392)
|
usver
|
04-12-2013 05:50
|
|
> У меня на тестовом png не воспроизводится.
Я перепутал файлы. Для 32-бит получаются прозрачные тайлы при любом сжатии (как Вы и писали).
Два пожелания:
Если в зуме есть пропущенные тайлы, то при наложении и смене проекции берутся тайлы из предыдущих зумов. Можно ли сделать эту опцию отключаемой?
Настройки формата изображения становятся недоступными, если выбрано прямое копирование - это правильно. Однако они остаются активными в тех случаях, когда срабатывает «автоматическое прямое копирование» (экспорт только карты или только слоя с гугловской проекцией). Наверное, нужно делать эти настройки недоступными и в этих случаях. |
|
|
(0013399)
|
zed
|
04-12-2013 20:16
|
|
> Можно ли сделать эту опцию отключаемой?
Можно.
> Наверное, нужно делать эти настройки недоступными и в этих случаях.
Поизменял поведение контролов, плюс теперь дополнительно если по каким-то причинам будет разрешено прямое копирование, то текст соответствующего чекбокса будет выделен жирным. Вне зависимости от включённого состояния этого самого чекбокса. |
|
|
(0013405)
|
usver
|
05-12-2013 18:32
|
|
В последней ночнушке все стало просто идеально - и функционал и интерфейс. Ни замечаний, ни пожеланий у меня не осталось. Еще раз спасибо! |
|
|
(0013408)
|
zed
|
08-12-2013 13:56
|
|
>> А ни как нельзя 8-бит прозрачными сделать?
> Вообще, задумывалось что там должна сохраняться прозрачность
Ввиду некоторой доработки сохранялки gif/png-8bit 0002289, чёрный фон теперь должен стать прозрачным. |
|