2009-11-03

製作自己的離線地圖 (Offline Google Map)

曾經溫姓友人問過我關於離線地圖的問題,當時沒研究過也不以為意,直到常常用手機搭配 GPS 來找自己身在何處之後,即時下載的 Google Map 有時會因地處偏僻訊號不良,要等一下才會載入地圖,沒事再來個放大縮小,又要多花幾秒去等,這才考慮來試試離線地圖的解決方案。看了 Mobile01網友介紹、實際試用後,哇!真的好快啊~搭配 GPS 來找路更是如虎添翼,為了讓自己的地圖更臻完美,這才動手來研究一下離線地圖的原理和製作。我們知道 Google Map 除了衛星圖和實際街景外,也有單純的街道圖,就像拼圖一樣,每個地方是用一塊塊的圖資組成,當你局部放大,越詳細的地圖就需要更多塊的小拼圖來組合,如果能把不同放大級距的拼圖全抓回來,透過軟體來處理和檢視,那麼不需上網連線,利用儲存下來的這些圖資,就能做出離線版的 Google Map 。

知道原理後,我們需要的是一套能幫抓「指定範圍」、「指定級距」的圖資下載軟體。之所以要能指定範圍和級距,那是因為 Google Map 涵蓋了全球圖資,如果要「全部」下載,除了耗日費時,下載後的圖資超大、也不可能放進手機這類行動裝置裡來使用,這裡使用的是 TrekBuddy Atlas Creator、一套用 Java 開發的開源軟體。顧名思義,這是一套自製圖資的工具,而且不只 Google Map,像 Yahoo、Microsoft 甚至許多世界各地的網路圖資統統都有(目前支援三十幾種,想抓衛星圖也有),選定 Map Source 就可以開始玩啦!(Dr. TYT 有根據國人需要整理修改版,裡面也有 Profile 範例,有興趣可以找新版下載

畫面分左邊設定選項區和右邊的即時地圖區。左上的 Selection Coordinates,是用來決定選定的地圖範圍,可以手動敲入經緯度、也可以在地圖區用滑鼠左鍵拖拉選擇,再來 Map Source 就是決定製作的圖資來源,Zoom Levels 就是決定下載的級距,可以勾選特定級距 (Level 17) 也可以多選,搭配的彈性後面會再解釋。再下面的 Layer Settings 是用來自訂下載這些「拼圖」Tile 的圖片大小,沒啥考量就用預設的。接下來最重要的,就是這次下載的內容為何。Atlas Content 是可以自訂、多選圖資的內容,假設我想同時製作「Google Map 台北 17 級距」以及「Microsoft Map China 上海 16 級距」的圖資,可以先完成前半段的設定後選 Add Selection,再來切換圖資重新選擇範圍和級距後再 Add Selection 一次,這樣就可以只抓取這兩個 Selection 範圍內的圖資(也可以再合併),不用擔心多抓到用不到的資料佔空間。設定完當然就是設定輸出圖資的格式啦!說實話這些格式我一點研究都沒有(因為這部份端看使用離線圖資的 Client 程式為何),我只選手機會用的格式,不過根據 Dr. TYT開示,選擇 BigPlanet SQLite 的資料庫檔案才是王道!因為下載台灣 0-15 級距的所有圖資,假設有八萬多塊拼圖 (tile),實際上就會下載八萬多塊小圖檔 (PNG),根據 OS 的檔案系統「最小配置單位」(用不滿幾 KB 還是以幾 KB 算),為數眾多的小檔會造成一大堆無謂的空間浪費,八萬多塊要占到 500 多 MB,但如果單純把 Binary 存進一個資料庫檔案,加上座標紀錄,空間只要 240MB!還可以套用資料庫的好處,來加速圖資的搜尋提取,算是有百利而無一害啊!所以在選擇讀取圖資的離線地圖程式,也應該要找能支援這類格式的,效能和空間才會最佳化~完成以上所有選擇和設定,當然可以存成一個 Profile (XML 格式),方便以後再套用,壓下 Create Atlas,就開始製作專屬的離線圖資啦!(Google Map 會根據當地語系去轉換圖資內容,如果你不想台灣圖資路名都寫英文的話,可以檢查一下 Setting 裡的語系參數..)

這個是 TrekBuddy Atlas Creator 的操作介面,粉紅色是選取好要抓圖資的區域。選完記得到 Atlas Content 裡去 Add Selection,如果要選的地方是不規則的(像台灣本島),那就多選多 Add 幾次

在製作專屬圖資的時候發現,如何決定選定的範圍和級距才是一大學問!懶得麻煩當然可以豪邁地只圈選台灣(甚至全世界)、然後勾下 0-17 (甚至到 20) 的級距,然後電腦開個幾小時讓它慢慢抓!只不過下載的幾 GB 圖資中、有很多細節是用不到的區域,放進手機記憶卡裡佔空間、讀取也會耗時間影響效能。根據 Dr. TYT 的分析和範例,可以根據級距來限定抓圖的範圍,一方面可以專注在常用的圖資、另一方面也可以避免不必要的浪費。既然這是自己用的圖資、常混的地方都在台灣,當然不用去抓到非洲那十幾級的細節地圖。像是「全世界地圖」,級距 0-7 大概將近 50MB,但 0-8 就要到 150MB 了,進到 9-15 級就可以侷限到亞洲甚至台灣本島,16-17 差不多就要侷限在都市或自己的活動區域了(建議顯示格線 Grid 來選擇抓取的區域,這樣能更精準),再下去 18-20 應該就沒必要了(圖資 Size 更會爆增)。根據以上的原則我花了一些時間抓檔製作,產生一個將近 1.5GB 的圖資檔,涵蓋世界 8 級到台灣 17 級的大部分地區,利用 Android 平台上 Free 的離線地圖軟體:Big Planet (or Dr. TYT 改的 Big Planet TW) 和 RMaps,隨身就能攜帶一份全台詳細的街道圖,搭配內建的 GPS,走到哪都不怕會迷路啦!

這個是我選擇好台灣從 9-15 級距不同的圖層(級距越高要選擇的範圍越精準越好)。左邊的選擇區域上壓右鍵 Display,可以用黃色標示出已經選擇要抓圖資的範圍

這個程式的運作原理,是先把一個個的圖資 tile 抓下來(存在 tilestore 目錄下),下載完成一個範圍後,把座標和圖檔塞入 SQLite 資料庫檔案中(存在 atlases 目錄下),有趣的是,下載過或已經在資料庫中的資料,它會略過不抓並讓資料庫裡只存一份資料,因為這些特性,你可以高興的時候先抓一部分,沒空就直接關機,只要 tilestore 目錄下的「拼圖」還在就不用再下載,只要 atlases 下的資料庫檔案存在就不用再新增,專屬的圖資藉此也可以分成多個不同的 Profile、多次分批來下載啦~(不過圖資製作完成後記得清掉 tilestore 裡的資料,幾十萬個小檔要殺非常久,也佔了幾 GB 以上的空間)

除了讓自己瀏覽所在位置更快速外,離線地圖還有一個重要應用,就是出國玩耍時的隨身地圖。雖然在台灣有辦上網吃到飽的 3G 方案,但一出國手機上網當場就無用武之地(漫遊上網帳單會爆台),不能上網的 Google Map 當場就廢掉了。熟悉這套離線地圖的製作工具,只要出發前先製作特定地區專屬的離線圖資,甚至標注要攻略遊覽的景點座標位置,手機充飽電打開 GPS,出國自由行時就無往不利啦!

註:以上提到的離線地圖圖資,目前僅支援套用在 Android or Windows Mobile 平台裝置,iPhone or PSP 之類的玩意我手邊沒有,所以怎麼製作和支援也不得而知啦!(送我一台的話就來研究..)

回應: 1

匿名 提到...

先推一下,最近在找離線地圖的資料,這邊不錯喔..ㄎㄎ
不知道 Mobile Atlas Creator 是否可以在這邊詢問?? 裡面的語系有 zh_CN, 沒有 zh_TW 的?? or 要去別的地方下載??

張貼留言

歡迎隨便亂哈啦留言或發表意見,不過要理性不做人身攻擊~匿名的朋友得到回應的速度會比較慢喔~
請注意發問相關的禮貌和規矩,不當留言、和本文無關的回應可能會被直接刪除無視喔!