y2trip » Garmin GPS用マップソース互換地図の作成 #4

9

08

2012

Garmin GPS用マップソース互換地図の作成 #4

一旦Polish形式ファイルを作成してからマップソース互換ファイルを作成する方法


Conversion flow with polish format
Polish形式ファイル(.mp) に変換してからマップソース互換(.img)ファイルを作成する手順

前回までは一旦シェープファイルを作成してからマップソース互換ファイルを作成する手順について簡単に説明したが、国土地理院が提供するコンバートソフトウェアでは等高線情報が全て一種類の線種の情報として作成されてしまうので、地図を広域表示すると等高線や標高の数値情報が重なってしまうので殆ど使い物にならない.


そこで今回はシェープファイルを作成せずに、直接XMLデータをPolish形式ファイル(.mp) に変換する方法について説明することにする.但し、この方法はテキストデータをPerlなどのテキスト処理言語を用いて変換する必要があるので、コンピュータプログラミングの経験が無いと難しいかもしれない.

基盤地図情報のXMLデータからPolish形式ファイルに変換する


先ず最初に、基盤地図情報の標高点XMLデータに含まれている等高線に関する情報がどのように記述されているかを確認する必要がある.データ項目に関する詳細な定義は『基盤地図情報 XMLスキーマ定義ファイル3.0( JPGIS 2.1形式 )』に記述されているが、そんな大袈裟な情報を参照しなくとも、XMLデータの中身を覗いてみれば必要なデータ項目は直ぐに分かるだろう.


上記のリストは等高線に関する部分を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
 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を使用) したデータの一部を示す.

Calendar

September 2012
S M T W T F S
 1
2345678
9101112131415
16171819202122
23242526272829
30  
  • リンク

  • Meta