数値地図25000(空間データ基盤)の仕様(道路区間データ)

はじめに

 国土交通省国土地理院が作成している数値地図25000(空間データ基盤)は日本全国 を2万5000分の1地形図に相当する精度を持つ地形データだ。
 道路中心線、鉄道中心線、河川中心線、水涯線、海岸線、行政界、基準点、地名、公共施 設、標高の10項目のデータが含まれる。しかしこれらのデータ表記は(私が調べた限りでは) 一般に公開されていない。
 ここでは私が勝手に想像した標道路区間に関するデータ仕様を紹介する。



関連ファイル


・xxxxxDK.sal

 「xxxxx」の部分は市区町村コード。例えば西宮市であれば「28204DK.sal」というファ イル名になる。
 このファイルには道路区間に関するデータが格納されている。


・xxxxx.slp

 「xxxxx」の部分は市区町村コード。例えば西宮市であれば「28204.slp」というファ イル名になる。
 このファイルには座標に関するデータが格納されている。


・xxxxx.slm

 「xxxxx」の部分は市区町村コード。例えば西宮市であれば「28204.slm」というファ イル名になる。
 このファイルには座標のオフセットデータが格納されている。



xxxxxDK.salファイル

DK(ID{DK008218}){JT{11}YU{1D}SB{13}FI{19}NM{}CV(ID{CV008861}){005619,005668}EG(ID{EG000001}){BD(IR{ND28204000822})BD(IR{ND28204000829})GM(IR{CV28204008861})}}
DK(ID{DK008217}){JT{11}YU{1D}SB{13}FI{19}NM{}CV(ID{CV008860}){005621,005614,005591,005545}EG(ID{EG000002}){BD(IR{ND28204000822})BD(IR{ND28204000817})GM(IR{CV28204008860})}}
...(省略)...
DK(ID{DK003913}){JT{11}YU{1C}SB{16}FI{1B}NM{名神高速道路}HR(IR{HA28204000082})CV(ID{CV004052}){031845,031537,031478,031420,031331,031209,031058,030879}EG(ID{EG008847}){BD(IR{ND28204004495})BD(IR{ND28204004266})GM(IR{CV28204004052})}}
DK(ID{DK003914}){JT{11}YU{1C}SB{16}FI{1E}NM{名神高速道路}HR(IR{HA28204000083})CV(ID{CV004053}){032250,032244,032210,032175}EG(ID{EG008848}){BD(IR{ND28204004581})BD(IR{ND28204004568})GM(IR{CV28204004053})}}

 1行1データのテキストファイルとして保存されている。

 データ部分を分離すると以下のように表現できる。
DK(ID{DKxxxxxx})
{JT{xx}
YU{xx}
SB{xx}
FI{xx}
NM{xxxxxxx}
HR(IR{HAxxxxxxxxxxx})
TR(IR{TOxxxxxxxxxxx})
YR(IR{YOxxxxxxxxxxx})
CV(ID{CVxxxxxx}){xxxxxx,xxxxxx,xxxxxx}
EG(ID{EGxxxxxx}){BD(IR{NDxxxxxxxxxxx})BD(IR{NDxxxxxxxxxxx})GM(IR{CVxxxxxxxxxxx})}}


DK(ID{道路区間ID})
{JT{状態区分}
YU{有料区分}
SB{道路種別}
FI{幅員区分}
NM{道路名}
HR(IR{橋梁参照ID})
TR(IR{トンネル参照ID})
YR(IR{雪覆参照ID})
CV(ID{カーブID}){座標1,座標2,座標3}
EG(ID{エッジID}){BD(IR{境界参照ID})BD(IR{境界参照ID})GM(IR{参照カーブID})}}

状態区分
	11 = 供用中
有料区分
	1C = 有料
	1D = 無料
道路種別
	13 = 庭園路
	14 = 石段
	15 = 一般道
	16 = 高速道路
幅員区別
	17 = 1.5m未満
	18 = 1.5m以上3.0m未満
	19 = 3.0m以上5.5m未満
	1A = 5.5m以上13.0m未満
	1B = 13.0m以上
	1E = 真幅道路等 

 HR、TR、HRや道路名などは省略されることもある。
 実際の道路は「座標n」を順番に直線で結ぶことで描ける。座標の数は場合によって大きく増減する。



xxxxx.slpファイル

0006990005005600
0011490005215600
0020390004759600
...(省略)...
0557538001320780
0557539001303170
0557539001307120

 1行1データのテキストファイルとして保存されている。

 データ部分を分離すると以下のように表現できる。
0006990005005600
xxxxxxxxyyyyyyyy

	//x:m_nLongitude(経度)
	//y:m_nLatitude(緯度)

	long	m_nLongitude;		//経度
	long	m_nLatitude;		//緯度

	// ※両値とも8byteの固定長




xxxxx.slmファイル

4868260000,1248680000
...(省略)...

 テキストファイルとして保存されている。
 今回利用するのは1行目のみ。

4868260000,1248680000
xxxxxxxxxx,yyyyyyyyyy

	//x:m_nLongitudeOffset(経度オフセット)
	//y:m_nLatitudeOffset(緯度オフセット)

	long	m_nLongitudeOffset;		//経度オフセット
	long	m_nLatitudeOffset;		//緯度オフセット

	// ※両データは「,」セパレート



データの使い方

 まずxxxxxDK.salファイルを読み込み、各道路座標を取得する。次にxxxxx.slpファイル を開き、各座標に対応する行目のm_nLongitudeとm_nLatitudeを取り出す。最後にxxxxx.slm ファイルからオフセット値を取り出して緯度・経度に加算する。これらの経緯度値の単位は "秒"であることに注意。必要に応じて度・分・秒表記に加工する。
 これで各道路を経緯度に対して描くことができる。

これらの道路データのみをもとにして兵庫県加古郡播磨町を作図すると以下のようになる。



カテゴリー「VC++ TIPS」 のエントリー