熱門文章

顯示具有 How To 標籤的文章。 顯示所有文章
顯示具有 How To 標籤的文章。 顯示所有文章

2012年8月30日 星期四

BigPlanet SQLite Database Merger v0.2


[BigPlanetSQLiteMerger v0.2 離線地圖資料庫合併程式]

[BigPlanetSQLiteMerger v0.2 更新細節]
  1. 升級 SQLite 函示庫為 sqlite-jdbc-3.7.2.jar,現在全面性支援 32 位元與 64 位元的各種作業系統包括 Linux、Mac、Windows。
  2. 合併時可取代舊的地圖圖檔 (tiles)。
  3. 合併時可更新 RMaps 獨有的 info 資料表內的 minzoom, maxzoom 欄位。 (感謝網友 wdshieh 指出 0.1 版程式問題)
  4. 預設 JVM (Java 虛擬機器) 可用最大記憶體改為 -Xmx1024MB。
  5. 預設每 10000 筆資料合併一次 。

[BigPlanetSQLiteMerger v0.2 快速上手]
  1. 下載 BigPlanetSQLiteMerger v0.2.zip 並解壓縮至某目錄下,例如 C:\BigPlanetSQLiteMerger\
  2. 將欲合併的兩個 SQLite (*.sqlitedb) 離線地圖資料庫移至 C:\BigPlanetSQLiteMerger\ 目錄內,也就是說和 BigPlanetSQLiteMerger.jar 位於同一個目錄。
  3. 將欲合併的兩個離線地圖資料庫改名為 source.sqlitedb 及 target.sqlitedb (或是更改 start.bat 與 start.sh)
  4. 開始將 source.sqlitedb 的內容合併至 target.sqlitedb 內。
    • Windows 使用者請點兩下執行 start.bat,Linux 及 Mac 使用者請執行 start.sh (記得設定執行權限)
    • 假如 source.sqlitedb 內有 10,000 個地圖圖檔,target.sqlitedb 內有 20,000 個地圖圖檔,而且這兩個資料庫共有 2000 個地圖圖檔重複,則執行 start.bat 或 start.sh 進行合併後,source.sqlitedb 內容不變,還是有 10,000 個地圖圖檔,target.sqlitedb 則會有 20,000+(10,000-2,000) = 28,000 個地圖圖檔。
    • 如果您需要保留合併前的 target.sqlitedb (內有 20,000 個地圖圖檔),則請在合併之前先備份 target.sqlitedb

[BigPlanetSQLiteMerger.jar v0.2 參數說明]
共三個參數,第三個為選擇性參數:sourceSQLiteDB targetSQLiteDB [BatchSize=10000]
---------------------------------------------- 
java -Xms64M -Xmx1024M -jar BigPlanetSQLiteMerger.jar source.sqlitedb target.sqlitedb 10000
----------------------------------------------
  • 以上指令將 source.sqlitedb 內容合併至 target.sqlitedb,預設每 10000 筆資料合併一次。
  • 一旦 BatchSize 設越大,理論上合併速度越快,但執行時需要用越多記憶體,所以必須調整此參數 -Xmx1024M,此參數表示 JVM (Java 虛擬機器) 最多使用 1024 MB 的記憶體,若這個數字不夠大,就有可能出現 Out Of Memory (記憶體不足) 的錯誤。

[BigPlanetSQLiteMerger.jar v0.2 執行過程]

2010年8月25日 星期三

BigPlanet SQLite Database Merger 0.1


前幾天有網友問說能不能將兩個 BigPlanet SQLite (*.sqlitedb) 離線地圖資料庫直接合併,由於 Mobile Atlas Creator 沒有這個功能,所以 Dr. TYT 寫了一個名為 BigPlanetSQLiteMerger 0.1 版的 Java 程式,讓大家可以直接合併兩個資料庫的內容。

[BigPlanetSQLiteMerger 快速上手]
  1. 下載 BigPlanetSQLiteMerger 0.1.zip 並解壓縮至某目錄下,例如 C:\BigPlanetSQLiteMerger\
  2. 將欲合併的兩個 BigPlanet SQLite (*.sqlitedb) 離線地圖資料庫移至 C:\BigPlanetSQLiteMerger\ 目錄內,也就是說和 BigPlanetSQLiteMerger.jar 位於同一個目錄。
  3. 將欲合併的兩個離線地圖資料庫改名為 source.sqlitedb 及 target.sqlitedb
  4. 點兩下執行 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 執行過程]

2010年5月13日 星期四

將 Google My Maps 匯入 RMaps 的使用教學


這篇教學主要是告訴大家如何將 Google Maps 的 My Maps 的景點資料匯出成 KML 檔,並匯入至 RMaps 裡,步驟如下:
  1. 在 PC 上使用您的 Google 帳號登入 Google Maps
  2. 點選網頁左上角 My Maps (我的地圖),並務必點選某一個先前建立的地圖
  3. 點選網頁右上角 Earth (地球) 後,會看到多一個 "View in Google Earth (在 Google 地球中檢視)" 的選項,在此選項上按滑鼠右鍵選擇 "Copy Link Location (複製鏈結網址)"。
    • 第一次點選 Earth 時會要求 "Download Google Earth Plugin (下載 Google 地球外掛程式)" 進行安裝。
    • 使用 Firefox 或是 Google Chrome 瀏覽器,"在 Google 地球中檢視" 按滑鼠右鍵才有複製超連結的選項。
    1. 將複製的超連結貼至網址列,並將字串 output=nl 改成 output=kml,然後按 Enter 下載 KML 檔。
    2. 將 KML 檔傳至手機 SD 卡的目錄 /sdcard/RMaps/import/ 內,之後啟動手機 RMaps 並執行匯入 POI 功能即可。

    P.S.:請用任何文字編輯器開啟下載回來的 KML 檔,將 <div dir="ltr"> <br> </div> 全部取代成空白,否則匯入的 POI 的描述會有以上 HTML 標籤,如下圖所示。




    參考資料:http://sites.google.com/site/gmapstips/export-my-map-as-kml (英文網頁)

    2010年2月7日 星期日

    PC 端離線地圖製作軟體 Mobile Atlas Creator 1.7


    [離線地圖製作軟體]
    專業的離線地圖製作軟體 TrekBuddy Atlas Creator (TAC) 從 2010 年起釋出全新版本,重要更新條列如下:
    • 改名為 Mobile Atlas Creator (MOBAC),以反映該程式能下載各種線上地圖,並儲存為不同格式的離線檔,讓不同的手機程式與 GPS 裝置使用的特性。
    • 下載的離線圖檔 (tiles) 不再暫存於硬碟中,而是儲存於資料庫 (BerkelyDB),節省了相當多的硬碟空間。 (註)
    • 舊版 tilestore 目錄內的圖檔 (tiles) 無法直接存入新的資料庫,故請將 Mobile Atlas Creator 解壓縮至新目錄。
    • 舊版的設定檔 (tac-profile*.xml) 可以沿用,直接複製至 Mobile Atlas Creator 目錄內即可。
    註:如果您是 Windows 用戶,建議用 MOBAC 取代舊的 TAC,因為 PC 下載地圖時的暫存圖檔(PNG)可能會超級多(數十萬),TAC 直接將這些暫存圖檔放在 "tilestore\Google Maps" 目錄下,當您不小心點進那個目錄,Windows 檔案總管會被咬住,將來要刪除那個目錄時也會等超級久;相較之下,新版 MOBAC 將暫存圖檔存進了資料庫,則沒有上述問題。


    圖:Mobile Atlas Creator 1.7


    [Mobile Atlas Creator 使用教學]
    以下為製作離線地圖資料庫 BigPlanet_maps.sqlitedb,供 Android 手機程式 Big Planet TracksRMaps 使用的詳細步驟:
    1. 安裝 Java 執行環境 (JRE 或 JDK,至少為 JRE v1.6.0_14 或更高版本)。
    2. 下載並解壓縮 Mobile_Atlas_Creator_1.7_SQLite.zip (Official Edition + SQLite Libs + Settings for "Big Planet SQLite" format)。
    3. 將對應您 OS 平台的 libsqlite_jni 複製至程式根目錄 (Mobile_Atlas_Creator.jar 所在目錄)。
    4. 在 Windows 平台請執行 Mobile Atlas Creator.exe (Linux 平台請執行 start.sh)。
    5. 執行程式後,使用滑鼠左鍵圈選下載範圍,右鍵移動地圖。
    6. 選擇地圖縮放層級 (Zoom Levels) 後,點擊 Add selection 按鈕。
    7. 確認 Map Source 為 Google Maps (預設值,也可以選其他種類地圖)。
    8. 確認 Atlas settings 的 Format 為 BigPlanet SQLite (預設值)。
    9. 點擊 Create atlas 按鈕,開始下載地圖。
    10. 下載完成點擊 Open Atlas Folder 按鈕,將看到 BigPlanet_maps.sqlitedb 地圖資料庫。
    11. 將 BigPlanet_maps.sqlitedb 複製至 Android 手機的 SD 卡目錄 "/sdcard/RMaps/maps/Big Planet Tracks.sqlitedb" (可以用其它檔名,只要副檔名正確即可)。
    12. 打開手機 GPS 功能,執行 Big Planet Tracks 或 RMaps 後,地圖將移動至您所在位置 (假如您已成功從網路或 GPS 衛星接收到經緯度座標)。

    [問題集錦] 8/21 update
    • RMaps 需要手動至設定裡"啟用"新增的離線地圖資料庫,方能選擇該離線地圖。
      • More => Settings => User defined maps => [choose a map] => Enabled map
    • RMaps 開啟後持續看到 loading 底圖時。
      • 首次使用新的離線地圖,會花一段時間建立索引,時間長短取決於資料庫大小。
      • 若很久之後還是持續看到 loading 表示該"縮放層級"的"區域"沒有離線圖資,並非真的在讀取。
        • 很多新手這裡卡關,特別舉例說明。
        • Q:我人在台灣,做的是義大利的離線地圖,手機 RMaps 一直出現 loading 的小圈圈,一個小時過去了還是沒顥示,但之前用台灣離線地圖測試時是可以的??
        • A:RMaps 顯示離線地圖是根據經緯度座標來定位地圖的。
          假設您人在台北測試,GPS 抓到的經緯度是台北,所以 RMaps 可以顯示台灣離線地圖;同理,人在台北不會抓到義大利經緯度,自然無法顯示義大利離線地圖。
        • 解決方法:
          1. 增加 Zoom Levels (縮放層級) 0-7 的世界地圖至義大利離線地圖資料庫裡,在台灣測試時就可以先縮小至 level 1 的世界地圖,將地圖手動移至歐洲義大利,再放大至您抓取的義大利地圖,檢查地圖是否正確。
          2. 假設義大利離線地圖資料庫檔名為 Google.Maps.Italy.sqlitedb,請改名為 BigPlanet_maps.sqlitedb 並移回 \atlases\ 目錄裡,再次圈選 0-7 的世界地圖並執行 Create atlas,世界地圖就會合併至 BigPlanet_maps.sqlitedb,需要的話再改名回 Google.Maps.Italy.sqlitedb,這份資料庫就包含義大利與世界地圖了。
          3. 一般來說,不管您下載哪個區域的地圖,建議您同時下載 0-7 的世界地圖,這個範圍圖資小於 50 MB,佔不了太多空間,卻可以避免很多奇怪問題,特別是您使用 Big Plant Tracks 的話,請照辦。
    • Mobile Atlas Creator 點擊 Create atlas 按鈕,發生 SQLite not available 的錯誤訊息時:
    • Mobile Atlas Creator 發生記憶體不足 (Out of memory) 時:
      • Linux 平台,請修改檔案 start.sh,加大 Java VM 的最大可用記憶體如 -Xmx1536M 或更大,然後執行 start.sh
      • Windows 平台,請新增檔案 start.cmd,加入以下內容至同一行後執行 start.cmd
        start javaw -Xms64M -Xmx1536M -jar Mobile_Atlas_Creator.jar
      • 如果加大記憶體依舊無效,請選擇較小地圖範圍或較少縮放層級,然後分次下載。
    • Mobile Atlas Creator 下載發生 "Error - tiles are missing - do you want to continue anyway?" 時:
      • 請選擇 yes,然後勾選 Ignore download errors and continue automatically 即可。

    [Mobile Atlas Creator 運作原理] 8/21 add
    1. 每次執行 Create atlas 時,下載的地圖都會放一份至 "\tilestore\db-Google Maps\" 目錄下的 BerkelyDB 資料庫中。(此例為下載Google地圖)
    2. 之後分階段將圖檔從 BerkelyDB 儲存到路徑為 "\atlases\BigPlanet_maps.sqlitedb" 的 SQLite 資料庫中。(因為 Android 手機預設只認得 SQLite 資料庫格式)
    3. 下一次重新執行 MOBAC 程式,圈選好地圖範圍並執行 Create atlas 時,MOBAC 會先檢查 BerkelyDB 內是否已有同樣地圖區塊: (例如第一次圈選台北,第二次圈選台灣,則部份範圍重複)
      3.1 若地圖區塊沒有重複的話,就直接下載該地圖區塊 (*.png)。
      3.2 若地圖區塊重複的話,再檢查日期,若網站的較新,則下載地圖區塊並存入 BerkelyDB,日期一樣則不會下載地圖。(即不會浪費網路流量的意思)
    4. 同第2步驟,分階段將圖檔從 BerkelyDB 儲存到 SQLite 資料庫。
    5. (之後第3、4步驟一直重複)

    [延伸閱讀]

    2009年12月15日 星期二

    TrekBuddy Atlas Creator 1.6.x 對應各種OS平台的 SQLite Native Libraries


    使用 TrekBuddy Atlas Creator 1.6.x 下載 BigPlanet SQLite 格式的離線地圖資料庫時,需要 SQLite Java Wrapper/JDBC Driver,並且會用到 Java Native Interface (JNI),不同 OS 要搭配不同的 Native Libraries 動態連結程式庫,例如:
    • Windows 需要 sqlite.jar 搭配 sqlite_jni.dll
    • Linux      需要 sqlite.jar 搭配 sqlite_jni.so
    • Mac OS  需要 sqlite.jar 搭配 sqlite_jni.jnilib
    <下載已編譯二進位檔>
    這邊 Dr. TYT 特別蒐集了不同平台已編譯好的 Native Libraries 動態連結程式庫,方便大家能夠在各種 OS 下使用 TrekBuddy Atlas Creator 1.6.x 下載離線地圖資料庫。

    以下檔案為 SQLite Java Wrapper/JDBC Driver 官方網頁提供:
    1. javasqlite-20090430-win32.zip - Windows x86 (32bit)

    以下檔案為 TrekBuddy Atlas Creator 官方網頁提供:
    1. Windows x64 (64bit).zip
    2. Windows x86 (32bit).zip
    3. Ubuntu 9.10 amd64 (64bit).tar.bz2
    4. Ubuntu 9.10 x86 (32bit).tar.bz2

    以下檔案為該網頁提供:
    1. sqlite_jni_osx_10.4.tar.gz - Mac OS X 10.4

    <自行編譯>
    若以上檔案都不符合您的需求,請下載 SQLite Java Wrapper/JDBC Driver 的原始碼 javasqlite-20090430.tar.gz,並自行編譯,一些編譯方法條列如下:
    1. Official website by Christian (http://www.ch-werner.de/)
    2. Windows x86 by Anton Johansson
    3. Max OS X by Stanislaw Ciszewski
    4. Fedora 11 by MacGuy
    5. Mac OS X 10.5 (64bit) by MacGuy
    6. Ubuntu by walkingice
    以上資訊僅供參考。


    <使用方法>
    sqlite.jar 與這三個 [ sqlite_jni.dll | sqlite_jni.so | sqlite_jni.jnilib ] 其中一種,一起放在 TrekBuddy_Atlas_Creator.jar 所在的 ./ 目錄或是 lib/ 目錄下即可。

    2009年7月30日 星期四

    Android 離線地圖系列(三):離線地圖製作器 TrekBuddy Atlas Creator 1.2 beta 1 (android-map.blogspot.com Version 1)


     TrekBuddy Atlas Creator 為抓取線上地圖(例如Google Maps等),供手機離線使用的優秀軟體。此軟體抓下來的地圖圖檔以各種不同目錄結構儲存,以支援不同手機程式,例如選擇輸出 AndNav2 (一款 Android GPS 導航程式,請參考此網頁) 支援的格式,則目錄結構為 Taiwan_2009-07-30_121510\z\x\y.png.andnav,z 代表地圖縮放層級 (Zoom levels),x, y 代表經緯度,而每個 y.png.andnav 都是 256x256 的 PNG 地圖圖檔,如 9\428\219.png.andnav

     而上一篇文章 Android 手機的離線地圖程式 Big Planet TW 1.2.4,Dr. TYT 介紹過名為 Big Planet TW 的 Android 手機離線地圖軟體,使用 SQLite 資料庫作為離線地圖的儲存方式。

     大家有沒有發現什麼? 就是以上兩種軟體只差一步之遙就能串起來使用,也就是說為了將 TrekBuddy Atlas Creator 抓取的地圖圖檔,從目錄結構存入 SQLite 資料庫供 Big Planet TW 使用,Dr. TYT 寫了一支Java程式 MapsToSQLiteDBCreator.java,後來更將此程式的功能直接整合進 TrekBuddy Atlas Creator 1.2 beta 1,以增加使用上的方便性。

     有興趣的朋友請按此下載 TrekBuddy Atlas Creator 1.2 beta 1 (android-map.blogspot.com Version 1) 直接輸出成 SQLite 地圖資料庫(BigPlanet_maps.sqlitedb),再將此檔案放入 Android 手機的 SD 卡目錄(/sdcard/BigPlanet_maps.sqlitedb),供 Big Planet TW 使用,操作步驟如下:
    1. 解壓縮 TrekBuddy_Atlas_Creator_1.2 beta 1 (android-map.blogspot.com Version 1).zip
    2. 在 Windows 平台請執行 start.cmd (請確認已安裝 JRE 1.6 )
    3. 執行程式後,使用滑鼠左鍵圈選下載範圍,右鍵移動地圖。
    4. 選擇地圖縮放層級 (Zoom levels) 後,點擊 Add selection 按紐。
    5. 確認 Map Source 為 Google Maps (預設值,當然也可以選其他地圖)。
    6. 確認 Atlas settings 的 Format 為 Android BigPlanet SQLite DB (預設值)。
    7. 點擊 Create atlas 按紐,開始下載地圖。
    8. 當看到圖二表示下載已完成,轉存 SQLite 中;看到圖三表示已生成 BigPlanet_maps.sqlitedb
    9. 將 BigPlanet_maps.sqlitedb 放入 Android 手機的 SD 卡目錄(/sdcard/BigPlanet_maps.sqlitedb),供 Big Planet TW 使用。
    10. 打開手機GPS功能,執行 Big Planet TW 的 My Location,使地圖移動至您所在位置。

    補充訊息:
    Zoom level 0-15 的 台灣本島地圖,共有 86,981 個檔案,在電腦裡的實際檔案大小是 229 MB,佔磁碟大小是 503 MB (因為叢集大小4KB,造成空間浪費)。
    將數萬個檔案擺進手機(通常SD卡預設叢集大小32KB),空間浪費情形會更嚴重,也會造成手機效能低落。
    相對而言,這 86,981 個檔案被存進 SQLite 資料庫,在電腦裡的實際檔案大小為 240 MB,佔磁碟大小亦是 240 MB,擺進手機SD卡還是 240 MB,故 Dr. TYT 極力推薦採用 SQLite 資料庫作為儲存離線地圖的此款 Android 程式 Big Planet TW。


    圖一:已下載 Zoom level 0-15 的 台灣本島地圖 70%


    圖二:已下載100%,共花費9分鐘。


    圖三:將地圖圖檔存入 SQLite 資料庫完畢,共花費3分鐘。


    圖四:正常來說不會出現此訊息,若是出現此訊息,則請修改檔案 start.cmd,加大 Java VM 的最大可用記憶體如 -Xmx512M 或更大。

    2010/2/7 Update:以上為舊資訊,請參考新版教學網頁

    2009年7月12日 星期日

    Install HTC Magic Android Driver on Windows 2003


    Dr. TYT 的系統是Win2003,無法安裝HTC Magic提供的HTCSync_1.0.1.exe (含開發程式用Android driver)。

    但 Dr. TYT 又不想為此重裝OS,故自己try很久後,終於成功將 Android driver 裝進Win2003,這樣就能在Win2003下用 Eclipse 和 android-sdk-windows-1.5_r2 開發Android程式了。

    1. Win2003 安裝 HTCSync_1.0.1.exe 會失敗,但沒關係,去C:\Documents and Settings\[YourUserName]\Local Settings\Temp\{6D6664A9-3342-4948-9B7E-034EFE366F0F}\androidusb.INF
    將有 androidusb.INF 的目錄複製出來。

    2. 先用Windows XP(on My VM)安裝過HTCSync_1.0.1.exe,然後Windows XP的system32目錄裡會有"WdfCoInstaller01007.dll",將此DLL檔拿到Windows 2003上。 (或是Program Files目錄裡有HTC Driver)

    3. Win2003 到"裝置管理員"找"USB Mass Storage Device",右鍵選"更新驅動程式",然後指到第一步的androidusb.INF

    4. 第3步安裝過程中會說找不到"WdfCoInstaller01007.dll",請指到第2步拿到的檔案,如此就能在Win2003成功安裝Android driver。

    5. 接下來Win2003的"裝置管理員"就會多出Android USB Devices (MyHTC),這樣Eclipse和android-sdk就能正確識別HTC Magic(手機要開USB debugging)。

    Good Luck.