SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000375SAS.Планета[All Projects] Хотелкаpublic16-01-2011 14:5110-10-2012 11:49
ReporterAlexWhiter 
Assigned Tozed 
PrioritynoneSeverityminorReproducibilityhave not tried
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version110418 
Target Version120808Fixed in Version120808 
Summary0000375: Экспорт в формат Garmin JNX
DescriptionХотелось бы иметь возможность экспорта в файлы формата JNX (формат карт службы BirdsEye от Garmin).
Описание формата тут: http://whiter.brinkster.net/JNX.shtml
Tagsgarmin, jnx, навигатор, плагины, экспорт
Attached Fileszip file icon mobat2jnxsource.zip [^] (9,807 bytes) 18-01-2011 03:37
? file icon sample3.dpr [^] (947 bytes) 15-01-2012 16:03
jpg file icon sample3.jpg [^] (23,233 bytes) 15-01-2012 16:04


jpg file icon 68.jpg [^] (31,006 bytes) 18-01-2012 13:57


jpg file icon 59.jpg [^] (53,817 bytes) 19-01-2012 04:46

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

-  Notes
(0000924)
Papazol (reporter)
17-01-2011 19:00

На форуме появилось интересное сообщение по сабжу.
(0000925)
AlexWhiter (developer)
18-01-2011 03:37

С учетом того, что автор упомянутой в сообщении программы mobat2jnx раздает исходники (на форуме gpsunderground), думается, что добавить аналогичную функцию в SAS не составит большого труда.
Прилагаю вчерашнюю версию исходников.
(0002769)
vdemidov (manager)
30-05-2011 19:17

Может когда руки и дойдут. Но больше шансов реализовать в виде плагина. Так что, если кого интересует, то изучайте формат и начинайте писать свою экспортилку, потом ее можно будет переделать в плагин к САС.Планете.
(0002793)
AlexWhiter (developer)
31-05-2011 14:26

Меня интересует. Формат изучил.
Зачем писать экспортилку, если уже есть минимум три готовых с исходниками?
Может быть, сразу делать плагин?
(0002798)
vdemidov (manager)
31-05-2011 18:59

Ну они вряд ли написаны на Делфи, а плагин с 90% вероятностью придется писать на Делфи. И еще опишите кратенько что от внешней программы понадобиться плагину? Просто экспорты разные бывают. Для некоторых нужно почти что клеить тайлы, тоесть перебирать строго в определенном порядке, например по строкам. Для других можно просто брать любой тайл входящий в выбранную область и запихивать в результирующий файл или папку.
(0002802)
AlexWhiter (developer)
31-05-2011 23:39

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

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

В общем, всё.

У формата карт JNX есть ряд настраиваемых пользователем параметров. Возможно сделать у плагина диалог настройки?
(0002803)
vdemidov (manager)
01-06-2011 03:47

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

Диалог настройки пока сложный вопрос. Для начала давайте исходить из того что его нету.
(0002809)
gpsMax (manager)
01-06-2011 08:30

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

Надо как-то подогнать эту идею под передачу параметров плагину.
(0002818)
AlexWhiter (developer)
01-06-2011 12:23
edited on: 01-06-2011 12:24

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

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

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

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


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

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


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

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


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

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

(0002819)
AlexWhiter (developer)
01-06-2011 12:35

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

Может быть, самым простым способом реализации сабжа было бы добавление настроек пост-обработки в диалог загрузки карт.
(0002820)
vdemidov (manager)
01-06-2011 13:18

Ясно. Тоесть под вот этот тип оно не подойдет.
http://sasgis.org/wikisasiya/doku.php/pluginapi:plugintype:простой_экспорт_в_файл
(0002821)
zed (manager)
01-06-2011 14:21

Если добавить метод GetMaxTilesCount - то подойдёт.
(0002822)
AlexWhiter (developer)
01-06-2011 14:41

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

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

На уровни можно не заморачиваться, если предполагать, что осуществляется экспорт только одного уровня.
(0002823)
vdemidov (manager)
01-06-2011 15:01

Да, финализация предполагается при разрушении, хотя может и стоит подумать о явной.
(0002824)
zed (manager)
01-06-2011 15:01

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

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

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

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

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

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

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

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

>И всё же как насчет использования INIшника для параметризации?
Если экспорт будет не из плагина, а из самого саса, то все параметры можно брать из фрейма экспорта (добавить свои поля/переделать стандартный при необходимости).
(0003852)
bogi (reporter)
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 (manager)
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 (manager)
29-12-2011 12:15

ну что поднимем хотелку.
ввиду того, что доступ к исходникам то открыт: можно пробовать реализовывать...
1. либо в качестве диалога к mobat2jnx
2. или пытаться разбираться в тонкостях структуры файла. (что более предпочтительно)
(0004887)
AlexWhiter (developer)
12-01-2012 12:53
edited on: 12-01-2012 12:54

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

(0004889)
zed (manager)
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 (manager)
12-01-2012 14:03

там насколько я понял из быстрого взгляда нужна проекция lat\lon
(0004891)
AlexWhiter (developer)
12-01-2012 15:02

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


Думаю, что проще и быстрее будет прикрутить экспорт тем, кто уже более-менее разобрался с внутренностями SAS.
(0004952)
zed (manager)
15-01-2012 11:11

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

>Думаю, что проще и быстрее
Проще - возможно, быстрее - не факт. Может оказаться быстрее разобраться в исходниках и прикрутить что-то самому, чем ждать пока у кого-то до этого дойдут руки. Тем более, что тому у кого дойдут руки, тоже ведь придётся со своей стороны разбираться с форматом JNX, чтобы сделать нормальный экспорт.
(0004964)
AlexWhiter (developer)
15-01-2012 14:48

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

На вход достаточно скормить количество уровней, предполагаемое количество тайлов на каждом из уровней и собственно тайлы в виде координат и JPEGов.
(0004965)
zed (manager)
15-01-2012 14:55
edited on: 15-01-2012 14:55

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

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

(0004966)
AlexWhiter (developer)
15-01-2012 15:04
edited on: 15-01-2012 15:07

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

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

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

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

(0004971)
AlexWhiter (developer)
15-01-2012 16:03

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

Также добавил исходник и картинку во вложения к обращению.
(0004972)
zed (manager)
15-01-2012 16:42

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

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

По поводу либы: зависимость от юнитов utf8.pas и ComObj излишняя - компилится и без них, по крайней мере на Delphi 2007.
(0004993)
AlexWhiter (developer)
15-01-2012 23:32

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

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


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

Вполне может быть. У меня под рукой есть только Delphi 5 и 7, с ними и проверял.
Уже в седьмой версии не нужны ни UTF8, ни ComObj. Но вот пятая версия без них не компилирует.
В принципе можно разрулить ifdef'ами, но я пока решил не заморачиваться :)
(0005093)
zed (manager)
18-01-2012 10:30
edited on: 18-01-2012 10:37

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

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

(0005094)
Garl (manager)
18-01-2012 11:03

Прибор не ругается, карту не показывает
не показывает что это birds eye.
код можно пробовать ковырять?
(0005095)
zed (manager)
18-01-2012 11:04

конечно. мне тестировать не на чем.
(0005096)
Garl (manager)
18-01-2012 11:16

загружался краснодарский край , получилось картинка в аттаче.
(0005101)
zed (manager)
18-01-2012 13:55

Вроде всё исправил.
(0005105)
zed (manager)
19-01-2012 05:07
edited on: 19-01-2012 05:10

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

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

(0005143)
gpsMax (manager)
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 (manager)
20-01-2012 19:45

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

- Users who viewed this issue
User List Anonymous (5006x), zed (1x), vasketsov (1x)
Total Views 5008
Last View 31-10-2024 23:16

- 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 => 40xxxx
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 View Revisions
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 View Revisions
14-12-2011 03:06 gpsMax Note Edited: 0004522 View Revisions
14-12-2011 03:10 gpsMax Note Edited: 0004522 View Revisions
29-12-2011 12:15 Garl Note Added: 0004717
29-12-2011 12:15 Garl Description Updated View Revisions
12-01-2012 12:53 AlexWhiter Note Added: 0004887
12-01-2012 12:54 AlexWhiter Note Edited: 0004887 View Revisions
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 View Revisions
15-01-2012 15:04 AlexWhiter Note Added: 0004966
15-01-2012 15:07 AlexWhiter Note Edited: 0004966 View Revisions
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 View Revisions
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 View Revisions
19-01-2012 05:15 zed Status confirmed => resolved
19-01-2012 05:15 zed Fixed in Version => 24xxxx
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 View Revisions
20-01-2012 19:45 Garl Note Added: 0005144
20-01-2012 19:46 gpsMax Note Edited: 0005143 View Revisions
23-01-2012 08:18 vdemidov Fixed in Version 24xxxx => 120808
23-01-2012 08:18 vdemidov Target Version 40xxxx => 120808
10-10-2012 11:49 Tolik Status resolved => closed



Copyright © 2007 - 2024 SAS.Planet Team