Skip to content

マップエディタで OpenStreetMap データを読み込む方法

Mitsuo Saito edited this page May 29, 2018 · 1 revision

OpenStreetMap をマップエディタで読み込んで CrowdWalk のマップデータとして利用する事ができます。
読み込み方法は2通りあり、OSM XML 形式のファイルを使用するか、または Web サービスを利用して直接ダウンロードします。

制限事項

  • 利用可能なエリアは日本国内に限ります。(マップファイルの仕様上の制限)
  • width 値(道幅)は正確ではありません。道路の大まかな分類に従ってそれらしい値がセットされます。この時に使用する式を定義ファイルでカスタマイズする事ができます。
  • height 値(標高)はすべて 0.0 になります。
  • 読み込んだマップを root グループに登録する事はできません。
  • OpenStreetMap は一度に取得できるデータサイズ(地図の大きさではなく情報量)に厳しい制限があります。必要な範囲のデータが一度に取得できなかった場合には、小さな領域に分割して取得しなければなりません。

OSM XML ファイルの取得方法

  1. Web ブラウザで OpenStreetMap Japan のページを表示します。
  2. 地図を表示(世界共通) をクリックします。
  3. 取得する範囲の地図を表示します。
  4. ページ上部の "エクスポート" をクリックしてエクスポート欄を表示させます。
  5. "ドラッグして別の領域を選択" をクリックします。
  6. 選択範囲の四隅の■をドラッグして取得する領域を調整します。
  7. 青い表示の [エクスポート] をクリックします。
    ※この時、選択した範囲のデータ量が多すぎるとサーバからの応答が 400 Bad Request となって、ブラウザには「ページが見つからない」等のエラーメッセージが表示されます。
  8. ファイルの保存をおこなうと "map.osm" というファイル名で OSM XML データが取得できます。

マップエディタの操作方法

新規にマップを作成する場合は最初にグループを追加します。root グループにマップを作成する事はできないためです。

  1. メイン・メニューの Edit / Read OpenStreetMap を選択してダイアログを開きます。 dialog
  2. Destination group で登録先グループを選択します。
  3. Zone で平面直角座標系の系番号を選択します。
  4. Highway value to convert to link ではリンクに変換する道路(highway の値)にチェックを付けます。highway の値については ここ を参考にしてください。例えば pedestrian と footway のみチェックすれば、歩道のみのマップデータを作る事ができます。(元のマップに pedestrian と footway が十分登録されている場合に限る)
  5. Tag filter では元データの tag 情報のうちリンク・ノードに付加するもののパターンを正規表現で定義します。元データの tag の k, v 値は "k=v" 形式の文字列に変換後照合されて、マッチすればタグとしてリンク・ノードに付加されます。
  6. Reject をチェックすると Tag filter でマッチしたタグは取り除かれ、それ以外のタグをリンク・ノードに付加するようになります。
  7. OSM data from で file を選択すると OSM XML 形式のファイルの読み込みとなります。[Open] ボタンをクリックして読み込むファイルを選択します。
  8. OSM data from で web service を選択すると Web サービスを利用した直接ダウンロードとなります。ダウンロードする地図範囲の左上座標を Upper left coordinate の Longitude(経度), Latitude(緯度) に入力し、右下座標を Lower right coordinate の Longitude, Latitude に入力します。
  9. [OK] ボタンをクリックするとファイルの読み込みまたはダウンロードの後、マップデータが作成されます。
    ※ダウンロードの際、サイズ制限に引っかかると "Server returned HTTP response code: 400 for URL: ..." のエラーメッセージが表示されます。

マップデータを分割登録する際の注意点

  • マップエディタで OpenStreetMap データを読み込む際に、登録済みのデータと重複する部分があっても何も問題はありません。(無視されるだけです)
  • サイズ制限により分割登録をおこなう場合には、余裕を持った「重なり」部分を用意してください。重なり部分が少ないとリンクが繋がらない原因となります。
  • OpenStreetMap は随時編集が加えられているため、時間が経つと登録済みデータとの整合性が取れなくなる事があります。時間が経ってからマップを継ぎ足す場合には注意してください。

width 値を求める式のカスタマイズ方法

  • 規定値は "src/main/resource/osm_conversion.json" で次の様に定義されています。
{
    "highways" : [
        { "value" : "motorway",       "reject" : false, "expressionForWidth" : "3.5 * [lanes, 2].max + 2.0 * 2" },
        { "value" : "trunk",          "reject" : false, "expressionForWidth" : "3.5 * [lanes, 2].max + 2.0 * 2" },
        { "value" : "primary",        "reject" : false, "expressionForWidth" : "3.5 * [lanes, 2].max + 1.25 * 2" },
        { "value" : "secondary",      "reject" : false, "expressionForWidth" : "3.25 * [lanes, 2].max + 1.25 * 2" },
        { "value" : "tertiary",       "reject" : false, "expressionForWidth" : "3.25 * [lanes, 2].max + 1.25 * 2" },
        { "value" : "unclassified",   "reject" : false, "expressionForWidth" : "[3.5 * lanes, 5.0].max" },
        { "value" : "residential",    "reject" : false, "expressionForWidth" : "[3.5 * lanes, 5.0].max" },
        { "value" : "service",        "reject" : false, "expressionForWidth" : "[3.5 * lanes, 5.0].max" },
        { "value" : "----" },
        { "value" : "motorway_link",  "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "trunk_link",     "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "primary_link",   "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "secondary_link", "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "tertiary_link",  "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "----" },
        { "value" : "living_street",  "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "pedestrian",     "reject" : false, "expressionForWidth" : "3.5" },
        { "value" : "track",          "reject" : false, "expressionForWidth" : "3.5" },
        { "value" : "bus_guideway",   "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "escape",         "reject" : false, "expressionForWidth" : "5.0" },
        { "value" : "raceway",        "reject" : true, "expressionForWidth" : "0.0" },
        { "value" : "road",           "reject" : false, "expressionForWidth" : "3.5" },
        { "value" : "----" },
        { "value" : "footway",        "reject" : false, "expressionForWidth" : "2.5" },
        { "value" : "bridleway",      "reject" : true, "expressionForWidth" : "0.0" },
        { "value" : "steps",          "reject" : false, "expressionForWidth" : "2.5" },
        { "value" : "path",           "reject" : false, "expressionForWidth" : "2.5" },
        { "value" : "----" },
        { "value" : "cycleway",       "reject" : false, "expressionForWidth" : "3.0" },
        { "value" : "proposed",       "reject" : true, "expressionForWidth" : "0.0" },
        { "value" : "construction",   "reject" : true, "expressionForWidth" : "0.0" },
        { "value" : "----" },
        { "value" : "elevator",       "reject" : false, "expressionForWidth" : "1.5" },
        { "value" : "rest_area",      "reject" : false, "expressionForWidth" : "7.0" },
        { "value" : "services",       "reject" : false, "expressionForWidth" : "7.0" }
    ]
}
  • "value" キーの値に highway 値をセットします。highway 値の代わりに "----" をセットすると、Read OpenStreetMap ダイアログの中でその位置に水平線を引く事ができます。
  • "reject" キーの値に true をセットすると、その highway 値は Read OpenStreetMap ダイアログに表示されず、リンク変換の対象外となります。
  • "expressionForWidth" キーの値部分が highway 値に対応する式となります。
  • 式は Ruby 言語の文法を使って実数を返す様に記述します。
  • 式の中で参照できる変数が3つ定義されています。
    • highway 変数には現在の highway 値がセットされます。
    • lanes 変数には現在の lanes 値が整数でセットされます。(tag に lanes が存在しない時は 1)
    • tags 変数には現在の tag の k, v 値(文字列)がすべてセットされた Hash オブジェクトがセットされます。(tags['highway'] で highway 変数と同じ値が得られます)
  • 上記の部分を編集したファイルを作成してプロパティファイルの osm_conversion_file にファイル名を指定します。
  "osm_conversion_file": "osm_conversion.json",
  • 新規にマップを作成する場合はプロパティファイルが存在しないため、ダミーファイルを使ってプロパティファイルを作る必要があります。
    1. プロパティファイルなしでマップエディタを起動し、空のマップファイルを作成します。
    2. 空のマップファイルとダミーのジェネレーションファイル(何でもよい)、ダミーのシナリオファイル(何でもよい)、作成した osm_conversion ファイルを使ってプロパティファイルを作ります。
Clone this wiki locally