最新記事
(06/29)
(06/04)
(06/03)
(05/30)
(05/28)
|
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
|
国土数値情報。データの取り込み。
国土数値情報のデータを活用できれば、正確な情報をたくさん活用できるようになります。地図を作るときも非常に楽になるはずです。国土数値情報をどのように取り込めばいいか考えてみました。
国土数値情報のダウンロード
国土数値情報は、地形、土地利用、公共施設、道路、鉄道等国土に関する様々な地理的情報を数値化したもので、国土数値情報ダウンロードサービスのサイトからダウンロードすることができます。
国土数値情報のダウンロードにあたっては、国土数値情報利用約款を遵守することが求められます。いろいろなことが書かれていますが、利用者が知っておくべきポイントは次のものでしょう。
・転載・引用ファイル名、年度・地域等の明記
・編集・加工、その成果物の頒布・譲渡・貸与
自由
・国土数値情報の各ファイル・データを複製しての頒布・譲渡・貸与
禁止。ファイル形式を変換しての複製も禁止
。
複製とは言えないような編集・加工を行い、ファイル等の明記を行えば、国土数値情報を用いた成果物をWEBサイトに掲載したり、販売してもよいということです。
それでは、鉄道のデータをダウンロードしてみましょう。
国土数値情報ダウンロードサービスへをクリックすると、「データ項目選択]画面が現れます。たくさんの項目の中の国土骨格というにジャンルに「鉄道」があります。これを選択します。
次に「地域選択」画面が現れます。鉄道の場合は、[全国」しかありません。これを選択します。
その次は「ファイル選択」画面です。ファイル名、ファイル容量、年度、版数、データ項目、説明、備考の項目があります。鉄道の場合は、2つのファイルがあります。いずれも平成7年度のもので、違いは日本測地系か世界測地系かどうかです。今後は世界測地系が標準になるので、世界測地系を選択します。ファイル名は、N02-07L-48-01.0a.zipです。
これをダウンロードして解凍すると、「N02-07L-48-01.0a」というフォルダが作成されます。このフォルダの中には次の3つのファイルがあります。
・N02-07L-2K.txt(データ)・KS-META-N02-07L.html(メタデータ)
・N02-07L.html(データフォーマット情報)
データの内容
N02-07L-2K.txtはテキストデータですが、各行のデータの内容は一様ではありません。
H NLA N02-07L-2K 21995 80 127284 35745 73809 7720 9317 0 693 N 463063 1 4696868 1125076 14630630001 2 0 N 463063 2 4696768 1125126 0 1 1463073 3 (中略) L 463063 1463063 6 4 0 3 4696868 1125076 4696888 1125056 4696908 1125046 L 463063 4463063 5 5 0 6 4697688 1124676 4697588 1124706 4697448 1124676 4697388 1124696 4697288 1124776 4697248 1124816 L 463064 1463064 2 1 0 2 4697938 1124416 4697918 1124466 (中略) S 624055 6624055 7 2 1 11050001 2 624055 6 0624055 7 0 S 624065 19624075 31 3 1 11050002 18 624065 19 0624065 10 0624065 3 0624065 2 0624065 1 0 624075 2 0624075 17 0624075 16 0624075 15 0624075 14 0 624075 13 0624075 12 0624075 11 0624075 4 0624075 18 0 624075 3 0624075 10 0624075 31 0 S 624075 32634014 21 4 1 11050003 39 (中略) DP 5339450246 1西ヶ原 DP 5339460003 1有楽町 DP 5339460007 1東京 DP 5339460009 1水道橋 DP 5339460011 1御茶ノ水 (中略) DS 13001500 1 2武豊線 DS 13002500 1 1東海道新幹線 DS 13005000 1 2高山本線 DS 13006000 1 2中央本線 DS 13006001 1 2中央本線(原野~木曽福島) DS 13006002 1 2中央本線(坂下付近) (以下略)
これを解釈するためには、N02-07L.html(データフォーマット情報)に記載された内容に従って、テキストデータを分析しなければなりません。
データフォーマット情報によれば、このテキストデータは大きく6つの項目に分類され、それぞれの明細データを含めれば、9種類のフォーマットが存在します。データフォーマットの名称では直感的にわかりにくいので、次のように略称、レイヤー記号、検索方法をつけてみました。
フォーマット名 | 略称 | レイヤー | 検索方法 | 主な内容 | |
---|---|---|---|---|---|
ヘッダデータ | ヘッダデータ1行目 | 作成情報 | H | レイヤーがH | 作成機関、作成年度 |
ヘッダデータ2行目 | 行数データ | - | レイヤーHの次の行 | 各データの行数 | |
ノードデータ | 点データ | N | メッシュコード+ノード一連番号 | 各点の緯度経度 | |
リンクデータ (線分データ) |
リンクの1行目 | 線分 | L | 起点ノード・メッシュコード+リンク一連番号 | 構成ポイント数 |
リンクの2行目以降 | 線分明細 | - | ※該当リンクデータ内の何番目のデータか | 線分の始点、中間点、終点の経度緯度 | |
ラインデータ(線データ) | ラインデータの1行目 | 路線 | S | ライン一連番号 | 構成ラインデータ数 |
ラインデータの2行目以降 | 路線明細 | - | ※該当ラインデータ内の何番目のデータか | 該当するリンクデータの起点ノード・メッシュコード+リンク一連番号 | |
ノード台帳データ | 駅名 | DP | 属性番号=駅番号=メッシュコード(6桁)+ノード番号(4桁) | 駅名 | |
ライン台帳データ | 路線名 | DS | 属性番号=路線コード | 路線名 |
※ 線分明細と路線明細については、その行には検索の手掛かりとなるデータが記載されていないので、その行番号を用いて、キーとなるフィールドを作り出す必要があります。その方法については、後に述べます。
データベースの利用
国土数値情報の鉄道のデータ(N02-07L)は全行数127284行の多量のデータです。しかも、9種類のデータフォーマットが混在しているため、 これを扱うのは容易ではありません。何らかのデータベースソフトの利用が欠かせません。以下は、MicrosoftのAccessで処理することを前提にして、国土数値情報の取り出し方を考えます。
データベースへのインポート
国土数値情報をデータベースにインポートする際には、そのデータ行の行番号を付加する形でインポートします。線分明細や路線明細など検索キーが行の中にないデータが存在するからです。行番号を付加すれば、そのデータを特定することが可能になります。Accessの場合は、インポートの際に検索キーを付加する設定にすれば、オートナンバーで行番号のフィールドが追加されます。
テーブル作成
インポートしたテーブルから各データのフォーマットに合致したテーブルを作ります。
レイヤーコードが振られているデータを取り出すことは簡単です。最初の1文字か2文字がそのレイヤーコードに合致するものをクエリで選び出せばいいのです。
文字列の取り出しは、Accessの場合、mid関数を使います。mid関数を使えば、行データから好きな部分を取り出すことができます。データフォーマットの記述に従って、フィールドごとに文字列の取り出しを行います。数値に変換したい場合には、Val関数を併用します。
データフォーマットに従って、フィールドをクエリに加えていきます。なお、インポート際に付加された行番号フィールドもクエリのフィールドに忘れずに加えておきましょう。完成したら選択クエリで内容を確認します。問題がなければ、これをテーブル作成クエリに変えて、作成するテーブルの名前を入力してテーブル作成を実行します。これで、レイヤー単位のテーブルができあがります。ノードデータ、リンクデータ、ラインデータ、ノード台帳データ、ラインノード台帳データの各テーブルをこうして作成していきます。
明細データテーブルの作成
線分明細と路線明細については、その行には検索の手掛かりとなるデータが記載されていないので、テーブルの作成方法はちょっと複雑になります。次のデータは起点ノードのメッシュコードが463063、リンク一連番号が5の行番号とリンクデータ(線分データ)のものです。明細データは2行、データ数は6個あります。
35756, L 463063 4463063 5 5 0 6 35757, 4697688 1124676 4697588 1124706 4697448 1124676 4697388 1124696 4697288 1124776 35758, 4697248 1124816
これを次のような形の明細テーブルにすれば、各明細データが特定しやすくなります。
リンクデータ明細テーブル
起点ノードのメッシュコード | リンク一連番号 | 明細番号 | x | y |
---|---|---|---|---|
463063 | 5 | 1 | 4697688 | 1124676 |
463063 | 5 | 2 | 4697588 | 1124706 |
463063 | 5 | 3 | 4697448 | 1124676 |
463063 | 5 | 4 | 4697388 | 1124696 |
463063 | 5 | 5 | 4697288 | 1124776 |
463063 | 5 | 6 | 4697248 | 1124816 |
これは次の手順で実現しました。
リンク明細行テーブルの作成
リンクデータが存在するのは、35748行以上10957行未満の部分です。このうち、先頭文字がLでないものを選び出せば、リンク明細行だけのテーブルになります。なお、行番号フィールドも加えておきます。
親テーブルの作成
リンク明細行テーブルのレコードには、他のテーブルと組み合わせるための情報がありません。この情報を付加するために、まず事前に親であるリンクデータのレコードにそのリンクデータの明細の最後の行番号の情報を加えておきます。リンクデータ数を参照して、親の行数からその明細の最後の行数を求められます。最後の行番号は”[親の行番号]+[int(リンクデータ数/6)+1」行分となります。この情報を付加したテーブルを以下「親テーブル」と呼びましょう。
リンク明細行特定テーブルの作成
クエリのデザイン画面で、「親テーブル」と「リンク明細行テーブル」を表示します。「リンク明細行テーブル」の「行番号」フィールドに抽出条件を設定します。抽出条件は「親データ」の「行番号」より大きく、「最終行」未満。このほか、クエリのフィールドに「起点ノードのメッシュコード」、リンク一連番号、明細番号、「リンク明細行テーブル」の元データを加えます。明細番号は、「リンク明細行テーブル」の「行番号」から「親データ」の「行番号」を引いた数値です。このテーブル作成クエリを実行すれば、リンク明細を他と結び付けられるテーブルが作成されます。それは、次のようなデータになります。先頭のフィールドは行番号、次の3つのフィールドでこのレコードを特定するとともに親データとの結びつけができるようになります。
35755,463063,4,1,4696868 1125076 4696888 1125056 4696908 1125046 35757,463063,5,1,4697688 1124676 4697588 1124706 4697448 1124676 4697388 1124696 4697288 1124776 35758,463063,5,2,4697248 1124816 35760,463064,1,1,4697938 1124416 4697918 1124466
個別明細テーブルの作成
目標は1つの座標データを1つのレコードとすることです。これは、横を縦にすることです。横を縦にするためには、行内のデータ数分だけのクエリを作り、そのクエリをユニオンクエリで結合すれば実現できます。「リンク明細行特定テーブル」の1行には5つの座標が収められています。たとえば、リンク1というテーブルを作ります、このクエリは行の1番目の座標だけを取り出します。そうするとこのクエリは、次のような内容になります。
起点ノードのメッシュコード | リンク一連番号 | 明細番号 | x | y |
---|---|---|---|---|
463063 | 5 | 1 | 4697688 | 1124676 |
463063 | 5 | 6 | 4697248 | 1124816 |
同じように2番目の座標、3番目の座標、4番目の座標、5番目の座標を取り出すクエリを作成します。
この5つのクエリをユニオンクエリで実現します。ユニオンクエリの記述は次のような感じになります。
Select [mesh],[link#],[link##],[x],[y] From [Ldata1]; UNION Select [mesh],[link#],[link##],[x],[y] From [Ldata2]; UNION Select [mesh],[link#],[link##],[x],[y] From [Ldata3]; UNION Select [mesh],[link#],[link##],[x],[y] From [Ldata4]; UNION Select [mesh],[link#],[link##],[x],[y] From [Ldata5];
このユニオンクエリでできたデータを用いて、テーブル作成クエリを実行すれば、「リンクデータ明細テーブル」が作成されます。
「ラインデータ明細テーブル」もこれと同じようにすれば、作成できます。
国土数値情報の活用
このようにして、次の7つのテーブルを作成しましした。
- ノードデータ
- リンクデータ
- リンクデータ明細
- ラインデータ
- ラインデータ明細
- ノード台帳データ
- ラインノード台帳データ
後はこれを組み合わせて、必要な情報に加工することになります。