2014年8月27日 星期三

在 osmand 裡面管理我的最愛地點 (favorites/my places)

舊版 osmand 「我的最愛」 新版 osmand 「我的最愛」 (順便介紹如何將 google maps 所匯出的 kml 檔轉成 osmand 的 「我的最愛」。) 我經常北中南三地跑。 前一次打開 離線地圖 osmand 的時候, 可能是在臺中; 下一次打開卻是在高雄。 手動縮放地圖/手指旅行找到想看的地方, 這當然也可以當作一種具有地理學習意義的休閒娛樂啦; 不過更有效率的方式, 就是從選單找到 「我的最愛」 ("favorites") 功能, 再從地點條列清單裡面找到想去地點的附近, 直接叫 osmand 把地圖聚焦到那個位置。 ("show on map")

設定 「我的最愛」 有幾種方式。

[2016/2/27 依照新版更新]

[新版] 看圖定義 「我的最愛」 最簡單的方式, 就是直接在地圖上找到你的最愛地點, 在上面長按一下。 這時會出現一個對話框。 你可以點一下對話框, 查看它的經緯度; 也可以從選單當中挑選一個動作: 加入我的最愛、 設為導航目的地、 分享、 查詢附近、 設為導航出發點。 我們按最左邊的星號, 把這個地點加入 「我的最愛」。 除了幫它取個名字之外, 還可指定類別 (category)。 我自己習慣按照地點所在城市來分類; 不過你當然也可以按照地點性質 (食/友/辦公/...) 或其他方式來分類。 如果沒有指定分類, 在新版裡, 會進入「我的最愛」。 (在舊版裡, 則會進入一個「沒有名字的分類」 -- 我曾經很疑惑為何有些 「我的最愛」 一直刪不掉, 原來就是因為它們都放在這個不起眼的分類底下。) 注意: 2016 版的 「儲存」在畫面的右上角!

[舊版] 以座標方式定義 「我的最愛」 [新版] 以座標方式定義 「我的最愛」 第二種方式是手動輸入經緯度。 暑假我在愛爾蘭玩。 除了首都 Dublin 之外, 絕大多數地方地廣人稀、 根本就沒有門牌號碼。 要找民宿, 只能在 google 地圖上用民宿所在小鎮及民宿的名字下去搜尋。 古堡廢墟什麼的, 更不可能有門牌號碼; 很多時候連 google 地圖都找不到。 如果是從 TripAdvisor 訂民宿, 它會給經緯度; 如果是古蹟, 可以拿古蹟名稱加上 "coordinates" 或 "longitude" 或 "latitude" 下去 網頁 搜尋, 比地圖搜尋更有機會找到。 然後就可以手動將經緯度座標加入 osmand。 從主選單當中叫出「查詢」選單, 上排分頁籤出現 『興趣點」、「地址」、「位置」、「我的最愛」、「歷史記錄」等等選項。 點選「位置」 就可以輸入經緯度座標。

然後你會發現 (如果你的手機螢幕跟我的一樣小的話) ... 輸入欄位被貼心的老花巨無霸數字鍵擋住了 orz。 把手機橫過來, 逼它發現螢幕空間不夠, 就可以輸入。

介紹第三種輸入方式之前, 我們先試著把剛剛手動輸入的 「我的最愛」 匯出。 [舊版才需要這步: 同樣在 Favorites 的畫面, 左下角的磁碟片符號就是把 「我的最愛」 匯出到記憶卡。] 請用手機的檔案總管檢查 /sdcard/osmand 這個目錄, 會看到一個 favourites.gpx 檔, 長得類似 這樣。 請注意: 檔案名稱的拼法跟 app 介面的拼法不一樣。再來, [用 usb 傳輸線及 adb 指令 或者用 e-mail 或 google drive 或 dropbox 分享] 把這個檔案抓到電腦裡面, 用文字編輯器或瀏覽器開來看, 是一個 xml 檔。 如果你花很多力氣輸入 「我的最愛」, 建議一定要備份這個檔。 以後換手機時會用到。

google maps 匯出 「我的最愛」 建立 「我的最愛」 清單的第三種可能性, 是用其他軟體產生, 再匯入 osmand。 這裡就以 google maps 為例。 在 google maps 裡, 點選資料夾, 再點選 「匯出成 XML」。 每張圖可以有很多圖層; 不過我沒有很認真玩, 所以下載 「整個地圖」 跟下載一個圖層, 對我而言是一樣的。 假設下載回來的檔案叫做 Ireland.kml 。 (或是從 kmz 當中解壓縮出一個 kml。) 如果你用 windows, 那就表示 保護隱私對你而言並不是一個重要議題 XD, 可以直接用 雲端服務 把 kml/kmz 轉成 gpx。 在 linux 底下, 你需要先安裝一個專門轉換各種 gps 座標格式的套件: apt-get install gpsbabel 再來, 請先把剛剛 osmand 所匯出的 favourites.gpx 備份到他處! 然後就可以這樣轉檔: gpsbabel -i kml -f Ireland.kml -o gpx -F favourites.gpx 這句話要求 gpsbabel 把輸入檔案 Ireland.kml 視為 kml 格式, 並且以 gpx 格式產生輸出檔案 favourites.gpx 。 (把剛剛匯出的檔案覆寫掉!) 用文字編輯器打開這個 favourites.gpx 看一下, 會發現它跟剛剛的格式略有不同。 先不管它。 把它丟回手機相同的位置 -- /sdcard/osmand。 接下來,... [新版: 關掉 osmand, 再重新打開。] [舊版: 在 osmand 的 Favorites 畫面之下, 點一下最下面的正中央那個 「重新整理」 的按鈕。 隔一下, 它就會說 「Favorites successfully imported」 -- 成功匯入。]

「什麼也沒發生啊! 『我的最愛』 沒有增加新的地點耶...?」 因為 gpsbabel 轉出來的檔案沒有設定 category (類別), 所以全部都跑到預設的類別去了。 [舊版:最上面那個沒有名字的類別][新版:「我的最愛」] 好吧, 請按一下 osmand 右下角的垃圾桶, 把這個無名類別的地點全部刪除。 回到電腦上, 用文字編輯器檢視一下 favourites.gpx , 發現有一個 cmt 欄位 (或者 desc 欄位亦可) 反正 osmand 也用不到, 乾脆拿它來改裝成 category 欄位。 不過有幾筆記錄的 cmt 欄位橫跨兩三列。 於是我寫的小工具 line-singularize 就派上用場了: 拿它把 cmt 欄位當中的換列去掉, 再用 regexp 把整個 cmt 欄位改成 category 欄位。 存檔檢查無誤之後, 再把它改名覆蓋先前的 favourites.gpx : ./line-singularize -f favourites.gpx -s cmt | perl -pe 's#<cmt>.*?</cmt>#<category>Ireland</category>#' > /tmp/favourites.gpx

最後再把 /tmp/favourites.gpx 丟回手機, 讓 osmand 重新匯入, 這些新的點就出現在正確的類別 (category) "Ireland" 底下了。

以上雖然以 google maps 的 kml 為例, 其實其他任何開放的格式也都可以 (透過 gpsbabel) 跟 osmand 互轉。 貴哥每次要對任何 「非自由軟體」 投資學習精力之前, 第一個要問的問題就是: 我透過這軟體花很多力氣所產生的資料, 將來能否轉出來帶走? 如果不行, 那對不起, 管它功能再好, 直接丟到垃圾桶裡面去。 軟體廠商經常透過「綁架你的資料」來提高 下賊船的代價 這是昇陽 (Sun) 公司創辦人 Scott McNealy 提醒消費者及 CIO 的一個重要觀念。 我常說眾多資訊大廠之中, Google 相對比較不邪惡, 這裡就是一個例子。 你在 google maps 上辛苦點出來的標記, 可以用開放的格式匯出, 跟 google 揮手 bye bye, 把資料帶到別處去 -- google 尊重使用者下/車下船的自由。

(本文接受科技部計畫補助: MOST-103-2221-E-492-028 「台灣開放街圖圖資平台建置與應用」)

1 則留言:

  1. OsmAnd 現在版本是2.4.6,竟然連個備份「我的地點」和「軌跡檔」的功能都沒有,真的令人百思不解。備份個檔案要搞成這樣複雜,真的很無言。目前使用OSM(OpenStreetMap)圖資的APP,就屬OsmAnd最強大,然而無法簡單輕鬆備份的這問題,嚴重扣分!

    回覆刪除