HOME EEM-RTM

国土地理院の基盤地図情報をEEM-RTMデータに変換するツール

1. 概要

本ツールは 国土交通省国土地理院 の公開している建物ファイルと標高ファイルを読み込んでEEM-RTMの入力データに変換するものです。
市街地などの電波伝搬のシミュレーションに使用することができます。
建物データは多角形で表されていますが高さ情報がないので断面積から計算する機能を持っています。
標高データは10mメッシュに対応しています。

GML (Geography Markup Language) : 地理情報の国際規格 ISO 19136
DEM (Digital Elevation Model) : 数値標高モデル

国土地理院コンテンツ利用規約

2. 変換プログラムのインストール

変換プログラム gml2rtm.exe をダウンロードしてEEM-RTM.exeと同じフォルダに置いてください。

(注意)
ダウンロードしたファイルは必ずウイルスチェックを行ってください。 最初に起動したときセキュリティソフトが警告を出したら許可してください。 本ツールによって生じた損害について弊社は責任を負いません。

3. 基盤地図情報のダウンロード

下記の国土地理院の"基盤地図情報ダウンロードサービス"のページにアクセスします。
https://fgd.gsi.go.jp/download/menu.php
最初にユーザー登録(無料)が必要です。 本ページの[新規登録]をクリックしてユーザー登録を行ってください。
図1にファイル選択のページを示します。
左の領域が[基本項目]タブのときは建物データ、 [DEM]タブのときは標高データをダウンロードすることができます。
なお、[基本項目]のときは[全項目]をOFFにして[建築物の外周線]のみをONにし、 [DEM]のときは[10mメッシュ]と[10B(地形図の等高線)]のみをONにしてください。
地図の区画番号をクリックして選択した後、 [ダウンロードファイル選択へ]をクリックするとダウンロードページへ移動します。


図1 ファイル選択のページ

図2においてダウンロードしたいファイルの[ダウンロード]をクリックします。 このときユーザー登録時のユーザーIDとパスワードを入力するとダウンロードが行われます。
ダウンロードしたファイルはzip形式に圧縮されていますので展開してください。
[基本項目]は複数のファイルから成りますが、 このうちファイル名が "FG-GML-523974-BldL-20200401-0001.xml" のように"BldL"を含んだファイルが建物データでありそれ以外は削除してかまいません。
[DEM]10mは一つのファイルでありファイル名は ”FG-GML-5239-74-dem10b-20161001.xml” のように"dem10"を含んでいます。
建物ファイルとDEMファイルはそれぞれ専用のフォルダを作って保存してください。 (同じフォルダでもかまいせんがファイルの管理上)


図2 ダウンロードのページ

表1に日本の標準地域メッシュを示します。
基本項目とDEM10mメッシュは二次メッシュが一つのファイルになっています。
識別番号の最初の2桁は緯度方向の通し番号、次の2桁は経度方向の通し番号です。
二次メッシュの5桁目が緯度方向の番号(0...7)、6桁目が経度方向の番号(0...7)です。

表1 日本の標準地域メッシュ
メッシュ緯度範囲経度範囲1辺の長さ識別番号例応用例
一次メッシュ40分(2/3度)1度約80km533920万図
二次メッシュ5分(1/12度)7.5分(1/8度)約10km5339-452.5万図、基本項目、DEM10m
三次メッシュ30秒(1/120度)45秒(1/80度)約1km5339-00-00DEM5m

4. 変換プログラムの使い方

変換プログラムgml2rtm.exeを起動すると図3のウィンドウが現れます。


図3 変換プログラム(建物とDEMを開いた状態)

ファイルの読み込み

[ファイル]→[開く]メニューまたは[開く]ボタンをクリックして前節で取得した建物ファイルまたはDEMファイルを開いてください。
ファイルは一度に複数また複数回に分けて開くことができます。

ウィンドウ操作

マウス操作は以下の通りです。

ステータスバーに以下の情報が表示されます。

3D図形表示

[ツール]→[3D表示]メニューまたは[3D表示]ボタンをクリックすると図4のように3D図形表示されます。
このウィンドウの操作方法については「EEM-RTM取扱説明書」の付録Aを参考にしてください。


図4 3D図形表示

切り取り

通常、ファイル全体を変換すると膨大なデータになりますので一部を切り取ります。
[編集]→[切り取り]メニューまたは[切り取り]ボタンをクリックしたのち、 マウスをドラッグして矩形領域を選択すると図5のように一部が選択された状態になります。
再度同じ操作を行うと新しい領域が選択されたことになります。
ここで再び3D表示を行うと図6のようになります。
[編集]→[切り取り解除]メニューをクリックすると一部選択が解除されて全部が選択された状態になります。


図5 切り取り後


図6 3D図形表示(切り取り後)

建物高さの編集

建物の高さは[オプション]メニューで設定されるパラメーターから自動的に計算されますが、 建物の高さが実際と著しく異なるときは修正することができます。
図7のように十分拡大した状態で建物の内部を右クリックすると[編集]ボタンが現れます。 ここで[編集]ボタンをクリックすると図8のウィンドウが現れます。 ここで建物の地上高(地面からの高さ)を入力してください。
なお、建物の高さは Google Map の3D表示などから調べることができます。 建物の高さは例えば「階数×3m」と評価することができます。
また、建物の高さはEEM-RTMで修正することもできます。


図7 建物高さを編集するための建物の選択


図8 建物高さの編集

保存

最後に、[ファイル]→[名前を付けて保存]メニューまたは[保存]ボタンをクリックすると EEM-RTM用のデータを作成することができます。

オプション

[ツール]→[オプション]メニューをクリックすると図7のウィンドウが開きます。 ここで各種の設定を変更することができます。
建物データは高さの情報を持たないので本ツールでは以下の式で建物の高さを計算します。

建物の高さ = 基本高さ + 比例定数 × 建物の面積 [m]     (1)

例えば基本高さ=5m、比例定数=0.05[1/m]のとき、 建物の面積=100m2の建物の高さは 5+0.05×100=10m となります。
[地面標高データ]の[間引き間隔]は地面のデータ数を調整するためにあります。 [間引き間隔]を1/3/5/15とすると地面の単位は10/30/50/150m四方になります。 図10、図11に間引き間隔=1と間引き間隔=5の3D図形表示例を示します。
[EEM-RTM]の[観測面を出力する]をONにすると地面の上に指定した高さと分割数の観測面が出力されます。 例えば間引き間隔=5で観測面の分割数=2のときは1単位50m/2=25m四方の観測面が出力されます。
その他については[ヘルプ]を参考にしてください。
すべての設定を初期化するには[初期化]をクリックしてください。


図9 オプション


図10 地面3D表示(間引き間隔=1)


図11 地面3D表示(間引き間隔=5)

海面の扱い

DEMデータでは海面は海抜-9999mと表現されています。 本ツールは海面は省略し地面に変換しません。

座標の変換式

本ツールは緯度、経度、標高をXYZ座標に変換します。 基準点の緯度をψ0、経度をφ0とし、これを原点x=y=0とします。 このとき緯度ψ、経度φ、標高hの点のxyz座標は以下のようになります。

   (2)

ここでREは地球の半径です。 式(2)の第3式の右辺第2項は地球が球であることを表します。

    (3)

5. EEM-RTMの計算例

前節の方法で作成したEEM-RTMデータをEEM-RTMで開くと図12のようになります。
ここで[図形確認3D]をクリックすると図13のように表示されます。


図12 本ツールで作成されたデータをEEM-RTMで開いた状態


図13 形状確認3Dの出力図

計算前の作業

EEM-RTMで計算を行う前に以下の作業が必要です。

  1. 送信点の入力
    計算を行うには送信点の入力が必須です。
  2. 物性値の確認
    [ツール]→[物性値編集]メニューで建物と地面の物性値を確認してください。 建物と地面には異なる物性値を指定することができます。
  3. 計算条件の確認
    [計算条件]をクリックして以下の項目を確認してください。(図14)


図14 計算条件

図形出力例

計算終了後、[ポスト処理制御]の[3-1 観測面の分布図]の[受信電力]をONにした後、 [ポスト処理]をクリックします。
その後[プロット2D]をクリックすると図15が図形表示され、 [プロット3D]をクリックすると図16が図形表示されます。


図15 電力分布図(2D、中央付近に送信点)


図16 電力分布図(3D)

6. 汎用形式データ

本ツールでファイルを保存するとき[ファイルの種類]として[汎用データ]を選択すると、 一般的な用途に使える汎用形式のデータを保存することができます。
書式はテキストファイルであり、最初に建物データ、次に地面データが並びます。
リスト1に汎用形式データを読み込んで3D図形ファイルを出力するプログラムを示します。


リスト1 汎用形式データを読み込んで3D図形ファイルを出力するプログラム(gml2ev3.c)
/*
GML2RTMの汎用出力ファイルを読み込んで3D図形ev3ファイルを出力する

コンパイル方法:
$ cl gml2ev3.c (gml2ev3.exeができる)

使い方:
1. GML2RTMを実行して汎用出力ファイル(拡張子.txt)を出力する
2. $ gml2ev3.exe < 汎用出力ファイル名 > ev.ev3
3. $ evgl.exe
*/

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
	// (1) ファイルを読み込む

	// 建物データ
	int nbld;
	int *nvtx;
	double **xbld, **ybld;
	double *zbld, *hbld;
	scanf("%d", &nbld);
	if (nbld > 0) {
		nvtx = (int *)malloc(nbld * sizeof(int));
		xbld = (double **)malloc(nbld * sizeof(double *));
		ybld = (double **)malloc(nbld * sizeof(double *));
		zbld = (double *)malloc(nbld * sizeof(double));
		hbld = (double *)malloc(nbld * sizeof(double));
		for (int n = 0; n< nbld; n++) {
			scanf("%d %lf %lf", &nvtx[n], &zbld[n], &hbld[n]);
			xbld[n] = (double *)malloc(nvtx[n] * sizeof(double));
			ybld[n] = (double *)malloc(nvtx[n] * sizeof(double));
			for (int i = 0; i < nvtx[n]; i++) {
				scanf("%lf %lf", &xbld[n][i], &ybld[n][i]);
			}
		}
	}

	// 地面データ
	int ndem;
	double (*xdem)[4], (*ydem)[4], (*zdem)[4];
	scanf("%d", &ndem);
	if (ndem > 0) {
		xdem = (double (*)[4])malloc(ndem * 4 * sizeof(double));
		ydem = (double (*)[4])malloc(ndem * 4 * sizeof(double));
		zdem = (double (*)[4])malloc(ndem * 4 * sizeof(double));
		for (int n = 0; n < ndem; n++) {
			for (int i = 0; i < 4; i++) {
				scanf("%lf %lf %lf", &xdem[n][i], &ydem[n][i], &zdem[n][i]);
			}
		}
	}


	// (2) ev3ファイルを出力する

	printf("%s\n", "-1");

	// 建物データ
	for (int n = 0; n < nbld; n++) {
		for (int i = 0; i < nvtx[n] - 1; i++) {
			printf("4 0 %f %f %f %f %f %f %f %f %f %f %f %f 0 0 255\n",
				xbld[n][i + 0], ybld[n][i + 0], zbld[n],
				xbld[n][i + 1], ybld[n][i + 1], zbld[n],
				xbld[n][i + 1], ybld[n][i + 1], zbld[n] + hbld[n],
				xbld[n][i + 0], ybld[n][i + 0], zbld[n] + hbld[n]);
		}
	}

	// 地面データ
	for (int n = 0; n < ndem; n++) {
		printf("4 0 %f %f %f %f %f %f %f %f %f %f %f %f 255 255 0\n",
			xdem[n][0], ydem[n][0], zdem[n][0],
			xdem[n][1], ydem[n][1], zdem[n][1],
			xdem[n][2], ydem[n][2], zdem[n][2],
			xdem[n][3], ydem[n][3], zdem[n][3]);
	}

	return 0;
}


更新履歴