Захотелось залить офлановые карты на свой андроид...
Слил уже готовые карты с android.com.ua aka g-phone.in.ua, за что отдельное спасибо. Но при первом использовании tar-а приложение (rmaps) должно проиндексировать архив, и когда это происходило, приложение висло, помогало только извлечение аккумулятора. Систематики не было. Меньший, менее детальны архив, с картой Украины, удалось с н-го раза проиндексировать. Но Киев нет. Так родился скрипт на питоне для индексации данных карт на ПК и с последующей заливкой на моблу...
http://pastebin.com/f52f1de6b
пример использования:
UPD: Tested only on Samsung Galaxy
Слил уже готовые карты с android.com.ua aka g-phone.in.ua, за что отдельное спасибо. Но при первом использовании tar-а приложение (rmaps) должно проиндексировать архив, и когда это происходило, приложение висло, помогало только извлечение аккумулятора. Систематики не было. Меньший, менее детальны архив, с картой Украины, удалось с н-го раза проиндексировать. Но Киев нет. Так родился скрипт на питоне для индексации данных карт на ПК и с последующей заливкой на моблу...
http://pastebin.com/f52f1de6b
from optparse import OptionParser import os import shutil import tarfile import time import sqlite3 def main(): usage = "usage: %prog [options] rmapsDir mapTarFile" parser = OptionParser(usage) parser.add_option("-q", "--quiet", action="store_false", dest="verbose") (options, args) = parser.parse_args() if len(args) != 2: parser.error("incorrect number of arguments") (rmapsDir, mapTarFile) = args tmpFolder = "/tmp/rmaps_index_upader/"; indexDbFile = rmapsDir + '/data/index.db' indexDbFileTmp = tmpFolder + "/index.db" (mapTarPath, mapTarName) = os.path.split(mapTarFile) mapTarFileTmp = tmpFolder + mapTarName zooms = [] if not os.path.exists(indexDbFile): print "Index file not found. Exiting..." return if not options.quiet : print "Copying files to /tmp folder..." if not os.path.exists(tmpFolder): os.makedirs(tmpFolder) shutil.copyfile(indexDbFile, indexDbFileTmp) shutil.copyfile(mapTarFile, mapTarFileTmp) dbTableName = "cahs_" + mapTarName.replace('.', '_'); #cahs!!! idk if it will work with correct name if not options.quiet : print "Opening db..." con = sqlite3.connect(indexDbFileTmp) cur = con.cursor() cur.execute("DROP TABLE '"+dbTableName+"';") con.commit() cur.execute("CREATE TABLE '"+dbTableName+"' (name VARCHAR(100), offset INTEGER NOT NULL, size INTEGER NOT NULL, PRIMARY KEY(name) );") con.commit() if not options.quiet : print "Parsing tar file and filling db..." tar = tarfile.open(mapTarFileTmp, "r") mapTarFileSize = os.path.getsize(mapTarFileTmp); for tarinfo in tar: if tarinfo.isreg(): cur.execute("INSERT INTO '" + dbTableName + "' VALUES ('" + tarinfo.name + "', " + str(tarinfo.offset_data) + ", " + str(tarinfo.size) + ");") elif tarinfo.isdir(): zooms.append(int(tarinfo.name[:-1])) else: print "unknow file founded." tar.close() minZoom = min(zooms) maxZoom = max(zooms) cur.execute("INSERT OR REPLACE INTO ListCashTables VALUES('" + dbTableName + "',"+ str(time.time()).replace(".","") +"0,"+ str(mapTarFileSize) +", "+str(minZoom)+","+str(maxZoom)+")"); if not options.quiet : print "Commiting..." con.commit() if not options.quiet : print "Uploading index back to rmaps dir..." indexDbFileBkup = indexDbFile + "_bkup_" + time.strftime("%y%m%d%H%M%S") shutil.copyfile(indexDbFile, indexDbFileBkup) shutil.copyfile(indexDbFileTmp, indexDbFile) if not options.quiet : print "Done." print "You have a backup file ", indexDbFile + "_bkup_" + time.strftime("%y%m%d%H%M%S") , " in case of problems you can restore it." print "Thank you, have a nice day!" def dump(obj): for attr in dir(obj): print "obj.%s = %s" % (attr, getattr(obj, attr)) if __name__ == "__main__": main()
пример использования:
>python rmaps_index_update.py /media/NO_NAME/rmaps/ /media/NO_NAME/rmaps/maps/Kiev.tar
Copying files to /tmp folder... Opening db... Parsing tar file and filling db... Commiting... Uploading index back to rmaps dir... Done. You have a backup file /media/NO_NAME/rmaps//data/index.db_bkup_100110182159 in case of problems you can restore it. Thank you, have a nice day!
UPD: Tested only on Samsung Galaxy
приветствую!
ОтветитьУдалитьдык может дадите (выложить) готовый для "залития" файл (переделаный) для Киева?
Офигеть просто! Все, блин, всё знают, кроме меня
ОтветитьУдалитьЗа статью премного благодарен, все по делу, достаточно много кто это использует
ОтветитьУдалить