Learning ArcGIS 0.1 documentation

地図データの設計

«  サンプルプログラム「Happy flight」について   ::   コンテンツ   ::   地図データ(数値標高モデル:DEM)  »

地図データの設計

地図データの入手

今回は、ArcGIS開発元のESRI社が別途提供している、”ESRI Data and Maps”に含まれている地図データを使用しまる。EDN契約で入手可能です。”ESRI Data and Maps”には、Worldデータとして様々なデータが含まれており、今回は以下のデータを使うことにします。

使用データ一覧
ファイル名 データ内容
dtl_country.sdc 国のポリンゴンデータ
world30.sdc 30°四方のメッシュ(ポリゴン)データ(海として使用)
airport.sdc 空港のポイントデータ
cities.sdc 都市のポイントデータ
  • dtl_country.sdcは、ジェネラライズ(間引き)されている

国の表示を実現する方法

今回は、”ESRI Data and Maps”に、あらかじめ国ポリゴンデータ(dtl_country)が用意されていたのでそれを使うだけでしたが、国を表示するのは実は面倒です。

通常、海岸線、国境線というラインデータが提供されるので、国を面として色付表示させるのは面倒です。ラインデータからポリゴンデータを生成する作業が必要になるからです。自動では難しく手作業になるのではと思われます。(細部要調査)

海の表示を実現する方法

“ESRI Data and Maps”には、海および河川を表す水域ポリンゴンデータ(hydropolys)が用意されています。これはデータ量が多く、表示が重いので、代りに緯経度30°で四角に区切ったポリンゴンデータ(world30)を一番背景に置き、海に見たてることにします。

ジオデータベースの作成(背景地図)

手順

  1. 新たにジオデータベースを作成
  1. ArcCatalogを起動する
  2. [ファイル]>[フォルダに接続]を選択し、データ作成場所(例えばユーザーのホームディレクトリ下のmapdata)を指定する
  3. カタログツリーでmapdataを選択し右クリックで[新規]>[ファイルジオデータベース]を選択 右側[コンテンツ]タブに「New File Geodatabase」が生成される
  4. 「New File Geodatabase」を右クリックし、[名前の変更]を選択、「worldmap」に変更
  1. 背景(海)を作成
  1. 「worldmap.gdb」を右クリックし、[インポート]で[フィーチャークラス(シングル)]を選択し、「フィーチャークラス→フィーチャークラス」ダイアログが表示する
  2. [入力フィーチャ]欄右のフォルダアイコンをクリックし、入力フィーチャ選択ダイアログを表示し、ESRI Data & Mapsの中にあるworld30.sdc内のworld30を選択する
  3. [出力フィーチャクラス]欄に適切な名前「BackgroundSea」を記述する
  4. [OK]ボタンを押す
  1. 国を作成
  1. 2.と同様の操作で、dtl_cntryを選択する
  2. [出力フィーチャクラス]欄に適切な名前「Countries」を記述する
  1. 空港を作成
  1. 2.と同様の操作で、airportを選択する
  2. [出力フィーチャクラス]欄に適切な名前「Airports」を記述する
  1. 都市を作成
  1. 2.と同様の操作で、citiesを選択する
  2. [出力フィーチャクラス]欄に適切な名前「Cities」を記述する

作成したジオデータベースのマップドキュメント作成

地図データを表示するときは、あらかじめマップドキュメントファイルを作成しておくのが楽です。マップドキュメントファイルは、ArcMapで作成するので、まずArcMapを起動します。

手順

  1. [ファイル]>[新規作成]で、マイテンプレートの[空のマップ]を選択します
  2. [ファイル]>[データの追加]>[データの追加]を選択し、「データの追加」ダイアログを表示します
  3. [場所]欄で、先に作成したジオデータベースの場所(mapdata)を選択し、ジオデータベース名(worldmap.gdb)が表示されるので、ダブルクリックすると、先に作成したデータ(BackgroundSea、Countries、Airports、Cities)が表示されます。すべてを選択し(Ctrlキーと一緒にマウスクリック)、[追加]ボタンを押します。
  4. マップレイヤの下に今選択した4つの地図データが追加されます。なお、レイヤの上下順によって地図部分に表示されるので、例えばBackgroundSeaがレイヤの上に位置しているとCountriesが見えません。その場合は、マップレイヤの下のBackgroundSeaをドラッグ&ドロップでCountriesの下に移動させます。
  5. なんとなく世界地図っぽくなった表示となります。ここで一旦マップドキュメントファイルを保存しておきます。
  1. [ファイル]>[マップドキュメントプロパティ]を選択し、「マップドキュメントプロパティ」ダイアログで、[パス名]欄の、[データソースを相対パスで保存]にチェックを入れます
  2. [ファイル]>[名前を付けて保存]で任意の場所に任意の名前(例:happyflight.mxd)で保存します
_images/arcmap_happyflight01.png

しかしながら、海の色、陸の色はデータ追加時にランダムに(?)決められるっぽいので、海は青系に、陸は緑系の色に変更します。また、都市、空港が大量に表示されているので、これを改善します。

陸と海のポリゴン表示色の設定

  1. マップレイヤの下のBackgroundSeaを右クリックし、[プロパティ]を選択します
  2. 「レイヤプロパティ」ダイアログで[シンボル]タブを選択、シンボル欄で色が表示されている矩形をクリックします
  3. 「シンボル選択」ダイアログで例えば[地中海ブルー]を選択します
注)アウトライン幅が0の色を選択すると、緯度経度線が消えてしまいます。そのときは、手動でアウトライン幅を0.4などに変更します。
  1. 同様に、Countriesについても色を指定します。

都市の表示制限

都市のデータは数が多いので、表示する都市の数を制限します。今回はフィルタ機能で表示する都市を「首都」に限定します。

フィルタ条件を特定するため、まず、都市(cities)のデータ構造を調べます。マップレイヤの下のCitiesを右クリックし、[属性テーブルを開く]を選択します。

首都かどうかは、STATUSカラムで見分ければよいようです。首都は以下です。

  • National and provincial capital
  • National capital
  • National capital and provincial capital enclave

フィルタの設定を行います。マップレイヤの下のCitiesを右クリックし、[プロパティ]を選択し、「レイヤプロパティ」ダイアログの[フィルタ設定]タブを押します。 [検索条件設定]ボタンを押し、上の属性リスト一覧や真ん中の条件演算子、[個別値の取得]ボタンで表示される属性の値範囲を組み合わせて、下の[SELECT * FROM Cities WHERE:]欄に検索条件のSQL文を完成させます。

“STATUS” LIKE ‘National%capital%’

都市のシンボル表示設定

首都の表示は、赤色とします。マップレイヤの下のCitiesを右クリックし、[プロパティ]を選択し、「レイヤプロパティ」ダイアログの[シンボル]タブを押します。シンボル欄で[◆]のボタンを押し、「シンボル選択」ダイアログで色:の右のボタン(ドロップダウンリスト)を押し、赤色を選択します。

首都名を横に表示します。マップレイヤの下のCitiesを右クリックし、[プロパティ]を選択し、「レイヤプロパティ」ダイアログの[ラベル]タブを押します。 [このレイヤのラベルを表示]にチェックを付け、文字列欄の[ラベルフィールド]に”CITY_NAME”を選択します。

空港の表示制限

空港のデータは数が多いので、表示する空港の数を制限します。今回はフィルタ機能で表示する空港を「国際空港」に限定します。

制限方法の検討

フィルタ条件を特定するため、まず、空港(airports)のデータ構造を調べます。マップレイヤの下のAirportsを右クリックし、[属性テーブルを開く]を選択します。

国際空港かどうかは、NAMEカラムの文字列の最後にIntlが付くか否かで見分ければよいようですが、調べてみると、欧州の主要国際空港(ロンドンのヒースローやパリのシャルルドゴールなど)にIntlは付いてないなど、識別には使えません。

ICAO4桁コードの3桁目と4桁目が同じアルファベットだと主要空港(例:RJAA:成田)であるが、イタリアのヴェネツィア(LIPZ)、ローマ(LIRF)など例外も多く、これも識別には使えません。

そこで、Airportsデータの属性に新たに”INTERNATIONAL”を追加し、ここに国際空港なら1を立てる、という力技でフィルターをすることにします。

といっても手作業では大変なので、 Wikipediaの国際空港一覧 のICAO4桁コードから一覧を抜き出し、それに一致するICAOコードを持つレコードについて”INTERNATIONAL”フィールドに1を立てる、というプログラムを書いて設定する作戦を考えます。

INTERNATIONALフィールドの設定

ArcCatalogでworldmap.gdbを開き、Airportsを右クリックし[プロパティ]を開き、「フィーチャークラスプロパティ」ダイアログの[フィールド]タブを選択し、フィールド名に”INTERNATIONAL”、データタイプには”Short Integer”を設定します。

次に、WikipediaのWebページからICAO4桁コードだけを抜き出したテキストファイルを作成します。細部は省略しますが、grep、sedコマンドの組合せで十分抜き出し可能です。

あとは、Javaで簡単なツールを作成します。マップドキュメントを読み込み、Airportsのフィーチャークラスを取得し、アップデートカーサーで国際空港ICAOコードに合致したらフィールドINTERNATIONALに1を設定する、というプログラムです。

設定が終われば、ArcMap上でフィルタ設定を付けます。

シンボルとラベル

空港のシンボルは、首都と区別を付けるため、アイコン的なものにします。 ArcMapでAirportのシンボルに、”空港1”などの飛行機形状のものを選択します。 また、ラベルで名称を表示するようにします。

ここまでの設定で表示される地図

_images/arcmap_happyflight02.png

投影法の設定(オンザフライ)

上の手順でデータを追加した状態では、投影法の設定がされていないため、画面に表示される地図は、緯度経度をそのまま平面座標に表した表示になっています。そのため、地図の中心は経度0°となっています。

  1. マップレイヤを右クリックし、[プロパティ]を選択する
  2. 「データフレームプロパティ」ダイアログで[座標系]タブを選択

すると、[現在の座標系]欄に、以下のように表示されています。

GCS_WGS_1984
測地基準:D_WGS_1984

地理座標系のみ表示されており、投影法が設定されていないのが分かります。 ここでは、ArcMapに事前に用意されている投影法から、航空図としてよく用いられるランベルト正角円錐図法を選択して適用します。

  1. 「データフレームプロパティ」ダイアログ上の[座標系選択]欄で、[定義済み]>[全世界の投影座標系]>[世界範囲の座標系(WGS 1984)]>[日本中心表示]>[ランベルト正角円錐図法(日本中心)]を選択する

すると、[現在の座標系]欄に、以下のように表示されます。

Lambert_Conformal_Conic(Japan_Center)
投影法: Lambert_Conformal_Conic
False_Easting: 0.000000
False_Northing: 0.000000
Central_Meridian: 150.000000
Standard_Parallel_1: 60.000000
Standard_Parallel_2: 60.000000
Scale_Factor: 1.000000
Latitude_Of_Origin: 35.000000
距離単位: Meter

GCS_WGS_1984
測地基準: D_WGS_1984

«  サンプルプログラム「Happy flight」について   ::   コンテンツ   ::   地図データ(数値標高モデル:DEM)  »