9
08
2012
Garmin GPS用マップソース互換地図の作成 #4
一旦Polish形式ファイルを作成してからマップソース互換ファイルを作成する方法
Polish形式ファイル(.mp) に変換してからマップソース互換(.img)ファイルを作成する手順
前回までは一旦シェープファイルを作成してからマップソース互換ファイルを作成する手順について簡単に説明したが、国土地理院が提供するコンバートソフトウェアでは等高線情報が全て一種類の線種の情報として作成されてしまうので、地図を広域表示すると等高線や標高の数値情報が重なってしまうので殆ど使い物にならない.
そこで今回はシェープファイルを作成せずに、直接XMLデータをPolish形式ファイル(.mp) に変換する方法について説明することにする.但し、この方法はテキストデータをPerlなどのテキスト処理言語を用いて変換する必要があるので、コンピュータプログラミングの経験が無いと難しいかもしれない.
基盤地図情報のXMLデータからPolish形式ファイルに変換する
先ず最初に、基盤地図情報の標高点XMLデータに含まれている等高線に関する情報がどのように記述されているかを確認する必要がある.データ項目に関する詳細な定義は『基盤地図情報 XMLスキーマ定義ファイル3.0( JPGIS 2.1形式 )』に記述されているが、そんな大袈裟な情報を参照しなくとも、XMLデータの中身を覗いてみれば必要なデータ項目は直ぐに分かるだろう.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<Cntr id="K3_1" uuid="fgoid:10-00100-7-9-13702866"> <=== 等高線データの始まり <fid>fgoid:10-00100-7-9-13702866</fid> <lfSpanFr> <jps:position> <jps:date8601>2008-03-31</jps:date8601> </jps:position> </lfSpanFr> <lfSpanTo> <jps:position> <jps:date8601>2999-12-31</jps:date8601> </jps:position> </lfSpanTo> <devDate> <jps:position> <jps:date8601>2009-06-30</jps:date8601> </jps:position> </devDate> <orgGILvl>25000</orgGILvl> <orgMDId>0-8</orgMDId> <loc id="K3_2" uuid="fgoid:10-00100-7-9-13702866-g"> <jps:CRS uuidref="fguuid:jgd2000.bl"/> <jps:orientation>+</jps:orientation> <jps:primitive idref="K3_2" /> <jps:segment> <jps:GM_LineString> <jps:interpolation>linear</jps:interpolation> <jps:controlPoint> <jps:column> <jps:direct> <jps:coordinate>35.230974167 138.970826389</jps:coordinate> </jps:direct> </jps:column> <jps:column> <jps:direct> <jps:coordinate>35.230994444 138.970888333</jps:coordinate> </jps:direct> </jps:column> <br> ... <jps:column> <jps:direct> <jps:coordinate>35.231231667 138.9777625</jps:coordinate> </jps:direct> </jps:column> <jps:column> <jps:direct> <jps:coordinate>35.23126 138.977968333</jps:coordinate> </jps:direct> </jps:column> </jps:controlPoint> </jps:GM_LineString> </jps:segment> </loc> <type>一般等高線</type> <alti>840</alti> </Cntr> <=== 等高線データの終わり <Cntr id="K3_3" uuid="fgoid:10-00100-7-9-13702874"> <=== 次の等高線データの始まり <fid>fgoid:10-00100-7-9-13702874</fid> <lfSpanFr> <jps:position> <jps:date8601>2008-03-31</jps:date8601> </jps:position> <br> ... |
上記のリストは等高線に関する部分をXMLファイルから部分的に抜粋したものだが、<Cntr> 〜</Cntr> で囲まれた部分が1本の等高線に関する情報である.1本の等高線情報には等高線をつなぐ地点(緯度・経度)の一連の情報が連なっており、最後に標高情報が含まれているのが分かるだろう.
<jps:coordinate>35.230974167 138.970826389</jps:coordinate>
<jps:coordinate>35.23126 138.977968333</jps:coordinate>
…
<alti>840</alti> 標高(m) に関するタグ
標高点のXMLデータの中身は一見すると複雑に見えるが、実はとても単純な構造になっているのが分かるだろう.
Polish形式のファイルのデータ構造を調べる
Polish形式のファイルのデータ構造を調べるには、cGpsMapper のページにPolish形式のデータ構造に関するマニュアルが用意されているので、それを参照するのが一番手っ取り早いのだが残念ながら英文のマニュアルしか用意されていない.Polish形式のデータには、様々な情報を含めることが可能だが、今回は基盤地図情報から等高線情報のみを取り出すだけなので、最低限必要な項目だけに留めておく.
Polish形式のデータも単純なタグ付けされたテキストデータの集合なので、テキストエディタなどを用いてデータを作成することができる.Polish形式のデータは Header, Declarations, Advanced Declarations, Body (Objects) から構成されるが、今回はHeader情報とBody (Objects)だけを記述する.
Headerの構造
[IMG ID]
ID=######## マップを識別するユニークな8桁の識別子
Name=map_name マップに付ける名前
TreSize=n リージョン(領域)サイズの上限
RgnLimit=n リージョンあたりの最大要素数
Levels=n レベル(レイヤー)数
Level#=g レイヤー# に対するグリッドサイズ(Layer 0が最も詳細)
[END] ( or [END-IMG ID] )
上記の項目は最低限必要(必須)のHeader項目で、これ以外にCodepage,Datum,Transparent,Elevation,Zoom# などのオプション項目を記述可能である.
body(Objects)の構造
[POI]
… POI(Point of Interest) に関する情報
[END]
[POLYGON]
… ポリゴンデータに関する情報
[END]
[POLYLINE]
… ポリラインデータに関する情報
[END]
[SHP]
… ESRI shape file sectionデータに関する情報
[END]
…
body(Objects)には様々な項目を含めることができるが、今回は等高線をポリライン[POLYLINE]を用いて記述することにする.
[POLYLINE]
Type=object_type オブジェクトの種類(10,16進数または名前で記述) 【必須】
Data#=(lat1,lon1), (lat2,lon2), … 【必須】
[END]
POLYLINEのオプション項目として
Label=object_name マップ上に表示されるオブジェクト名(半角80文字以内)
EndLevel=# The coordinates in the lowest numbered Data# line apply
up to the specified EndLevel=#.
(注: p.19 “4.2.4.1 Point of Interest” の説明では何故か ”lowest numbered Data# line”
になっているが、p.46の “4.4.3 Using levels when defining map objects” では、”the highest
numbered Datan= ” となっている. “highest” が正解か? )
などがある.EndLevel=#に関する項目が分かり難いが、上記の英文マニュアルのp.42 の “4.4 Levels” の項目に “レベル” に関する説明がされている.この”レベル” の設定が見易いマップを作成する際の鍵のようで、マップのズームレベルに応じて表示するオブジェクトをコントロールする事ができる.
英文のままでは分かり難いと思うので、大雑把に要約しておくことにする.
【要約】
Polish形式のファイル(PFM形式)では、ハードウェアズームレベルと呼ばれる 1〜24のズームレベルを設けている.ズームレベル24が最も詳細なマップで、ズームレベルが1つ下がる毎にマップスケールが2倍(ズームアウト)になる.実際のGarminのGPSデバイスでは ズームレベル12 が最低ズームレベルとなる.
Level # | GPS上の表示範囲(メートル) |
---|---|
24 | 最大120m |
23 | 200m, 300m |
22 | 500m |
21 | 800m 〜 1.2km |
20 | 2km |
19 | 3km |
18 | 5km 〜 8km |
17 | 12km |
16 | 20km 〜 30km |
15 | 50km |
14 | 80km 〜 120km |
13 | 200km 〜 300km |
12 | 500km 〜 800km |
ハードウェアズームレベルはヘッダセクション [IMG ID] のみで扱われる.マップズームレベルはマップの制作者によって定義され、最大で10レベル(0〜9)まで設定することができる.
[IMG ID]
Levels=4
Level0=23
Level1=21
Level2=20
Level3=17
[END]
Levelm=h という項目は、マップのズームレベル m とハードウェアズームレベル h が対応付けられることを意味している.上記の例では、マップのズームレベルとして4段階を設定しており、マップのズームレベル0がハードウェアズームレベル23、マップのズームレベル3がハードウェアズームレベル17に対応する.
この場合ユーザが作成したマップはハードウェアズームレベル17〜23の場合のみ表示され、ハードウェアズームレベル16以下ではオリジナルのベースマップが表示される.
例として、Remenham村 (Berkshire, UK) をPOIとしてマップに表示する場合を示す.
[RGN10]
Type=3328
Label=Remenham
Data0=(51.551744,-0.889936)
[END]
この場合、”Data0=” で緯度・経度のデータを記述しているので、マップのズームレベルが0の場合(最詳細)のみこのPOIが表示される.
[RGN10]
Type=3328
Label=Remenham
Data1=(51.551744,-0.889936)
[END]
この場合は同様に、マップのズームレベルが1の場合のみ表示される.
[RGN10]
Type=3328
Label=Remenham
Data0=(51.551744,-0.889936)
Data1=(51.551744,-0.889936)
Data2=(51.551744,-0.889936)
[END]
ズームレベル0,1,2 で表示させる場合は上記のように記述する必要があるが、もっと単純にする方法としてEndLevel=n を記述する方法がある.
[RGN10]
Type=3328
Label=Remenham
EndLevel=3
Data0=(51.551744,-0.889936)
[END]
EndLevel=3 を指定すると、最高レベルのDatan=ラインがレベルnまで繰り返し指定されたのと同じように扱われる.上記の場合はData0のラインの内容がData3のラインまで繰り返し指定された事と同じ事になる.すなわち
Data0=(51.551744,-0.889936)
Data1=(51.551744,-0.889936)
Data2=(51.551744,-0.889936)
Data3=(51.551744,-0.889936)
と記述したことと同じになる.
[RGN40]
Type=22
Label=
EndLevel=2
Data0=(51.562624,-1.070283),(51.561637,- 1.070592),(51.561272,-1.069878), (51.560059,-1.064277)
Data1=(51.562624,-1.070283),(51.561272,- 1.069878),(51.560059,-1.064277)
[END]
この場合は、最高レベルのData1のラインがData2まで繰り返されることになる.
Data0=(51.562624,-1.070283),(51.561637,- 1.070592),(51.561272,-1.069878), (51.560059,-1.064277)
Data1=(51.562624,-1.070283),(51.561272,- 1.069878),(51.560059,-1.064277)
Data2=(51.562624,-1.070283),(51.561272,- 1.069878),(51.560059,-1.064277)
ズームレベル0(最詳細)では4つの頂点が表示されるが、レベル1,2では3つの頂点が表示される.
参考までに、前回Shapeファイル経由で基盤地図の等高線情報をPolishファイルに変換(GPSMapEditを使用) したデータの一部を示す.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
; Generated by GPSMapEdit 1.1.75.2 [IMG ID] LblCoding=9 ID=81140601 Name=Kanagawa Contour 25K 01 Elevation=M Preprocess=F TreSize=511 TreMargin=0.00000 RgnLimit=127 POIIndex=Y POINumberFirst=Y POIZipFirst=Y Copyright=JSGI Kiban Map Levels=2 Level0=24 Level1=23 Zoom0=0 Zoom1=1 [END-IMG ID] [POLYLINE] Type=0x21 Data0=(35.16088,139.02334),(35.16086,139.02312),(35.16088,139.02310),(35.16106,139.02301), (35.16121,139.02301),(35.16153,139.02301),(35.16159,139.02306),(35.16166,139.02312), (35.16170,139.02321),(35.16174,139.02334),(35.16179,139.02346),(35.16187,139.02357), (35.16207,139.02374),(35.16213,139.02381),(35.16241,139.02426),(35.16243,139.02434), (35.16245,139.02449),(35.16243,139.02467),(35.16241,139.02501),(35.16239,139.02514), (35.16222,139.02557),(35.16222,139.02563),(35.16224,139.02570),(35.16237,139.02585), (35.16241,139.02593),(35.16247,139.02612),(35.16252,139.02630),(35.16256,139.02638), (35.16271,139.02660),(35.16277,139.02673),(35.16277,139.02681),(35.16277,139.02700), (35.16279,139.02707),(35.16282,139.02709),(35.16288,139.02713),(35.16301,139.02718), (35.16307,139.02718),(35.16327,139.02703),(35.16335,139.02698),(35.16346,139.02698), (35.16361,139.02707),(35.16374,139.02709),(35.16385,139.02713),(35.16391,139.02720), (35.16400,139.02730),(35.16402,139.02741),(35.16402,139.02748),(35.16397,139.02773), (35.16400,139.02778),(35.16404,139.02782),(35.16425,139.02795),(35.16434,139.02799), (35.16451,139.02797),(35.16462,139.02801),(35.16475,139.02818),(35.16490,139.02833), (35.16494,139.02840),(35.16496,139.02844),(35.16500,139.02861),(35.16503,139.02868), (35.16507,139.02872),(35.16509,139.02872),(35.16550,139.02864) [END] [POLYLINE] Type=0x21 Data0=(35.16011,139.02381),(35.16028,139.02349),(35.16028,139.02344),(35.16026,139.02338), (35.16018,139.02329),(35.16013,139.02321),(35.16013,139.02312),(35.16018,139.02306), (35.16028,139.02299),(35.16033,139.02293),(35.16039,139.02282),(35.16043,139.02278), (35.16050,139.02278),(35.16063,139.02278),(35.16071,139.02282),(35.16084,139.02282), (35.16086,139.02280),(35.16091,139.02271),(35.16093,139.02254),(35.16095,139.02248), (35.16097,139.02243),(35.16104,139.02237),(35.16106,139.02235),(35.16108,139.02235), (35.16116,139.02239),(35.16134,139.02250),(35.16146,139.02263),(35.16168,139.02276), (35.16174,139.02282),(35.16179,139.02288),(35.16183,139.02297),(35.16187,139.02308), (35.16191,139.02336),(35.16194,139.02342),(35.16200,139.02349),(35.16215,139.02357), (35.16226,139.02364),(35.16232,139.02372),(35.16241,139.02391),(35.16256,139.02406), (35.16262,139.02417),(35.16264,139.02430),(35.16264,139.02441),(35.16260,139.02449), (35.16256,139.02464),(35.16256,139.02475),(35.16258,139.02494),(35.16256,139.02501), (35.16256,139.02509),(35.16254,139.02518),(35.16243,139.02539),(35.16243,139.02544), (35.16247,139.02552),(35.16267,139.02565),(35.16275,139.02578),(35.16279,139.02587), (35.16279,139.02608),(35.16282,139.02610),(35.16284,139.02615),(35.16294,139.02627), (35.16301,139.02638),(35.16305,139.02649),(35.16309,139.02668),(35.16312,139.02673), (35.16316,139.02675),(35.16318,139.02677),(35.16320,139.02675),(35.16331,139.02668), (35.16355,139.02658),(35.16357,139.02658),(35.16367,139.02666),(35.16376,139.02668), (35.16389,139.02664),(35.16395,139.02664),(35.16404,139.02668),(35.16410,139.02675), (35.16415,139.02683),(35.16419,139.02703),(35.16421,139.02718),(35.16417,139.02743), (35.16417,139.02754),(35.16421,139.02758),(35.16430,139.02758),(35.16443,139.02754), (35.16449,139.02754),(35.16466,139.02756),(35.16477,139.02763),(35.16479,139.02765) [END] ... |