View Issue Details

IDProjectCategoryView StatusLast Update
0000375SAS.ПланетаХотелка / Feature requestpublic10-10-2012 11:49
ReporterAlexWhiter Assigned Tozed  
PrioritynoneSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version110418 
Target Version120808Fixed in Version120808 
Summary0000375: Экспорт в формат Garmin JNX
DescriptionХотелось бы иметь возможность экспорта в файлы формата JNX (формат карт службы BirdsEye от Garmin).
Описание формата тут: http://whiter.brinkster.net/JNX.shtml
Tagsgarmin, jnx, навигатор, плагины, экспорт
Attached Files
mobat2jnxsource.zip (9,807 bytes)
sample3.dpr (947 bytes)
sample3.jpg (23,233 bytes)   
sample3.jpg (23,233 bytes)   
68.jpg (31,006 bytes)   
68.jpg (31,006 bytes)   
59.jpg (53,817 bytes)   
59.jpg (53,817 bytes)   

Relationships

related to 0000538 resolvedzed Многослойные карты *.rmp для приборов Magellan (Triton, Explorist) и программы VantagePoint 

Activities

Papazol

17-01-2011 19:00

reporter   ~0000924

На форуме появилось интересное сообщение по сабжу.

AlexWhiter

18-01-2011 03:37

developer   ~0000925

С учетом того, что автор упомянутой в сообщении программы mobat2jnx раздает исходники (на форуме gpsunderground), думается, что добавить аналогичную функцию в SAS не составит большого труда.
Прилагаю вчерашнюю версию исходников.

vdemidov

30-05-2011 19:17

manager   ~0002769

Может когда руки и дойдут. Но больше шансов реализовать в виде плагина. Так что, если кого интересует, то изучайте формат и начинайте писать свою экспортилку, потом ее можно будет переделать в плагин к САС.Планете.

AlexWhiter

31-05-2011 14:26

developer   ~0002793

Меня интересует. Формат изучил.
Зачем писать экспортилку, если уже есть минимум три готовых с исходниками?
Может быть, сразу делать плагин?

vdemidov

31-05-2011 18:59

manager   ~0002798

Ну они вряд ли написаны на Делфи, а плагин с 90% вероятностью придется писать на Делфи. И еще опишите кратенько что от внешней программы понадобиться плагину? Просто экспорты разные бывают. Для некоторых нужно почти что клеить тайлы, тоесть перебирать строго в определенном порядке, например по строкам. Для других можно просто брать любой тайл входящий в выбранную область и запихивать в результирующий файл или папку.

AlexWhiter

31-05-2011 23:39

developer   ~0002802

Могу переписать нужный код на Делфи, не большая проблема.

В начале экспорта плагину нужно будет знать количество уровней детализации, которые будут сохраняться, и количество тайлов на каждом из этих уровней.
Далее, уже непосредственно в процессе экспорта, потребуются сами тайлы, желательно в формате JPG (но можно сделать и конвертацию из GIF/PNG). Порядок тайлов на каждом из уровней роли не играет, главное, чтобы все тайлы, относящиеся к одному уровню, шли одним блоком.

В общем, всё.

У формата карт JNX есть ряд настраиваемых пользователем параметров. Возможно сделать у плагина диалог настройки?

vdemidov

01-06-2011 03:47

manager   ~0002803

>В начале экспорта плагину нужно будет знать количество уровней детализации, которые будут сохраняться, и количество тайлов на каждом из этих уровней.
А зачем это ему и насколько точные это должны быть числа?
И еще, можно ли сделать несколько экспортов в один файл? Должны ли области экспорта быть связными?

Диалог настройки пока сложный вопрос. Для начала давайте исходить из того что его нету.

gpsMax

01-06-2011 08:30

manager   ~0002809

> главное, чтобы все тайлы, относящиеся к одному уровню, шли одним блоком.

Надо как-то подогнать эту идею под передачу параметров плагину.

AlexWhiter

01-06-2011 12:23

developer   ~0002818

Last edited: 01-06-2011 12:24

> А зачем это ему и насколько точные это должны быть числа?

Если не вдаваться в детали, файл JNX состоит из двух основных кусков - заголовка и собственно JPEGовых картинок. В заголовке, кроме всего прочего, хранится список координат всех тайлов и смещения до картинок.
Если в начале записи файла не известно, сколько будет тайлов, то нужно
а) либо делать дву-проходную запись - сначала писать картинки во временный файл, а потом уже делать окончательный JNX, формируя заголовок и дописывая все картинки из временного файла; "веселый" будет способ, особенно если тайлов достаточно много, скажем, полгига;
б) либо резервировать место под максимально возможное количество тайлов (а это 50 000 на самом детальном из 5 поддерживаемых уровней), то есть примерно 3 мегабайта потенциально пустого места.

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

Еще один момент, связанный с предварительным знанием числа тайлов.
Хотя на самом детальном уровне карты JNX может размещаться не более 50000 тайлов, формат поддерживает, так сказать, "многотомные" карты - когда тайлы одного уровня детализации раскидываются по нескольким файлам при достижении ограничения.


> И еще, можно ли сделать несколько экспортов в один файл?

Если можно, поясните подробнее, что значит несколько экспортов в один файл? Я не совсем понимаю. Имеется в виду, что сначала в файл сохраняется одна выделенная область, а через некоторое время туда же сохраняется другая?


> Должны ли области экспорта быть связными?

Нет. Карты JNX не накладывают каких-либо ограничений на связность или порядок следования тайлов.
Сможет ли GPS быстро работать с подобными картами - не проверялось.


> Диалог настройки пока сложный вопрос. Для начала давайте исходить из того что его нету.

Это грустно.
Хотя бы INIшник или ключи реестра использовать можно?

AlexWhiter

01-06-2011 12:35

developer   ~0002819

Кстати говоря, описанный выше вариант "а" - это то же самое, что скопировать относящийся к выделенной области кусок кэша в формате Google Maps в какой-либо временный каталог, а затем обработать этот каталог программой mobat2jnx.

Может быть, самым простым способом реализации сабжа было бы добавление настроек пост-обработки в диалог загрузки карт.

vdemidov

01-06-2011 13:18

manager   ~0002820

Ясно. Тоесть под вот этот тип оно не подойдет.
http://sasgis.org/wikisasiya/doku.php/pluginapi:plugintype:простой_экспорт_в_файл

zed

01-06-2011 14:21

manager   ~0002821

Если добавить метод GetMaxTilesCount - то подойдёт.

AlexWhiter

01-06-2011 14:41

developer   ~0002822

Я бы сказал, подойдет, если добавить три метода
procedure StartExport(Levels: integer; MaxTiles: array of integer);
procedure StartLevel(Index: integer);
procedure EndExport;

Без финализации вообще никак.
Или финализация предполагается неявная - при разрушении объекта?

На уровни можно не заморачиваться, если предполагать, что осуществляется экспорт только одного уровня.

vdemidov

01-06-2011 15:01

manager   ~0002823

Да, финализация предполагается при разрушении, хотя может и стоит подумать о явной.

zed

01-06-2011 15:01

manager   ~0002824

>б) либо резервировать место под максимально возможное количество тайлов
3Mb ведь можно и зарезервировать? Не так уж это много для тайлохранилища.

>procedure StartLevel(Index: integer);
Принципиально, чтобы зумы шли в какой-то последовательности?
 
>Или финализация предполагается неявная - при разрушении объекта?
Да.

А почему бы не сделать это не в качестве плагина, а внутрях SAS? С плагинами оно весьма туманно пока что, а так, если вы напишите модуль (в виде класса) реализующий экспорт - подцепить его к сасу не составит труда. Главное, чтобы класс был максимально автономен.

AlexWhiter

01-06-2011 15:41

developer   ~0002825

> 3Mb ведь можно и зарезервировать? Не так уж это много для тайлохранилища.
Смотря какого объема само хранилище :)
Если предполагается, скажем, 100 метров картинок, то 3 действительно ровным счетом никуда не стучат.

> Принципиально, чтобы зумы шли в какой-то последовательности?
Нет. И если резервировать место под описания тайлов по максимуму, то даже и не требуется, чтобы все тайлы одного уровня шли последовательно.

Класс написать могу.
Есть ряд вопросов:
1. Можно ли предполагать, что все входные тайлы будут в формате JPEG?
2. Что означает "максимальная автономность"?
3. Под рукой есть Делфи версий 5, 6 и 7. Какую из них лучше использовать?
4. И всё же как насчет использования INIшника для параметризации?
5. Формат JNX работает в проекции Lat/Lon и датуме WGS84. Можно ли ожидать, что входные координаты тайлов будут в этих проекции и датуме? Если нет, имеются ли в SAS функции для преобразования?

vdemidov

01-06-2011 16:22

manager   ~0002826

1. Пока нельзя, точнее можно будет поставить совместимость только с JPEG.
2. То и значит, что никаие функции основной программы вам не будут доступны
3. Любую. САС разрабатывается в 2007-ой
4. Пользуйтесь.
5. Пока нельзя. Функция есть, но вашему классу они не доступны.

zed

01-06-2011 16:27

manager   ~0002827

Как вариант - свяжитесь с feya и попросите доступ к исходникам. Всем будет проще.

>И всё же как насчет использования INIшника для параметризации?
Если экспорт будет не из плагина, а из самого саса, то все параметры можно брать из фрейма экспорта (добавить свои поля/переделать стандартный при необходимости).

bogi

10-09-2011 12:41

reporter   ~0003852

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

gpsMax

14-12-2011 02:53

manager   ~0004522

Last edited: 14-12-2011 03:10

Я понимаю, что с плагинами, как обычно, всё завязло на этапе планирования интерфейсов. А вот что мешает подключить mobat2jnx через командную строку по предложению bogi?

Единственно что, mobat2jnx работает на текущий момент только с кэшем типа GlobalMapper Tiles. Но зато работает отлично, и даже есть спецключ -sas, что меня радостно удивило.

Примерная схема передачи задания:
- В экспорте пользователь выбирает пункт "Создать JNX с помощью mobat2jnx".
- Экспортилка проверяет, что тип кэша экспортируемой карты GlobalMapper Tiles (пока остальные не поддерживаются) и тип jpg
- Проверяет, что поле пути к mobat2jnx непустое и экзешник существует
- Составляет список тайлов и скидывает их в kml. Эта процедура уже есть в САС, только нужно разобраться с уровнями, я еще до этого слегка не дошел. С одним зумом, в любом случае, точно работает.
- Запускает mobat2jnx с параметрами -tilelist - sas и именем временного kml

Garl

29-12-2011 12:15

manager   ~0004717

ну что поднимем хотелку.
ввиду того, что доступ к исходникам то открыт: можно пробовать реализовывать...
1. либо в качестве диалога к mobat2jnx
2. или пытаться разбираться в тонкостях структуры файла. (что более предпочтительно)

AlexWhiter

12-01-2012 12:53

developer   ~0004887

Last edited: 12-01-2012 12:54

Сделал модуль на Делфи для чтения и записи карт JNX.
Скачать можно тут: http://whiter.brinkster.net/JNXLib.rar

zed

12-01-2012 13:47

manager   ~0004889

>Сделал модуль на Делфи
Так может уже и экспорт сами сделаете? Посмотрите как реализован, к примеру, экспорт в *.tar: https://bitbucket.org/azya/sasplanet/src/991090386b50/RegionProcess/u_ThreadExportToTar.pas и по аналогии забомбите свой.

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

Вопросы по компиляции САС: http://sasgis.org/forum/viewtopic.php?f=47&t=1716&start=0

Garl

12-01-2012 14:03

manager   ~0004890

там насколько я понял из быстрого взгляда нужна проекция lat\lon

AlexWhiter

12-01-2012 15:02

developer   ~0004891

Да, проекция должна быть Geographic Lat/Lon.
Из-за этого могут быть какие-либо проблемы?


Думаю, что проще и быстрее будет прикрутить экспорт тем, кто уже более-менее разобрался с внутренностями SAS.

zed

15-01-2012 11:11

manager   ~0004952

>>проекция должна быть Geographic Lat/Lon
>Из-за этого могут быть какие-либо проблемы
Проблем по-идее быть не должно, но придётся конвертировать проекцию перед экспортом. Это немного усложняет задачу.

>Думаю, что проще и быстрее
Проще - возможно, быстрее - не факт. Может оказаться быстрее разобраться в исходниках и прикрутить что-то самому, чем ждать пока у кого-то до этого дойдут руки. Тем более, что тому у кого дойдут руки, тоже ведь придётся со своей стороны разбираться с форматом JNX, чтобы сделать нормальный экспорт.

AlexWhiter

15-01-2012 14:48

developer   ~0004964

> Тем более, что тому у кого дойдут руки, тоже ведь придётся со своей стороны разбираться с форматом JNX, чтобы сделать нормальный экспорт.
Я постарался сделать классы как можно более простыми для использвания. Знание формата JNX не требуется для нормального экспорта.

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

zed

15-01-2012 14:55

manager   ~0004965

Last edited: 15-01-2012 14:55

Т.е. оно будет ругаться, если захотим сохранить более 50000 тайлов на более чем 5-ти зумах? Или нужно заботится об этом отдельно?

Примеры использования у вас довольно оригинальные: writer'у назначили все свойства ридера и делов-то. А как, не имея JNX создать его с нуля, со стороны в общем-то и не понятно.

AlexWhiter

15-01-2012 15:04

developer   ~0004966

Last edited: 15-01-2012 15:07

Да, вывалит исключение с объяснением о превышении количества.

В sample1 присваивается необходимый минимум полей :)

Единственное не вполне понятное место - это установка масштабов уровней (свойство-массив LevelScale), для их получения есть функция DigitalGlobeZoomToScale, на вход которой уходят номера уровней DigitalGlobe или GoogleEarth.

Раз уж так сильно пугает наличие Reader'а и входного файла JNX, сейчас сделаю еще один пример, который будет принимать на вход один JPEG, координаты тайла и номер уровня GE, из которого этот тайл получен.

AlexWhiter

15-01-2012 16:03

developer   ~0004971

Добавил третий пример - создание карты с нуля.
Перезалил архив.

Также добавил исходник и картинку во вложения к обращению.

zed

15-01-2012 16:42

manager   ~0004972

Так гораздо понятней, спасибо)

Интересно, получается, что тайлы могут быть любого разрешения, а не только 256*256?

По поводу либы: зависимость от юнитов utf8.pas и ComObj излишняя - компилится и без них, по крайней мере на Delphi 2007.

AlexWhiter

15-01-2012 23:32

developer   ~0004993

> Интересно, получается, что тайлы могут быть любого разрешения, а не только 256*256?

Да.
В картах, получаемых по подписке BirdsEye размер тайла ограничен 256 на 256 (и отличается от квадрата только по краям карты), но в принципе никто не запрещает использовать бОльшие или меньшие изображения.
Пользователи, однако, сообщали о замедлении устройств, в которых использовались тайлы 1024 на 1024.


> По поводу либы: зависимость от юнитов utf8.pas и ComObj излишняя - компилится и без них, по крайней мере на Delphi 2007.

Вполне может быть. У меня под рукой есть только Delphi 5 и 7, с ними и проверял.
Уже в седьмой версии не нужны ни UTF8, ни ComObj. Но вот пятая версия без них не компилирует.
В принципе можно разрулить ifdef'ами, но я пока решил не заморачиваться :)

zed

18-01-2012 10:30

manager   ~0005093

Last edited: 18-01-2012 10:37

Приаттачил exe, протестируйте. Что-то экспортируется, но что...

Код в репах: https://bitbucket.org/azya/sasplanet/changeset/63552e9e1ae5
может я там чё и накосячил, проверьте.

Garl

18-01-2012 11:03

manager   ~0005094

Прибор не ругается, карту не показывает
не показывает что это birds eye.
код можно пробовать ковырять?

zed

18-01-2012 11:04

manager   ~0005095

конечно. мне тестировать не на чем.

Garl

18-01-2012 11:16

manager   ~0005096

загружался краснодарский край , получилось картинка в аттаче.

zed

18-01-2012 13:55

manager   ~0005101

Вроде всё исправил.

zed

19-01-2012 05:07

manager   ~0005105

Last edited: 19-01-2012 05:10

Garl, а что не так с последним скриншотом?

А, понял, всё-таки с определением координат путаница вышла.

gpsMax

20-01-2012 19:40

manager   ~0005143

Last edited: 20-01-2012 19:46

Дошли руки попробовать. Ух, как удобно-то, намного лучше, чем с mobat2jnx возиться.

В навигаторе отображение покрытия подтормаживает, но, похоже, это проблема где-то на уровне чтения данных с диска, поскольку при повторном просмотре тех же мест спутник отображается в разы быстрее.

Железо: Etrex 30, microSD 32 Гб Class 6. JNX: 2.2 Гб, пять уровней z14-z18, около 60000 тайлов (если верить сообщению SAS). Здесь какие-то непонятки, поскольку реально по обработанной области более ста тысяч тайлов в кэше.

Garl

20-01-2012 19:45

manager   ~0005144

я ещё доп.поля щас прикручиваю. будет что обкатать.

Issue History

Date Modified Username Field Change
16-01-2011 14:51 AlexWhiter New Issue
17-01-2011 19:00 Papazol Note Added: 0000924
18-01-2011 03:37 AlexWhiter File Added: mobat2jnxsource.zip
18-01-2011 03:37 AlexWhiter Note Added: 0000925
17-03-2011 20:37 vdemidov Tag Attached: экспорт
19-03-2011 23:25 gpsMax Tag Attached: garmin
07-04-2011 07:15 vdemidov Tag Attached: плагины
07-04-2011 11:13 gpsMax Tag Attached: навигатор
30-05-2011 19:17 vdemidov Note Added: 0002769
30-05-2011 19:17 vdemidov Status new => confirmed
30-05-2011 19:17 vdemidov Product Version => 110418
30-05-2011 19:17 vdemidov Target Version => 45xxxx
30-05-2011 19:51 gpsMax Relationship added related to 0000538
31-05-2011 14:26 AlexWhiter Note Added: 0002793
31-05-2011 18:59 vdemidov Note Added: 0002798
31-05-2011 23:39 AlexWhiter Note Added: 0002802
01-06-2011 03:47 vdemidov Note Added: 0002803
01-06-2011 08:30 gpsMax Note Added: 0002809
01-06-2011 12:23 AlexWhiter Note Added: 0002818
01-06-2011 12:24 AlexWhiter Note Edited: 0002818
01-06-2011 12:35 AlexWhiter Note Added: 0002819
01-06-2011 13:18 vdemidov Note Added: 0002820
01-06-2011 14:21 zed Note Added: 0002821
01-06-2011 14:41 AlexWhiter Note Added: 0002822
01-06-2011 15:01 vdemidov Note Added: 0002823
01-06-2011 15:01 zed Note Added: 0002824
01-06-2011 15:41 AlexWhiter Note Added: 0002825
01-06-2011 16:22 vdemidov Note Added: 0002826
01-06-2011 16:27 zed Note Added: 0002827
06-06-2011 21:55 gpsMax Priority normal => none
31-08-2011 11:51 Garl Tag Attached: jnx
10-09-2011 12:41 bogi Note Added: 0003852
14-12-2011 02:53 gpsMax Note Added: 0004522
14-12-2011 02:57 gpsMax Note Edited: 0004522
14-12-2011 03:06 gpsMax Note Edited: 0004522
14-12-2011 03:10 gpsMax Note Edited: 0004522
29-12-2011 12:15 Garl Note Added: 0004717
29-12-2011 12:15 Garl Description Updated
12-01-2012 12:53 AlexWhiter Note Added: 0004887
12-01-2012 12:54 AlexWhiter Note Edited: 0004887
12-01-2012 13:47 zed Note Added: 0004889
12-01-2012 14:03 Garl Note Added: 0004890
12-01-2012 15:02 AlexWhiter Note Added: 0004891
15-01-2012 11:11 zed Note Added: 0004952
15-01-2012 14:48 AlexWhiter Note Added: 0004964
15-01-2012 14:55 zed Note Added: 0004965
15-01-2012 14:55 zed Note Edited: 0004965
15-01-2012 15:04 AlexWhiter Note Added: 0004966
15-01-2012 15:07 AlexWhiter Note Edited: 0004966
15-01-2012 16:03 AlexWhiter Note Added: 0004971
15-01-2012 16:03 AlexWhiter File Added: sample3.dpr
15-01-2012 16:04 AlexWhiter File Added: sample3.jpg
15-01-2012 16:42 zed Note Added: 0004972
15-01-2012 23:32 AlexWhiter Note Added: 0004993
18-01-2012 10:29 zed File Added: SASPlanet.7z
18-01-2012 10:30 zed Note Added: 0005093
18-01-2012 10:37 zed Note Edited: 0005093
18-01-2012 11:03 Garl Note Added: 0005094
18-01-2012 11:04 zed Note Added: 0005095
18-01-2012 11:15 Garl File Added: 251.bmp
18-01-2012 11:15 Garl File Added: 257.jpg
18-01-2012 11:16 Garl Note Added: 0005096
18-01-2012 11:29 Garl File Added: 92.jpg
18-01-2012 11:29 Garl File Added: 75.jpg
18-01-2012 13:55 zed Note Added: 0005101
18-01-2012 13:57 Garl File Deleted: 75.jpg
18-01-2012 13:57 Garl File Deleted: 92.jpg
18-01-2012 13:57 Garl File Deleted: 257.jpg
18-01-2012 13:57 Garl File Added: 68.jpg
18-01-2012 13:58 Garl File Added: 95.jpg
18-01-2012 14:05 zed File Deleted: SASPlanet.7z
18-01-2012 14:05 zed File Deleted: 251.bmp
19-01-2012 04:46 Garl File Added: 59.jpg
19-01-2012 05:07 zed Note Added: 0005105
19-01-2012 05:10 zed Note Edited: 0005105
19-01-2012 05:15 zed Status confirmed => resolved
19-01-2012 05:15 zed Fixed in Version => 41xxxx
19-01-2012 05:15 zed Resolution open => fixed
19-01-2012 05:15 zed Assigned To => zed
20-01-2012 15:58 Garl File Deleted: 95.jpg
20-01-2012 19:40 gpsMax Note Added: 0005143
20-01-2012 19:43 gpsMax Note Edited: 0005143
20-01-2012 19:45 Garl Note Added: 0005144
20-01-2012 19:46 gpsMax Note Edited: 0005143
23-01-2012 08:18 vdemidov Fixed in Version 41xxxx => 120808
23-01-2012 08:18 vdemidov Target Version 45xxxx => 120808
10-10-2012 11:49 Tolik Status resolved => closed
08-08-2025 13:24 zed Category Хотелка => Хотелка / Feature request