離線狀態下使用iPhone地圖及衛星定位功能–Part 3:將地圖緩存文件放入iPhone
上一篇為大家介紹了製作iPhone地圖緩存文件的方法,這一篇會介紹下一個重要步驟,就是將製作好的地圖緩存文件放入iPhone內使用,完成這一步後,就可以在離線狀態下使用iPhone地圖了。
要將地圖緩存文件放入iPhone內,需要進入iPhone內的資料夾。但是原廠的iPhone是一部封閉的手機,系統將手機內的資料夾封鎖左,用戶根本沒有辦法進入。所以要使用離線地圖功能,必須要先對iPhone進行JailBreak。JailBreak後用戶就可以自由進入iPhone內的任何資料夾,就好似你使用的電腦一樣。
JailBreak的過程其實很簡單,網上有很多文章介紹,由於本文只介紹使用離線地圖的方法,所以不對JailBreak方法進行介紹,需要學習JailBreak的朋友可以去WeiPhone討論區爬文,裡面有多篇關於JailBreak的介紹和教程。
將地圖緩存文件放入iPhone
完成JailBreak後,iPhone就如同一部電腦,裡面由多個資料夾組成,每個資料夾儲存不同的應用程式以及相關的資料檔案。與使用電腦一樣,要進入iPhone內不同的資料夾存取檔案,需要一個可以執行類似Windows檔案管理員功能的軟件。現時有多款具有類似功能的軟件,其中比較好用的有i-FunBox以及iPhone Folders。
關於i-FunBox與iPhone Folders的使用教學,在“電腦王阿達的3C胡言亂語”部落格內有兩篇相當詳盡的文章介紹,所以本文不再介紹,有需要的朋友可以先去看看。
iPhone/iPod最好用的連線軟體—iFunBox(更新iTunes 9.1可用版本)
有史以來最簡單的iPhone檔案管理程式—iPhone Folders
無論使用i-FunBox還是iPhone Folders,以下的操作都大致相同。
將地圖緩存文件放入iPhone的方法相當簡單,只要在電腦上安裝完i-FunBox或iPhone Folders後,將iPhone用USB線連接電腦,然後開啟i-FunBox或iPhone Folders,再進入存放iPhone地圖緩存文件的資料夾:“/var/mobile/Library/Caches/Map/MapTiles/”(注意:OS 3.0及以前版本的地圖緩存文件的資料夾位於:“/var/mobile/Library/Caches/MapTiles/”),然後將按照上一篇介紹製作完成並已經儲存在電腦內的地圖緩存文件“MapTiles.sqlitedb”複製到上述資料夾就可以,如果資料夾內有舊的“MapTiles.sqlitedb”,選擇覆蓋就可以,操作方式就好像在電腦上copy & paste檔案一樣。
如果有需要將地圖坐標文件“com.apple.Maps.plist”亦複製入iPhone,可以用上述相同方法,將“com.apple.Maps.plist”複製到iPhone內的資料夾:“/var/mobile/Library/Preferences/”,並覆蓋原來的文件。地圖坐標文件“com.apple.Maps.plist”的作用以及是否有需要複製的說明,可以再參考上篇Step 8。
完成將地圖緩存文件複製到iPhone之後,就可以在離線狀態下打開iPhone地圖程式,按照正常操作方法瀏覽地圖。
操作小Tips:
Q:為什麼打開iPhone地圖之後畫面上沒有地圖顯示?
A:1) 如果你正身處地圖所在範圍之內,請點左下角的定位掣令地圖顯示。2) 如果你不在地圖所在範圍之內,又或者因為GPS信號問題無法定位,但你已經將地圖坐標文件“com.apple.Maps.plist”複製入iPhone,請用手指將地圖進行放大或縮小令地圖顯示。3) 如果你不在地圖所在範圍之內,又或者因為GPS信號問題無法定位,但你沒有將地圖坐標文件“com.apple.Maps.plist”複製入iPhone,請先將地圖坐標文件“com.apple.Maps.plist”複製入iPhone,然後用手指將地圖進行放大或縮小令地圖顯示。4) 如果以上做法都無效,可嘗試將iPhone關機後再開機。
Q:如何確保iPhone處於離線狀態?
A:當你身處外地時,只要確定「設定」>「一般」>「網絡」內的“資料漫遊”選項沒有開啟,那麼iPhone就不可以上到網,即是一定是處於離線狀態。如果想再保險些,可以用BossPrefs將“EDGE”選項關閉。如果沒有安裝BossPrefs,可以進入「設定」>「一般」>「網絡」>「行動資料網絡」,然後點“行動資料”下APN旁邊的網址,在最後任意加一個英文字母令網址錯誤,就可以防止連線。 (更新:iOS4以後的版本,只需要進入「設定」>「一般」>「網絡」,將“行動資料”關閉就可以。)
防止地圖緩存文件內的資料被刪除
到這步為止我們已經解決了在第一篇所提出的兩個問題中的第二個問題,即是如何預先將地圖資料存入iPhone地圖緩存文件的問題。至於第一個問題,即是有什麼辦法可以保持緩存文件內的資料不被刪除,又應該如何解決呢?
當在連線狀態下使用iPhone地圖時,系統會從Google Map不斷下載所瀏覽區域的地圖資料,同時不斷更新地圖緩存文件,令緩存文件只保留最新的地圖資料,其他資料會被刪除。所以,就算你已經按照以上方法製作好地圖緩存文件,並且複製入iPhone內,但如果在連線狀態下使用iPhone地圖,你複製入iPhone的地圖緩存文件同樣會被系統刪除,即是無法再在下次打開iPhone地圖時使用。
但如果你將製作好的地圖緩存文件複製入iPhone後,只在離線狀態使用iPhone地圖,就不會有以上問題。因為在離線狀態,系統無法從Google Map下載地圖資料,所以不會更新地圖緩存文件,因此你之前複製入iPhone內的地圖緩存文件會被一直保留。
不過在將製作好的地圖緩存文件複製入iPhone後,我們有可能需要在連線狀態下使用一兩次iPhone地圖,例如在有wifi的情況下使用一次GPS定位來調整GPS功能(見下篇介紹),或者在可以上網的情況設定地圖書簽(見下篇介紹)。所以,仍然需要找個方法解決在連線狀態下使用iPhone地圖時,可以保持緩存文件內的資料不被刪除。
其實要解決這個問題,方法亦相當簡單。在Cydia上有一個叫
Maps Enhancer的應用程式,只要安裝了這個程式,然後開啟保留地圖緩存(Keep maps cache)功能,就可以防止iPhone地圖刪除地圖緩存文件內的資料。
Map Enhancer可以在Cydia內Search,直接下載安裝完成後就可以使用。
安裝完成後,進入「設定」會見到Map Enhancer。進入Map Enhancer後,將“Keep maps cache”選項開啟就可以,其他選項可以不理。
Maps Enhancer for iPhone OS4
舊版本的Map Enhancer(1.2版本)並不能在iPhone OS4中使用,不過不用擔心,Map Enhancer已經出了1.3版本,完全可以用在iPhone OS4上。
注意:由於Maps Enhancer仍未有新版本可適用於iPhone OS5,所以iPhone 4S和使用OS5的iPhone無法使用離線地圖。
******************************
多個地圖之間的切換
上一篇中曾經提過,由於受硬件限制,通過Global Map Download Tool製作的地圖緩存文件的size有一定上限。所以,當你要去的地方較大時,可能就需要製作多個地圖檔案。例如,當你要去北海道時,可能就需要製作道南、道央、富良野等多個地圖。
但在iPhone內地圖緩存文件的資料夾:“/var/mobile/Library/Caches/Map/MapTiles/”在同一時間只能存在一個地圖緩存文件“MapTiles.sqlitedb”,所以按照以上介紹的方法,每次只能使用一個地圖。當需要在同一次旅程中使用多個地圖時,需要先解決如何在不同地圖之間進行切換的問題。
解決這個問題的關鍵,在於有沒有辦法在iPhone上直接進行檔案複製的動作。如果可以不依賴電腦在iPhone上直接進行檔案複製的話,就可以預先將多個地圖檔案存入iPhone內某個資料夾,然後等到需要使用某個地圖時,再直接在iPhone上將地圖檔案複製至“/var/mobile/Library/Caches/Map/MapTiles/”資料夾使用,這樣就可以解決不同地圖之間切換的問題。
寫得出來,答案當然是有啦。在Cydia上有一個叫
iFile的軟件(不是iTunes上那個),它是一個可以在iPhone上運行,執行檔案管理工作的iPhone應用程式。iFile可以執行建立資料夾、檔案複製、貼上、刪除、重新命名等多種檔案管理工作,亦可以用來開啟多種不同格式的檔案,以及執行iPhone deb檔案的安裝工作。有關iFile的詳細功能以及使用說明,可以參考官方網頁內的介紹。
iFile在以前是一個免費軟件,不過經過幾次更新之後,現在已經要收費,費用是US$4,不過網上也有不少破解版本可以下載。安裝方法是將檔案用iFunBox或iPhone Folders複製到iPhone的“/var/root/Media/Cydia/AutoInstall/”資料夾(如果沒有就自己建立資料夾),然後重新開機。
iFile for iPhone OS4
從1.3.1版本開始iFile已經可以support iPhone OS4。
——————————
安裝完成後iPhone桌面上會多了一個iFile圖標,點一下這個圖標就可以開啟iFile,並且進入iFile預設主目錄,點左下角齒輪可以對程式進行設置。用手指點資料夾名稱就可以進入資料夾,就好像在PC上用mouse click入資料夾一樣。其他詳細功能以及使用說明,請參考官方網頁,以下只集中介紹有關應用iFile進行地圖切換的操作。
使用iFile完成地圖之間切換的方法如下:
1. 用iFunBox、iPhone Folders或iFile先在iPhone上建立一個資料夾,用來存放地圖檔案;
Tips:
iFile有一個功能可以將常用資料夾加入為書簽,以後每次需要進入該資料夾時,只需要打開書簽列表,然後點入書簽就可以快速進入資料夾。加入書簽的方法是:
a. 進入要加入為書簽的資料夾;
b. 點營幕底部的書本圖案進入書簽列表;
c. 點右下角的加號;
d. 輸入書簽名稱,再點右上角的「建立」。
建議將按照這個step所建立的暫存資料夾,以及地圖緩存文件資料夾“/var/mobile/Library/Caches/Map/MapTiles/”和地圖坐標文件資料夾“/var/mobile/Library/Preferences/”,都加入書簽,方便以下操作。
2. 用iFunBox或iPhone Folders從電腦上將存放地圖緩存文件“MapTiles.sqlitedb”和地圖坐標文件“com.apple.Maps.plist”的整個資料夾複製到上一點所建立的iPhone資料夾內;
Tips:
資料夾最好使用地圖區域名稱,例如:京阪神,中英文都可以。)
3. 當要使用某個地圖時,用iFile進入地圖檔資料夾,然後將地圖緩存文件“MapTiles.sqlitedb”和地圖坐標文件“com.apple.Maps.plist”(如果需要)分別複製到資料夾“/var/mobile/Library/Caches/Map/MapTiles/”和“/var/mobile/Library/Preferences/”內。
Tips:
複製檔案的方法是:
(1) 複製檔案
a. 進入存放檔案的資料夾;
b. 點右上角的「編輯」;
c. 點要複製的檔案;
d. 再點營幕底部最右邊的icon,然後點「複製/鏈接」;
e. 點右上角的「完成」;
(2) 貼上檔案
f. 進入要貼上檔案的資料夾;
g. 點右上角的「編輯」;
h. 再點營幕底部最右邊的icon,然後點「貼上」;
i. 最後點右上角的「完成」。
按照上述操作,就可以實現多個地圖之間的切換。不過,上述方法仍有兩個缺點。第一個缺點是切換地圖時需要將地圖檔案從iPhone內某個暫存資料夾複製至緩存文件資料夾,意味著需要佔用多一個檔案size的儲存空間,因為複製後在暫存資料夾與緩存文件資料夾內都有同一檔案。第二個缺點是當地圖檔案size太大時,貼上檔案可能需要幾分鐘時間。
有沒有辦法解決?當然有啦。前面提過iFile有齊所有檔案管理的功能,包括對檔案進行重新命名。利用這個功能,可以採用以下較簡單的做法來完成在不同地圖之間進行切換的工作,步驟如下:
1. 先在PC上將旅程中需要使用的各個地圖緩存文件檔案重新命名,例如:將京阪神地圖的檔案名稱,由“MapTiles.sqlitedb”改為“MapTiles.sqlitedb京阪神”,將和歌山地圖的檔案名稱,由“MapTiles.sqlitedb”改為“MapTiles.sqlitedb和歌山”等等,即在原來檔案名稱之後加上地圖區域名稱,你可以任意用什麼名都可以,總之令你容易記得起地圖就可以。
2. 用iFunBox或iPhone Folders將所有檔案複製到iPhone上地圖緩存文件資料夾“/var/mobile/Library/Caches/Map/MapTiles/”內。
3. 當要使用某個地圖時,用iFile進入“/var/mobile/Library/Caches/Map/MapTiles/”資料夾,然後點要使用的地圖名稱右邊的“>”icon。
4. 在檔案屬性頁面內,點檔案名稱,例如:“MapTiles.sqlitedb京阪神”,然後將“MapTiles.sqlitedb京阪神”中的“京阪神”三個字刪除,令檔案名稱變回“MapTiles.sqlitedb”。(如果“/var/mobile/Library/Caches/Map/MapTiles/”資料夾內已經有“MapTiles.sqlitedb”檔案,應先將此檔案重新命名為其他名稱。)
至於地圖坐標文件,由於檔案size小,而且資料夾“/var/mobile/Library/Preferences/”內有太多其他檔案,所以如果有需要複製,建議用以上複製檔案的方法操作。
第一篇中曾經提過iphoneofflinemap這個iPhone應用程式,而網上很多人提到iPhone離線地圖時,都會聯想到iphoneofflinemap,令很多人以為iphoneofflinemap等於iPhone離線地圖。其實iphoneofflinemap的最主要功能,只是協助完成以上介紹的切換地圖的工作。
使用iphoneofflinemap時,同樣需要先用iFunBox或iPhone Folders從電腦上將存放地圖緩存文件“MapTiles.sqlitedb”和地圖坐標文件“com.apple.Maps.plist”的整個資料夾複製到iphoneofflinemap的指定資料夾內(/var/mobile/Media/Maps);然後到需要使用某個地圖時,再用iphoneofflinemap完成將地圖緩存文件“MapTiles.sqlitedb”和地圖坐標文件“com.apple.Maps.plist”分別複製到資料夾“/var/mobile/Library/Caches/Map/MapTiles/”和“/var/mobile/Library/Preferences/” 的工作。
所以,使用iphoneofflinemap與使用iFile的操作原理與結果,完全相同,只是iphoneofflinemap相對較為簡便。不過由於適用於OS 3.1.2及3.1.3的iphoneofflinemap存在一個很大的bug,而且亦有以上所講的兩項缺點,即是需要佔用多一個檔案size的儲存空間,以及貼上檔案的時間太長。所以我本人並沒有使用iphoneofflinemap。
由於從iPhone OS3.1起對地圖緩存文件資料夾做了改動,由原來的“/var/mobile/Library/Caches/MapTiles/”改為“/var/mobile/Library/Caches/Map/MapTiles/”,所以iphoneofflinemap亦作出左相應更新,在2010年3月底推出了適用於OS 3.1.2及3.1.3的 “3.1.2 Preview version”,不過這個版本有一個bug,就是當複製地圖緩存文件時,iphoneofflinemap會將同一個地圖緩存文件複製兩次,而且被額外複製的副本會一直留在“/var/mobile/Library/Caches/Map/MapTiles/”資料夾內,需要自己人手delete才可以刪除。
關於在離線狀態下使用iPhone地圖的方法,已經通過以上兩篇文章作了完整介紹。下一篇將會為大家介紹在有離線地圖的基礎上,應用衛星定位以及地圖書簽的方法,使出外旅遊找尋目的地時更加便利。
繼續閱讀下一篇 >> Part 4:衛星定位與地圖書簽
因為GPS在取不到衛星信號時會以internet網絡數據來定位, 所以這可能是因為連上網絡後iphone用了internet數據來定位, 所以可以正確定到位, 但在offline狀態下, 既收不到準確衛星信號又沒有internet數據可用, 所以定位不準.
感覺不是GPS偏離了,反而覺得是地圖顯示的位置不對了。制作了香港的離線地圖,在沒有連上網絡時,明明身在陸地,GPS會定位在海上。當連上網絡,GPS的定位就修正了沒有失準,真奇怪。
如果在大陸使用, 定位一定有偏差, 聽講是故意的. 但如果在其他地方, 定位一般都準, 不過如果所在位置太多高樓大廈, 由於接收不到準確的衛星信號, 很多時會出錯, 這個沒有辦法修正, 只有盡可能找個空曠地方.
終於能在iOS 4.3.3上顯示地圖了,原來是轉錯了格式。不過在離線情況下使用GPS會有定位錯誤,有辦法修正嗎?
你先確定以下4點:
1. 你用的maps enhancer是1.3版本;
2. maps enhancer的keep maps cache設定是on;
3. 你已經用Mapv4v5Converter將MapTiles.sqitedb文件轉為iPhone4/iPod Touch 4G v11 (firmware 4.2.1 and above)格式;
4. MapTiles.sqitedb文件已存入/var/mobile/Library/Caches/Maps/MapTiles資料夾.
確定以上4點正確之後, 如果你是在地圖範圍之內, 就用地圖的定位功能, 如果不在地圖範圍內, 就先在online狀態下bookmark地圖範圍內的任何一個地點, 退出地圖後設為offline, 再進入地圖後, 在書籤中點之前bookmark了的位置.
小弟用的是iOS 4.3.3 用了以上方法加入地圖緩存和坐標文件,即使重新開機地圖也是一片空白,試過放大縮小及GPS定位了也看不見地圖,請問如何解決?
你試試重新開機, 大部份情況是需要放入地圖檔案之後, 需要將iphone或ipod重新開機之後, 內存的地圖資料才可以更新.
我是用iPodTouch4的。
依照你的教學做了 2 次都只顯示灰格子網。
我的選項:
香港區地圖,沒了大嶼山西部。
選-2mix(第2次做時選-1mix)
亦試過先設書籤和放入地圖坐標文件均無效。