SASGIS - SAS.Планета
View Issue Details
0002213SAS.Планета[All Projects] Хотелкаpublic16-10-2013 12:0706-03-2016 06:37
zed 
zed 
normalfeaturealways
resolvedfixed 
131111 
140303140303 
0002213: При экспорте в RMaps (SQLite) нельзя изменить проекцию карты
Сейчас при экспорте идёт простое копирование тайлов из хранилища в SQLite, и соответственно невозможно сделать экспорт в проекцию отличающуюся от проекции карты, а некоторые программы понимают только гугловскую проекцию меркатора на сферу и не понимают других проекций.
RMaps, SQLite, экспорт
related to 0002159resolved vasketsov SACS.Планета При экспорте в RMaps (SQLite) не учитывается проекция карты 
has duplicate 0002208closed  SAS.Планета 131011.7548 Экспорт карты Яндекс в Rmaps (Sqlite) дает карту со смещением около 20 км. 
related to 0001823resolved zed SAS.Планета Наложение слоёв при экспорте в RMaps (SQLite) 
related to 0001409resolved vasketsov SAS.Планета Хотелось бы экспорта в программу RMAPS для Android 
related to 0002980closed zed SAS.Планета Добавлять опцию "ellipsoid=1" при экспорте в RMaps и не перепроецировать тайлы Яндекса и подобных 
Issue History
16-10-2013 12:07zedNew Issue
16-10-2013 12:07zedIssue generated from: 0002159
16-10-2013 12:07zedRelationship addedrelated to 0002159
16-10-2013 12:07zedProjectSACS.Планета => SAS.Планета
16-10-2013 12:08zedRelationship addedhas duplicate 0002208
16-10-2013 12:39vdemidovNote Added: 0013074
16-10-2013 12:40vdemidovNote Added: 0013075
16-10-2013 12:41zedNote Added: 0013076
16-10-2013 12:47vdemidovNote Added: 0013077
16-10-2013 12:49zedNote Added: 0013078
16-10-2013 12:54vdemidovNote Added: 0013079
16-10-2013 13:00zedNote Added: 0013080
16-10-2013 13:15vdemidovNote Added: 0013081
16-10-2013 13:15vdemidovStatusnew => confirmed
16-10-2013 13:16vdemidovTarget Version => 131111
16-10-2013 13:19zedNote Added: 0013082
16-10-2013 13:21vdemidovNote Added: 0013083
16-10-2013 13:26zedNote Added: 0013084
16-10-2013 13:32zedNote Edited: 0013084bug_revision_view_page.php?bugnote_id=13084#r5772
16-10-2013 13:34vdemidovNote Added: 0013085
24-10-2013 05:59usverNote Added: 0013117
24-10-2013 07:43vdemidovCategoryБаг => Хотелка
24-10-2013 07:43vdemidovTarget Version131111 => 29xxxx
24-10-2013 07:43vdemidovSummaryПри экспорте в RMaps (SQLite) не учитывается проекция карты => При экспорте в RMaps (SQLite) нельзя изменить проекция карты
24-10-2013 07:43vdemidovDescription Updatedbug_revision_view_page.php?rev_id=5784#r5784
24-10-2013 09:52vdemidovSummaryПри экспорте в RMaps (SQLite) нельзя изменить проекция карты => При экспорте в RMaps (SQLite) нельзя изменить проекцию карты
24-10-2013 12:17vdemidovTag Attached: RMaps
24-10-2013 12:17vdemidovTag Attached: экспорт
06-11-2013 10:59vdemidovSeveritymajor => feature
22-11-2013 22:35vdemidovProduct Version.Nightly => 131111
02-12-2013 17:07zedNote Added: 0013371
02-12-2013 17:07zedAssigned To => zed
02-12-2013 17:07zedStatusconfirmed => assigned
02-12-2013 17:08zedTarget Version29xxxx => 140303
03-12-2013 06:20usverNote Added: 0013372
03-12-2013 06:25usverNote Added: 0013373
03-12-2013 07:52zedNote Added: 0013374
03-12-2013 07:52zedNote Edited: 0013374bug_revision_view_page.php?bugnote_id=13374#r5871
03-12-2013 07:54zedNote Edited: 0013374bug_revision_view_page.php?bugnote_id=13374#r5872
03-12-2013 08:17vdemidovTag Attached: SQLite
03-12-2013 08:32zedRelationship addedrelated to 0001823
03-12-2013 08:36zedRelationship addedrelated to 0001409
03-12-2013 09:54usverNote Added: 0013376
03-12-2013 10:02zedNote Added: 0013377
03-12-2013 11:02zedFile Added: SASPlanet.RMaps.Debug.7z
03-12-2013 11:04zedNote Added: 0013378
03-12-2013 16:28usverNote Added: 0013381
03-12-2013 16:30usverNote Edited: 0013381bug_revision_view_page.php?bugnote_id=13381#r5874
03-12-2013 17:00zedNote Added: 0013382
03-12-2013 17:44zedNote Added: 0013383
03-12-2013 17:48vdemidovNote Added: 0013384
03-12-2013 17:50zedNote Added: 0013385
03-12-2013 17:51vdemidovNote Added: 0013386
03-12-2013 17:52zedNote Added: 0013387
03-12-2013 17:53usverNote Added: 0013388
03-12-2013 17:55zedNote Added: 0013389
03-12-2013 18:07usverNote Added: 0013390
03-12-2013 18:09usverNote Edited: 0013390bug_revision_view_page.php?bugnote_id=13390#r5876
03-12-2013 20:00zedNote Added: 0013391
04-12-2013 05:50usverNote Added: 0013392
04-12-2013 20:16zedNote Added: 0013399
04-12-2013 20:16zedFile Deleted: SASPlanet.RMaps.Debug.7z
05-12-2013 18:32usverNote Added: 0013405
06-12-2013 04:47zedStatusassigned => resolved
06-12-2013 04:47zedFixed in Version => 140303
06-12-2013 04:47zedResolutionopen => fixed
08-12-2013 13:56zedNote Added: 0013408
06-03-2016 06:37zedRelationship addedrelated to 0002980

Notes
(0013074)
vdemidov   
16-10-2013 12:39   
И какое решение предлагается? Перепроецировать карту при экспорте?
(0013075)
vdemidov   
16-10-2013 12:40   
Или для начала исключить из выбора все карты с негугловской проекцией?
(0013076)
zed   
16-10-2013 12:41   
Перепроецировать, как это сделано в других экспортах.
(0013077)
vdemidov   
16-10-2013 12:47   
Ну добавь. Вроде бы дело не особо сложное.
(0013078)
zed   
16-10-2013 12:49   
Сложное ввиду того, что используется один родительский класс (TThreadExportEnumerator) для нескольких экспортов.
(0013079)
vdemidov   
16-10-2013 12:54   
Ну так выкинь его. Он только в этом экспорте и используется. Там все равно нужно по-другому экспорты переделывать.
(0013080)
zed   
16-10-2013 13:00   
Ну, т.е. это надо полностью переделать экспорт в RMaps :(
Мне это пока не интересно. Для себя я там однажды по-быстрому набыдлокодил и нормально экспортнул, когда надо было. А приводить это к нормальному виду мне как-то лень. Тем более, что ковырял я тогда SACS...
(0013081)
vdemidov   
16-10-2013 13:15   
Значит на ближайшее время поставлю ограничение на выбор карт, а там может доброволец найдется.
(0013082)
zed   
16-10-2013 13:19   
Как вариант - могу залить свой код. Пускай живёт в качестве временного костыля.
(0013083)
vdemidov   
16-10-2013 13:21   
Если там уж совсем костыли, то не нужно.
(0013084)
zed   
16-10-2013 13:26   
(edited on: 16-10-2013 13:32)
Там такие сомнительные моменты:

VJpegSaver := TLibJpegTileSaver.Create(95, TInternalPerformanceCounterFake.Create);

VFactory := TCoordConverterFactorySimple.Create;

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

(0013085)
vdemidov   
16-10-2013 13:34   
Тогда не нужно.
(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;
(0013384)
vdemidov   
03-12-2013 17:48   
>Даже больше скажу, сжатие в пределах 1..4 должно давать идентичную картинку:
Оно всегда должно давать идентичную картинку. В png нет сжатия с потерпями.
(0013385)
zed   
03-12-2013 17:50   
Да, я имел в виду, что должны получаться бинарно-идентичные файлы :)
(0013386)
vdemidov   
03-12-2013 17:51   
>> Если выбрать карту «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   
Попробуйте ещё 5 и 0?
(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, чёрный фон теперь должен стать прозрачным.