Notes |
|
|
На форуме появилось интересное сообщение по сабжу. |
|
|
|
С учетом того, что автор упомянутой в сообщении программы mobat2jnx раздает исходники (на форуме gpsunderground), думается, что добавить аналогичную функцию в SAS не составит большого труда.
Прилагаю вчерашнюю версию исходников. |
|
|
|
Может когда руки и дойдут. Но больше шансов реализовать в виде плагина. Так что, если кого интересует, то изучайте формат и начинайте писать свою экспортилку, потом ее можно будет переделать в плагин к САС.Планете. |
|
|
|
Меня интересует. Формат изучил.
Зачем писать экспортилку, если уже есть минимум три готовых с исходниками?
Может быть, сразу делать плагин? |
|
|
|
Ну они вряд ли написаны на Делфи, а плагин с 90% вероятностью придется писать на Делфи. И еще опишите кратенько что от внешней программы понадобиться плагину? Просто экспорты разные бывают. Для некоторых нужно почти что клеить тайлы, тоесть перебирать строго в определенном порядке, например по строкам. Для других можно просто брать любой тайл входящий в выбранную область и запихивать в результирующий файл или папку. |
|
|
|
Могу переписать нужный код на Делфи, не большая проблема.
В начале экспорта плагину нужно будет знать количество уровней детализации, которые будут сохраняться, и количество тайлов на каждом из этих уровней.
Далее, уже непосредственно в процессе экспорта, потребуются сами тайлы, желательно в формате JPG (но можно сделать и конвертацию из GIF/PNG). Порядок тайлов на каждом из уровней роли не играет, главное, чтобы все тайлы, относящиеся к одному уровню, шли одним блоком.
В общем, всё.
У формата карт JNX есть ряд настраиваемых пользователем параметров. Возможно сделать у плагина диалог настройки? |
|
|
|
>В начале экспорта плагину нужно будет знать количество уровней детализации, которые будут сохраняться, и количество тайлов на каждом из этих уровней.
А зачем это ему и насколько точные это должны быть числа?
И еще, можно ли сделать несколько экспортов в один файл? Должны ли области экспорта быть связными?
Диалог настройки пока сложный вопрос. Для начала давайте исходить из того что его нету. |
|
|
(0002809)
|
gpsMax
|
01-06-2011 08:30
|
|
> главное, чтобы все тайлы, относящиеся к одному уровню, шли одним блоком.
Надо как-то подогнать эту идею под передачу параметров плагину. |
|
|
(0002818)
|
AlexWhiter
|
01-06-2011 12:23
(edited on: 01-06-2011 12:24) |
|
> А зачем это ему и насколько точные это должны быть числа?
Если не вдаваться в детали, файл JNX состоит из двух основных кусков - заголовка и собственно JPEGовых картинок. В заголовке, кроме всего прочего, хранится список координат всех тайлов и смещения до картинок.
Если в начале записи файла не известно, сколько будет тайлов, то нужно
а) либо делать дву-проходную запись - сначала писать картинки во временный файл, а потом уже делать окончательный JNX, формируя заголовок и дописывая все картинки из временного файла; "веселый" будет способ, особенно если тайлов достаточно много, скажем, полгига;
б) либо резервировать место под максимально возможное количество тайлов (а это 50 000 на самом детальном из 5 поддерживаемых уровней), то есть примерно 3 мегабайта потенциально пустого места.
Поэтому знание хотя бы верхней границы числа тайлов было бы весьма и весьма желательным.
Я понимаю, что некоторые тайлы могу отсутствовать на сервере, но когда пользователь выбирает некоторую область, разве нельзя сказать, сколько в неё в принципе попадает тайлов?
Еще один момент, связанный с предварительным знанием числа тайлов.
Хотя на самом детальном уровне карты JNX может размещаться не более 50000 тайлов, формат поддерживает, так сказать, "многотомные" карты - когда тайлы одного уровня детализации раскидываются по нескольким файлам при достижении ограничения.
> И еще, можно ли сделать несколько экспортов в один файл?
Если можно, поясните подробнее, что значит несколько экспортов в один файл? Я не совсем понимаю. Имеется в виду, что сначала в файл сохраняется одна выделенная область, а через некоторое время туда же сохраняется другая?
> Должны ли области экспорта быть связными?
Нет. Карты JNX не накладывают каких-либо ограничений на связность или порядок следования тайлов.
Сможет ли GPS быстро работать с подобными картами - не проверялось.
> Диалог настройки пока сложный вопрос. Для начала давайте исходить из того что его нету.
Это грустно.
Хотя бы INIшник или ключи реестра использовать можно?
|
|
|
|
Кстати говоря, описанный выше вариант "а" - это то же самое, что скопировать относящийся к выделенной области кусок кэша в формате Google Maps в какой-либо временный каталог, а затем обработать этот каталог программой mobat2jnx.
Может быть, самым простым способом реализации сабжа было бы добавление настроек пост-обработки в диалог загрузки карт. |
|
|
|
Ясно. Тоесть под вот этот тип оно не подойдет.
http://sasgis.org/wikisasiya/doku.php/pluginapi:plugintype:простой_экспорт_в_файл |
|
|
(0002821)
|
zed
|
01-06-2011 14:21
|
|
Если добавить метод GetMaxTilesCount - то подойдёт. |
|
|
|
Я бы сказал, подойдет, если добавить три метода
procedure StartExport(Levels: integer; MaxTiles: array of integer);
procedure StartLevel(Index: integer);
procedure EndExport;
Без финализации вообще никак.
Или финализация предполагается неявная - при разрушении объекта?
На уровни можно не заморачиваться, если предполагать, что осуществляется экспорт только одного уровня. |
|
|
|
Да, финализация предполагается при разрушении, хотя может и стоит подумать о явной. |
|
|
(0002824)
|
zed
|
01-06-2011 15:01
|
|
>б) либо резервировать место под максимально возможное количество тайлов
3Mb ведь можно и зарезервировать? Не так уж это много для тайлохранилища.
>procedure StartLevel(Index: integer);
Принципиально, чтобы зумы шли в какой-то последовательности?
>Или финализация предполагается неявная - при разрушении объекта?
Да.
А почему бы не сделать это не в качестве плагина, а внутрях SAS? С плагинами оно весьма туманно пока что, а так, если вы напишите модуль (в виде класса) реализующий экспорт - подцепить его к сасу не составит труда. Главное, чтобы класс был максимально автономен. |
|
|
|
> 3Mb ведь можно и зарезервировать? Не так уж это много для тайлохранилища.
Смотря какого объема само хранилище :)
Если предполагается, скажем, 100 метров картинок, то 3 действительно ровным счетом никуда не стучат.
> Принципиально, чтобы зумы шли в какой-то последовательности?
Нет. И если резервировать место под описания тайлов по максимуму, то даже и не требуется, чтобы все тайлы одного уровня шли последовательно.
Класс написать могу.
Есть ряд вопросов:
1. Можно ли предполагать, что все входные тайлы будут в формате JPEG?
2. Что означает "максимальная автономность"?
3. Под рукой есть Делфи версий 5, 6 и 7. Какую из них лучше использовать?
4. И всё же как насчет использования INIшника для параметризации?
5. Формат JNX работает в проекции Lat/Lon и датуме WGS84. Можно ли ожидать, что входные координаты тайлов будут в этих проекции и датуме? Если нет, имеются ли в SAS функции для преобразования? |
|
|
|
1. Пока нельзя, точнее можно будет поставить совместимость только с JPEG.
2. То и значит, что никаие функции основной программы вам не будут доступны
3. Любую. САС разрабатывается в 2007-ой
4. Пользуйтесь.
5. Пока нельзя. Функция есть, но вашему классу они не доступны. |
|
|
(0002827)
|
zed
|
01-06-2011 16:27
|
|
Как вариант - свяжитесь с feya и попросите доступ к исходникам. Всем будет проще.
>И всё же как насчет использования INIшника для параметризации?
Если экспорт будет не из плагина, а из самого саса, то все параметры можно брать из фрейма экспорта (добавить свои поля/переделать стандартный при необходимости). |
|
|
(0003852)
|
bogi
|
10-09-2011 12:41
|
|
Just now I found this change request.
I have an idea how to easily integrate JNX file generation into SAS.Planet. It would be based on external command line tool execution, therefore the solution would be simple to implement within SAS.Planet.
Please see here: http://sasgis.org/forum/viewtopic.php?f=2&t=1373&p=22799#p22799 |
|
|
(0004522)
|
gpsMax
|
14-12-2011 02:53
(edited on: 14-12-2011 03:10) |
|
Я понимаю, что с плагинами, как обычно, всё завязло на этапе планирования интерфейсов. А вот что мешает подключить mobat2jnx через командную строку по предложению bogi?
Единственно что, mobat2jnx работает на текущий момент только с кэшем типа GlobalMapper Tiles. Но зато работает отлично, и даже есть спецключ -sas, что меня радостно удивило.
Примерная схема передачи задания:
- В экспорте пользователь выбирает пункт "Создать JNX с помощью mobat2jnx".
- Экспортилка проверяет, что тип кэша экспортируемой карты GlobalMapper Tiles (пока остальные не поддерживаются) и тип jpg
- Проверяет, что поле пути к mobat2jnx непустое и экзешник существует
- Составляет список тайлов и скидывает их в kml. Эта процедура уже есть в САС, только нужно разобраться с уровнями, я еще до этого слегка не дошел. С одним зумом, в любом случае, точно работает.
- Запускает mobat2jnx с параметрами -tilelist - sas и именем временного kml
|
|
|
(0004717)
|
Garl
|
29-12-2011 12:15
|
|
ну что поднимем хотелку.
ввиду того, что доступ к исходникам то открыт: можно пробовать реализовывать...
1. либо в качестве диалога к mobat2jnx
2. или пытаться разбираться в тонкостях структуры файла. (что более предпочтительно) |
|
|
(0004887)
|
AlexWhiter
|
12-01-2012 12:53
(edited on: 12-01-2012 12:54) |
|
Сделал модуль на Делфи для чтения и записи карт JNX.
Скачать можно тут: http://whiter.brinkster.net/JNXLib.rar
|
|
|
(0004889)
|
zed
|
12-01-2012 13:47
|
|
>Сделал модуль на Делфи
Так может уже и экспорт сами сделаете? Посмотрите как реализован, к примеру, экспорт в *.tar: https://bitbucket.org/azya/sasplanet/src/991090386b50/RegionProcess/u_ThreadExportToTar.pas и по аналогии забомбите свой.
Когда будет готово, можете просто приаттачить здесь изменённые файлы, я добавлю их в репо. Или, можете сделать форк репо с исходниками, а потом отправить пул-реквест. Но это если вообще понятно о чём говорю и имеется опыт работы с репозиториями.
Вопросы по компиляции САС: http://sasgis.org/forum/viewtopic.php?f=47&t=1716&start=0 |
|
|
(0004890)
|
Garl
|
12-01-2012 14:03
|
|
там насколько я понял из быстрого взгляда нужна проекция lat\lon |
|
|
|
Да, проекция должна быть Geographic Lat/Lon.
Из-за этого могут быть какие-либо проблемы?
Думаю, что проще и быстрее будет прикрутить экспорт тем, кто уже более-менее разобрался с внутренностями SAS. |
|
|
(0004952)
|
zed
|
15-01-2012 11:11
|
|
>>проекция должна быть Geographic Lat/Lon
>Из-за этого могут быть какие-либо проблемы
Проблем по-идее быть не должно, но придётся конвертировать проекцию перед экспортом. Это немного усложняет задачу.
>Думаю, что проще и быстрее
Проще - возможно, быстрее - не факт. Может оказаться быстрее разобраться в исходниках и прикрутить что-то самому, чем ждать пока у кого-то до этого дойдут руки. Тем более, что тому у кого дойдут руки, тоже ведь придётся со своей стороны разбираться с форматом JNX, чтобы сделать нормальный экспорт. |
|
|
|
> Тем более, что тому у кого дойдут руки, тоже ведь придётся со своей стороны разбираться с форматом JNX, чтобы сделать нормальный экспорт.
Я постарался сделать классы как можно более простыми для использвания. Знание формата JNX не требуется для нормального экспорта.
На вход достаточно скормить количество уровней, предполагаемое количество тайлов на каждом из уровней и собственно тайлы в виде координат и JPEGов. |
|
|
(0004965)
|
zed
|
15-01-2012 14:55
|
|
Т.е. оно будет ругаться, если захотим сохранить более 50000 тайлов на более чем 5-ти зумах? Или нужно заботится об этом отдельно?
Примеры использования у вас довольно оригинальные: writer'у назначили все свойства ридера и делов-то. А как, не имея JNX создать его с нуля, со стороны в общем-то и не понятно.
|
|
|
(0004966)
|
AlexWhiter
|
15-01-2012 15:04
(edited on: 15-01-2012 15:07) |
|
Да, вывалит исключение с объяснением о превышении количества.
В sample1 присваивается необходимый минимум полей :)
Единственное не вполне понятное место - это установка масштабов уровней (свойство-массив LevelScale), для их получения есть функция DigitalGlobeZoomToScale, на вход которой уходят номера уровней DigitalGlobe или GoogleEarth.
Раз уж так сильно пугает наличие Reader'а и входного файла JNX, сейчас сделаю еще один пример, который будет принимать на вход один JPEG, координаты тайла и номер уровня GE, из которого этот тайл получен.
|
|
|
|
Добавил третий пример - создание карты с нуля.
Перезалил архив.
Также добавил исходник и картинку во вложения к обращению. |
|
|
(0004972)
|
zed
|
15-01-2012 16:42
|
|
Так гораздо понятней, спасибо)
Интересно, получается, что тайлы могут быть любого разрешения, а не только 256*256?
По поводу либы: зависимость от юнитов utf8.pas и ComObj излишняя - компилится и без них, по крайней мере на Delphi 2007. |
|
|
|
> Интересно, получается, что тайлы могут быть любого разрешения, а не только 256*256?
Да.
В картах, получаемых по подписке BirdsEye размер тайла ограничен 256 на 256 (и отличается от квадрата только по краям карты), но в принципе никто не запрещает использовать бОльшие или меньшие изображения.
Пользователи, однако, сообщали о замедлении устройств, в которых использовались тайлы 1024 на 1024.
> По поводу либы: зависимость от юнитов utf8.pas и ComObj излишняя - компилится и без них, по крайней мере на Delphi 2007.
Вполне может быть. У меня под рукой есть только Delphi 5 и 7, с ними и проверял.
Уже в седьмой версии не нужны ни UTF8, ни ComObj. Но вот пятая версия без них не компилирует.
В принципе можно разрулить ifdef'ами, но я пока решил не заморачиваться :) |
|
|
(0005093)
|
zed
|
18-01-2012 10:30
(edited on: 18-01-2012 10:37) |
|
Приаттачил exe, протестируйте. Что-то экспортируется, но что...
Код в репах: https://bitbucket.org/azya/sasplanet/changeset/63552e9e1ae5
может я там чё и накосячил, проверьте.
|
|
|
(0005094)
|
Garl
|
18-01-2012 11:03
|
|
Прибор не ругается, карту не показывает
не показывает что это birds eye.
код можно пробовать ковырять? |
|
|
(0005095)
|
zed
|
18-01-2012 11:04
|
|
конечно. мне тестировать не на чем. |
|
|
(0005096)
|
Garl
|
18-01-2012 11:16
|
|
загружался краснодарский край , получилось картинка в аттаче. |
|
|
(0005101)
|
zed
|
18-01-2012 13:55
|
|
|
|
(0005105)
|
zed
|
19-01-2012 05:07
(edited on: 19-01-2012 05:10) |
|
Garl, а что не так с последним скриншотом?
А, понял, всё-таки с определением координат путаница вышла.
|
|
|
(0005143)
|
gpsMax
|
20-01-2012 19:40
(edited on: 20-01-2012 19:46) |
|
Дошли руки попробовать. Ух, как удобно-то, намного лучше, чем с mobat2jnx возиться.
В навигаторе отображение покрытия подтормаживает, но, похоже, это проблема где-то на уровне чтения данных с диска, поскольку при повторном просмотре тех же мест спутник отображается в разы быстрее.
Железо: Etrex 30, microSD 32 Гб Class 6. JNX: 2.2 Гб, пять уровней z14-z18, около 60000 тайлов (если верить сообщению SAS). Здесь какие-то непонятки, поскольку реально по обработанной области более ста тысяч тайлов в кэше.
|
|
|
(0005144)
|
Garl
|
20-01-2012 19:45
|
|
я ещё доп.поля щас прикручиваю. будет что обкатать. |
|