Garmin的機子好用,特別是在手持機裡面真的是有目共睹。小弟出國幾次都離不開它。雖然60csx也到了該世代交替的時候,但還能用的話就先用囉。
記得以前看過一篇(http://www.mobile01.com/topicdetail.php?f=228&t=500771),介紹繁體的日本地圖,資料來源來自於日本的國土地理院。經過了這麼多年,特別是openstreet出現後,我想製作地圖給garmin gps機器的難度已經大大的降低。在這篇(http://www.mobile01.com/topicdetail.php?f=228&t=2441286)裡面已經介紹過有很多地方做出了以openstreet為基礎的garmin地圖。至於整個製作的方式,經過一番摸索,終於能做出還算好用的地圖了,特別是對應舊機子(如老摳摳的60csx)的部份。
溫馨提示:透過這個方法做出來的地圖,我自己的滿意度達到85分。
1.舊的機器只能讀繁體中文和英文,而透過這個方法在日本地圖能夠看到漢字,而將假名用英文拼音(和haily大發表的繁體日本地圖概念一樣)。雖然不正統,但這是舊機器能使用的方法。
2.可導航。
3.可搜尋。
4.不保證正確(就和維基百科可能有錯誤是一樣的),但出國短期旅遊應該可以應付。
二、Openstreetmap
是一種線上的地圖,但編輯的方式不同於google,而是很像wiki,由眾人進行編輯而成。而openstreet還能夠下載近乎原始資料的*.osm檔,作為後續的使用。和google地圖不同的是,openstreet的資料「應用」和「結合」比較少,但因為有熱心的民眾不斷更新,所以有時候資料蠻能符合當下的現況的。
三、使用的軟體
從openstreet資料變成最後的garmin可用地圖,需要幾個軟體。其中幾個軟體應該有些garmin玩家不陌生,因為是管理garmin地圖常用的軟體。
Gmaptool->能對於garmin地圖進行合併、分割、增減屬性(但不能更改有上鎖的圖資)。
mapsettoolkit->管理電腦中所有的garmin圖資,包含其中的Family ID等。過去如果某些圖資安裝失敗,開不起來mapsource/basecamp,也要透過這個軟體來移除。(這裡有介紹)
Cgpsmapper->最神奇的應該是這個軟體,功能是做什麼的一直不是非常清楚,以前要用,現在還是要用,但似乎角色比較輕了。(免費版即可)
接下來是從openstreetmap轉出來資料要用到的軟體
convertZ->老牌轉換字碼的軟體,特別對於老摳摳機器沒辦法讀unicode時,特別需要,如果機器夠新,不用改字碼(簡體中文、日文等等),那也可以跳過。(請google,很容易找到)
Mkgmap->這是專門處理將openstreetmap轉成garmin機器的img的軟體。
Mkgmap的splitter->因為有時候檔案太大,需要用這個軟體加以分割。
四、步驟
1. 下載openstreet資料(openstreet)
開啟openstreet

找到想下載的區域,按下匯出

也可以手動框選


Ok之後選擇匯出
但這樣範圍通常太大,會被系統拒絕。所以要用「如果上述工具匯出失敗,請考慮使用下列的來源:」這裡提供的工具。像第一個overpass API還蠻好用的。
2. 檢視資料
像剛剛選取的區域,下載的檔案有145MB。可以用可以開啟超大文字檔的軟體開啟,不開啟也是可以的。檔頭像這樣。

裡面巨細靡遺的有各種資訊

<如果需要轉字碼,參閱後面運用convertZ的單元>
3. mkgmap製作檔案
下載mkgmap (免費軟體)( http://www.mkgmap.org.uk/),下載後解壓縮。

同時將剛剛下載好的osm檔案放到同一個資料夾。

這是一個只能在command line工作的檔案,所以需要進入命令提示字元開啟。
用命令列的方式到工作的資料夾

接下來是關鍵,如何用mkgmap來轉換。參考mkgmap的官網可能會看不懂,但是網友力量大,不少人分享了過去的經驗。
建議寫一個簡單的文字檔,來處理這些繁雜的命令。

以下稍微介紹一下各項參數。
mapname=63530001 ->設定個別img檔的名稱,必需是8位數字
code-page=932 ->機器用的語言代碼。這個很關鍵,如果機器能讀日文的,code page要選932,才能看到漢字和假名。如果沒有選,則中文字會變成拼音。<繁中機器另外介紹>。
route ->增加這個設定可以導航
drive-on-left ->左駕
generate-sea=multipolygon,extend-sea-sectors,close-gaps=10 ->繪製海面圖塊。如果沒有選,則海面不會特別繪製。但這組參數有時候不太成功,實在不成功的話就先跳過。
input-file=map ->輸入的檔案
lower-case ->看人家這樣寫,意思是什麼不知道….
country-name=JAPAN
region-name=JAPAN
region-abbr=JP
country-abbr=JP
overview-mapname=JP1 ->自己定,後面會出現的overview名稱
family-id=66 ->自己定,但要看一下已經安裝的地圖FID(用mapsetoolkit看,不可重複
family-name=JP ->自己定
series-name=JP ->自己定
description=JP ->自己定
remove-short-arcs ->精簡不必要的短線段
add-pois-to-areas ->這個設定的意義還不是很懂
add-pois-to-lines ->這個設定的意義還不是很懂
index
tdbfile ->產生tdb檔,後面安裝有需要
poi-address
另外有個參數可以加 gmapsupp。增加這個的話會直接產生gmapsupp.img檔,直接置換gps機器裡面的檔案就可以使用。(原來檔案請先改面或備份)
然後在命令提示字元裡key入:
Java –ea –jar mkgmap.jar –read-cofig=”<命令檔案名稱>”
Java –ea –jar mkgmap.jar –read-cofig=”test1.txt”

在資料夾裡產生了這些檔案

4. 加入到mapsource
開啟mapsetoolkit

裡面會出現安裝的地圖。點擊install

Mapset-name/Product code/Family ID 都是自動帶出。
選擇TDB-file
選擇overview map (這個檔名之前自己設定的)
自己設定一個registry name
按下install
Mapset裡面出現了新的地圖

5. 檢視成果
用mapsource 或 basecamp來看看囉

有很多poi

這是日文系統的內容

可以搜尋最近點

如果可以打日文,也可以搜尋….

Ps. 地址搜尋可能就不建議了。
可建立航線(應該也可以導航吧….)

之前去的航跡

五、字集轉檔
可是上面這樣的檔案,如果傳到機器裡面會是亂碼一片,老摳摳的機器不支援。最好的情況是如同當年Haily大的方式,漢字變成中文字,而假名變成拼音,勉強可以用。因此要對原來下載來的osm檔進行轉檔。運用convertZ這個軟體。
打開convertZ,先用剪貼簿檢視器看一下

按下uni-繁

太神奇了,日文轉成繁體中文了。但是假名不見了….
所以要在運用convertZ裡面另一個神奇功能:詞彙修正。當他看到假名時,就自動轉換成拼音
類似像這樣的東西。

但這問題不是這麼簡單,需要一番波折。總之最後要做成一個對應檔,我把它較成japan.dat,匯入到詞彙修正當中。

同時轉碼設定裡面,big5日文假名支援打勾

這時候再來看看剪貼簿檢視器

假名就變成了拼音了
convertZ更厲害的是可以轉換整個文字檔。


選擇剛剛的osm檔,加入轉換。並且選擇utf-8轉utf-8(因為mkgmap必須是utf-8的編碼),然後進到進階選項中,選擇輸出為繁體中文。目的地找個自己記得的地方。點擊隱藏進階選項,選擇開始轉換。

開起來看一下,繁體中文,假名是拼音。


這時候的檔案就能進到mkgmap來進行轉換,但有些參數要改一下:
mapname=63530002 ->盡量不要重覆
code-page=950 ->改成繁體中文的代號
route
drive-on-left
input-file=map-1 ->轉過字碼後的檔案
lower-case
country-name=JAPAN
region-name=JAPAN
region-abbr=JP
country-abbr=JP
overview-mapname=JP2
family-id=67 ->不要重複
family-name=JP2 ->盡量不要重複,不然在mapsource裡面會分不清楚
series-name=JP2 ->盡量不要重複,不然在mapsource裡面會分不清楚
description=JP2 ->盡量不要重複,不然在mapsource裡面會分不清楚
remove-short-arcs
add-pois-to-areas
add-pois-to-lines
index
tdbfile
poi-address
用mapsetoolkit加入map後,開啟mapsource來看看成果
這是日文版

這是繁體中文+假名拼音版

六、超大osm檔轉換
像剛剛這樣的小區域,osm檔就要140MB,稍微大一點的就會爆掉,破G應該很容易。之前下載一塊區域,1.2G,跑完轉換字碼convertZ,但在mkgmap裡面就不行了。幸好mkgmap知道有這個問題,開發了splitter (http://www.mkgmap.org.uk/doc/splitter.html)。參考裡面的用法,key入指令。
其中 –Xmx2000m參數,如同網頁裡說的,參考自己電腦的記憶體。執行後就會出現分拆之後的檔案(.osm.pbf)
此時,理論上應該可以透過template.args這個檔案一次進行mkgmap的轉換,但測試失敗。因此還是個別檔案進行mkgmap。這時候的腳本檔當中input-file=各自的.osm.pbf檔。轉換後就有幾個img檔。
接下來應用gmaptool,將這幾個檔案組合。
打開gmaptool,add file

Split裡面,directory加入目標的資料夾,create選擇files for mapsource,Compile preview map鍵入mapset名字(自己取),set mapset FID自己選(不要重複), PID=1

然後點擊split all
進入目標的資料夾,把神奇的cgpsmapper.exe和sendg.dll放在同一個資料夾,點擊install.bat

跑了一堆東西出來

Preview map的檔案出現了

進入mapsetoolkit裡面,加入

進入mapsource看看結果,繁體中文+假名拼音

可以有航線(應該可以導航)

可以跨圖塊航線(導航)(這個地圖有四個圖塊)


七、後記
如果還有興趣,可以自己繪製地圖,透過osm的格式轉換到gps當中。試驗過的方式是在其他GIS軟體中繪製的線段,經由JOSM開啟轉換成osm檔,然後透過mkgmap、gmaptool和mapsetoolkit等軟體轉換、調整(如底圖透明、繪製priority等,以便在gps當中進行套合如等高線)和加入。
而convertz是讓老兵不死的重要軟體!
附加convertZ假名轉拼音的dat檔
附加壓縮檔: 201405/mobile01-bd257d0608627aacdcbda4a8289df6a6.zip