[BigPlanetSQLiteMerger 快速上手]
- 下載 BigPlanetSQLiteMerger 0.1.zip 並解壓縮至某目錄下,例如 C:\BigPlanetSQLiteMerger\
- 將欲合併的兩個 BigPlanet SQLite (*.sqlitedb) 離線地圖資料庫移至 C:\BigPlanetSQLiteMerger\ 目錄內,也就是說和 BigPlanetSQLiteMerger.jar 位於同一個目錄。
- 將欲合併的兩個離線地圖資料庫改名為 source.sqlitedb 及 target.sqlitedb
- 點兩下執行 start.bat,將 source.sqlitedb 的內容合併至 target.sqlitedb 內。
- 假如 source.sqlitedb 內有 10,000 個地圖圖檔,target.sqlitedb 內有 20,000 個地圖圖檔,而且這兩個資料庫共有 2000 個地圖圖檔重複,則執行 start.bat 進行合併後,source.sqlitedb 內容不變,還是有 10,000 個地圖圖檔,target.sqlitedb 則會有 20,000+(10,000-2,000) = 28,000 個地圖圖檔。
- 如果您需要保留合併前的 target.sqlitedb (內有 20,000 個地圖圖檔),則請在合併之前先備份 target.sqlitedb
[BigPlanetSQLiteMerger.jar 進階參數說明]
共三個參數,第三個為選擇性參數。 sourceSQLiteDB targetSQLiteDB [BatchSize=1000]
* 一般使用: ---------------------------------------------- java -Djava.library.path=lib -jar BigPlanetSQLiteMerger.jar source.sqlitedb target.sqlitedb ---------------------------------------------- 以上指令將 source.sqlitedb 內容合併至 target.sqlitedb,預設每 1000 筆資料合併一次。
* 進階版 (每 10,000 筆資料合併一次): ---------------------------------------------- java -Xms64M -Xmx768M -Djava.library.path=lib -jar BigPlanetSQLiteMerger.jar source.sqlitedb target.sqlitedb 10000 ---------------------------------------------- 一旦 BatchSize 設越大,理論上合併速度越快,但執行時需要用越多記憶體,所以必須調整此參數 -Xmx768M,此參數表示 JVM 最多使用 768 MB 的記憶體,若這個數字不夠大,就有可能出現 Out Of Memory (記憶體不足) 的錯誤。
[BigPlanetSQLiteMerger.jar 執行過程]
以下為執行
java -Xms64M -Xmx768M -Djava.library.path=lib -jar BigPlanetSQLiteMerger.jar Google.Maps.Taiwan.sqlitedb Google.Maps.Japan.sqlitedb 10000後,Windows 的命令提示字元 (Console) 顯示的內容。
====================================== = BigPlanetSQLiteMerger v0.1 = = Powered by Dr. TYT's Android Map = = http://android-map.blogspot.com/ = ====================================== -------------------------------------- Google.Maps.Taiwan.sqlitedb: 690672 KB Google.Maps.Japan.sqlitedb: 1170577 KB -------------------------------------- Total 195295 map tiles in Google.Maps.Taiwan.sqlitedb adding map tiles 1~10000 of total 195295 adding map tiles 10001~20000 of total 195295 adding map tiles 20001~30000 of total 195295 adding map tiles 30001~40000 of total 195295 adding map tiles 40001~50000 of total 195295 adding map tiles 50001~60000 of total 195295 adding map tiles 60001~70000 of total 195295 adding map tiles 70001~80000 of total 195295 adding map tiles 80001~90000 of total 195295 adding map tiles 90001~100000 of total 195295 adding map tiles 100001~110000 of total 195295 adding map tiles 110001~120000 of total 195295 adding map tiles 120001~130000 of total 195295 adding map tiles 130001~140000 of total 195295 adding map tiles 140001~150000 of total 195295 adding map tiles 150001~160000 of total 195295 adding map tiles 160001~170000 of total 195295 adding map tiles 170001~180000 of total 195295 adding map tiles 180001~190000 of total 195295 adding map tiles 190001~195295 of total 195295 Total 407.031 seconds to add/ignore 195295 map tiles into Google.Maps.Japan.sqlitedb -------------------------------------- Google.Maps.Taiwan.sqlitedb: 690672 KB Google.Maps.Japan.sqlitedb: 1860343 KB --------------------------------------
Dr. TYT 您好
回覆刪除非常感謝您介紹這麼好用的軟體
但是我在使用上出現了下面情形
Unable to load sqlite_jni: java.lang.UnsatisfiedLinkError: C:\Users\tim\Desktop\
BigPlanetSQLiteMerger 0.1\lib\sqlite_jni.dll: Can't load IA 32-bit .dll on a AMD
64-bit platform
是因為我是安裝64位元的系統所以無法執行合併嗎?
有無辦法解決呢?
Hi, 番薯,
回覆刪除BigPlanetSQLiteMerger 0.1.zip 壓縮檔內的 lib\sqlite_jni.dll 是給 32 位元 Windows 作業系統,且安裝 32 位元 Java 執行環境(JRE 或 JDK)的電腦使用的。
您的情形應該是安裝了 64 位元 Java 執行環境,故請更換為 64 位元用的 sqlite_jni.dll
跟當初幫 Mobile Atlas Creator 1.7 更換 sqlite_jni.dll 的方法是一樣的。
您可以拿 Mobile_Atlas_Creator_1.7_SQLite.zip 檔案內的 Win x64 (64bit)/sqlite_jni.dll 來做替換。
先謝謝你的這些文章 ,有很完整的離線地圖資訊。
回覆刪除另外請問一下,這個 合併的 java ,能不能換什麼 lib 讓 mac 可以執行?
謝謝。
Hi, sskes,
回覆刪除MacOS 需要 sqlite.jar 搭配 sqlite_jni.jnilib
TrekBuddy Atlas Creator 1.6.x 對應各種OS平台的 SQLite Native Libraries
文章裡面有別人已經編譯好的檔案,你可以先試試看能不能用,不行的話我還有比較麻煩的備案。
sqlite_jni_osx_10.4.tar.gz - Mac OS X 10.4
Hi, tytung 你好,
回覆刪除如蕃薯的問題,我已確定是64位元Windows用的sqlite_jni.dll,可是我仍然得到個錯誤訊息而無法合併,請問是我哪裡弄錯嗎?錯誤訊息如下,謝謝。
Unable to load sqlite_jni: javalang.UnsatisfiedLinkError: D:\...\sqlite_jni.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
Hi, SHEVEN,
回覆刪除你的作業系統曾經安裝過vcredist_2008嗎?
http://android-map.blogspot.com/2010/02/mobile-atlas-creator-17.html?showComment=1280736985710#c2036935489835939843
若沒有的話,請參考 "新版離線地圖製作軟體 Mobile Atlas Creator 1.7" 的[問題集錦],去下載安裝 vcredist_x64.exe
想請問一下版主,不知版主是否清楚RMaps單檔最大可到幾G,煩請解惑 多謝
回覆刪除SD 卡為 FAT32 檔案格式,而這種檔案格式單一檔案最大只能 4GB
回覆刪除至於 RMaps 能讀取多大的檔案,我想是取決於每隻手機的效能吧!
感謝作者的辛勞為大家寫了好用的離線程式
回覆刪除想請問一下,我在室內不開啟GPS的環境下居然看不到地圖
一定要使用GPS定位才看的到地圖嗎?已有自製Google maps
並copy進去了
Hi, 世啟,
回覆刪除你下載的地圖範圍一定不夠大。
加上沒有開啟GPS,手機不知道你的位置,所以不可能移動地圖到你所在位置。
請下載世界地圖0~7,然後手動移動到你所在位置,再放大地圖。
註:這篇標題是 BigPlanet SQLite Database Merger 0.1,跟離線地圖程式無關,下次請到正確的文章下發問,謝謝。
您好, 我想請問這個方式跟您之前在『新版離線地圖製作軟體 Mobile Atlas Creator 1.7
回覆刪除』中所說的"2. 假設義大利離線地圖資料庫檔名為 Google.Maps.Italy.sqlitedb,請改名為 BigPlanet_maps.sqlitedb 並移回 \atlases\ 目錄裡,再次圈選 0-7 的世界地圖並執行 Create atlas,世界地圖就會合併至 BigPlanet_maps.sqlitedb,需要的話再改名回 Google.Maps.Italy.sqlitedb,這份資料庫就包含義大利與世界地圖了。"這兩種方式。
有何不同?
另外,我執行這個start.bat後,出現了
回覆刪除Exception in thread "main" java.lang.OutOfMemoryError: java heap space
at SQLite.Vm.step(Native Method)
at SQLite.Database.get_table(Database.java:367)
at SQLite.JDBC2x.JDBCStatement.executeQuery(JDBCStatement.java:102)
at SQLite.JDBC2x.JDBPreparedStatement.executeQuery(JDBCPreparedStatement.java:115)
at tyt.sqlite.BigPlanetSQLiteMerger.a(Unknown Source)
at tyt.sqlite.BigPlanetSQLiteMerger.main(Unknown Source)
請問我該怎麼處理呢?
感謝您的解答!再次感謝!
Hi, 阿怪,
回覆刪除使用 MOBAC 是只有一個 sqlitedb 檔,透過 MOBAC 新增地圖圖檔進去。
這裡的 BigPlanetSQLiteMerger 是將兩個 sqlitedb 檔案合併,因此可以分別在不同電腦下載後再合併,不需要用到 MOBAC.
OutOfMemoryError 表示記憶體不足,文章內已解釋過如何處理了。
您好,請問合併時如果重複的圖檔中其實是不同、有更新過的地圖,這樣是否不會更新為最新的圖檔。舉例來說,googlemap之前沒有蘆洲線的捷運,最近才把蘆洲線放上去了,請問我該怎麼更新地圖呢?是要全部重新下載,還是有其他替換的方法?我今天試了下載新的地圖,並讓sqlitedb檔名跟之前的檔名一樣(據說這樣可以只下載新的範圍),但是檔案放入手機後,還是地圖上沒有蘆洲線耶。不知道您是否知道原因?謝謝!
回覆刪除sqlitedb地圖資料庫沒有紀錄時間,同一塊地圖圖檔,程式無法判別新舊,故還是要重新產生sqlitedb
回覆刪除你下載過的捷運蘆洲線新地圖,則會暫存在 Mobile Atlas Creator 的tilestore\db-Google Maps 目錄,所以只需要重新產生包含蘆洲線的新sqlitedb,不需要再次下載蘆洲線。
Mobile Atlas Creator 運作原理可參考 http://android-map.blogspot.com/2010/02/mobile-atlas-creator-17.html
tytung您好,我看了您寫的運作原理,但可能我還是不太懂。您說「所以只需要重新產生包含蘆洲線的新sqlitedb,不需要再次下載蘆洲線」,然後我要怎麼辦呢?我目前的情況是半年前我已經下載好台北的地圖,也把sqlitedb放到手機裡了,運作一切正常。現在我為了把之前沒在地圖出現的蘆洲線放到地圖上,所以我圈選了台北蘆洲線的區域, 然後我把舊的sqlitedb檔名更名成新的,以讓新增的部分可以直接從舊的sqlitedb中新增,以免重複下載。結果sqlitedb容量的確比之前多了(我假設它有新增地圖進去了),但把這個sqlitedb放進手機後,卻還是沒有蘆洲線。我不知道我哪個步驟做錯了?煩請指教,謝謝!
回覆刪除只要你沒刪除 tilestore\db-Google Maps 目錄,半年前下載的地圖會存一份(假設500MB)在 db-Google Maps 目錄。
回覆刪除你最近下載的蘆洲線會合併儲存至 db-Google Maps 目錄內(假設變510MB)
你現在要做的就是移除 \atlases\BigPlanet_maps.sqlitedb 檔案。
重新選好範圍,點 Create atlas,這時候 MOBAC 會產生新的 BigPlanet_maps.sqlitedb,並直接從 db-Google Maps 目錄(510MB)轉存地圖至 BigPlanet_maps.sqlitedb
您好,我下載地圖沒問題,但合併地圖時卻沒反應。我用win7(x64),也換過64 位元用的 sqlite_jni.dll,但按start.bat後,視窗顯示「java不是內部或外部命令、可執行的程式或批次檔,請按任意鍵繼續」。按了鍵之後視窗就結束了。請問,這需要怎麼解決呢?
回覆刪除Hi, Mingdaa L,
回覆刪除解決方法有二,擇一即可:一是設定環境變數,二是修改start.bat填入完整java路徑。
1.設定環境變數。
http://www.wretch.cc/blog/RYOUKA/12177229
只要在Path"新增"你的Java安裝路徑即可。
PS:千萬不要刪除Path裡原有字串,否則會造成無法開機。
2.用記事本開啟start.bat,在java前面補上你的Java安裝路徑,例如C:\Program Files\Java\jdk1.6.0_26\bin\java
您好,我用第二種方法,start.bat裡最後一行改成C:\Program Files (x86)\Java\jre6\bin\java -Xms64M -Xmx512M -Djava.library.path=lib -jar BigPlanetSQLiteMerger.jar %SOURCE% %TARGET% pause。但是出現跟之前類似的文字:「'C:program'不是內部或外部命令、可執行的程式或批次檔,請按任意鍵繼續」。請問,這需要怎麼解決呢?感謝!
回覆刪除不能有空格,所以加雙引號即可。
回覆刪除"C:\Program Files (x86)\Java\jre6\bin\java"
謝謝您!問題已解決!
回覆刪除