SAS.Planet GIS

Есть такая программа - SAS.Planet. www.sasgis.ru

Как и Maemo-Mapper, SAS.Planet закачивает карты из интернета. И хранит их как отдельные файлы в дереве каталогов определенной структуры.

Насколько я понимаю, если понять систему каталогов SAS.Planet, то можно эти картинки вставлять в базу для Maemo-Mapper.

Таким образом можно решить проблему удобной закачки карт для Maemo-Mapper на большом компе.

В последних версиях Maemo-Mapper добавлена возможность хранить карты в формате Sqlite. Python умеет работать с этим форматом. Т.е. скрипт на Python в сотню-другую строк по идее способен решить проблему.

Есть ли здесть знатоки Python, способные решить эту задачу?
Офигенная программа! И денег не просит.
Работает с кучей источников, включая имеющиеся для maemo mapper.
Под wine работает без проблем (GPS не пробовал).
Кэш может хранить в нескольких форматах.
В замену GoogleEarth, однозначно.
SergeK:Есть такая программа - SAS.Planet. www.sasgis.ru

Как и Maemo-Mapper, SAS.Planet закачивает карты из интернета. И хранит их как отдельные файлы в дереве каталогов определенной структуры.

Насколько я понимаю, если понять систему каталогов SAS.Planet, то можно эти картинки вставлять в базу для Maemo-Mapper.

Таким образом можно решить проблему удобной закачки карт для Maemo-Mapper на большом компе.

В последних версиях Maemo-Mapper добавлена возможность хранить карты в формате Sqlite. Python умеет работать с этим форматом. Т.е. скрипт на Python в сотню-другую строк по идее способен решить проблему.

Есть ли здесть знатоки Python, способные решить эту задачу?

А почему обязательно Python? У SQLite открытые исходники. Хоть что умеет работать с этим форматом. Чем владеешь, на том и пиши. Маперавская база состоит из одной таблицы:
CREATE TABLE maps(zoom integer, tilex integer, tiley integer, pixbuf blob, primary key (zoom, tilex tiley))
Просто лично для себя я не вижу необходимости закачки карт через ББ, формировать кеш гугловских карт в Maemo-Mapper для меня вполне удобно.
А программа действительно зачетная! Спасибо за ссылку.
Maemo Mapper сильно тормозит и вываливается на загрузке больших участков с многими зумами.
У меня по крайней мере.
Python потому что

1) он есть в любом дистрибутиве Linux и часто ставится по умолчанию, да и под Windows поставить легко.
2) здесь на форуме были люди разрабатывавшие на Python обход дерева каталогов.

Я пообщался по е-мейлу с одним из разработчиков, тот пообещал подумать насчет реализации экспорта в формат Maemo-Mapper (sqlite) прямо в программе. Экспорт для iPhone (тоже sqlite) в программе есть, так что по идее это не очень сложно.

Закачка через ББ мне например нужна. Потому что в SAS.Planet я могу на работе поставить и закачать все что нужно. А напрямую таблетку могу качать только дома, но там канал в интернет медленный.
Аргументы в пользу Python-а принимаются, но не убеждают. Я, например, с Питоном не очень дружу. Считаю, что нужно не ждать милостей от природы, а решать задачу, если она возникла, с помошью того инструментария, который есть под рукой и которым владеешь. Это может быть и VBScript и С/С++ и что угодно. Утилитку конвертирования кэша SAS.Planet в формат Maemo-Mapperа закинул в Файлы вместе с исходниками что б было интересней.
Использование: Sas2mm.exe <путь до кэша> <имя базы>. Например: Sas2mm E:\SASPlanet\cache\DGsat dgsat.sqlite
Удачи!
Забыл добавить: тип кэша в SAS.Planet: По умолчанию.
Я тут связался с разработчиком утилиты которая кидает кэш из SASPlanet в sqllite (есть тема такая на форуме SASGIS).
Вроде сделает для нас...
вот только нужны небольшие файлы примеров баз (кэша maemo-mappera) для sqllite для разный репозитариев. Я сделал для yahoo sat и OSM, для google - ссылка не работает...

p/s утилита для windows
Уже сделал. У меня работет. Возми в Файлах.
Anore:Утилитку конвертирования кэша SAS.Planet в формат Maemo-Mapperа закинул в Файлы вместе с исходниками что б было интересней.

Спасибо большое! :)


P.S. клево было бы еще маленький ридми внутрь архива засунуть
А что там в этом ридми должно быть? Что не понятно спрашивай не стесняйся В исхидниках от силы строк 20-30 моих. Остальное готовые библиотеки и скопипастные из инета куски. Коллективный разум есть и он работает.:) У кого есть нужда, перепишите на своем любимом языке под любимую операционку, добавте рюшачек, гуевый интерфейс и т.д. и т.п. Корявый стиль мне простителен, поскольку не технарь, а скорее гуманитарий. Кстати ,только что заметил, что у SAS.Planet не весь кэш в jpg формате, а я по невнимательности это не узрел. Предлогаю форумчанам решить этот и другие вопросы самим, а результаты представлять в этой ветке форума.
Если у кого-нибудь проснётся желание попрограммировать - не хватает не рюшечек, а одной полезной фичи - объединение кэшей с ББ и таблетки.
Dali:Если у кого-нибудь проснётся желание попрограммировать - не хватает не рюшечек, а одной полезной фичи - объединение кэшей с ББ и таблетки.

Вы абсолютно правы, с такой фичей утилита была бы полезна чаще. Поступим так. Будем заходить с другой стороны. Работаем под виндой. Качаем litex.zip - библиотеку функций доступа к SQLite. Лежит здесь: http://www.assembla.com/spaces/litex/documents
В архиве в папке 4_litex\litex\bin\ лежит sqlite3.dll. Эту библиотеку нужно зарегистрировать в системе: regsvr32 sqlite3.dll. Получилось? Едем дальше. Создаем файл с расширением *.hta следующего содержания:
<script language=\"JScript\" type=\"text/javascript\">

//Путь до кэша SAS.Planet. Обратить внимание на двойной символ \"\\\"
var SAS_folder_path=\"E:\\SASPlanet\\cache\\gumap\";

// путь до базы MaemoMapperа.
var MMBase_path=\"E:\\Work\\SQLite\\JS\\google.sqlite\";

//Режим синхронизации 0 - только пополнение тайлов, 1 - пополнение с замещением существующих
var mode=0;

var fso = new ActiveXObject(\"Scripting.FileSystemObject\");
var main_folder = fso.GetFolder(SAS_folder_path);
var DirS = String.fromCharCode(92);
var CntIns=0;
var CntUpd=0;
oConnection = new ActiveXObject(\"LiteX.LiteConnection\");
oConnection.Path = MMBase_path;
oConnection.Open();
DirWithSubFolders(main_folder);
oConnection.Close();
if (mode==0) document.writeln(\"Тип синхнонизации - пополнение; \");
else
{
document.writeln(\"Тип синхнонизации - замещение; \");
document.writeln(\" Заменено \"+CntUpd+ \" тайлов; \");
}
document.writeln(\" Добавлено \"+CntIns+ \" тайлов; \");


//=================функции=============================
function get_blob(name) // преобразование файла в Steam
{
var oStream = new ActiveXObject( \"ADODB.Stream\" );
oStream.Type = 1; //adTypeBinary
oStream.Open();
oStream.LoadFromFile( name );
return oStream.Read();
}

function DirWithSubFolders(_folder) // перебираем папки
{
EnumerateFiles (_folder);
var more_folders = new Enumerator(_folder.SubFolders);
for (;!more_folders.atEnd();more_folders.moveNext())
{
OneFolder = more_folders.item();
DirWithSubFolders (OneFolder);
}
}


function EnumerateFiles(_folder) // по файлам
{
var more_files = new Enumerator(_folder.Files);
for (;!more_files.atEnd();more_files.moveNext())
{
one_file = more_files.item(); // полный путь до файла

//===== распарсим строку, получая zoom, x, y======
var z=\"\";
var pos=one_file.Path.indexOf(DirS+\"z\")+1;
while (one_file.Path.charAt(pos+1)!=DirS)
{
pos++;
z=z+one_file.Path.charAt(pos);
}
z=22-parseInt(z); // преобразование масштаба


var x=\"\";
pos=one_file.Path.indexOf(DirS+\"x\")+1;
while (one_file.Path.charAt(pos+1)!=DirS)
{
pos++;
x=x+one_file.Path.charAt(pos);
}

var y=\"\";
pos=one_file.Path.indexOf(DirS+\"y\")+1;
while (one_file.Path.charAt(pos+1)!=\".\")
{
pos++;
y=y+one_file.Path.charAt(pos);
}
//==============================================
oBlob = get_blob(one_file.Path); // получим Stream из файла

// проверим есть ли такой тайл в базе
oStatement = oConnection.Prepare( \"SELECT * from maps WHERE zoom=\"+z+\" AND tilex=\"+x+\" AND tiley=\"+y );
var Count=oStatement.RowCount;
oStatement.Close();
if (Count!=0) // если тайл уже есть
{
if (mode==1) // если режим с заменой тайлов
{
oConnection.Execute(\"UPDATE maps SET pixbuf = ? WHERE zoom =\"+z+\" and tilex=\"+x+\" and tiley=\"+y, oBlob);
CntUpd++;
}
}
else // если такого тайла в базе нет
{
oConnection.Execute(\"INSERT INTO maps(zoom,tilex,tiley,pixbuf) VALUES(?,?,?,?)\",z,x,y,oBlob);
CntIns++;
}
}
}
</script>

Нужно только изменить переменные SAS_folder_path, MMBase_path, mode на свои и запустить.
Особенно интересно в одну базу вносить данные от разных источников в зависимости от масштаба.
Anore:Особенно интересно в одну базу вносить данные от разных источников в зависимости от масштаба.

Не советую. Они немного не сопадают по координатам. Представьте как будет выглядеть, если тайлы недокачаны, и отображаются из меньшего масштаба (т.е. другого источника).
Возможно, я не правильно понимаю терминологию. Как я понимаю тайл - это кусок карты определенного размера, который отображается прикладной программой при отображении участка местности в определенном масштабе. Я думал, что тайл, например в понятии ММ - это одна запись в базе т.е. кусок изображения, его координаты и масштаб, при котором его нужно отобразить. А как он может быть не докачен? Буду признателен за разъяснения.
Когда я смотрю какое-то место в каком-то масштабе, закачиваются тайлы. Если я в офлайне, отображаются тайлы из самого меньшего скешированного масштаба. Так на экране могут одновременно присутствовать тайлы из разных масштабов. И если они будут из разных источников, будут несовпадения (ломаные дороги, дома). Даже у одного источника на одном масштабе бывает соседние дома наклонены в разные стороны, выглядит смешно. Ладно хоть улицы состыкованы.
Вроде как не в тему вопрос.
А как в базе ММ посмотреть какие тайлы имеются?
svs57:Вроде как не в тему вопрос.
А как в базе ММ посмотреть какие тайлы имеются?

Посмотреть базу. SQL Spy или чем подобным на ББ.
Да я не про то чем посмотреть, а про то что из базы фетчить?
Может есть что готовое, чтоб не изобретать велосипед
кто-нибудь пользует Sas2mm ? не получается сконвертить. создает пустой файл ххх.sqlite разиером 3072б.
Я пользовал! Работает! Причем связался с автором по личке, он подредактировал программу для работы с типом GoogleTiles (есть и такой старый формат в СасПланет).
Файл размера 3072б получается если что-то не так задано...

p/s давно не пользовал данную прогу (только новую)... попробую еще раз, только проверить немогу, нет таблетки под рукой жене отдал.

pp/s только что запустил... (файл sqlite3.dll должен лежать рядом с исполняемым файлом)
РАБОТАЕТ!
Sas2mm.exe D:\SASPlanet\cache\SAT goggle.sqlite
Сегодня попробовал - не работает. Видимо изменился формат кэша sas.planet. Есть еще способы закачать кэш в MM?
Есть. Девятью постами выше скрипт на JS. Сам аналогичным постоянно пользуюсь.
Nuri:Сегодня попробовал - не работает. Видимо изменился формат кэша sas.planet. Есть еще способы закачать кэш в MM?
Veska:Есть. Девятью постами выше скрипт на JS. Сам аналогичным постоянно пользуюсь.

Попробовал. При запуске выдает:
\"Ошибка компиляции Microsoft JScript: Синтаксическая ошибка\". Ругается на строку 1 и символ 1 :)
Nuri:Сегодня попробовал - не работает. Видимо изменился формат кэша sas.planet. Есть еще способы закачать кэш в MM?

Я использую свой скрипт на питоне: tiles_convert.py

Брать здесь: http://code.google.com/p/tilers-tools
Оказалось проще выкачать самим маппером :) Область небольшая, он справился.
Sas2mm отлично работает. Как указал автор - тайлы должны быть в JPG формате,
поэтому если нужно - предварительно конвертим, иначе получим 3072б (см. выше).
С компрессией 90 размер получается процентов на 70 больше от png-оригинала
(110Мб - png / 172Мб - jpg). Если кому критично - можно поправить в исходнике.
Пакетная обработка для XnView: открываем папку с тайлами, Ctrl+A, Ctrl+U,
ставим галку \"Заменять файлы\" и выставляем % компрессии.
Всех приветствую!
Стираю все мои тупые вопросы...
Благодарю создателей програмки sas2mm.

Тут возникла проблема с конвертацией карт которые в png сохраняются ( После конвертации в XnView (копирую ли папку отдельно, либо родную грохаю, не важно. Пишет ошибку конвертации карта не добавлена в базу. Не знаю чего делать.



Все нужные карты перепробовал получается все кроме одной на png, и только одна на jpg слава богу именно на ней стал пробовать, хотя бы увидел как это работает на таблетке.
буду признателен за помощь, в объяснении как при помощи програмки sas2mm перевести в sqlite конвертированные при помощи программы XnVieW файлы карты
И ещё вопрос есть варианты сразу png конвертитить?

Пробовал выложенный Anore скрипт сделать не заработал.

Ещё vadp выложил ссылку своего скрипта на питоне, но по ангийския плохо понимаю и как запустить его не windows не знаю(

по пробовал все кеши в Sas планета всё равно только png файлы сохраняются( В общем так и не разобрался, :(
Попробовал сконвертить с помощью Sas2mm спутниковую гугловскую карту (папка SAT).
Cделал две попытки, но оба раза после длительной работы (несколько часов в последний раз) вылетало с соообщением:

C:\SASPlanet_100707\cache>c:\sas2mm\sas2mm SAT SAT.sqlite
error. maps not insert in to base

Первый раз успело сделать базу Sat.sqlite размером 40+ МБ. Второй раз вылетело на 505 МБ. Сейчас запустил в третий раз. Работает уже 2 с половиной часа, наконвертила уже 300 с гаком мегабайт. Но гарантии, что опять не вылетит, нет...

Напишите насколько большие базы кому удавалось конвертировать? Сколько времени примерно занимало? Были вылеты? Или все гладко проходило?
мда.... вылетело и в третий раз....
Причем похоже не случайно... Потому как размер созданной базы точно такой же, как и перед этим:
505 059Кб...

Подскажите, у кого есть мысли, куда копать, чтобы эту заразу преодолеть....?
Даже и не знаю что сказать.
Anore:Даже и не знаю что сказать.


А какую максимальную базу по размеру вам удавалось сконвертировать ?
Геннадий51:А какую максимальную базу по размеру вам удавалось сконвертировать ?

База maps.navitel.su - 1.9Гб, база maps.visicom.ua - 1.8Гб, база Генштаба - 1.1Гб. Ну и несколько более мелких делал.
Да, конверчу JS скриптом что на первой странице темы, подробное howto постил на этом форуме где-то в другой теме.
JS скриптом... А я про Sas2mm спрашивал... Хочется понять это он только у меня не работает, или нет. :)
У sqlite действительно есть ограничение на размер базы. 32 Тб, если мне не изменяет память. Но ведь это не наш случай, верно? Программку перекомпилил. Добавил вывод на экран процесса работы, вставил где только можно обработчики исключений, добавил туда же работу с png файлами. Вообщем чем мог, как говорится... Дальше сами смотрите. Сам не проверял. Брать здесь: http://depositfiles.com/files/yoz4n8ovm
Anore:У sqlite действительно есть ограничение на размер базы. 32 Тб, если мне не изменяет память. Но ведь это не наш случай, верно? Программку перекомпилил. Добавил вывод на экран процесса работы, вставил где только можно обработчики исключений, добавил туда же работу с png файлами. Вообщем чем мог, как говорится... Дальше сами смотрите. Сам не проверял. Брать здесь: http://depositfiles.com/files/yoz4n8ovm


Спасибо! Конечно 32Тб это не наш случай :) У меня вылетало на 505Мб. Скорее всего дело не в размере.
Может такое быть, что в кэше САСПланет какая-то бяка получается, на которой sas2mmm валится?
Впрочем не будем спешить с выводами. Попробую новую версию, напишу про результаты.
Anore

Отлично! Теперь прошло до конца. Спасибо! Иногда промелькивали ошибки при выполнении команд SQL Update и Insert.
Перекину теперь базу на таблетку и посмотрю как она там приживется. Насколько я понимаю, sas2mm просто создает базу с нуля. А дописывать в существующую базу может? Или это займёт столько же времени?

База потянула на 527МБ, небольшая в общем.Процесс занял часов 6.
Тайловые карты для Locus (Android) качаю Mobile Atlas Creator.
Можно ли их прикрутить к Mapper?