開発者ガイド - Product Documentation

MapXtreme
v7.2
開発者ガイド
このマニュアルに記載されている事項は、予告なしに変更されることがあります。また、販売店もしくは代理店は、このマニュアルに記載されている事項
に関して一切の責任を負いかねますのでご了承ください。このマニュアルのいかなる部分も、電子的、機械的、写真複製その他のいかなる形態または方法
によっても、Pitney Bowes Software Inc., One Global View, Troy, New York 12180-8399 の書面による許諾なしに複製することは禁じられています。
© 2014 Pitney Bowes Software, Inc. All rights reserved.Pitney Bowes Software Inc. は Pitney Bowes Inc. の 完 全 子 会 社 で す。Pitney Bowes、企 業 ロ ゴ、
MapInfo、Group 1 Software、および MapXtreme は、Pitney Bowes Inc. または子会社の商標です。その他の製品および会社名は、各社の商号、登録商標ま
たは商標です。
米国 :
電話 : 518.285.6000
FAX : 518.285.6070
販売 : 800.327.8627
政府販売 : 800.619.2333
テクニカル サポート : 518.285.7283
テクニカル サポート FAX : 518.285.6080
www.pb.com/software
カナダ :
電話 : 416.594.5200
FAX : 416.594.5201
販売 : 800.268.3282
テクニカル サポート : 518.285.7283
テクニカル サポート FAX : 518.285.6080
pbinsight.ca
欧州/英国 :
電話 : 44.1753.848.200
FAX : 44.1753.621.140
テクニカル サポート : 44.1753.848.229
www.pb.co.uk/software
アジア太平洋/オーストラリア :
電話 : 61.2.9437.6255
FAX : 61.2.9439.1773
テクニカル サポート : 1.800 648.899
www.pb.com.au/software
Pitney Bowes Software Inc. 製品のお問い合わせ先については、www.pb.com/contact-us/ をご覧ください。
この製品に含まれる SpatiaLite v 3.1.0 は、GNU Lesser General Public License Version 2.1 (1999 年 2 月) の下でライセンス供与されます。ライセンスは
http://www.gnu.org/licenses/lgpl-2.1.html からダウンロードできます。このソフトウェアのソース コードは、http://www.gaia-gis.it/gaia-sins/win-binx86-test/spatialite-3.1.0b-test-win-x86.zip および http://www.gaia-gis.it/gaia-sins/win-bin-amd64-test/spatialite-3.1.0b-test-win-amd64.zip から入手で
きます。
この製品に含まれる Feature Data Objects v 3.6.0 は、GNU Lesser General Public License Version 2.1 (1999 年 2 月) の下でライセンス供与されます。ライ
セ ン ス は http://fdo.osgeo.org/lgpl.html か ら ダ ウ ン ロ ー ド で き ま す。こ の ソ フ ト ウ ェ ア の ソ ー ス コ ー ド は、http://fdo.osgeo.org/content/fdo-360downloads から入手できます。
こ の 製 品 に 含 ま れ る HelpLibraryManagerLauncher.exe v 1.0.0.1 は、Microsoft Public License の 下 で ラ イ セ ン ス 供 与 さ れ ま す。ラ イ セ ン ス は http://
shfb.codeplex.com/license からダウンロードできます。このソフトウェアのソース コードは、http://shfb.codeplex.com から入手できます。
2014 年 2 月
目次
第 1 章: MapXtreme の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
MapXtreme の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
主な機能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
MapXtreme への移行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
MapXtreme の使い方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
サポート リソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
第 2 章: はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
インストール要件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
最小システム要件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
インストールの種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
開発 (SDK) インストール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
展開 (ランタイム環境) インストール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
複数のバージョンのインストールと使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
MapXtreme のライセンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
ライセンスの種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
ライセンスの取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
ライセンス ファイルの場所 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
トラブルシューティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
ライセンスに関する既知の問題. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
インストールの前に . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
管理者権限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
.NET Framework と Visual Studio を最初にインストールしておく . . . . . . . . . . . . . . .40
IIS 7/8 および IIS 6 のサポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
MapXtreme のデフォルト インストール ディレクトリ. . . . . . . . . . . . . . . . . . . . . . . . .41
その他のインストール機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
現在の環境への MapXtreme のインストール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
MapXtreme へのアップグレード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
64 ビットの Web アプリケーションへの Web サイトの移行 . . . . . . . . . . . . . . . . . . . . . .47
既存の Web サイトのアップデート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
既存のデスクトップ アプリケーションのアップデート . . . . . . . . . . . . . . . . . . . . . . . .48
Visual Studio でのアプリケーションの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
MapXtreme v7.2
3
開発者ガイド
目次
マップ アプリケーション. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
ASP.NET Web アプリケーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
MapXtreme コントロール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
テンプレートがない場合の ASP.NET Web アプリケーションの構築 . . . . . . . . . . . . . . . .54
アプリケーションの配布. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
ランタイム インストーラを使った配布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
カスタム インストーラを使った配布. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Web アプリケーションの展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
データにアクセスするアプリケーションの配布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
プロキシ サーバの背後に展開される MapXtreme Web アプリケーション. . . . . . . . . .62
配布する Web アプリケーションの一時ディレクトリへのアクセス権限 . . . . . . . . . . .62
アプリケーション データ ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
展開インストールのトラブルシューティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
第 3 章: マッピングの概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
マッピングと MapXtreme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
マップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
テーブル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
レイヤ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
フィーチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
ラベルと凡例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
主題図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
ワークスペース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
座標系と投影法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
MapXtreme でのジオコード化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
MapXtreme でのルーティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
第 4 章: MapXtreme のアーキテクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
MapXtreme アーキテクチャ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
オブジェクト モデルの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
MapInfo.Data 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
MapInfo.Data.Find 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MapInfo.Engine 名前空間. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MapInfo.Geometry 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MapInfo.Mapping 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MapInfo.Mapping.Legends 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MapInfo.Mapping.Thematics 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MapInfo.Persistence 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
MapInfo.Raster 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
MapInfo.Styles 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
MapInfo.WebControls 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
MapXtreme v7.2
4
開発者ガイド
目次
MapInfo.Windows 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
MapInfo.Tools 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
MapInfo.Geocoding 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
MapInfo.Routing 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
アプリケーションのアーキテクチャ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Web アプリケーションのアーキテクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
デスクトップ アプリケーションのアーキテクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
第 5 章: Web アプリケーション、コントロール、およびツール. . . . . . . . . . . . . . . 80
Web アプリケーションのリクエスト/レスポンスのライフサイクル . . . . . . . . . . . . . . . . .81
MapXtreme Web アプリケーションのコンポーネント . . . . . . . . . . . . . . . . . . . . . . . . . . .81
MapXtreme セッション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
バックグラウンド マップ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MapControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
マップ ツール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
状態管理とプール機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
MapXtreme Web コントロールとツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Web コントロールとツールについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Web コントロールのアーキテクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
マップ ツールのアーキテクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
マップ ツールの動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
MapXtreme Web コントロールの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
Web コントロールの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
イベント処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
エラーの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
状態管理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
カスタム ツールの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
カスタム Web コントロールの使用と配布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96
Web アセンブリの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
Web アプリケーションへの InfoTool の追加. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
ASP.NET AJAX と MapXtreme Web アプリケーション. . . . . . . . . . . . . . . . . . . . . . . . . .99
ASP.NET AJAX コントロールを MapXtreme Web アプリケーションに追加する方法.99
MapXtreme タイル ハンドラ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
MapXtreme タイル ハンドラの使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
キャッシュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
HTML/XHTML 検証の問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
ポスト バック Web コントロールから JavaScript Web コントロールへの移行. . . . . . .106
データの読み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
コントロールの置き換え . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
状態およびイベントの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
Web コントロールの特殊な使用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
フレーム内での Web コントロールの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
MapXtreme v7.2
5
開発者ガイド
目次
テーブル セル内での MapControl の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
Web コントロールのローカライズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
第 6 章: 状態管理について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
用語集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
状態管理とは. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
状態管理の選択肢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
アプリケーションを作成する前の検討事項. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
InProc開発モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
InProc 開発モデルの長所と短所 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
InProc 管理: 解説 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
InProc 開発モデルを使用するアプリケーションの設定 . . . . . . . . . . . . . . . . . . . . . . .118
InProc 開発モデルを使用する MapXtreme テンプレートの使用. . . . . . . . . . . . . . . . .118
プール オブジェクトの状態管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119
プールとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119
プールの長所と短所. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
Pooled アプリケーションの状態の保存. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
手動状態管理: 解説 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
Pooled アプリケーションにおける手動状態管理の使用 . . . . . . . . . . . . . . . . . . . . . . .123
手動状態管理の詳細 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
主題図サンプルの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
アプリケーションの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
StateManager のインプリメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
適切な順序での MapXtreme オブジェクトのシリアル化 . . . . . . . . . . . . . . . . . . . . . .128
MapXtreme オブジェクトの自動デシリアライズ . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
初期リクエストの処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
以降のリクエストの処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
MapXtreme Session の詳細 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Microsoft COM+ オブジェクト プールの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
第 7 章: デスクトップ アプリケーション、コントロール、
ダイアログ、ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
デスクトップ アプリケーションの計画 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135
デスクトップ アプリケーションのベスト プラクティス. . . . . . . . . . . . . . . . . . . . . . .135
MapXtreme と COM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
サンプル アプリケーションおよびプロジェクト テンプレート . . . . . . . . . . . . . . . . .136
MapInfo.Windows.Controls 名前空間. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
デスクトップ アプリケーションで使用可能な主要コントロール. . . . . . . . . . . . . . . . . . .139
MapControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
MapToolStripButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
MapToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
MapXtreme v7.2
6
開発者ガイド
目次
レイヤの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144
MapInfo.Windows.Dialogs 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145
CreateThemeWizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
コントロールとダイアログ ボックスのカスタマイズ. . . . . . . . . . . . . . . . . . . . . . . . . . . .151
MapInfo.Tools 名前空間の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151
MapXtreme デスクトップ ツール API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153
表示 (View) ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
選択 (Select) ツール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
追加 (Add) ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155
カスタム (Custom) ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
図形作成 (Shape) ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
情報チップの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
ツールのカスタマイズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
ツール イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
選択 (Select) ツールを使用した FeatureGeometry の編集. . . . . . . . . . . . . . . . . . . . . . .160
フィーチャの形状変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
ノードの追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
プログラムによる形状変更とノードの追加. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
第 8 章: データでの作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
MapInfo.Data 名前空間の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
Catalog とテーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
テーブル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
Catalog (カタログ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172
サポートされているテーブルの種類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
カタログとテーブルの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
開いているテーブルの検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
テーブルを閉じる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .177
テーブルを圧縮する. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178
テーブル イベントとカタログ イベントのリッスン . . . . . . . . . . . . . . . . . . . . . . . . . .179
テーブル メタデータ (TableInfo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
TAB ファイル メタデータの検証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
新しいテーブルの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
テーブルへの式フィールドの追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
データ ソース. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
正しいデータ ソースの選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
データへのアクセス方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
データ リーダー、MemTables、結果セット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
ADO.NET データ プロバイダの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
データ バインド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
テーブルをマップ作成可能にする . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
MapXtreme v7.2
7
開発者ガイド
目次
MapInfo ADO.NET データ プロバイダ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
MIConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
MICommand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
MIDataReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
MapInfo SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Feature と Feature コレクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Feature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
Feature コレクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
Feature の検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
Catalog 検索メソッド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
SearchInfo と SearchInfoFactory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
データの分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
データ アクセス パフォーマンスの強化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
第 9 章: 中核 MapXtreme クラスでの作業. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
セッション インターフェイス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
セッションの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
Session.Dispose メソッドの使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
ISessionEventHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
シリアライゼーションと永続化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
シリアライゼーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
永続化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
名前付きリソースが含まれるワークスペースを開いて保存する . . . . . . . . . . . . . . . . . . .219
MWS を開く: ResolveResource() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
MWS を保存する: GetResourceName() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
MapXtreme へのインプリメントの登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
設定の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
Selection (選択) クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
Selection プロパティの使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
Selection の強調表示とエクスポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
SelectionChangedEvent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
Selection クラスと Selections クラスの ISerializable インターフェイス . . . . . . . . . .222
Selection のコード例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
別のフィーチャ内のフィーチャの選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
テーブル内の選択範囲を調べる. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223
テーブルのすべてのフィールドの取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223
Selection に合わせたマップ ビューの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
イベントの引数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
MapXtreme v7.2
8
開発者ガイド
目次
第 10 章: 式の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
式の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
式の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
where 句 – ブール式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
式内の関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
DateTime 型および Time 型の式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228
式の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228
第 11 章: DBMS のデータへのアクセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
リモートの空間データへのアクセス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233
.TAB ファイルを使用するリモート テーブル アクセス . . . . . . . . . . . . . . . . . . . . . . . . . .233
.TAB ファイルを使用しないリモート テーブル アクセス . . . . . . . . . . . . . . . . . . . . . . . .233
DBMS データと X/Y フィールドとのマッピング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
Oracle データへのアクセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
ジオメトリ変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
Oracle での Z 値と M 値のサポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236
SDO_GEOMETRY Arc および Circle の変換. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236
変換できない Oracle オブジェクトの表示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236
中心点のサポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
Oracle 空間参照系 (SRID) のサポート. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
OCI 接続ダイアログ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
MS SQL Server データへのアクセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
SQL Server 2008 のサポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
DBMS 接続文字列の形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
ODBC 接続文字列の形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
Web アプリケーションの ODBC レイヤおよびプール . . . . . . . . . . . . . . . . . . . . . . . .242
Oracle Spatial の接続文字列の形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
接続文字列の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
サーバ テーブル クエリでのマップ作成可能テーブルの定義. . . . . . . . . . . . . . . . . . . . . .243
ジオメトリ フィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243
キー フィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244
属性データへのアクセス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245
パフォーマンスに関する問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246
キャッシュの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246
キャッシュとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246
キャッシュの動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246
TableInfoServer オブジェクトおよび CacheSettings プロパティ. . . . . . . . . . . . . . . .247
MapInfo_MapCatalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248
DBMS への空間データのロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
手動による MapInfo MapCatalog の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
MapXtreme v7.2
9
開発者ガイド
目次
MapInfo_MapCatalog への行の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
レコードごとのスタイル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
Symbol 句、Pen 句および Brush 句の構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
Text オブジェクトの制限. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
トラブルシューティング. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
第 12 章: アプリケーションへのマッピング機能の追加 . . . . . . . . . . . . . . . . . . . . 259
MapInfo.Mapping 名前空間とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
マッピングのベース クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
MapExport (マップのエクスポート) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
MapFactory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
MapLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
MapViewList、MapView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
MapControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Layers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
FeatureLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
MapLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
UserDrawLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
ObjectThemeLayer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
GroupLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
LabelLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
GraticuleLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
レイヤ フィルタ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
IVisibilityConstraint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
コード例: Animation レイヤ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267
LabelLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267
LabelSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
LabelModifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
ILabelSourceFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
LabelProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
ラベルの生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
ラベルの優先度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269
ラベル レイヤの選択可能性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
コード例: LabelLayer の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
湾曲ラベル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
Adornments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
Legends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
ScaleBar 修飾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272
Title 修飾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273
MapXtreme v7.2
10
開発者ガイド
目次
フィーチャ スタイル修飾子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273
FeatureStyleModifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
FeatureStyleModifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
FeatureOverrideStyleModifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
マップの印刷. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275
第 13 章: 場所の検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Find の機能の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277
Find の処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277
番地の照合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
調整領域テーブルの照合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
Find の結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
Data.Find 名前空間の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280
Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280
FindAddressRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282
FindCloseMatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283
FindResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
Find 処理の調整 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286
MapInfow.abb ファイルの編集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286
第 14 章: 主題図と凡例の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
主題図の概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294
Mapping.Thematics 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294
修飾子主題図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294
オブジェクト主題図. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295
GraduatedSymbolTheme (サイズ可変シンボル主題図) . . . . . . . . . . . . . . . . . . . . . . . . .295
サイズ可変シンボル主題図の用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296
PieTheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
円グラフ主題図の用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
円グラフ主題図/棒グラフ主題図を含むマップの印刷 . . . . . . . . . . . . . . . . . . . . . . . . .298
BarTheme (棒グラフ主題図) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
棒グラフ主題図の用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
円グラフ主題図および棒グラフ主題図の表示サイズの制御 . . . . . . . . . . . . . . . . . . . .299
RangedTheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299
レンジ主題図の用途. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299
レンジ値の種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300
RangedLabelTheme (レンジラベル主題図) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301
RangedLabelTheme クラスの用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301
レンジ主題図とシリアライゼーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302
IndividualValueTheme (個別値主題図) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302
IndividualValueTheme クラスの用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302
カスタム ビットマップ シンボルを使用する IndividualValueTheme の作成 . . . . . . . . .303
MapXtreme v7.2
11
開発者ガイド
目次
IndividualValueLabelTheme (個別値ラベル主題図) . . . . . . . . . . . . . . . . . . . . . . . . . . . .304
IndividualValueLabelTheme クラスの用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .304
個別値主題図とシリアライゼーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .304
DotDensityTheme (ドット密度主題図) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305
DotDensityTheme クラスの用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305
二変数主題図マップ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .306
凡例の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307
主題図凡例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307
シンボル凡例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307
凡例の書式設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .308
第 15 章: マップのスタイル設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
MapInfo.Styles 名前空間の概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311
StyleFactory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
スタイルの説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
AreaStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
BitmapPointStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
CompositeStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
SimpleInterior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
Font . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
FontPointStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
GridStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
RasterStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
Hillshade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
Inflection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
SimpleLineStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
BasePointStyle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
BaseLineStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
BaseInterior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
StockStyles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
TextStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
SimpleVectorPointStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316
定義済みのスタイルと StyleRepository クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316
StyleRepository クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316
スタイルの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317
スタイルとレイヤ管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317
カスタム ビットマップ スタイルの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317
スタイルのオーバーライド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .318
FeatureOverrideStyleModifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .318
MapXtreme v7.2
12
開発者ガイド
目次
第 16 章: 空間オブジェクトと座標系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
MapInfo.Geometry 名前空間とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321
ジオメトリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321
Geometry オブジェクト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .322
FeatureGeometry オブジェクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323
Geometry オブジェクト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .327
マップへの FeatureGeometry の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328
ポリゴン内のポイントの確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330
座標系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
CoordSys オブジェクトの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
Geometry オブジェクトの座標系の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332
MapControl 内のマップの座標系を調べる方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333
MapXtreme への座標系の追加. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333
第 17 章: ラスタとグリッドの操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
MapInfo.Raster 名前空間の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .338
ラスタ イメージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .338
ラスタ クラス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339
ラスタ イメージと座標系. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340
ラスタ再投影 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340
ラスタ イメージの制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .341
コード サンプル: マップへのラスタ イメージの追加 . . . . . . . . . . . . . . . . . . . . . . . . .341
ラスタ ハンドラ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .341
ラスタ ハンドラのプロパティ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343
カスタム ラスタ ハンドラの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343
グリッド イメージ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345
グリッド クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346
コード サンプル: マップへのグリッド イメージの追加 . . . . . . . . . . . . . . . . . . . . . . .346
コード サンプル: グリッド マップからのデータの取得 . . . . . . . . . . . . . . . . . . . . . . .346
グリッド作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347
グリッド補間クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
逆距離加重 (IDW) 補間クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
不定形三角網 (TIN) 補間クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349
IInterpolator インターフェイス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349
グリッド スタイル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349
グリッド イメージと色調変化点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .350
色調変化点の計算方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .350
グリッド レイヤの色調変化値および色の計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .351
レリーフ色分け . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .351
[グリッド スタイル] ダイアログ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352
GridInfoForm サンプル アプリケーション. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .355
MapXtreme v7.2
13
開発者ガイド
目次
第 18 章: ジオコード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
MapInfo.Geocoding 名前空間の概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357
ジオコード化に関連した主要なクラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357
GeocodeRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358
GeocodeResponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358
GeocodeClientFactory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
GeocodingConstraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
AddressCandidates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
BaseGeocodeMatchCode と GeocodeMatchCode . . . . . . . . . . . . . . . . . . . . . . . . . . .359
CandidateAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
ジオコード モデルについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
ジオコード化のトレードオフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360
住所について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360
カスタム ユーザ ディクショナリとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .361
Geocoding World とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .361
場所のジオコード化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362
番地のジオコード化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362
交差点のジオコード化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364
郵便番号のジオコード化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364
ガゼッティア型のジオコード化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364
バッチ ジオコード処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364
制約を使った正確なジオコード化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365
一致制約とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365
一致制約を緩和した場合の影響. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367
近い一致の正確さについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368
近い一致が 1 件存在 (S カテゴリ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369
複数の候補からの最適一致 (M カテゴリ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369
郵便番号中心点の一致 (Z カテゴリ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370
地理的中心点での一致 (G カテゴリ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370
一致が存在しない . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371
第 19 章: Web Map Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
MapXtreme の Web Map Service の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373
WMS の処理について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373
WMS クライアントとしての MapXtreme の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . .374
コード例: WMS レイヤのリクエスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376
WMS と座標系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376
マップとイメージの境界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .377
MapXtreme WMS と認証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378
基本認証. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378
MapXtreme WMS サーバの設定. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378
MapXtreme v7.2
14
開発者ガイド
目次
手順 1: Web.config ファイルの作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .379
手順 2: ホストするデータ用の有効な WMS 構成ファイルの作成 . . . . . . . . . . . . . . . .380
手順 3a: IIS7 を使用した WMS サーバの構成とテスト. . . . . . . . . . . . . . . . . . . . . . . .383
手順 3b: IIS6 を使用した WMS サーバの構成とテスト. . . . . . . . . . . . . . . . . . . . . . . .384
WMS サーバのレイヤ情報の構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .387
第 20 章: ルーティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
MapInfo.Routing 名前空間の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392
主なルーティング クラス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392
ルートの計算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393
ポイントツーポイント ルーティング. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393
マルチポイント ルーティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394
マトリックス ルーティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395
高度なルート オプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .396
ルート設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .396
運転用指示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397
ルート ジオメトリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .398
回避するポイント、フィーチャ、セグメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399
時間ベース ルーティング. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399
等値ルーティング (運転時間と運転距離) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400
等時線の作成 (運転時間) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .401
等距離線の作成 (運転距離) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .404
ルーティング データを使用したリクエストの更新 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .405
セグメント情報の取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .406
一時更新. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .406
第 21 章: 線形参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
線形リファレンスとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .412
線形リファレンスでの M 値の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .412
指標値決定メソッド. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414
線形リファレンス操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414
動的セグメンテーション操作 (PerpendicularOffset) . . . . . . . . . . . . . . . . . . . . . . . . . .415
曲線の順序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .415
線形リファレンスのサンプル アプリケーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .416
第 22 章: Web Feature Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Web Feature Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418
WFS サーバの処理について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418
WFS サーバの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .423
手順 1: Web.config ファイルの作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .423
手順 2: ホストするフィーチャ用の有効な WFS 構成ファイルの作成. . . . . . . . . . . . .425
手順 3: WFS サーバの構成およびテスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426
MapXtreme WFS クライアントのプログラムによる使用 . . . . . . . . . . . . . . . . . . . . . . . .429
MapXtreme v7.2
15
開発者ガイド
目次
WFS クエリでのフィルタの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430
WFS レスポンスからのマップ レイヤの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433
第 23 章: ワークスペース マネージャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
ワークスペース マネージャの機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .437
ワークスペースの形式と内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .438
ワークスペース マネージャのメニュー コマンド. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .438
[ファイル] メニューのコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .438
[ビュー] メニューのコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .441
[マップ] メニューのコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .442
[ツール] メニューのコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .445
[機能拡張] メニュー コマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .448
レイヤの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .449
レイヤ管理ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .449
レイヤ ツリー. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .449
レイヤ管理ウィンドウのタブ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451
マップの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451
レイヤの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456
主題図レイヤの設定. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .457
ラベル レイヤの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .458
グループ レイヤの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .461
スタイル オーバーライドの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .461
経緯度線レイヤの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .461
ワークスペース マネージャの機能の使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .463
GDI+ による透過性とアンチエイリアスを用いたレンダリングの拡張 . . . . . . . . . . . .463
半透明効果の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .465
湾曲ラベル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .468
経緯度線レイヤ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472
第 24 章: GeoDictionary マネージャの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
GeoDictionary マネージャの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475
GeoDictionary マネージャの変更点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475
GeoDictionary マネージャのユーザ インターフェイス. . . . . . . . . . . . . . . . . . . . . . . . . .475
GeoDictionary マネージャの実行. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475
GeoDictionary ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .479
サンプルの .dct file. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .479
付録 A: MapXtreme アプリケーションを作成および展開する方法 . . . . . . . . . . . 481
MapXtreme サンプルのカスタマイズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .482
デスクトップ アプリケーションの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .482
サンプル アプリケーションの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .482
アプリケーションの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .483
リリース モードでのビルド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .489
MapXtreme v7.2
16
開発者ガイド
目次
デスクトップ アプリケーションのパッケージ化. . . . . . . . . . . . . . . . . . . . . . . . . . . . .489
デスクトップ アプリケーションの展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .492
Web アプリケーションの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .492
サンプル Web アプリケーションの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .492
アプリケーションの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .494
状態管理について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496
リリース モード向けの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .497
Web アプリケーションのパッケージ化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .497
Web アプリケーションの展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501
付録 B: カスタマイズMapXtreme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
カスタマイズ可能なクラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .503
MapInfo.Data.Provider 名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .503
ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .503
Engine.CustomProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .503
検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .504
FeatureStyleModifier または FeatureOverrideStyleModifier . . . . . . . . . . . . . . . . . . . .505
UserDrawLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .506
Windows.Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .506
ツール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508
スタイル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508
GmlFeatureCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .510
WorkSpacePersistence および WorkSpaceLoader . . . . . . . . . . . . . . . . . . . . . . . . . . .510
ワークスペース マネージャ機能拡張 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511
ワークスペース機能拡張の作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511
機能拡張の読み込み. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .513
機能拡張のアンロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .514
機能拡張の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .514
アプリケーション データ ファイルの場所 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .515
略語ファイルの検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .517
付録 C: MapInfo ワークスペースについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
MapInfo ワークスペースとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .519
ワークスペースの構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .519
ヘッダー セクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .520
接続セクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .520
データソース定義セクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .521
マップ定義セクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .521
.GST からのプログラムによる .MWS ワークスペースの作成 . . . . . . . . . . . . . . . . . . . . .524
付録 D: 拡張可能データ プロバイダ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526
拡張可能データ プロバイダの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526
MapXtreme v7.2
17
開発者ガイド
目次
作業の開始 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .529
必須コンポーネント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .530
オプションの基本構築ブロック: ベース クラス、ヘルパ、ユーティリティ . . . . . . . . . .532
サンプル: COTW (Center of the World) データ プロバイダ . . . . . . . . . . . . . . . . . . . . . .534
オプションのインターフェイス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .536
IDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .536
IDataSourceDefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .536
ITableModifyProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .536
データ プロバイダの作成とテスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .537
SpatiaLite サンプル データ プロバイダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .539
高度なトピックと重要な検討事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540
ジオメトリの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .541
座標系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .542
スタイル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .542
例外処理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .543
永続化プロバイダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .544
シリアライゼーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .546
認証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .550
スレッド セーフ機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .553
付録 E: MapXtreme アプリケーションからの印刷 . . . . . . . . . . . . . . . . . . . . . . . . 555
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .556
MapXtreme の印刷オプションについて. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .556
印刷サイズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .557
透過ラスタの特殊処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .557
透過ベクトルの特殊処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .557
可能な場合ラスタ データを True Color で表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .558
GDI+ による透過性とアンチエリアシング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .558
ディザリング方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .559
ポリゴンの穴の特殊処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .559
パターンのスケール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .560
デバイスへの直接出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .560
拡張メタファイル (EMF) を使用する出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .560
アプリケーションへの印刷のインプリメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .560
印刷に関する一般的なヒント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .562
マップ内に凡例を印刷する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .563
これまでに知られている印刷に関する問題の対処方法 . . . . . . . . . . . . . . . . . . . . . . . . . .566
プラットフォームに依存しない問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .567
プラットフォーム固有の問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .567
MapXtreme v7.2
18
開発者ガイド
目次
付録 F: スタイルのルックアップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
フィル パターン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .572
インデックス番号の指定方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .572
ライン スタイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .586
ベクトル シンボル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .587
MapInfo Arrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .587
MapInfo Cartographic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .587
MapInfo Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .588
MapInfo Oil & Gas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .588
MapInfo Shields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .588
MapInfo Real Estate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .589
Map Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .589
MapInfo Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .589
MapInfo Transportation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .590
MapInfo Weather . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .590
カスタム シンボル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .591
MapXtreme アイコン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .593
付録 G: MapInfo コードスペースの定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
MapInfo コードスペースの定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .597
付録 H: 座標系の要素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
投影法とそのパラメータ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .603
投影法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .604
投影法の測地系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .607
単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .616
座標系の原点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .617
測地系の変換. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .619
カスタム測地系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .619
カスタム測地系の定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .620
National Transformation v.2 (NTv2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .624
座標系と投影法に関する情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .627
付録 I: ユーザ定義のメタデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
メタデータと MapCatalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .630
ユーザ定義のメタデータにおける TableInfoServer クエリのサポート . . . . . . . . . . . . .630
ColumnHints プロパティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .630
付録 J: MapXtreme への移行. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
MapXtreme のオブジェクト モデルと MapX の比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . .635
各オブジェクト モデルに固有の相違点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .635
MapXtreme v7.2
19
開発者ガイド
目次
付録 K: ローカライゼーション キット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
ローカライゼーション キット. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .647
システム要件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .650
ローカライゼーション キットの使用方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .650
サテライト アセンブリのビルド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .650
コマンド ラインからのビルド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .651
サテライト アセンブリへの秘密鍵の署名. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .653
付録 L: 用語集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
用語 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .655
索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
MapXtreme v7.2
20
開発者ガイド
MapXtreme の概要
Pitney Bowes Software 社が提供する .NET プログラミングの世界にようこ
そ。Microsoft の .NET Framework をサポートするために、MapXtreme は、デ
スクトップ、従来型のクライアント/サーバ、Web などの環境を対象に、マッ
ピング アプリケーションの開発および拡張を実行する単一オブジェクト モデ
ルを提供します。
MapXtreme は、データの視覚化とマッピングによる的確な意思決定、資産管
理および効率的な運営などを必要とする企業向けのアプリケーション開発ツー
ルです。MapXtreme は、位置情報の分析や定義などの機能を、デスクトッ
プ、クライアント/サーバ、Web ベースの製品に統合する必要がある企業向け
に開発されています。MapXtreme は、最適な販売拠点の選定、製品の搬送の
効率化、資産を管理および保護する方法など、ビジネス上の重要な意思決定に
活用できる強力な分析ツールキットです。また、開発作業で MapXtreme を活
用すれば、開発期間を短縮し、パフォーマンス、信頼性、セキュリティを向上
できます。
この章の構成
Š
Š
Š
MapXtreme の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
MapXtreme への移行. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
MapXtreme の使い方. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
1
第 1 章 : MapXtreme の概要
MapXtreme の概要
MapXtreme の概要
MapXtreme は Pitney Bowes Software の主要な Windows 用の開発ツールキットで、.NET の使用
経験がある開発者は、位置情報を活用する高機能なデスクトップ アプリケーションおよびクライ
アント/サーバ アプリケーションを作成できます。
この SDK を使用すると、お気に入りの .NET プログラム言語でアプリケーションを開発できま
す。また、デスクトップ コードと Web 配布コードの共有や再利用を行ったり、標準プロトコルを
使用してさまざまなソースのデータにアクセスしたりできます。
MapXtreme のオブジェクト モデル (Microsoft .NET Framework で開発した 100 パーセント管理され
たコードの API) を使用すると、これがすべて可能です。Framework の CLR (Common Language
Runtime) は、簡単に開発を行うことができる土台を提供します。
MapXtreme を構成するコンポーネントや機能を、次に示します。
•
製品フレームワーク : MapXtreme オブジェクト モデルは、Microsoft .NET Framework 4.0 を使用し
て構築されています。詳細については、「オブジェクト モデルの概要」を参照してください。
•
開発環境ツール : さまざまなテンプレート、コントロール、サンプル コード、およびツールを
使用し、Visual Studio で Windows Forms アプリケーションおよび ASP.NET アプリケーション
を開発できます。これらのコンポーネントを拡張することにより、オブジェクト モデルを通じ
てさらに高度な機能を使用できるようになります。データ管理ユーティリティとしては、アプ
リケーションで使用するテーブル管理を行うユーティリティ (Geodictionary マネージャ) と
ワークスペースの操作性や移植性を高めるユーティリティ (ワークスペース マネージャ) の 2
種類が提供されています。「第 5 章 : Web アプリケーション、コントロール、 およびツー
ル」および「第 7 章 : デスクトップ アプリケーション、コントロール、 ダイアログ、ツー
ル」を参照してください。
完全なマッピングおよび分析機能 : マップの作成と表示、データ アクセス、主題図マップ、ラ
スタおよびグリッド操作、オブジェクトの処理および表示など。
スケーラブルなインフラストラクチャ : セッション オブジェクト プール機能やキャッシュ機能
は、Web アプリケーションに高いパフォーマンスを提供します。MapXtreme の XML ベースの
ワークスペース形式で情報を保存し、セッションやユーザ情報を保持します。「第 9 章 : 中核
MapXtreme クラスでの作業」を参照してください。
•
•
•
•
実行時コンポーネントの配布: MapXtreme では、Windows Installer テクノロジ (マージ モ
ジュール) によって、導入されたアプリケーションで使用されている実行時コンポーネントの
インストールや再配布を実行します。「アプリケーションの配布」を参照してください。
詳細なマニュアル : 製品マニュアルは、Visual Studio 開発環境の統合コンポーネントとして取
得します。MapXtreme ラーニング リソース ページから、今回のリリースの新機能や変更され
た機能をはじめとする、すべての製品リソースを参照することができます。リソース ページに
は、Windows の [スタート] メニューからアクセスできます。
主な機能
MapXtreme には、Windows Forms や ASP.NET Web アプリケーションを効率的に開発するための
機能やツールが搭載されています。アプリケーションの基礎となるマップを作成する場合や、基
本的なマッピング機能を追加して既存アプリケーションをサポートする場合には、いずれも同じ
フレームワークやツールを使用できます。以下に、MapXtreme の機能の概要を示します。
MapXtreme v7.2
22
開発者ガイド
第 1 章 : MapXtreme の概要
MapXtreme の概要
Pitney Bowes Software 社のマッピング製品を初めてお使いになる方は、基本的な内容について、
「第 3 章 : マッピングの概念」を参照してください。
MapXtreme にアップグレードする開発者の方は、新機能と変更された機能をリリース ノートでご
覧いただけます。MapX の機能と MapXtreme .NET の機能の対応付けについては、「MapXtreme
への移行」も参照してください。
機能 *
目的
テーブル、レイヤ、フィー MapXtreme のマップは、ポイント、境界、番地などの地理的な特
チャ
徴で構成されます。このようなフィーチャ情報は、テーブルに格
納され、マップのレイヤで表示されます。
データ アクセス
MapXtreme は、空間および非空間 RDBMS、MS Access、
dBase、ASCII、ネイティブの MapInfo テーブル (.TAB) など、さ
まざまなソースのデータをサポートします。すべてのデータ操作
は、MapInfo.Data 名前空間を使って実行されます。操作には、
テーブルの追加や削除、各種データ ソースに対するデータの挿
入、更新、削除などが含まれます。
.NET データ プロバイダのサポート : あらゆる ADO.NET データ
プロバイダを MapInfo.Data のテーブルとして扱うことができま
す。これにより、マップ作成に対応していない外部データを使用
することが可能になります。
Web サービス
MapXtreme では、クライアントと API を提供しており、いくつか
の有名な Web サービス (ジオコード化、ルーティング、WMS、お
よび WFS) にアクセスできます。
選択と検索
属性や空間クエリを使えば、条件に合うデータだけを検索でき
ます。
主題図マッピング
最も広く使われているデータ分析の 1 つが、主題図マップを使っ
て、関 連 性 や 潜 在 的 な デ ー タ を 視 覚 的 に 示 す 方 法 で す。
MapXtreme では、レンジ、個別値、可変シンボル、ドット密度、
円グラフ、棒グラフという 6 種類の主題図を作成および使用でき
ます。
ラベル付け
MapXtreme が提供する高度なラベル付け機能では、名前やその他
の情報 (フィールドのデータや式) を使ってフィーチャにラベルを
付けるだけでなく、ラベル自体にレンジ主題図や個別値主題図を
作成して、テキストだけでなくメッセージを表示することも可能
です。
MapXtreme v7.2
23
開発者ガイド
第 1 章 : MapXtreme の概要
MapXtreme への移行
機能 *
目的
マップ スタイル
ラベル付けはマップ スタイルの形式の 1 つであり、マップ上で自
由にコントロールできます。また、スタイルは、フィーチャ、修
飾 (マップ タイトル)、ダイアログ ボックス、テキストなど、
MapXtreme の各種機能で使用されるマップ フィーチャの色、パ
ターン、フォント、ライン スタイル、シンボルを指します。
地理情報の処理と分析
この処理では、郵便番号の境界を組み合わせて販売区域を作るな
ど、既存のフィーチャから新しいフィーチャを作成します。ま
た、フィーチャの地理的な位置の座標を使って、他のフィーチャ
との関連性を把握します。たとえば、ポイントの 5 マイル圏内に
バッファを作り、このバッファ ゾーン内に他のポイントがないか
を確認します。
投影法と座標系
この 2 つは、2 次元マップで位置を示す手法です。データの座標
系を把握することにより、フィーチャを正しく配置でき、精密な
表示と計測が可能になります。MapXtreme は、幅広い種類の投影
法や座標系をサポートしており、ユーザ独自の投影法や座標系の
作成にも対応します。
*
言語または地域によっては、この製品のいくつかの機能またはツールがサポートされない場合があ
ります。詳細については、マップインフォ・ジャパン株式会社または MapInfo 代理店にお問い合わ
せください。
MapXtreme への移行
以下は、MapX/MapXtreme v3.0 と .NET を基盤とした MapXtreme の機能比較表です。新しいアー
キテクチャについては、相当する機能が存在しない場合があります。この表の右側に掲載した
MapXtreme トピックの詳細については、開発者ガイドや、オンライン ヘルプおよびオブジェクト
モデルを参照してください。MapXtreme の MapX オブジェクト モデルおよび同等の機能の完全な
リストについては、「付録 J : MapXtreme への移行」を参照してください。
MapXtreme v7.2
24
開発者ガイド
第 1 章 : MapXtreme の概要
MapXtreme への移行
MapX5.0 /MapXtreme3.0
Map オブジェクト
MapXtreme
Map クラス : レイヤのコレクションを保持します。
MapControl : フォーム上でマップを表示する方法です。
MapInfo.Mapping 名前空間
MapXBroker
Session クラス : MapXtreme をベースとするすべてのアプリケー
ションの基点です。
関連トピック : MICommand、カタログ、プール
MapInfo.Engine 名前空間
レイヤ中心のモデル
テーブル中心のモデル
関連トピック : テーブル メタデータ (TableInfo クラス)、Feature
ク ラ ス、Column クラス (MI_Geometry、MI_Style、MI_Key)、
MapInfo ADO.NET データ プロバイダ
MapInfo.Data 名前空間
データセット、データ バイ Table.AddColumns() メソッドを使って、テーブルに一時フィー
ンド
ルドを追加します。
関連トピック : Geodictionary マネージャ
MapInfo.Data 名前空間
Geosets、 Geoset
ジャ
マ ネ ー ワークスペース (.MWS) : 新しい XML 形式。Geoset がサポート
されます。
関連トピック : ワークスペース マネージャ
MapInfo.Persistence 名前空間
注釈
修飾 : 単一のマップにある凡例、タイトル、スケール バー、その
他ユーザ定義オブジェクト
MapInfo.Mapping 名前空間
主題図マッピング
同じ主題図マップ型。主題図は、レイヤではありません。
関連トピック : 修飾子主題図 (サイズ可変シンボル、円グラフ、
棒グラフ)、オブジェクト主題図 (レンジ、個別値、ドット密度)
MapInfo.Mapping.Thematic 名前空間
MapXtreme v7.2
25
開発者ガイド
第 1 章 : MapXtreme の概要
MapXtreme への移行
MapX5.0 /MapXtreme3.0
MapXtreme
フィーチャ レイヤとフィー FeatureGeometry : すべてのジオメトリはオブジェクトです。こ
チャ コレクション
れには、Point、MultiPoint、Curve、MultiCurve、Polygon、
MultiPolygon、Ring があります。
ジオメトリには、Rectangle、Rounded Rectangle、Ellipse、
Legacy Arc、Legacy Text があります。
関連トピック : CoordSysFactory (登録済みの座標系)、オブジェ
クト処理 (下記の FeatureProcessor を参照)
MapInfo.Geometry 名前空間
FeatureFactory
FeatureProcessor クラス : オブジェクト処理を行う Buffer、
Combine、Intersection、ConvexHull。
関連トピック : FeatureGeometry クラスの Difference (旧リリー
スの Erase)
MapInfo.Geometry 名前空間
ツール
デスクトップ ツール SelectRegion は、マウス ボタンへの割り当
てやマウス ホイールの設定により、ズームを実行します。
MapInfo.Tools 名前空間
ラスタ イメージとグリッド 新しいテーブル構造、RasterImageInfo、GridImageInfo。
イメージ
関連トピック : コントロール可能なスタイル : 明るさ、コントラ
スト、色/グレー スケール、透明度、1 色の透明度
MapInfo.Raster 名前空間
ラベル オブジェクトとラベ LabelLayer : ラベルとレイヤを別々に並び替えることが可能で
ル コレクション
す。LabelSource : ラベル付けに使用するデータ ソースからの情
報です。
MapInfo.Mapping 名前空間
Selection オブジェクト
Selection クラス : テーブルに関連付けられたフィーチャのリスト
を格納するマルチフィーチャ コレクションです。
MapInfo.Engine 名前空間
MapXtreme v7.2
26
開発者ガイド
第 1 章 : MapXtreme の概要
MapXtreme の使い方
MapX5.0 /MapXtreme3.0
空間サーバの接続性
MapXtreme
MI ADO.NET データ プロバイダ、MapInfo SQL 言語。
MapInfo.Data 名前空間
Style オブジェクト
Style クラス : 新しいオブジェクト モデル。Style は、他のオブ
ジェクトのプロパティではなく、オブジェクトとして扱われ、情
報は MI_Style フィールドに格納されます。
関連トピック : MapInfo.Mapping 名前空間の
FeatureStyleModifiers、FeatureOverrideStyleModifiers
MapInfo.Styles 名前空間
MapXtreme の使い方
MapXtreme は、.NET の経験がない開発者にも経験がある開発者にも一様に多くの効果をもたらし
ます。ここでは、豊富なサポート体制や資料が提示されているので、MapInfo コンポーネントを短
期間で学習でき、開発スケジュールの中断を最小限に抑えます。
サポート リソース
MapInfo 社は、初めて MapInfo 製品をお使いになる開発者の方を責任を持ってサポートします。
Visual Studio 環境への迅速な移行や環境の準備をサポートする各種ツールとして、次のようなリ
ソースを提供しています。
MapXtreme のラーニング リソース ページ
ラーニング リソース ページには、MapXtreme のインストール後、Windows の [スタート] メ
ニューからアクセスすることができます。ここでは、開発のベスト プラクティス、コード サンプ
ル、Web アプリケーションに関するチュートリアル、MapInfo Web サイト上にあるすべてのマ
ニュアルやオンライン リソースへのリンクなど、MapXtreme に関する幅広い情報を表示すること
ができます。このページを参照しながら、MapXtreme を十分に活用して、ビジネス ニーズに合っ
たマッピング アプリケーションの開発を続けることができます。
MapXtreme v7.2
27
開発者ガイド
第 1 章 : MapXtreme の概要
MapXtreme の使い方
マニュアルとヘルプ
この『MapXtreme 開発者ガイド』では、MapXtreme の開発環境と名前空間について概要を説明し
ます。Visual Studio のヘ ルプで は、MapInfo の強力なマッピング コンポーネントを統合した
Windows デスクトップ アプリケーションや Web ベース アプリケーションを開発する際に、必要
となる API レベルの詳細な情報が提供されます。マニュアルに関するご意見は、
software.support@pb.com までお送りください。
L
上記の電子メール アドレスは、ソフトウェアやマニュアルの内容に関する質問の問い合わ
せには使用しないでください。このような質問は、テクニカル サポート (下記を参照) にお
問い合わせください。
MapInfo 社のマッピング製品を初めて操作および開発する方は、必ず「第 3 章 : マッピングの概
念」を参照してください。
MapXtreme のリリース ノートを Pitney Bowes Software 社の Web サイトから必ずダウンロード
して、最新バージョンに関する情報を確認してください。
テクニカル サポート
Pitney Bowes Software 社は、MapInfo ソフトウェア製品のユーザを対象に、他社にはない優れた
テクニカル サポートを提供しています。テクニカル サポート部門は、MapInfo ソフトウェアの登
録ユーザを対象に技術的なサポートを提供しますので、MapInfo 製品のあらゆる機能を完全に理解
する必要はありません。テクニカル サポートの内容については、Pitney Bowes Software 社の Web
サイト ( www.pb.com/software) を参照してください。
MapXtreme v7.2
28
開発者ガイド
はじめに
この章では、MapXtreme アプリケーションのインストール、設定、および展
開について詳しく説明します。
この章の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
インストール要件. . . . . . . . . . . . . . . . . . . . . . 30
インストールの種類. . . . . . . . . . . . . . . . . . . . . 31
MapXtreme のライセンス . . . . . . . . . . . . . . . . . . 32
インストールの前に. . . . . . . . . . . . . . . . . . . . . 39
現在の環境への MapXtreme のインストール . . . . . . . . . . 43
MapXtreme へのアップグレード . . . . . . . . . . . . . . . 46
64 ビットの Web アプリケーションへの Web サイトの移行 . . . 47
Visual Studio でのアプリケーションの作成 . . . . . . . . . . 49
テンプレートがない場合の ASP.NET Web アプリケーションの構
築 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
アプリケーションの配布. . . . . . . . . . . . . . . . . . . 56
2
第 2 章 : はじめに
インストール要件
インストール要件
Pitney Bowes Software Inc. では、MapXtreme が以下の動作環境に対応していることを確認してい
ます。
アーキテクチャ
オペレーティング システム
•
64 ビット
•
32 ビット
•
Windows 8 (x64)
•
Windows 7 (x86、x64)
•
Windows Vista SP2 (x86、x64)
•
Windows Server 2012 (x64)
•
Windows Server 2008 R2 (x64)
•
Windows Server 2008 SP2 (x86、x64)
•
Windows Server 2003 R2 SP2 (x86、x64)
•
Windows Server 2003 SP2 (x86、x64)
•
Windows XP SP3 (x86、x64)
開発フレームワークと IDE のサポート * •
•
Visual Studio 2012 Upgrade 1
ブラウザ
Web アプリケーションと展開:
サポートされているデータベース
データ アクセス:
MapXtreme v7.2
Microsoft .NET Framework 4.0
•
Visual Studio 2010 SP1 (Professional、Premium、
Ultimate)
•
Internet Explorer 8.0、9.0**
•
Firefox 13 以降
•
Chrome 20 以降
•
IIS 8 (Windows 8、Windows Server 2012)
•
IIS 7 (Windows Vista、Windows Server 2008、
Windows 7)
•
IIS 6 (Windows Server 2003)
•
Microsoft Access 2007 および Excel 2007
•
Microsoft Access 2003
•
Oracle 11G (11.1.0.6.0 および 11.1.0.7.0)
•
Oracle 10G、10GR2
•
Microsoft SQL Server 2012 (および SQL Native
Client 11)
•
Microsoft SQL Server 2008 (および SQL Native
Client 10)
•
MapInfo SpatialWare® 4.9 および 4.9.2 for
Microsoft SQL Server 2005
•
MapInfo SpatialWare® 4.9.2 for Microsoft SQL Server
2008 32 ビットおよび 64 ビット エディション
•
MDAC 2.8
30
開発者ガイド
第 2 章 : はじめに
インストールの種類
*
ここには推奨される開発環境 (IDE) が示されています。このほかの IDE も使用できますが、MapXtreme
インストーラでテンプレート、サンプル、およびヘルプ システムを統合することはできません。
**
MapXtreme のラーニング リソースは、
デフォルトのブラウザ設定に関係なく、
自動的に Internet Explorer
で表示されます。これによって、デフォルトのブラウザ設定が変更されることはありません。
L
L
MapXtreme は、Microsoft Visual Studio の Express Edition には対応していません。
MapXtreme は、Borland Delphi 開発フレームワーク、Cold Fusion Web 開発フレームワー
ク、HAHT Web 開発フレームワークには対応していません。
最小システム要件
メモリ
Windows 8: 1 GB RAM (32 ビット)、2 GB RAM (64 ビット)
Windows 7: 1 GB RAM (32 ビット)、2 GB RAM (64 ビット)
Windows Vista: 1 GB RAM
Windows Server 2012: 1 GB RAM (32 ビット)、2 GB RAM (64 ビット)
Windows Server 2008: 512 MB RAM
Windows Server 2003: 256 MB RAM
Windows XP: 256 MB RAM
プロセッサ
Windows 8、Windows 7、Vista: 1 GHz プロセッサ
Windows Server 2012: 1 GHz プロセッサ
Windows Server 2008: 1.6 GHz (x64) プロセッサ
Windows XP: 800 MHz Pentium III クラスのプロセッサ
ビデオ カード
256 色以上に対応しているグラフィックス カード
インストールの種類
MapXtreme には、開発 (SDK) と展開 (ランタイム環境) の 2 種類のインストール オプションが用
意されています。どちらのインストールを行うかは、製品の CD ブラウザから選択することができ
ます。
MapXtreme v7.2
31
開発者ガイド
第 2 章 : はじめに
MapXtreme のライセンス
開発 (SDK) インストール
開発インストールでは、MapXtreme ソフトウェア開発キット (SDK) がコンピュータにインストー
ルされます。デスクトップ アプリケーションおよび Web アプリケーションを開発する場合は、こ
のインストールを選択します。この SDK はインストール時に Microsoft Visual Studio と自動的に
統合され、.NET Framework と連携動作します。SDK には、開発作業を簡略化する C# と VB のア
プリケーション テンプレートが用意されています。
SDK のインストール手順については、「現在の環境への MapXtreme のインストール」を参照し
てください。インストール ダイアログ ボックスのヘルプ ボタンをクリックして、手順を参照する
こともできます。
展開 (ランタイム環境) インストール
展開インストールではランタイム環境がインストールされ、MXTRuntimeNCP.exe (MapXtreme ソ
フトウェアのコピー プロテクトされているバージョンの場合は MXTRuntimeSCP.exe) がコピーさ
れます。ランタイム インストーラのインストール手順については、「ランタイム インストーラを
使った配布」を参照してください。
複数のバージョンのインストールと使用
複数のバージョンの MapXtreme を同じコンピュータに同時にインストールできます。それぞれの
バージョンの MapXtreme は、個別のディレクトリにインストールされます。
また、前のバージョンの MapXtreme を使って作成したデスクトップ アプリケーションと Web ア
プリケーションを、新しいバージョンで実行することもできます。
異なるバージョンの MapXtreme で作成されたものであれば、複数の ASP.NET アプリケーション
を同じコンピュータで実行できます。MapXtreme のバージョンごとにアプリケーション プールを
作成し、各プールに ASP.NET アプリケーションを適切に配置します。コマンド プロンプトから
iisreset を実行して IIS を再起動するか、またはアプリケーションが割り当てられているアプリ
ケーション プールをリサイクルします。アプリケーションは独自のプロセス空間で動作し、適切
なバージョンの MapXtreme を読み込みます。
以上の説明は、作成に使用した MapXtreme のバージョンが異なるデスクトップ アプリケーションに
は該当しません。デスクトップ アプリケーションは、常に独自のプロセス空間で実行されます。
MapXtreme のライセンス
MapXtreme のインストールすべてにおいて、ライセンス (.lic) ファイルが必要です。ライセンスの
中には、インストール時に提供されるものと、Pitney Bowes Software Inc. から取得する必要のあ
るものがあります。ここでは、ライセンスの種類と、Pitney Bowes Software 社からライセンスを
取得する方法について説明します。
MapXtreme v7.2
32
開発者ガイド
第 2 章 : はじめに
MapXtreme のライセンス
ライセンスの種類
MapXtreme には、目的やニーズに合わせて選べるように、SDK (開発)、ランタイム (展開)、試用
版の 3 種類のライセンスが用意されています。
SDK ライセンス
SDK (ソフトウェア開発キット) ライセンス (MapXtremeSDK.lic) は、デスクトップ アプリケー
ションおよび Web アプリケーションを開発するためのライセンスです。このライセンスを使って
開発されたアプリケーションでは、マップ ウィンドウの左上隅に小さなウォーターマークが表示
されます。
ランタイム ライセンス
ランタイム (展開) ライセンスは、デスクトップ アプリケーションおよび Web アプリケーションの
すべてのランタイム インストールに必要です。
•
•
•
NCP バージョンの MapXtreme を使用して作成したデスクトップ ランタイムを配布する場合
は、ランタイム ライセンス (MapXtremeDesktop.lic など) で複数のインストールを行うことが
できます。
SCP バージョンの MapXtreme を使用して作成したデスクトップ ランタイムを配布する場合
は、インストールごとに 1 つのライセンス (MapXtremeDesktopIntl.lic など) が必要です。
NCP バージョンまたは SCP バージョンの MapXtreme を使用して作成した Web ランタイムを
配布する場合は、インストールごとに 1 つのライセンス (MapXtremeWeb.lic など) が必要です。
配布パッケージにライセンスを含める方法については、「展開用のランタイム ライセンス」を参
照してください。
試用版ライセンス
試用版ライセンス (MapXtremeTrial.lic) は、SDK と MapXtreme の試用版で提供されます。このラ
イセンスは、インストールの日付から 60 日で有効期限が切れます。試用版ライセンスを使って開
発されたアプリケーションの場合、有効期限の残り日数を示すウォーターマークがマップに表示
されます。
ライセンスの取得
開発用の SDK ライセンス
コピー プロテクトがほどこされていないソフトウェア開発キット (NCP SDK) のユーザには、イン
ストール時に、試用版ライセンスだけでなく無期限の SDK ライセンス (MapXtremeSDK.lic) が自
動的に付与されます。永久ライセンスによって、無期限に SDK を使用できます。他のいかなる
SDK ライセンスも必要ありません。
コピー プロテクトがほどこされた SDK (SCP SDK) のユーザには、試用版ライセンスのみが付与
されます。SDK を無期限に使用するためには、Pitney Bowes Software 社から永久 SDK ライセン
スを取得する必要があります。永久ライセンスを取得するには、MILicenseNodeID.exe (Program
Files\Common files\MapInfo\MapXtreme\7.x.x\License Tool) を実行して、マシン固有の一意のハー
MapXtreme v7.2
33
開発者ガイド
第 2 章 : はじめに
MapXtreme のライセンス
ドウェア ID を生成します。この ID は、MILicenseNodeID.txt というテキスト ファイルに生成され
ます。Pitney Bowes Software 社は、この情報を使用して、インストールごとににカスタム ライセ
ンスを生成します。ライセンス取得に関する詳細については、
Program Files\MapInfo\MapXtreme\7.x.x\Documentation\PDF\SoftwareCopyProtectionNotice_SCP.pdf
または製品の外箱に記載されているソフトウェアコピー防止措置に関する文書を参照してくださ
い。この文書で最寄の Pitney Bowes Software 社 (またはその代理店) を確認し、電子メールまたは
ファックスでお問い合わせください。永久ライセンスを取得したら、配布アプリケーションを使
用し始める前に、ライセンス ファイルを Program Files\Common Files\
MapInfo\MapXtreme\7.x.x フォルダにコピーします。
試用版のユーザが永久ライセンスを取得するには、製品を購入する必要があります。
展開用のランタイム ライセンス
MapXtreme では、すべての展開にランタイム ライセンスを含める必要があります。このために
は、パッケージの中でライセンスを提供するか、顧客が自分でライセンスを取得できるようにライ
センス ツールを含める必要があります。ランタイム ライセンスは、Pitney Bowes Software 社から
取得します。この種類のライセンスでは、マップにはウォーターマークが一切表示されません。
必要なランタイム ライセンスの種類は、ビルドしているアプリケーションの種類と、使用する
MapXtreme のバージョンによってそれぞれ異なります。次の表で、自分の状況に当てはまるもの
を見つけてください。
展開タイプ
SDK バージョンの
MapXtreme
ノード
ロック
ランタイム ライセンスの取得方法
デスクトップ
非コピープロテクト ×
(NCP)
マップインフォ・ジャパン株式会社または
MapInfo 代理店に問い合わせて、1 つ以上
の使用権を取得します。
デスクトップ
コピープロテクト ○
(SCP)
使用権ごとにノード ID ファイルを生成し、
それをマップインフォ・ジャパン株式会社
または MapInfo 代理店に送信します。
Web
NCP
○
使用権ごとにノード ID ファイルを生成し、
それをマップインフォ・ジャパン株式会社
または MapInfo 代理店に送信します。
Web
SCP
○
使用権ごとにノード ID ファイルを生成し、
それをマップインフォ・ジャパン株式会社
または MapInfo 代理店に送信します。
展開先マシンのノード ID を生成するには、ライセンス ツールの MILicenseNodeID.exe を実行
し、作成されたテキスト ファイルをマップインフォ・ジャパン株式会社または MapInfo 代理店に
送信します。ライセンス ツールは、MapXtreme SDK と共に、Program Files\Common
MapXtreme v7.2
34
開発者ガイド
第 2 章 : はじめに
MapXtreme のライセンス
Files\MapInfo\MapXtreme\7.x.x\License Tool にインストールされます。MapXtreme のパッケージ
または Program Files\MapInfo\MapXtreme\7.x.x\Documentation\PDF にあるソフトウェア コピー
プロテクトに関するライセンス申請書を参照してください。
ライセンス ツールは、マージ モジュール MapInfoMXTConfig_7.x..x.msm に含まれています。配布
に MapInfoCoreEngine.msm を含めると、ユーザはこのツールを自動的に取得します。「ランタイ
ム インストーラを使ったアプリケーション配布の手順」を参照してください。
L
一般に、デスクトップ ベースの配布用に Web ライセンスを使用することはできません。ま
た、Web ベースの配布用にデスクトップ ライセンスを使用することもできません。SCP
バージョンの場合、ライセンス (Web またはデスクトップ) は配置対象のコンピュータに
ノード ロックされます。
ライセンスについて Pitney Bowes Software 社にお問い合わせの際は、MapXtreme のバージョン
をお知らせください。
ライセンス ファイルの場所
ライセンスの場所または格納先については、次の表を参照してください。
ライセンスの
種類
ライセンス名
ライセンスの場所
開発
SDK NCP
MapXtremeSDK.lic
Program Files\Common
Files\MapInfo\MapXtreme\7.x.x
SDK SCP
MapXtremeSDK.lic
Program Files\Common
Files\MapInfo\MapXtreme\7.x.x
ランタイム
デスクトップ MapXtremeDesktop.lic
NCP
アプリケーションの実行可能ファイルと同じフォル
ダに置き、他のアプリケーションと競合しないよう
にします。
デスクトップ MapXtremeDesktopIntl.lic
SCP
アプリケーションの実行可能ファイルと同じフォル
ダに置き、他のアプリケーションと競合しないよう
にします。
Web NCP
MapXtremeWeb.lic
Program Files\Common
Files\MapInfo\MapXtreme\7.x.x
Web SCP
MapXtremeWeb.lic
Program Files\Common
Files\MapInfo\MapXtreme\7.x.x
MapXtreme v7.2
35
開発者ガイド
第 2 章 : はじめに
MapXtreme のライセンス
ライセンスの
種類
ライセンス名
ライセンスの場所
試用版
SDK NCP
SDK SCP
MapXtremeTrial.lic
Program Files\Common
Files\MapInfo\MapXtreme\7.x.x
評価版
MapXtreme v7.2
36
開発者ガイド
第 2 章 : はじめに
MapXtreme のライセンス
トラブルシューティング
MapXtreme のライセンスに関する問題が発生した場合、次の表を参考にして問題を解決します。
問題が発生した場合は、適切なライセンスが正しい場所にインストールされていることを必ず確
認してください (前出の「ライセンス ファイルの場所」を参照)。
ライセンスの問題のトラブルシューティング
問題の内容
考えられる原因
解決法
ライセンス エラー。
MapXtreme ライセンス サービ MILicensingService がインストー
MILicensing オブ ジェクト を スが実行されていないときに発 ル済みで、状態が "開始" になっ
生します。64 ビット アプリ ていることを確認します。
初期化できない。
ケーション用の MapXtreme ラ
イセンスでは、ローカル アプ
リケーション ホストで
Windows サービスが動作可能
になっている必要があります。
サービスは MapXtreme のイン
ストール処理中に自動的にイン
ス ト ー ル さ れ、Services.msc
を使用して Windows サービス
として管理されます。
MapXtreme 200x の有効なラ リモート デスクトップが使用
イセンスが見つからない。
されている可能性がありま
す。ターミナル サービスに対
応した新しいライセンスが必
要です。
サーバをリセットし、新しいラ
イセンスを適切なディレクトリ
に格納して、IIS および ASP.NET
のワーカー プロセスを再起動し
ます。
ライセンス ファイルが破損し 一度コンピュータからライセンス
を削除し、新しいライセンスを再
ている可能性があります。
度生成して適切なディレクトリに
格納し、IIS を再起動します。
権限が不足している可能性が ASP.NET のユーザ アカウント
あります。
に、Temp ディレクトリと
Framework ディレクトリに対す
る読み取り/書き込み権限がある
ことを確認します (「配布する
Web アプリケーションの一時
ディレクトリへのアクセス権
限」を参照)。
MapXtreme v7.2
37
開発者ガイド
第 2 章 : はじめに
MapXtreme のライセンス
ライセンスの問題のトラブルシューティング ( 続く )
問題の内容
考えられる原因
解決法
COM+ ア ク テ ィ ベ ー シ ョ ン 最も多い原因は、ライセンス 一度コンピュータからライセンス
エラー
ファイルの不具合または破損 を削除し、新しいライセンスを再
です。COM+ オブジェクトの 度生成して適切なディレクトリに
初期化が中断されてしまうた 格納し、IIS を再起動します。
め、COM+ で低レベルの OS
障害が発生します。
Pitney Bowes Software の
Web サイトからダウンロード
した試用版を使っているとき
にライセンス例外が発生する
(mapinfo.coreengine.dll
で
System.ComponentModel.Lic
enseException が発生)。
システム時計が過去の時間に戻 試用版を別のコンピュータにイ
されていることが検出されたた ンストールするか、有効なライ
め、MapXtreme 試用版ライセ センスを購入してください。
ンスが無効になりました。
試用版にマージ モジュール
(MSM) が存在しない
(\Common files\Merge
Modules\)。
配 布 は 想 定 さ れ て い な い た ランタイム ライセンスを購入し
め、マージ モジュールは試用 てください。
版から除外されています。
Volume Shadow Copy サービ Veritas のバックアップに関連
スが原因でライセンスが検出 した問題です。バックアップ
されない。
ソフトウェアに合わせてネッ
トワークが変更されているこ
と が 考 え ら れ ま す。バ ッ ク
アップ プロセスによってファ
イルがロックされ、アクセス
できなくなっている可能性が
あります。
バックアップ プロセスが
Exponare プロセスと同じ ID で
実行されているかどうか確認し
てください。実行されている場
合は、ターミナル サービスが問
題になっている可能性がありま
す。新しいライセンスを取得す
ることによって問題を解決でき
ます。
既存の MapXtreme フォルダ 既存のディレクトリに無効な 古い無効なライセンスを探して
が原因で有効なライセンスが ライセンス ファイルが存在す 削除します。新しいライセンス
検出されない。
るために、エラーになってい を適切なディレクトリに格納し
てください。
る可能性があります。
Exponare に付属の
システムに複数のネットワーク 正しいライセンス ファイルを取
MapXtreme の ラ イ セ ン ス で カードが装着されています。
得します。新しいライセンスを
適切なディレクトリに格納して
一部のサイトのロックを解除
ください。
できない。
MapXtreme v7.2
38
開発者ガイド
第 2 章 : はじめに
インストールの前に
ライセンスの問題のトラブルシューティング ( 続く )
問題の内容
考えられる原因
ライセンス ファイルを
MapXtreme\7.x.x フォルダと
Web アプリケーション フォ
ルダの両方に置かないと
MapXtreme の ロ ッ ク が 解 除
されない。
サー バの実行方法と、使用し
ているユーザ ID に対し、権限
が不適切である可能性があり
ます。
MapXtreme のライセンス
ターミナル サービス
ファイルの有効期限が約 15
日間しかない。
解決法
正しい権限を設定してください
(「配布する Web アプリケー
ションの一時ディレクトリへの
アクセス権限」を参照)。
ターミナル サービスに対応した
最新ビルドのライセンス ジェネ
レータを使用していることを確
認してください。
Virtual PC を削除したところ、 Virtual PC を削除すると、ネッ 新しいライセンスを取得してく
MapXtreme ライセンス ノード トワーク ノード ID が変化し、 ださい。
ID が変化し、Exponare ライセ ライセンスが無効になります。
ンスが試用版ライセンスに
戻ってしまった。
インストール直後の初回使用
時 で あ る に も か か わ ら ず、
"MapXtreme 試用ライセンス
の期限が切れました。" とい
うエラー メッセージが表示さ
れる。
付属の NCP SDK ライセンスを NCP SDK に収録されている永久
使用せずに、ランタイム (展開) SDK ライセンスを使用してくだ
ライセンスを生成してインス さい。
トールした。
ライセンスに関する既知の問題
以下は、MapXtreme のライセンスに関する既知の問題です。これらの問題を解決するには、テク
ニカル サポートに問い合わせてください (「テクニカル サポート」を参照)。
•
ウイルス ソフトウェアによってライセンス電子メールの内容が削除され、ライセンス ファイ
ルが Null になる。
•
ライセンス ジェネレータで破損したライセンス ファイルが作成されることがある。
インストールの前に
必ず次の準備を行ってから、MapXtreme のインストールを開始してください。
MapXtreme v7.2
39
開発者ガイド
第 2 章 : はじめに
インストールの前に
管理者権限
MapXtreme をインストールするには、自分が対象マシンの管理者であるか、現在のユーザが管理
者グループのメンバーである必要があります。これは、SDK インストールとランタイム インス
トールのどちらの場合も同じです。
L
Windows Vista、Windows 7、および Windows Server 2008 の場合、インストーラが COM+
オブジェクトの登録を実行するため、通常の管理者権限では不十分です。Vista ユーザは、
Setup.exe を右クリックして [管理者として実行] を選択し、インストーラ用のシステム特
権を取得する必要があります。
.NET Framework と Visual Studio を最初にインストールしておく
MapXtreme をイ ン ス トー ル する 前に、.NET Framework およびそのフレームワークに合った
Visual Studio 環境をインストールしておく必要があります。
L
Visual Studio 以外の開発環境を使用することもできますが、その場合、テンプレート、サ
ンプル、およびオンライン ヘルプ システムは統合されません。
IIS 7/8 および IIS 6 のサポート
MapXtreme では、インターネット インフォメーション サービス (IIS) 6、IIS 7、および IIS 8 を使
用した Web 展開をサポートしています。
IIS 6 の場合は、オペレーティング システムに Windows Server 2003 を使用する必要があります。
IIS 7 の場合は、オペレーティング システムに Windows Vista、Windows Server 2008、または
Windows 7 を使用する必要があります。IIS 8 の場合は、オペレーティング システムに Windows
Server 2012 または Windows 8 を使用する必要があります。Windows XP での Web 展開はサポー
トされていません。
『開発者ガイド』全体を通して、IIS と記載されている場合は IIS 7/8 を意味します。旧バージョン
との互換性のために、必要に応じて IIS 6 を使用する場合の手順も記載されています。
IIS 7 は Windows Vista、Windows Server 2008、および Windows 7 Ultimate に付属しています (た
だし、必ずしもインストールされているとは限りません)。MapXtreme では、IIS 7 および IIS 8 の
クラシック モードと統合パイプライン モードの両方をサポートしています。
MapXtreme をインストールする前に、次の手順に従って IIS 7/8 を構成します。これらの手順は、
Windows VIsta、Windows Server 2008、および Windows 7 に当てはまります。
1. Windows 認証と匿名認証を有効にします。
a. [コントロール パネル] > [管理ツール] を開き、[IIS] を右クリックして [管理者として実行]
を選択します。
b. [既定の Web サイト] を選択します。
c. IIS グループの下で、[認証] をダブルクリックします。
MapXtreme v7.2
40
開発者ガイド
第 2 章 : はじめに
インストールの前に
d. [匿名認証] を右クリックし、[有効にする] を選択します。Windows 認証についても同じ操
作を行います。
2. Web 管理ツールを有効にします。
a. [コントロール パネル] > [プログラムと機能] を開きます。
b. [Windows の機能の有効化または無効化] をクリックします。[Windows の機能] ダイアログ
ボックスが表示されます。
c. [Internet Information Services] チェック ボックスをオンにします。
d. [Web 管理ツール] をダブルクリック (または展開) し、その下に表示されるすべてのチェッ
ク ボックスをオンにします
3. World Wide Web サービスを有効にします。
a. [Windows の機能] ダイアログ ボックスで、[World Wide Web サービス] をダブルクリック (ま
たは展開) し、以下のチェック ボックスをオンにします。
b. [アプリケーション開発機能] - すべてオンにします。
c. [HTTP 共通機能] : [既定のドキュメント]、[ディレクトリの参照]、[HTTP エラー]、[静的コ
ンテンツ]、および [WebDAV 発行]
d. [健全性と診断] : [HTTP ログ]、[要求監視]
e. [性能機能] : [静的コンテンツ圧縮]
f. [セキュリティ] : [要求のフィルタリング] と [Windows 認証]
MapXtreme の Web コントロールと IIS
MapXtreme の Web コントロールは、常に ASP.NET の web.config ファイルを自動的に変更し、必
要なモジュールとハンドラを追加してきました。MapXtreme 7.2 では、IIS7 の統合パイプライン
モードが完全にサポートされており、web.config ファイルが自動変更されて system.webServer
ノードの下に必要なコードが追加されます。IIS6、または IIS7 の "クラシック" パイプライン モー
ド用に作成された以前の ASP.NET アプリケーションとの互換性を維持するために、統合パイプラ
インのコードは MapInfo.Engine.Session.PipelineMode プロパティが "Integrated" に設定されてい
る場合にのみ web.config ファイルに入力されます。この プロパティは、システムにインストール
されている VS2010 と MXT 7.2 の組み合わせに任意の ASP.NET プロジェクトが読み込まれるとき
に、web.config ファイルの "appSettings" ノードに追加されます。初期状態では、このプロパティ
はコメント アウトされています。IIS7 の統合パイプライン モードで実行されるアプリケーション
に適した編集を行うには、コメント アウトを解除します。クラシック パイプライン モードや IIS6
との互換性を確保するには、値を "classic" に変更するか、プロパティを再度コメント化して、
system.webServer ノードをコメント アウトします。
MapXtreme のデフォルト インストール ディレクトリ
MapXtreme は 64 ビット アプリケーションで、デフォルトでは 64 ビット コンピュータの
C:\Program Files または 32 ビット コンピュータの C:\Program Files (x86) にインストールされます。
MapXtreme v7.2
41
開発者ガイド
第 2 章 : はじめに
インストールの前に
MapXtreme サンプル アプリケーションの Web.config ファイルでは、両方のデフォルト パスが指
定されています。MapXtreme を別の場所にインストールした場合は、その場所を Web.config ファ
イルに反映しないと、サンプルが適切に動作しません。
L
English US (ENU) 以外の Windows 環境では、デフォルト インストール ディレクトリ
C:\Programmer\ がカスタム インストール場所と見なされます。次の例のように、実際のイ
ンストール ディレクトリに合わせてサンプルの Web.config ファイルを編集する必要があり
ます。
<configuration>
<appSettings>
<add key="MapInfo.Engine.Session.Workspace"
value="C:\Programmer\MapInfo\MapXtreme\7.x.x\Samples\Data\World.mws"
/>
</appSettings>
</configuration>
その他のインストール機能
MapXtreme には、オンラインで確認できるインストール手順が用意されています。インストール
中に表示されるインストール ダイアログのヘルプ ボタンをクリックして、この手順を表示するこ
ともできます。
MapXtreme では、世界各国のサンプル データが無償で提供されています。データをインストール
するには、CD ブラウザで [サンプル データのインストール] を選択します。[カスタム] を選択する
と、必要なデータだけをインストールできます。[すべて] (デフォルト) を選択すると、約 450 MB
の 世 界 各 国 のデ ー タ セ ッ ト が Program Files\MapInfo\MapXtreme\7.x.x\Samples\Data にインス
トールされます。
L
このデータ インストーラを実行しなくても、MapXtreme に付属のサンプル アプリケーショ
ンは使用できます。そのための基本的なサンプル データは、自動的に \Data フォルダにイン
ストールされます。
MapXtreme CD ブラウザには、開発者ガイドの PDF 版へのリンクも示されています。
MapXtreme v7.2
42
開発者ガイド
第 2 章 : はじめに
現在の環境への MapXtreme のインストール
現在の環境への MapXtreme のインストール
MapXtreme をインストールするには、次の手順を実行します。
1. MapXtreme 製品メディアをディスク ドライブに挿入します。
2. CD ブラウザのメイン ページで、[インストール] をクリックします。インストールの説明ペー
ジが表示されます。
3. SDK をインストールする場合は [開発インストール] を、ランタイム バージョンをインストー
ルする場合は [展開インストール] を選択します。
L
展開インストールには、ランタイム ライセンスが必要です。「展開用のランタイム ラ
イセンス」を参照してください。
4. [SDK (ソフトウェア開発キット) のインストール] または [ランタイム環境のインストール] を選
択します。最初のダイアログ ボックスで、[次へ] をクリックして次の画面に進みます。展開イ
ンストールの場合は、ステップ 10 に進みます。
L
この画面からは、インストールの手順を確認したり、サンプル
したりすることもできます。
データをインストール
5. 最初に表示されるダイアログ ボックスに記載されている情報を読み、[次へ] をクリックして次
に進みます。
6. ライセンス契約に同意して から、[次へ] をクリックします。[ユーザ情報] ダイアログ ボックス
が表示されます。
MapXtreme v7.2
43
開発者ガイド
第 2 章 : はじめに
現在の環境への MapXtreme のインストール
7. [ユーザ情報] ダイアログ ボックスの各ボックスに、ユーザ名と会社名を入力します。また、必
要に応じてパッケージに記載された製品のシリアル番号を入力してください。[次へ] をクリッ
クします。[セットアップ タイプ] ダイアログ ボックスが表示されます。
8. [セットアップ タイプ] ダイアログ ボックスで、[すべて] または [カスタム] のいずれかを選択し
ます。インストールするコンポーネントを選択する場合、またはデフォルト (C:\Program
Files\MapInfo\MapXtreme\7.x.x) 以外のフォルダにインストールする場合は、[カスタム] を選択
します。[次へ] をクリックします。[すべて] を選択した場合は、ステップ 10 に進みます。[カ
スタム] を選択した場合は、ステップ 9 に進みます。
L
MapXtreme v7.2
MapXtreme をデフォルト以外の場所にインストールする場合、あるいは English US (ENU)
以外の Windows XP のバージョンでインストールする場合は、インストール後に実行す
るすべてのサンプル Web アプリケーションの web.config ファイルを変更することが必
要になります。web.config ファイルの変更方法については、サンプル Web アプリケー
ションの ReadMe.rtf ファイルを参照してください。
44
開発者ガイド
第 2 章 : はじめに
現在の環境への MapXtreme のインストール
9. 前の手順で [カスタム] を選択した場合は、インストールしたいコンポーネントを選択するか、
[変更] をクリックしてインストール先の新しいパスを指定します。[次へ] をクリックします。
10. [プログラムをインストールする準備ができました] ダイアログ ボックスで、[インストール] を
クリックします。
11. [MapXtreme をインストールしています] ダイアログ ボックスが表示されます。
MapXtreme v7.2
45
開発者ガイド
第 2 章 : はじめに
MapXtreme へのアップグレード
12. [InstallShield ウィザードを完了しました] ダイアログ ボックスで、MapXtreme ラーニング リ
ソース ページを表示する必要がなければ [ラーニング リソースの起動] チェック ボックスをオ
フにし、[完了] をクリックしてソフトウェア インストーラを終了します。
SDK インストールの場合、MapXtreme ラーニング リソース ページは Windows の [スタート]
ボタンからいつでも参照できます。ランタイム インストールの場合は参照できません。
MapXtreme へのアップグレード
MapXtreme は、\<インストール ディレクトリ>\MapInfo\MapXtreme\7.x.x.x という形式を使用して
独自のディレクトリにインストールされます。X.x.x は現行バージョンを表します。前のバージョ
ンが上書きされることはありません。これにより、同じ製品の複数の異なるバージョンを共存さ
せることができます。
複数のバージョンをインストールする場合は、旧バージョンのライセンス ファイルを最新のイン
ストールの場所 (Program Files\Common Files\MapInfo\MapXtreme\7.x.x) にコピーします。
1 つのマシンで異なるバージョンを使用している場合、異なるバージョンのプロジェクトを開くと
きは、その前に必ず Visual Studio を終了しておきます。Web アプリケーションの場合は、イン
ターネット インフォメーション サービス (IIS) をリセットする必要もあります。この作業を行うに
は、コンソール ウィンドウで、または [スタート] メニューの [ファイル名を指定して実行] から
iisreset.exe コマンドを実行します。
MapXtreme v7.2
46
開発者ガイド
第 2 章 : はじめに
64 ビットの Web アプリケーションへの Web サイトの移行
64 ビットの Web アプリケーションへの Web サイトの移行
MapXtreme では、64 ビットの Web アプリケーションを作成できます。既存の Web サイトがある
場合に、64 ビット処理の恩恵を受けるには、Web サイトを Web アプリケーションに移行する必
要があります。32 ビットのみの MapXtreme ベースの Web サイトを引き続き作成することもでき
ます (「既存の Web サイトのアップデート (47 ページ)」を参照)。
Web サイトから Web アプリケーションへの移行に際して MapXtreme に特有の注意点はありませ
ん。詳細については、Microsoft の記事「Web Application Projects versus Web Site Projects」
お よ び「Walkthrough: Converting a Web Site Project to a Web Application Project in Visual
Studio」を参照してください。
既存の Web サイトのアップデート
32 ビットの MapXtreme Web サイトをアップデートして最新のアセンブリを使用したい場合は、
このセクションの手順を実行します。
旧 バ ー ジ ョ ン の MapXtreme で 作 成した Web サイトを実行するには、アプリケーションの
Web.config ファイルを編集して、新しいバージョンのアセンブリを指定する必要があります。
アセンブリは C:\Windows\Microsoft.NET\assembly\GAC_32 にあります。
少なくとも、MapInfo.CoreEngine.dll、MapInfo.CoreEngine.Wrapper.dll、MapInfo.CoreTypes.dll、
および MapInfo.WebControls.dll を指定する必要があります。
編集が終わったら、Web.config ファイルを保存して Web サイトを再構築します。
MapXtreme v7.2
47
開発者ガイド
第 2 章 : はじめに
64 ビットの Web アプリケーションへの Web サイトの移行
Web コントロールの [ローカル コピー] プロパティが "False" に設定されていることを確認しま
す。「[ローカル コピー] プロパティを "False" に設定する (48 ページ)」を参照してください。
既存のデスクトップ アプリケーションのアップデート
旧バージョンの MapXtreme で作成したデスクトップ アプリケーションを再コンパイルできます。
このとき、コントロールをフォームに追加し直すことが必要な場合があります。
その前に、いくつかの作業を行う必要があります。
•
[ローカル コピー] プロパティを "False" に設定する
•
•
新しいアセンブリをプロジェクトに追加する
アセンブリを新しいアセンブリにリダイレクトする
[ローカル コピー] プロパティを "False" に設定する
コントロールの [ローカル コピー] プロパティが "False" に設定されていることを確認します。
MapXtreme デスクトップ コントロールを Windows フォームにドラッグすると、[ローカル コピー]
プ ロ パ テ ィ が "True" に 設 定 さ れ て いる参照が読み込まれるという既知の問題があります。
MapXtreme の参照では、グローバル アセンブリ キャッシュ (GAC) 内にあるアセンブリを指定す
る必要がありますが、[ローカル コピー] が "True" に設定されているとローカル bin パスが指定さ
れます。
ASP.NET Web アプリケーションでも、MapXtreme Web コントロールをフォームにドラッグ アン
ド ドロップした場合や、MapXtreme テンプレートに基づいていないコンソール アプリケーション
を作成する場合には、同じ動作が行われます。この場合も同じ方法で回避します。[ローカル コ
ピー] プロパティを FALSE に設定します。
MapXtreme Web アプリケーション テンプレート、または MapXtreme Web アプリケーション テンプ
レートに基づいたサンプル アプリケーションを使用している場合は、この問題は発生しません。
新しいアセンブリをプロジェクトに追加する
次の図は、MapXtreme デスクトップ アプリケーションに使用されるアセンブリを示しています。
MapXtreme アセンブリの新しいバージョンへのリダイレクト
現在のバージョンのアセンブリを使用するようにアプリケーションをリダイレクトする必要があり
ます。Microsoft では、アセンブリをリダイレクトする複数の方法を提供しています。詳細について
は、Microsoft の .NET Framework に関するデベロッパー センターを参照してください。
MapXtreme v7.2
48
開発者ガイド
第 2 章 : はじめに
Visual Studio でのアプリケーションの作成
アプリケーション構成ファイル
アプリケーション構成ファイルを使用してアセンブリのリダイレクトを行うことをお勧めしま
す。構成ファイルは、アプリケーションと同じディレクトリに配置し、アプリケーションの名前
に基づく名前にする必要があります。たとえば、myApp.exe というアプリケーションの構成ファ
イルの名前は myApp.exe.config とします。
アプリケーション構成ファイルの設定は、発行者ポリシー ファイルの設定より優先されます。
アセンブリをリダイレクトするには、現行バージョンのバージョン番号と公開キー トークンを調
べて、これをアプリケーション構成ファイルに追加する必要があります。バージョン番号の形式
は X.x.x.x です。たとえば、7.2.0.64 などとなります。
MapXtreme のアセンブリは C:\Windows\Microsoft.NET\assembly\GAC_32 にあります。
発行者ポリシー ファイル
リダイレクト設定を含む発行者ポリシー ファイルをアセンブリと一緒に GAC にインストールする
ことは可能です。ただし、Pitney Bowes Software 社ではこの構成をサポートしていません。
マシン構成ファイル
マシン構成ファイルでリダイレクト設定を指定すると、アセンブリを参照する すべての アプリ
ケーションが新しいアセンブリ バージョンを使用するようになります。マシン構成ファイルの設
定は、アプリケーション構成ファイルと発行者ポリシー ファイルの両方の設定より優先されるの
で、この方法でリダイレクトを行う場合は注意が必要です。
Visual Studio でのアプリケーションの作成
MapXtreme では、アプリケーションにマップを簡単に追加できます。Visual Basic.NET および
Visual C# のプロジェクト テンプレートを使用すれば、コードを記述しなくても、簡単なマップ ア
プリケーションを作成できます。
デスクトップ アプリケーションと Web アプリケーションのサンプルも用意されており、これを参
照したり、試したり、独自の状況に適用させたりすることができます。これらのサンプル アプリ
ケーションの使用手順については、「付録 A : MapXtreme アプリケーションを作成および展開す
る方法」を参照してください。
また、MapXtreme には、便利なマッピング機能を Web アプリケーションに追加する方法を理解す
るのに役立つ、チュートリアル アプリケーションが付属しています。各チュートリアル アプリ
ケーションには、アプリケーションの作成方法についての説明が記述されているマニュアルが付
属しています。マニュアルを参照するには、[スタート] > [プログラム] メニューからラーニング リ
ソースを表示してください。チュートリアル アプリケーションは、MapXtremeTutorials.sln とい
う 単 一 の Visual Studio ソ リ ュ ー ションにまとめられています。このソリューションは、
MapXtreme の イ ン ス ト ー ル フ ォルダの \Tutorials フォルダ (デフォルトでは c:\Program
Files\MapInfo\MapXtreme\7.x.x.\Tutorials で、7.x.x はバージョンを表します) にあります。
MapXtreme v7.2
49
開発者ガイド
第 2 章 : はじめに
Visual Studio でのアプリケーションの作成
ここでは、簡単なデスクトップ マップ アプリケーションを作成する方法について説明します。
Web アプリケーションの作成手順については、「ASP.NET Web アプリケーション」を参照して
ください。
マップ アプリケーション
L
これは Visual Basic.NET の例です。Visual C# マップ アプリケーションを作成する場合
は、以下の説明の Visual Basic を Visual C# に置き換えてください。
1. Visual Studio 2010 の [ファイル] メニューから [新しいプロジェクト] を選択します。[新しいプ
ロジェクト] ダイアログ ボックスが表示されます。
2. [新しいプロジェクト] ダイアログ ボックスの [インストールされたテンプレート] フレームで、
[Visual Basic] フォルダの [Windows] を選択します。
3. [新しいプロジェクト] ダイアログ ボックスの [テンプレート] フレームから [MapXtreme 7.x.x
MapForm アプリケーション] を選択します。
4. 適切な名前を選択して、[OK] をクリックします。MapXtreme によってアプリケーションが作
成されます。
ソリューション エクスプローラで [MapForm.vb] をダブルクリックすると、[MapForm.vb [デ
ザイン]] が表示されます。
MapXtreme v7.2
50
開発者ガイド
第 2 章 : はじめに
Visual Studio でのアプリケーションの作成
5. [デバッグ] メニューの [デバッグ開始] をクリックすると、アプリケーションが実行されます。
6. [テーブルを開く] アイコンをクリックして、データをロードします。デフォルトでは、
Program Files\MapInfo\MapXtreme\7.x.x\Samples\Data にサンプル データが格納されています。
7. マップを操作するには、他の Pitney Bowes Software マップ アプリケーションと同様、ツール
バーのコントロールを使用します。
MapXtreme v7.2
51
開発者ガイド
第 2 章 : はじめに
Visual Studio でのアプリケーションの作成
ASP.NET Web アプリケーション
ここでは、MapXtreme 7.2.0 Web アプリケーション テンプレートを使用して簡単な ASP.NET
Web アプリケーションを作成する手順を示します。このテンプレートは、IIS 6 と IIS 7/8 の両方に
対応するようにあらかじめ設定されています。
これは Visual Basic.NET の例です。Visual C# ASP.NET マップ アプリケーションを作成する場合
は、以下の説明の Visual Basic を Visual C# に置き換えてください。
1. Visual Studio の [ファイル] メニューで [新しいプロジェクト] をクリックします。[新しいプロ
ジェクト] ダイアログ ボックスが表示されます。
2. [インストールされたテンプレート] リストから [Visual Basic] を選択し、[Windows] を選択しま
す。利用可能な Web テンプレートから、MapXtreme [Classic Web] アプリケーションまたは
MapXtreme [Integrated Web] アプリケーションを選択します。
3. アプリケーションとソリューションの名前、およびプロジェクトの場所を設定します。[OK] を
クリックします。
4. ソリューション エクスプローラで MapForm.aspx をダブルクリックすると、MapControl のデ
ザイン ビューといくつかのツールが表示されます。
MapXtreme v7.2
52
開発者ガイド
第 2 章 : はじめに
Visual Studio でのアプリケーションの作成
5. プロジェクトをビルドします。
6. Visual Studio の [デバッグ] メニューで [デバッグ開始] をクリックすると、アプリケーションが
実行されます。
7. マップを操作するには、他の Pitney Bowes Software マップ アプリケーションと同様、ツール
バーのコントロールを使用します。
アプリケーションを実行できない場合は、システムで ASP.NET 状態サービスが実行されているこ
とを確認してください ([コントロール パネル] > [管理ツール] > [サービス] > [ASP.NET 状態サービ
ス])。
MapXtreme v7.2
53
開発者ガイド
第 2 章 : はじめに
テンプレートがない場合の ASP.NET Web アプリケーションの構築
MapXtreme コントロール
テンプレートを使って作成した基本的なアプリケーションは、ツール ボックス内の MapXtreme コ
ントロールを使って拡張できます。
Windows フォームを使用して作成したデスクトップ マップ アプリケーションでは、MapXtreme
の Windows コ ン ト ロ ー ル を 使 用することができます。Visual Studio ツール ボックスの
[MapXtreme Windows コントロール] タブにあるすべてのコントロールをフォームに追加できま
す。「第 7 章 : デスクトップ アプリケーション、コントロール、 ダイアログ、ツール」を参照し
てください。
MapXtreme ASP.NET Web アプリケーションの場合は、MapXtreme の Web コントロールを使用
することができます。ツール ボックスの [MapXtreme Web コントロール] タブにあるすべてのコ
ントロールをフォームに追加できます。詳細については、「第 5 章 : Web アプリケーション、コ
ントロール、 およびツール」を参照してください。
テンプレートがない場合の ASP.NET Web アプリケーションの構築
MapXtreme テンプレートを使わずに、ASP.NET マップ アプリケーションを作成することもでき
ます。たとえば、Visual Basic Web アプリケーションを作成するには、以下の操作を行います。
1. Visual Studio のメニューから [ファイル] > [新しいプロジェクト] を選択します。Visual Studio
の [インストールされたテンプレート] の下で、使用するプログラミング言語の下の [Web] セク
ションに移動します。汎用 ASP.NET Web アプリケーション テンプレートを選択し、[OK] を
クリックします。
2. ツール ボックスの [MapXtreme Web コントロール] グループからコントロールを選択し、
フォームにドラッグします。この操作により、次の MapXtreme アセンブリが参照として追加
されます。MapInfo.WebControls、 MapInfo.CoreEngine、MapInfo.CoreTypes、
MapInfo.CoreEngine.Wrapper。また、web.config ファイルにもアセンブリの情報が反映されます。
MapXtreme v7.2
54
開発者ガイド
第 2 章 : はじめに
テンプレートがない場合の ASP.NET Web アプリケーションの構築
3. このとき、MapXtreme Web コントロールとツールのデザイナに、アイコンではなく赤色の X
が表示されます。アイコンを適切に表示するには、いずれかの MapXtreme サンプル アプリ
ケ ー シ ョ ン か ら MapXtremeWebResources フォルダをコピーし、自分のプロジェクトの
Web.config および default.aspx ファイルが置かれている場所に貼り付けます。Web ページを
いったん閉じて開き直せば、アイコンが表示されます。
4. Web アプリケーションを IIS 7 のクラシック モードまたは IIS 6 で実行するには、次のコード
を Web.config ファイルにコピーします。統合パイプライン モードで実行する場合は、ステッ
プ 6 に進みます。
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="MapInfo.CoreEngine, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=93e298a0f6b95eb1" />
<add assembly="MapInfo.CoreEngine.Wrapper, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=93e298a0f6b95eb1" />
<add assembly="MapInfo.CoreTypes, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=93e298a0f6b95eb1" />
<add assembly="MapInfo.WebControls, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=0a9556cc66c0af57" />
</assemblies>
</compilation>
<sessionState mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;userid=sa;password="
cookieless="false" timeout="20" />
<httpHandlers>
MapXtreme v7.2
55
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
<add verb="*" path="MapController.ashx"
type="MapInfo.WebControls.MapController, MapInfo.WebControls,
Version=7.2.0.64, Culture=neutral, PublicKeyToken=0a9556cc66c0af57" />
</httpHandlers>
<httpModules>
<add type="MapInfo.Engine.WebSessionActivator,
MapInfo.CoreEngine, Version=7.2.0.64, Culture=neutral,
PublicKeyToken=93e298a0f6b95eb1" name="WebSessionActivator" />
</httpModules>
</system.web>
5. Web.config を保存します。プロジェクトをビルドしてアプリケーションを実行します。
6. Web アプリケーションを IIS 7 または IIS 8 の統合パイプライン モードで実行するには、次の
太字で示されているキーを <appSettings> セクションに追加します。
<appSettings>
<!--Use this setting to set config sections for Classic or
Integrated Pipeline Mode-->
<add key="MapInfo.Engine.Session.PipelineMode" value="Integrated"
/>
</appSettings>
次のコードを Web.config ファイルの <appSettings> セクションの下にコピーします。
<system.webServer>
<modules>
<add name="WebSessionActivator"
type="MapInfo.Engine.WebSessionActivator, MapInfo.CoreEngine,
Version=7.2.0.64, Culture=neutral, PublicKeyToken=93e298a0f6b95eb1" />
</modules>
<handlers>
<add name="MapController" verb="*" path="MapController.ashx"
type="MapInfo.WebControls.MapController, MapInfo.WebControls,
Version=7.2.0.64, Culture=neutral, PublicKeyToken=0a9556cc66c0af57" />
</handlers>
</system.webServer>
7. Web.config を保存します。プロジェクトをビルドしてアプリケーションを実行します。
アプリケーションの配布
MapXtreme コンポーネントをサーバ マシン上にインストールするには、付属のランタイム インス
トーラを使用するか、独自のインストーラを作成してマージ モジュール (MSM) を追加します。
NCP バージョンの MapXtreme SDK には、MXTRunNCP.exe ランタイム インストーラが付属して
います。SCP バージョンの SDK には、MXTRunSCP.exe が付属しています。
MapXtreme v7.2
56
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
ランタイム インストーラを使った配布
ランタイム インストーラ (MXTRunNCP.exe または MXTRunSCP.exe) は、カスタム インストール
の一環として使用します。ランタイム インストーラを使用する場合、MapXtreme アセンブリがイ
ン ス ト ー ル さ れ、必 要 な レ ジ ス ト リ
エントリが作成されます。これ には、必要な .NET
Framework v4.0 も含まれます。また、Web アプリケーションおよびデスクトップ アプリケーショ
ン両方のランタイム アセンブリとファイルも含まれます。さらに、ランタイム ライセンス ファイ
ル を Program Files\Common Files\MapInfo\MapXtreme\7.x.x にインストールする必要がありま
す。このファイルは、Pitney Bowes Software 社または販売店から入手できます。「展開用のラン
タイム ライセンス」を参照してください。
Web ベース アプリケーションの場合は、ランタイム インストーラを使用することをお勧めしま
す。すべてのランタイム コンポーネントがデフォルト ディレクトリにインストールされます。
ユーザが設定することはできません。
一方で、アプリケーションによっては、不要なファイルがインストールされてしまうという欠点
もあります。また、MapXtreme 対応アプリケーションを複数インストールする場合、ランタイム
インストーラ使用時には参照カウントの管理を行う必要があります。独自のインストーラで MSM
を直接使用する場合には、参照は自動的に管理されます。
ランタイム インストーラを使ったアプリケーション配布の手順
インストーラを実行するには、管理者権限が必要です。また、Web サーバをインストールするに
は、IIS 権限も必要です。
1. MapXtreme 製品メディアから、[インストール] を選択します。インストール オプション ペー
ジが表示されます。
2. [展開インストール] を選択してから、[ランタイム環境のインストール] を選択します。インス
トール ウィザードが開きます。
3. ウィザードの指示に従って、インストール作業を進めます。
4. 必要に応じた手段で Windows アプリケーションまたは Web アプリケーションを配布します。
たとえば、Visual Studio でデプロイメント プロジェクトを作成し、アプリケーションを追加し
ます。
5. 64 ビットと 32 ビットのどちらのランタイムをインストールするかに応じて、Program FIles
または Program Files(x86) の下の \\Common Files\MapInfo\MapXtreme\7.x.x にランタイム ラ
イセンス ファイルをインストールします。
コマンド ラインからランタイム インストーラを実行するには、次の手順に従います。ランタイム
インストーラの実行可能ファイルは、製品メディアの [CD ルート]:\Install\InstallRuntime フォルダ
にあります。
•
最小限の UI でランタイム インストーラを実行するには、次のコマンド ラインを使用します。
MXTRunNCP.exe /v"/qb"
•
UI なしでランタイム インストーラを実行するには、次のコマンド ラインを使用します。
MXTRunNCP.exe /v"/qn"
MapXtreme v7.2
57
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
コピー プロテクトされている MapXtreme ソフトウェアを使用している場合、ランタイム インス
トーラの実行可能ファイルは MXTRunSCP.exe です。
カスタム インストーラを使った配布
Windows インストーラ テクノロジ (MSI) を使用してカスタム インストーラを作成し、MapXtreme
マージ モジュールを追加します。マージ モジュール (MSM ファイル) は、コンポーネントのイン
ストールに必要なファイル、リソース、レジストリ エントリ、セットアップ ロジックを 1 つに格
納したパッケージです。マージ モジュールは、単独ではインストールできないので、MSI ファイ
ルに組み込む必要があります。インストールするコンポーネントを細かく指定する場合、または
MSI を使ったインストーラを独自に作成する場合にこの方法を使用します。
ただし、MSM を使うという方法には、Pitney Bowes Software が製品を更新した場合に、ユーザ
がパッチを作成するかインストーラを更新しなければならないという欠点があります。
一方、インストールするコンポーネントを制御でき、さらに、参照カウントが自動的に管理され
るという利点があります。各バージョンのアセンブリは GAC (Global Assembly Cache) に一度だ
けコピーされ、このアセンブリを使用するアプリケーションごとに参照カウントが管理されま
す。アセンブリを使用するアプリケーションが 1 つ削除されると参照カウントの値は 1 だけ小さ
くなり、アセンブリは GAC 内に保持されます。このアセンブリを使うアプリケーションがすべて
削除されると、アセンブリ自体が削除されます。
MSI インストーラの作成するための開発ツールもいくつか用意されています。たとえば、
InstallShield Developer (Acresso Software Corporation) や Visual Studio (Microsoft) などです。詳細に
ついては、Microsoft MSDN ライブラリの Windows インストーラのトピックを参照してください。
MapXtreme v7.2
58
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
MapXtreme マージ モジュール
MapXtreme 用のマージ モジュールを以下に示します。必要に応じて、インストーラ MSI で使用し
てください。マージ モジュールの使用方法の詳細については、「デスクトップ アプリケーション
のパッケージ化」を参照してください。
各 MSM フ ァ イ ル 名 に あ る 7.x.x は、製品の現在のバージョンを表しています。MSM は、
\Program Files\Common Files\Merge Modules に格納されています。
マージ モジュールの名前
カスタム シンボル
含まれるアセンブリ
目的
必要となる
状況
なし。
カスタム シンボ アプリケー
ションでス
ルが含まれま
トック
す。
ビットマッ
プ シンボ
ルを使用す
る場合に必
要です。
デスクトップ
MapInfo.Windows
MapInfoDesktop_7.x.x.msm
MapInfo.Windows.Dialogs
C# および VB
の .NET デスク
トップ アプリ
ケーションに使
用する .NET コ
ントロールのア
センブリが含ま
れます。
アプリケー
ションでデ
スクトップ
ツールを使
用する場合
に必要で
す。
MapInfo フォン
ト (Symbols、
Cartographic、
Real Estate、
Arrows、
Miscellaneous、
Oil&Gas、
Transportation、
Weather、およ
び Shields) が含
まれます。
アプリケー
ションでス
トック
TrueType®
フォントを
使用する場
合に必要で
す。
MapInfoCustSymb_7.x.x.msm
MapInfo.Windows.Framework
MapInfo.CommonDialogExt
フォント
なし。
MIFonts_7.x.x.msm
MapXtreme v7.2
59
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
マージ モジュールの名前
含まれるアセンブリ
マッピング
MapInfo.CoreEngine
MapInfoCoreEngine_7.x.x.msm
MapInfo.CoreEngine.Wrapper
MapinfoMXTConfig_7.x.x.msm
MapInfo.CoreTypes
MapInfoCoreEngineIntl.msm *
MapInfo.WMS.Client
MapInfoCoreResJPN_7.x.x.msm †
MapInfo.Windows.Printing
MapInfoCoreResCHN_7.x.x.msm ‡
MapInfo.Ellis.ExtensibleData
Provider
目的
必要となる
状況
中核となるマッ
ピング機能を提
供します。これ
によって、これ
らのアセンブリ
用の共通の構成
とデフォルト参
照を含むファイ
ルもインストー
ルされます。
必須です。
.NET アセンブリ
MapInfo.Web、
および Web
ベースのアプリ
ケーションに使
用する各種
Web リソース
をインストール
します。
ストック
Web コン
トロールを
使用するす
べてのアプ
リケーショ
ンで必要で
す。
MapInfo.LinearReferencing
MapInfo.Ogc
MapInfo.WorkspaceManager.
Extension
Web コントロール
MapInfo.Web
MapInfoWeb_7.x.x.msm
MapInfo.WebControls
ASPNetState
サービスの開
始、および (IIS
がインストール
されている場合
は) Web リソー
ス用の仮想ディ
レクトリの作成
も行います。
Web サービス クライアント
MapInfo.Services
MapInfoServices_7.x.x.msm
MapXtreme v7.2
60
ジオコードおよ
びルーティング
用のアセンブリ
が含まれます。
アプリケー
ションでジ
オコードお
よびルー
ティングを
必要とする
場合に必要
です。
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
マージ モジュールの名前
WFSwfs
含まれるアセンブリ
必要となる
状況
MapInfo.WFS.Server
WFS に必要な
アセンブリが含
まれます。
アプリケー
ションで
WFS (Web
Feature
Service) を
使ってデー
タを変換す
る場合に必
要です。
MapInfo.WMS.Server
WMS に必要な
アセンブリが含
まれます。
アプリケー
ションで
WMS (Web
Map
Service) を
使ってデジ
タル イ
メージを取
得する場合
に必要で
す。
MapInfoWFS_7.x.x.msm
WMS
目的
MapInfoWMS_7.x.x.msm
*
MapXtreme SCP で作成したアプリケーションを配布する場合に使用します。
†
MapXtreme JPN で作成したアプリケーションを配布する場合に使用します。
‡
MapXtreme CHN で作成したアプリケーションを配布する場合に使用します。
カスタム インストーラによるアプリケーションの配布
独自に作成したインストーラを使って MapXtreme の配布を行うには、次の手順を実行します。
1. 必要な MSM を追加します。
Visual Studio と InstallShield では、追加するマージ モジュールの参照先として、
C:\Program Files\Common Files\Merge Modules がデフォルトで指定されています。この参照
先を使用すれば、開発環境を再設定しなくても、すぐにインストーラを作成できます。
2. ランタイム ライセンス ファイルを追加します。
Web アプリケーションの展開
Web アプリケーションのデプロイメントを自分で作成する場合は、MSM を手動で追加する必要が
あります。Web セットアップ プロジェクトは Web.config ファイル内で参照されるアセンブリを検
出しません。このため、アセンブリ (およびその MSM) が参照先として検出されません。MSM を手
MapXtreme v7.2
61
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
動で追加するには、Web セットアップ プロジェクトを右クリックして [追加]、[マージ モジュール]
をクリックします。MapInfoCoreEngine_7.x.x、MapInfoMXTConfig_7.x.x、MapInfoWeb_7.x.x、お
よび必要に応じてその他の MSM を選択します。
データにアクセスするアプリケーションの配布
データ アクセスを実行するすべての Visual Basic アプリケーションまたは Visual C# アプリケー
ションで、MDAC (Microsoft Data Access Components) バージョン 2.7 以降が必要です。これらの
アプリケーションを実行するには、アプリケーションをインストールする前に MDAC をインス
トールしておく必要があります。
プロキシ サーバの背後に展開される MapXtreme Web アプリケーション
Web アプリケーションをプロキシ サーバの背後に展開する場合は、MapXtreme サーバの URL を
プロキシ サーバのバイパス キャッシュ リストに追加してください。こうすることにより、対象と
なる各リクエストが MapXtreme によって動的にマッピングされます。
プロキシ サーバによる表示には、キャッシュされたイメージが使用されます。ただし、MapXtreme
のイメージは、リクエストのたびに生成されます。そのため、プロキシ サーバの背後に置かれた
Web アプリケーションの場合、イメージがキャッシュに送信されません。Web アプリケーションで
は、マップ イメージが表示されずに赤色の X が表示されます。
配布する Web アプリケーションの一時ディレクトリへのアクセス権限
Web アプリケーションの配布では、統合セキュリティを使用する場合、サイトにアクセスするす
べてのユーザに、一時ディレクトリおよびその他のリソースにアクセスする権限があるようにし
ます。MapXtreme は ASP.NET プロセス空間で実行され、このプロセスは、IIS プロセスから渡さ
れるセキュリティ トークンを使って実行されます。ログインするユーザ全員にこのディレクトリ
へ の ア ク セ ス 権 を 付 与 す る こ と が 必 要 で す。匿 名 ア ク セ ス を 使 用 す る 場 合、
IUSR_LocalMachineName システム アカウントに一時ディレクトリへのアクセス権を付与する必
要があります。MapXtreme は、現在の TEMP 環境設定から一時ディレクトリを認識します。
アプリケーション データ ファイル
アプリケーション データ ファイルは、アプリケーションが使用する実行可能でないファイルで
す。MapXtreme では、以下のアプリケーション データ ファイルがインストールおよび使用されま
す。ファイルが格納される場所の変更については、「アプリケーション データ ファイルの場所」
を参照してください。
ファイルの種類
ファイル名
略語ファイル
MAPINFOW.ABB
ペン ファイル
MAPINFOW.PEN
MapXtreme v7.2
62
開発者ガイド
第 2 章 : はじめに
アプリケーションの配布
ファイルの種類
ファイル名
投影法ファイル
MapInfoCoordinateSystemSet.xml
ベクトル シンボル ファイル
MapInfow.fnt
カスタム シンボル ディレクトリ
CustSymb
Nadcon のファイル
*.las、*.los
jgd2000 のファイル
jgd2000.*
MapXtreme のアプリケーションでは、デフォルトで以下のディレクトリにあるデータ ファイルが
検索されます。
•
•
Program Files\Common Files\MapInfo\MapXtreme\7.x.x - MapXtreme のインストーラによって
これらのファイルが配置されるディレクトリです。
アプリケーションがあるディレクトリ - Windows アプリケーションの場合、.exe ファイルがあ
るディレクトリです。Web アプリケーションの場合、Web.config ファイルがあるディレクト
リです。
展開インストールのトラブルシューティング
展開インストールのトラブルシューティングを行う際には、次の質問に対する答えを明らかにし
ておく必要があります。
•
アプリケーションの展開に何を使用したか (ランタイム、SDK、Setup.exe、NCP/SCP など)。
•
•
ライセンス ファイルが C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x に格納され
ているか。
コンピュータ上に追加の .lic ファイルがあるか。ある場合は、削除します。
•
•
展開先コンピュータ上のユーザが管理者としてログオンしているか。
展開先コンピュータに 4.0 Framework がインストールされているか。
•
展開先コンピュータ上で CoreEngine が COM+ アプリケーションとして登録されているか。
•
コンピュータに Visual C++ 10.0 CRT (ランタイム) がインストールされているか。
MapXtreme v7.2
63
開発者ガイド
マッピングの概念
マッピングの基本的な概念を理解し、このような概念が MapXtreme でどのよ
うに実装されているかを把握しておくと、マッピング アプリケーションを作
成する上で役立ちます。この章では、MapXtreme について学習する上で、共
通の概念について説明します。
開発者ガイドの最後には、マッピングやプログラミングに関する「付録 L : 用
語集」が付属しているので、活用してください。
この章の構成
Š
Š
Š
マッピングと MapXtreme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
MapXtreme でのジオコード化 . . . . . . . . . . . . . . . . 69
MapXtreme でのルーティング . . . . . . . . . . . . . . . . 70
3
第 3 章 : マッピングの概念
マッピングと MapXtreme
マッピングと MapXtreme
マッピング アプリケーションの中心となる要素は、マップです。この章では、MapXtreme を使っ
てアプリケーションを作成する際、よく使用される重要な用語を簡単に説明します。また、技術
的な情報をすぐに参照できるように、MapXtreme オブジェクト モデルの名前空間についても説明
します。この章のトピックを以下に示します。
Š
Š
Š
Š
Š
Š
Š
Š
Š
「マップ」
「テーブル」
「レイヤ」
「フィーチャ」
「ラベルと凡例」
「主題図」
「ツール」
「ワークスペース」
「座標系と投影法」
マップ
マップは、市町村、顧客の所在地、電源供給ラインなど、マップ フィーチャ間の空間関係を表示
します。マップは、このようなフィーチャの位置や説明を視覚的に示します。フィーチャの他に
も、ラベル、タイトル、凡例、主題図などの要素をマップに追加できます。主題図は、マップ上
のフィーチャや情報に関する操作に基づいて作成されます。
マップは MapControl に含まれます。MapControl は、マップを表示するための標準的なツール (移
動、拡大、縮小、中心) も提供します。
マップはさまざまな方法で作成できます。
•
マップ ワークスペースを作成および保存するには、MapXtreme ワークスペース マネージャを
使用します (「ワークスペース マネージャの機能」を参照)。
•
MapXtreme テンプレートでは、Visual Studio フォームにドラッグ アンド ドロップできる
MapControl を作成できます (デスクトップ アプリケーションの場合は「第 7 章 : デスクトップ
アプリケーション、コントロール、 ダイアログ、ツール」、Web アプリケーションの場合は
「第 5 章 : Web アプリケーション、コントロール、 およびツール」を参照)。
•
プログラムを使ってアプリケーションにマッピングを組み込むには、MapXtreme オブジェク
ト モデルを使用します (「MapFactory」、および『開発者リファレンス』 (オンライン ヘル
プ) の MapInfo.Mapping 名前空間を参照)。
テーブル
テーブルには、マップ上に表示したいデータが格納されています。テーブルは、ジオメトリ、スタ
イル、属性を含む、フィーチャ情報のレコードとフィールドを保持しています。MapXtreme では、
MapInfo 標準のテーブル (MapInfo .TAB)、リレーショナル データベース管理システム (RDBMS)、
dBase、MS Access、ASCII ファイル、ESRI ShapeFiles など、さまざまなソースのテーブルがサ
ポートされています。また、ラスタ、グリッド、シームレス、ビュー、WMS、ADO.NET などの特
MapXtreme v7.2
65
開発者ガイド
第 3 章 : マッピングの概念
マッピングと MapXtreme
殊なテーブルもあります。テーブルのタイプは、TableInfo クラスを通じて使用できます。テーブル
を開いたり閉じたりするには、MapInfo.Data 名前空間の Catalog を通じて行います。「第 8 章 :
データでの作業」を参照してください。
レイヤ
マップはレイヤで構成されます。レイヤには、郵便番号の境界、学区、番地などのマップ フィー
チャが含まれます。レイヤの順番を理解することが重要です。一番下のレイヤが最初に描画さ
れ、一番上のレイヤが最後に描画されます。レイヤ内に、他のレイヤのフィーチャに重なる
フィーチャがある場合は、それぞれ、他のレイヤよりも下に配置する必要があります。たとえ
ば、境界領域のレイヤはポイントのレイヤより下に配置する必要があります。
MapXtreme では、レイヤは、フィーチャだけなく、さらに多機能になっています。ラスタ イメー
ジやグリッド イメージ、シームレス マップ (結合マップ) の表示や、ラベルやユーザ描画のフィー
チャ、円グラフ主題図のようなオブジェクト主題図を含めることが可能です。レイヤをグループ
化すると、配置やフィーチャのアニメーションを簡単に実行できます。主なインターフェイスは
IMapLayer です。詳細については「Layers」を参照してください。
フィーチャ
フィーチャは、ジオメトリ、スタイル、データ ソース、キー、および属性で記述されています。通
常、フィーチャはテーブル内の行です。サポートされているジオメトリには、指定した領域を覆う
閉じたオブジェクト (Polygons、MultiPolygons、Rings、Rectangle、RoundedRectangles、および
Ellipses)、データの 1 つの位置を表すポイント オブジェクト (Points、MultiPoints)、および、指定し
た距離を覆うライン オブジェクト (Curves、MultiCurves、および LegacyArcs) があります。
コンピュータ処理されたマップの主な用途の 1 つとして、フィーチャに関する情報を収集すると
いうことがあります。MapXtreme では、スキーマを使って新規に作成する方法、選択ツールやメ
ソッドを使って選択する方法、条件に基づいて Catalog を検索する方法など、いずれの方法でも
フィーチャは FeatureCollections で返されます。
Feature クラスは、MapInfo.Data 名前空間に含まれています。
MapXtreme v7.2
66
開発者ガイド
第 3 章 : マッピングの概念
マッピングと MapXtreme
ラベルと凡例
マップは、表示内容についての説明がなければ、あまり役に立ちません。マップには、ラベルや凡
例といったテキストが必要です。ラベルは、LabelLayer という種類のレイヤに含まれます。このレ
イヤでは、表示と非表示、位置、スタイル、内容など、ラベルのあらゆる機能を制御できます。ラ
ベルの操作について、 MapXtreme で提供されているクラスには、LabelSources、LabelProperties、
LabelModifiers などがあります。「MapInfo.Mapping 名前空間とは」を参照してください。
この他にも、マップの内容を正確に伝えるためのテキスト要素を使用できます。凡例は、記号を
使ってフィーチャを示す地図要素です。たとえば、学区などの境界、送電線などのライン、企業
の支店所在地などのポイントを示します。また、マップをまとめて表現するタイトルにも使用で
きます。
MapXtreme では、凡例はマップ タイトルやスケール バーと一緒に Adornments クラスに含まれま
す。Adornments は、MapInfo.Mapping 名前空間に含まれています。
主題図
コンピュータ処理したマップは、マップ フィーチャの空間的な関係を視覚的に表現するだけでな
く、フィーチャに関連付けられたデータを分析することによって、更に詳細な情報をとらえるこ
とができます。代表的な分析手法の 1 つとして、特定の基準に基づいてフィーチャ レイヤのデー
タを順位付けし、これを元に主題図を作成する方法があります。たとえば、レンジ主題図は、同
じ条件を満たすフィーチャごとに、色分けしたブロックで示されます。サイズ可変シンボル主題
図は、人口の大きさによってシンボルのサイズを変更して人口の分散状況を示す場合などに便利
です。
MapXtreme v7.2
67
開発者ガイド
第 3 章 : マッピングの概念
マッピングと MapXtreme
主題図は、ラベル用に作成することもできます。たとえば、市の人口の大きさを相対的に示す場
合には、レンジ ラベル主題図を使用できます。ラベルのサイズが大きいほど、人口が多いことを
示します。
MapInfo.Mapping.Thematics 名前空間には、主題図を、フィーチャ レイヤに対するスタイル オー
バーライドとしてインプリメントするクラス、およびオブジェクト主題図としてインプリメント
するクラスが含まれています。修飾子主題図ではスタイルを変更し、オブジェクト主題図では新
しいレイヤを追加します。すべての主題図は ITheme インターフェイスをインプリメントします。
ツール
ほとんどのマッピング アプリケーションにツールバー ボタン (ツール) が用意されています。これ
らのツールは、一般的な描画タスク (マップ上にラインを描画するなど) および移動タスク (拡大な
ど) を実行する際に役立ちます。また、 MapXtreme にはマッピング ツールが用意されているだけ
でなく、ユーザが独自にツールを作成することもできます。
ツールは、デスクトップ ツールと Web ツールに分類され、対応する名前空間 (デスクトップの場
合は MapInfo.Tools 名前空間、Web ツールの場合は MapInfo.WebControls 名前空間) に含まれる
ツールごとに API があります。
MapXtreme のデスクトップ ツールの詳細については、「MapXtreme デスクトップ ツール API」
を参照してください。Web ツールの詳細については、「第 5 章 : Web アプリケーション、コント
ロール、 およびツール」を参照してください。
ワークスペース
ワークスペースは、厳密に言うとマッピングの概念には含まれませんが、ワークスペースを使用
することにより、マッピング要素の操作を簡易化できます。MapXtreme は、MWS 拡張子を使っ
た XML ベースのワークスペース形式をサポートしています。これには、マップの設定が含まれま
す。ワークスペースの形式については、「付録 C : MapInfo ワークスペースについて」を参照して
ください。MapXtreme では、ワークスペース マネージャというユーティリティが提供されている
ので、ワークスペースを作成して保存しておくことが可能です。「第 23 章 : ワークスペース マ
ネージャ」を参照してください。
MapXtreme v7.2
68
開発者ガイド
第 3 章 : マッピングの概念
MapXtreme でのジオコード化
座標系と投影法
座標系と投影法の 2 つは、マッピングの重要な概念であり、基本的な内容を理解しておく必要が
あります。投影法とは、紙の地図やコンピュータの画面などの平面にマップを表示する方法で
す。一方、座標系はマップ フィーチャを空間的に配置する方法です。アプリケーションの開発、
特に空間的な精度を重視する場合には、この 2 つを慎重に検討する必要があります。
投影法は、球状のオブジェクトを平面に表示したときに発生するひずみを少なくするための方法
です。面積を正しく表示する方法とフィーチャの形状を正しく表示する方法の 2 つがトレードオ
フの関係にあるという点に注意が必要です。さまざまな種類の投影法がありますが、それぞれが
特定のひずみを低減することを目的に設計されています。たとえば、形状を正しく表示する投影
法や、面積、距離、方向などを正しく表示する投影法があります。
座標系とは、オブジェクトの位置座標を解釈する方法を示す一連のパラメータです。このパラ
メータの 1 つが 投影法になります。座標系には、球面座標系と平面座標系の 2 種類があります。
球面座標は地球の曲面上の位置を示すのに対して、平面座標は平面上の位置を 2 次元で示しま
す。いずれの座標系も、x および y 座標で表現します。このような座標系には、道路や川など、地
球上での絶対的な位置を示すフィーチャについて、距離や面積の計算で誤差が出る方法 (球面座標)
と、脳の構造やチェス盤など、相対的な位置の計算で誤差が出る方法 (平面座標) があります。
アプリケーションの開発では、マップでどのような座標系が使用されているかを理解することが
重要です。バッファ、ルーティング、クエリなどの距離および面積の計算を実行する分析処理で
は、座標系や投影法を使って精度の高い結果を計算します。
座標系と投影法のクラスは、MapInfo.Geometry 名前空間に含まれます。詳細については「第 16
章 : 空間オブジェクトと座標系」を参照してください。
MapXtreme でのジオコード化
これまで説明してきたマップで使用されるデータには、表示される内容よりも多くの情報が含ま
れています。たとえば、店舗の所在地が含まれるテーブルには、店舗を正しい位置に配置するた
めの地理的な座標系だけでなく、営業時間、顧客サービスの電話番号、責任者の氏名など、所在
地に関するデータも含まれていることがあります。このようなデータをアプリケーションで使用
すれば、強力な分析機能を発揮でき、テーブルの行や列からさまざまな情報を取り出すことがで
きます。
一般的に、カスタム データで構成されるテーブルは、道路、市町村、水路など、実際の環境を示
すフィーチャである参照レイヤと一緒に、マップに含まれています。このような参照レイヤは、
通常の場合は市販されているので、マップ上ですぐ表示できます。Pitney Bowes Software は、世
界中の位置情報を網羅した各種参照データを販売しています。また、MapXtreme では、400 MB
を超える世界各国のサンプル データが提供されています。インストールするには、MapXtreme 製
品の CD ブラウザで [サンプル データのインストール] を選択します カスタム インストール オプ
ションを使用して、このデータ セットを必要な分だけインストールします。
ただし、ユーザが所有する店舗の所在地やコール センター地域などのカスタム データについて
は、マップですぐ表示できない場合があります。テーブルには、地理的な座標系が必要であり、こ
れによって、マッピング エンジンはオブジェクトの描画位置を認識できます。座標系をデータに割
MapXtreme v7.2
69
開発者ガイド
第 3 章 : マッピングの概念
MapXtreme でのルーティング
り当てる処理を、ジオコード化と呼びます。住所や郵便番号などの位置情報を含むテーブルは、ジ
オコード化が可能です。この処理では、カスタム テーブルを、ジオコード化済みの、同じ位置情報
を持つテーブルと照合します。住所が一致すると、ジオコード化されたテーブルの座標系がカスタ
ム データに割り当てられます。これで、カスタム データはマップに表示可能になります。
ジオコード化は、マップ作成作業の早い段階で実行されます。マッピング アプリケーションの開
発では、マップで表示するデータの種類やジオコード化の必要性を検討する必要があります。
MapXtreme フレームワークでは、ジオコード化を実行する Pitney Bowes Software サーバ製品へ
のアクセスが可能なジオコード化クライアントを使用するために、クラスが提供されています (こ
の機能は日本語版では利用できません)。ジオコード化の詳細については、「第 18 章 : ジオコー
ド」と、オンライン ヘルプ (Visual Studio でアクセス可能) の MapInfo.Geocoding 名前空間を参照
してください。
MapXtreme でのルーティング
MapXtreme が提供している開発コンポーネントの 1 つに、ルーティングがあります。カーナビ
ゲーション アプリケーションや、配送ルートおよびケーブル敷設ルートの計画を立てるアプリ
ケーションでは、ルーティングを利用します。一般的には、距離や移動時間が最短になるルート
を探すことを目的とします。
MapXtreme は、ポイントツーポイント ルーティング、マルチポイント ルーティング、マトリック
ス ルーティング、および等値線ルーティングの 4 種類のルーティングを提供しています。それぞ
れの種類に、ニーズに適したルーティング ネットワークを作成するための多くのオプションが用
意されています。
ジオコード化と同様に、MapXtreme にはあらかじめ設定されたルーティング クライアントがアプリ
ケーションに用意されています。これを使用して Pitney Bowes Software 社のルーティング サーバ製
品と対話します (この機能は日本語版では利用できません)。詳細については、「第 20 章 : ルーティ
ング」と、MapXtreme オンライン ヘルプの MapInfo.Routing 名前空間を参照してください。
MapXtreme v7.2
70
開発者ガイド
4
MapXtreme のアーキテク
チャ
この章では、ユーザが開発ニーズに応じて適切な方針を選択できるように、
MapXtreme のアーキテクチャについて説明します。この製品のアーキテク
チャを理解することは、この製品の特徴と機能を効率的に利用するアプリケー
ションを作成する上で役立ちます。
この章の構成
Š
Š
Š
Š
Š
MapXtreme アーキテクチャ . . . . . . . . . .
オブジェクト モデルの概要 . . . . . . . . . .
アプリケーションのアーキテクチャ. . . . . . .
Web アプリケーションのアーキテクチャ . . . .
デスクトップ アプリケーションのアーキテクチャ
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
72
73
76
77
79
第 4 章 : MapXtreme のアーキテクチャ
MapXtreme アーキテクチャ
MapXtreme アーキテクチャ
MapXtreme は、Microsoft .NET Framework 上に構築されており、そのインフラストラクチャに含
まれる機能を利用しています。Pitney Bowes Software イニシアチブ では、.NET Framework 上に
おけるアプリケーション開発の優れた生産性と適応性を有効に活用できます。また、当社では、
当社の Windows 製品の強力な機能と使いやすさを 1 つにまとめた総合的なオブジェクト モデルを
提供するために大きな努力を払ってきました。オブジェクト モデルは、Pitney Bowes Software の
パートナーと顧客のみならず Pitney Bowes Software 自身にとっても、近い将来に Windows ベー
スの製品を開発する基盤となるものです。
同様のコードを使用して、デスクトップまたは Web に導入可能なアプリケーションを開発できま
す。アプリケーションをデスクトップ用として開発した場合は、そのコードに最小限の変更を加
えるだけで、そのアプリケーションを Web アプリケーションに作り替えることができます。
MapXtreme のアーキテクチャの概要を次の図に示します。MapInfo.CoreEngine.dll アセンブリと
MapInfo.CoreTypes.dll アセンブリには、中核となるマッピング機能とデータ アクセス機能が含ま
れています。中核となるエンジンの最上部には、コントロール、ツール、および各導入環境に固
有の機能を含む MapInfo.Windows 名前空間と MapInfo.Web 名前空間があります。MapXtreme オ
ブジェクト モデルから開発されるすべてのアプリケーションは、MapInfo.Windows 名前空間また
は MapInfo.Web 名前空間の上に構築されます。
MapXtreme アーキテクチャ
MapXtreme v7.2
72
開発者ガイド
第 4 章 : MapXtreme のアーキテクチャ
オブジェクト モデルの概要
オブジェクト モデルの概要
MapXtreme オブジェクト モデルは、多数の名前空間で構成されています。.NET 名前空間は、特
定のクラス、メソッド、およびプロパティを、同じ名前を持つ他のものから区別するための型分
類システムです。.NET 開発者は、名前空間を使用することにより、オブジェクト名の競合および
オブジェクト内のメソッド名やプロパティ名の競合を回避できます。
MapXtreme には、主要なインターフェイスおよびクラスの一覧と、名前空間によって分離された
インターフェイスやクラス間の相互関係を示すフルカラーのポスターが同梱されています。この
ポスターの PDF 版は、Windows の [スタート] メニューからアクセス可能なラーニング リソース
のページで表示できます。ラーニング リソースのページを表示するには、[スタート] > [すべての
プログラム] > [MapInfo] > [MapXtreme] > [ラーニング リソース] を選択してください。
以下に、MapXtreme オブジェクト モデルでインプリメントされている名前空間の一部を示しま
す。各名前空間の全体的な概要については、以降のセクションで説明します。説明の中に、詳細
な説明と使用方法が記載された箇所を示す参照が記載されています。
•
「MapInfo.Data 名前空間」
•
「MapInfo.Data.Find 名前空間」
•
「MapInfo.Engine 名前空間」
•
「MapInfo.Geometry 名前空間」
•
「MapInfo.Mapping 名前空間」
•
「MapInfo.Persistence 名前空間」
•
「MapInfo.Raster 名前空間」
•
「MapInfo.Styles 名前空間」
•
「MapInfo.WebControls 名前空間」
•
「MapInfo.Tools 名前空間」
•
「MapInfo.Geocoding 名前空間」
•
「MapInfo.Routing 名前空間」
Visual Studio に統合されている『MapXtreme 開発者リファレンス』では、オブジェクト モデルの
すべての情報を名前空間ごとに整理された形で参照できます。
MapX または非 .NET バージョンの MapXtreme (Windows v3 対応の MapXtreme) を使用されてい
たユーザの方は、「付録 J : MapXtreme への移行」を参照して、新旧の製品のオブジェクト モデ
ルの相違点を確認してください。
MapInfo.Data 名前空間
MapInfo.Data 名前空間には、MapInfo データ プロバイダをインプリメントするクラスやインター
フェイスが含まれています。オブジェクト モデルでは、データにアクセスするためのクラスとし
て、複数の異なるクラスが用意されています。データにアクセスするには、そのデータの格納形
式に対応した特定のクラスを使用します。また、現在のオブジェクト モデルでは、対応するクラ
スが用意されていない形式で格納されたデータのために、ADO.NET アクセスがインプリメントさ
れています。MapInfo.Data 名前空間の詳細については、「第 8 章 : データでの作業」および
「第 11 章 : DBMS のデータへのアクセス」を参照してください。
MapXtreme v7.2
73
開発者ガイド
第 4 章 : MapXtreme のアーキテクチャ
オブジェクト モデルの概要
MapInfo.Data.Find 名前空間
MapInfo.Data.Find 名前空間には、データの検索に使用するクラスが含まれています。この名前空
間は、検索対象となるマップ作成可能なテーブルとフィールド (インデックス付き) を指定するこ
とにより、オブジェクトの検索を容易にします。MapInfo.Data.Find 名前空間の詳細については、
「第 13 章 : 場所の検索」を参照してください。
MapInfo.Engine 名前空間
MapInfo.Engine 名前空間には、MapXtreme ベースのすべてのアプリケーションの実行に必要な中
核機能に直接関係するクラスがすべて含まれています。この名前空間には、すべての MapXtreme
アプリケーション操作の開始点となる中核 Session クラスが含まれます。MapInfo.Engine 名前空
間の詳細については、「第 9 章 : 中核 MapXtreme クラスでの作業」を参照してください。
MapInfo.Geometry 名前空間
MapInfo.Geometry 名前空間は、OGC (Open GIS Consortium) 標準、座標システム相互運用、およ
びオブジェクト処理に基づく拡張可能な階層です。MapInfo.Geometry 名前空間には、Geometry
オブジェクトを作成および編集するための、クラス、インターフェイス、列挙体が含まれます。
MapInfo.Geometry 名前空間の詳細については、「第 16 章 : 空間オブジェクトと座標系」を参照し
てください。
MapInfo.Mapping 名前空間
MapInfo.Mapping 名前空間には、マップ、レイヤ、修飾子、および、ラベルを作成、表示、エクス
ポートするためのクラス、インターフェイス、および列挙体が含まれています。MapInfo.Mapping
名前空間の詳細については、「第 12 章 : アプリケーションへのマッピング機能の追加」を参照し
てください。
MapInfo.Mapping.Legends 名前空間
MapInfo.Mapping.Legends 名前空間には、地図凡例および主題図凡例を作成および表示するため
のクラス、インターフェイス、および列挙体が含まれています。詳細については、「Legends」
および「主題図と凡例の使用」を参照してください。
MapInfo.Mapping.Thematics 名前空間
MapInfo.Mapping.Thematics 名前空間には、レイヤのスタイルおよびレイヤ自身として主題図をイ
ンプリメントするクラスが含まれます。主題図を修飾子主題図に適用してスタイルを変更した
り、オブジェクト主題図で新しいレイヤを追加したりできます。すべての主題図は ITheme イン
ターフェイスをインプリメントします。MapInfo.Mapping.Thematics 名前空間の詳細については、
「第 14 章 : 主題図と凡例の使用」を参照してください。
MapXtreme v7.2
74
開発者ガイド
第 4 章 : MapXtreme のアーキテクチャ
オブジェクト モデルの概要
MapInfo.Persistence 名前空間
MapInfo.Persistence 名前空間には、XML ベースのワークスペースの読み取りと書き込みをサポー
トするクラスが含まれ、マッピング ワークスペースの保存と取得が可能になります。「付録 C :
MapInfo ワークスペースについて」を参照してください。
MapInfo.Raster 名前空間
MapInfo.Raster 名前空間は、Pitney Bowes Software の C/C++ Raster API と Grid API の全機能を
提供します。MapInfo.Raster.RasterRead を使用すると、ラスタ イメージをクエリの対象として開
くことができます。MapInfo.Raster.GridRead を使用すると、グリッド イメージをクエリの対象と
して開くことができます。MapInfo.Raster.HillshadeWrite を使用すると、既存のグリッドに陰影処
理を追加できます。MapInfo.Raster 名前空間には、この他に MapInfo.Raster.RasterInfo クラスお
よび MapInfo.Raster.GridInfo クラスなどが含まれています。MapInfo.Raster 名前空間の詳細につ
いては、「第 17 章 : ラスタとグリッドの操作」を参照してください。
MapInfo.Styles 名前空間
MapInfo.Styles 名前空間は、Styles オブジェクト モデルを強調表示します。Styles クラスは、すべ
てのスタイルのベース クラスです。MapInfo.Styles 名前空間の詳細については、「第 15 章 : マッ
プのスタイル設定」を参照してください。
MapInfo.WebControls 名前空間
MapInfo.WebControls 名前空間は、MapXtreme ASP.NET アプリケーション用の Visual Studio テン
プレートを使用するためのサポートを提供しています。この名前空間から、MapControl および
LayerControl の設計時拡張機能のほか、Web ツールを使用できます。MapInfo.WebControls 名前
空間の詳細については、「第 5 章 : Web アプリケーション、コントロール、 およびツール」を参
照してください。
MapInfo.Windows 名前空間
MapInfo.Windows 名前空間には、Windows アプリケーションのフォームを開発する際に使用する
各種 Windows コントロールと必須コンポーネントをインプリメントするクラスが含まれていま
す。Windows.Dialogs 名前空間には、Windows アプリケーションで使用される各種ダイアログ
ボックスおよびダイアログ ボックス コンポーネントをインプリメントするクラスが含まれていま
す。MapInfo.Windows 名前空間の詳細については、「第 7 章 : デスクトップ アプリケーション、
コントロール、 ダイアログ、ツール」を参照してください。
MapXtreme v7.2
75
開発者ガイド
第 4 章 : MapXtreme のアーキテクチャ
アプリケーションのアーキテクチャ
MapInfo.Tools 名前空間
MapInfo.Tools 名前空間には、デスクトップ マップ アプリケーションで使用される多くの種類の
ツールを作成およびインプリメントするためのクラスが含まれています。MapInfo.Tools 名前空間
の詳細については、「MapInfo.Tools 名前空間の概要」を参照してください。
MapInfo.Geocoding 名前空間
MapInfo.Geocoding 名前空間には、ジオコード化処理のための MapXtreme クライアントを定義す
るクラス、インターフェイス、および列挙体が含まれています。MapInfo ジオコード サーバまた
は MapInfo Location Utility サービスを使用するジオコード化処理がサポートされています。ジオ
コード化処理を実行するには、稼働中のジオコード サーバまたは Location Utility サービスの URL
を利用できる必要があります。ジオコード サーバと Location Utility サービスは、どちらも、ジオ
コードのリクエスト、制約、レスポンス、結果コード、入力住所、および住所候補について同じ
クラスを使用するので、両者のインターフェイスは類似しています。「第 18 章 : ジオコード」を
参照してください。
MapInfo.Routing 名前空間
MapInfo.Routing 名前空間には、ルーティング サービス用の .NET クライアントを構成するクラ
ス、インターフェイス、および列挙体が含まれています。MapInfo.Routing 名前空間に含まれてい
るクラスは、最短時間または最短距離に最適化された ポイントツーポイント、マルチポイント、
マトリックス、等値線の各ルーティングをサポートします。この名前空間のクラスは、その他の
MapInfo ルーティング サーバ製品の機能を対話的に利用できます。特定のポイントを回避する機
能も利用できます。ルーティング結果には、段階順の指示や、マップに表示できるルート ジオメ
トリが含まれる場合があります。「第 20 章 : ルーティング」を参照してください。
アプリケーションのアーキテクチャ
MapXtreme の名前空間の概要を理解したら、次の段階として、構築を計画しているアプリケー
ションのアーキテクチャを検討します。
MapXtreme を使用すると、Web アプリケーションとデスクトップ アプリケーションの両方を構築
できます。以降の各セクションでは、Web アプリケーションおよびデスクトップ アプリケーショ
ンで使用可能なアーキテクチャについて説明します。アプリケーションの設計は、MVC (ModelView-Controller) パラダイムに基づいています。これは、アプリケーションの データ モデル、ユー
ザ インターフェイス、および制御ロジックを、別々の 3つのコンポーネントに分離するという考
え方です。この考え方に基づいて設計を行うと、1 つのコンポーネントに変更を加えた場合に、そ
の変更が他のコンポーネントに与える影響を最小限に抑えられます。MapXtreme アプリケーショ
ンを計画する際に考慮する必要のある主な設計要素および決定事項に関する重要な情報について
は、 「第 5 章 : Web アプリケーション、コントロール、 およびツール」および「第 7 章 : デスク
トップ アプリケーション、コントロール、 ダイアログ、ツール」を参照してください。
MapXtreme v7.2
76
開発者ガイド
第 4 章 : MapXtreme のアーキテクチャ
Web アプリケーションのアーキテクチャ
Web アプリケーションのアーキテクチャ
アーキテクチャの説明
上の図に示した Web アプリケーションで利用されているコンポーネントおよび機能は次のとおり
です。
•
MapXtreme Web アプリケーション
•
Microsoft .NET インフラストラクチャ
•
•
マップ作成ツール
データ アクセス
MapXtreme Web アプリケーション
一般的な MapXtreme Web アプリケーションは、ビュー (プレゼンテーション レイヤ)、モデル
(データ ソースおよびアプリケーションの内部データ モデルとのデータのやり取りに使用するモデ
ル)、およびコントローラ (アプリケーションのフローを制御するビジネス ロジック) で構成されて
います。
MapXtreme v7.2
77
開発者ガイド
第 4 章 : MapXtreme のアーキテクチャ
Web アプリケーションのアーキテクチャ
MapXtreme では、Microsoft Visual Studio に統合された Web テンプレートが提供されており、こ
のテンプレートを利用して初期段階の Web アプリケーションを効率的に作成できます。Web アプ
リケーションの構築方法の詳細については、「Web アプリケーションの作成」のチュートリアル
を参照してください。
ビューを作成するには、ドラッグ アンド ドロップの操作によって、各種の MapXtreme Web コント
ロールを Visual Studio の Web フォーム上に配置します。内部データ構造を構築して、外部データ
ソース、ベース マップ、および動的コンテンツのデータの処理を実行するには、MapInfo.Engine お
よび MapInfo.Data 名前空間のオブジェクトを使用します。そして、コントローラのコードを使用し
て、ビューとデータを連携させることにより、ユーザがアプリケーションを効率的に使用できる操
作の流れを実現して、ユーザのビジネス上のニーズや問題を解決することを可能にします。
Microsoft .NET インフラストラクチャ
MapXtreme は Microsoft .NET 4.0 Framework 環境で動作します。MapXtreme を使用して構築され
たアプリケーションは、IIS のワーカー プロセスで実行される ASP.NET アプリケーションとして
動作します。
Microsoft ASP.NET フレームワークでは、高いパフォーマンスが要求されるエンタープライズ アプ
リケーションの開発に適した COM+ オブジェクト プール機能が提供されており、ワークスペース
などのオブジェクトを事前に読み込むことができます。MapXtreme のオブジェクト モデルは、こ
のフレームワークの下で非常に効率的に動作します。また、このフレームワークでは、自動およ
び手動による状態管理制御が可能であるだけでなく、StateServer および SQL Server などのアプ
リケーション状態管理ツールも提供されています。これらの機能に関する重要な情報について
は、 「第 6 章 : 状態管理について」で説明します。
マップ作成ツール
アプリケーションのベース マップを作成するには、MapXtreme ワークスペース マネージャを使用
します。このツールでは、マップの各レイヤを管理し、そのマップのズーム レベル、ラベル、ス
タイル、主題図、および修飾を制御することによって、アプリケーションに必要な表示を意図し
たとおりに実現できます。作成したマップの情報は XML ベースのワークスペースに保存され、後
から必要に応じて容易に読み込むことができます。「第 23 章 : ワークスペース マネージャ」を参
照してください。
データ アクセス
このアーキテクチャの重要な要素の 1 つは、動的データ内容にアクセスする機能です。このデー
タ アクセスは、MapInfo.Data 名前空間内のオブジェクトによって実現されます。このデータ アク
セス機能では、WMS、WFS、リモートのデータベース管理システム、GPS からのライブ フィー
ド、MapInfo ルーティング サービスからの運転用指示など、さまざまなデータ ソースからのデー
タ内容を利用できます。また、多様なデータを最大限に活用するために、複数の異なるデータ
ソースからの情報を同時に使用することができます。「第 8 章 : データでの作業」を参照してくだ
さい。
MapXtreme v7.2
78
開発者ガイド
第 4 章 : MapXtreme のアーキテクチャ
デスクトップ アプリケーションのアーキテクチャ
デスクトップ アプリケーションのアーキテクチャ
デスクトップ アプリケーションのアーキテクチャは、MVC (Model-View-Controller) に基づく設計
である点において、Web アプリケーションのアーキテクチャに類似しています。
プレゼンテーション レイヤ、アプリケーション モデル、およびビジネス ロジックでは、それぞれ
別のコンポーネットが使用されます。必要なベース マップを作成するには、ワークスペース マ
ネージャを使用します。アプリケーションでは、Windows のコントロールとダイアログ ボックス
を使用して、豊かな使用感を実現することができます。また、さまざまなソースからの動的データ
内容を同時に使用することや、アプリケーションのフローとロジックを制御することもできます。
詳細については、「第 7 章 : デスクトップ アプリケーション、コントロール、 ダイアログ、ツー
ル」を参照してください。
MapXtreme v7.2
79
開発者ガイド
Web アプリケーション、
コントロール、
およびツール
この章では、MapXtreme に付属する Web コントロールや各種ツールを
使った ASP.NET Web アプリケーションの作成についてのさまざまな情報
を提供しています。
この章の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Web アプリケーションのリクエスト / レスポンスのライフサイクル . 81
MapXtreme Web アプリケーションのコンポーネント. . . . . . 81
MapXtreme Web コントロールとツール. . . . . . . . . . . . 85
Web コントロールのアーキテクチャ . . . . . . . . . . . . . 88
MapXtreme Web コントロールの使用. . . . . . . . . . . . . 92
Web コントロールの管理 . . . . . . . . . . . . . . . . . . 93
カスタム ツールの作成 . . . . . . . . . . . . . . . . . . . 94
カスタム Web コントロールの使用と配布 . . . . . . . . . . . 96
Web アプリケーションへの InfoTool の追加 . . . . . . . . . . 98
ASP.NET AJAX と MapXtreme Web アプリケーション . . . . . 99
MapXtreme タイル ハンドラ . . . . . . . . . . . . . . . . 101
HTML/XHTML 検証の問題 . . . . . . . . . . . . . . . . . 105
ポスト バック Web コントロールから JavaScript Web コントロール
への移行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
Web コントロールの特殊な使用法 . . . . . . . . . . . . . 107
5
第 5 章 : Web アプリケーション、コントロール、およびツール
Web アプリケーションのリクエスト / レスポンスのライフサイクル
Web アプリケーションのリクエスト/レスポンスのライフサイクル
効率的な Web アプリケーションを計画および作成するためには、バックグラウンドで行われるク
ライアント (ブラウザ) とサーバ (Web アプリケーション) 間の対話についての十分な理解が必要で
す。最も単純な形態の Web アプリケーションは、Web ブラウザからインターネット接続またはイ
ントラネット接続を介してアクセスするソフトウェア アプリケーションです。ユーザにはアプリ
ケーションの機能が HTML ページとして提供されます。ユーザが Web ページ上の要素を対話的に
操作することで、HTTP リクエストが Web サーバに送信されて処理されます。Web サーバは、
ユーザのリクエストを満たしたレスポンスを送り返します。
一般に、MapXtreme Web アプリケーションは、マップのイメージや、そのマップを対話的に操作
するためのツールをユーザに提供します。単純な例で言えば、ユーザが拡大ツールをクリックし
てから、同じマップの異なるビューが表示されるまでが単一のリクエスト/レスポンス サイクルで
す。拡大リクエストはバックグラウンドでサーバに送信されています。サーバがリクエストを処
理し、更新されたマップのイメージを返すことによって、新しいビューが表示されます。
MapXtreme Web アプリケーションのアーキテクチャについては、「第 4 章 : MapXtreme のアー
キテクチャ」を参照してください。
MapXtreme アプリケーションの構築方法の詳細については、「付録 A : MapXtreme アプリケー
ションを作成および展開する方法」のチュートリアルを参照してください。
ASP.NET Web ア プ リ ケ ー シ ョ ン の作成については、MSDN ライブラリの「ASP.NET Web
Application Projects」を参照してください。
MapXtreme Web アプリケーションのコンポーネント
以降のセクションでは、一般的な MapXtreme Web アプリケーションを構成する主なコンポーネン
トについて説明します。具体的には次のコンポーネントについて取り上げています。
•
「MapXtreme セッション」
•
「バックグラウンド マップ」
•
「MapControl」
•
「マップ ツール」
MapXtreme セッション
MapXtreme セッションは、すべての MapXtreme アプリケーション操作の開始点となります。これ
により、MapXtreme アプリケーションに必要なリソースの初期化を管理します。また、Catalog、
MapFactory、CoordSysFactory、Selections などの重要なオブジェクトに対しても、MapXtreme
セッションを通じてアクセスできます。
MapXtreme v7.2
81
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme Web アプリケーションのコンポーネント
MapXtreme セッションにアクセスするには、MapInfo.Engine.Session.Current() メソッドを呼び出
します。プロセスの 1 つのスレッドで使用できる MapXtreme セッション オブジェクトは 1 つで
す。スレッドごとに 1 つの MapXtreme セッションが存在しており、このセッションを複数のス
レッドで共有することはできません。「セッション インターフェイス」を参照してください。
Web アプリケーションでは、1 ユーザにつき 1 つの MapXtreme セッション オブジェクトが割り
当てられる場合と、プールされた MapXtreme セッションを複数のユーザが共有する場合とがあり
ます。この 2 つの開発モデルについては、「第 6 章 : 状態管理について」を参照してください。
バックグラウンド マップ
イメージ形式であるバックグラウンド マップは、MapXtreme Web アプリケーションの中でも最も
視覚的なコンポーネントです。マップ フィーチャに関する情報をアプリケーション ユーザに提供
したり、他のマップ フィーチャとの関係を示したりする役割を持ちます。バックグラウンド マッ
プは、行政区画、街路網、関心地点などの参照レイヤで構成されるのが一般的です。アプリケー
ションに関連したカスタム データ (オフィス所在地、携帯電話のアンテナ、ATM を表すポイント
など) は、追加のレイヤです。参照レイヤとカスタム レイヤについては、ユーザによるアプリケー
ションの対話操作で変化することはありません。通常、変化するのはマップの表示です。ユーザ
が特定の場所を拡大表示したり、Web リクエストとして送信された条件に基づいて、主題図の色
分けをマップに重ねたりすることが考えられます。
バックグラウンド マップは、初期状態のまま (つまり、クリーンな状態で) ユーザに表示されま
す。プール型のアプリケーションを設計する場合、この状態は重要な考慮事項となります。ユー
ザ状態の変化をアプリケーション側で処理する必要があるためです。
バックグラウンド マップは、XML ベースのワークスペース (.mws) からアプリケーションへと事
前に読み込まれます。ワークスペースは、アプリケーションの Web.config ファイルで指定されま
す。「初期マップの設定」を参照してください。MapXtreme の Web テンプレートおよびサンプル
アプリケーションの Web.config ファイルでは、サンプル データへのパスがハードコーディングさ
れています。これらをひな形として Web アプリケーションを作成する場合は、実際のデータに合
わせてパスを変更してください。
バックグラウンド マップの作成を支援するデスクトップ アプリケーションの一つに、MapXtreme
に付属のワークスペース マネージャ ユーティリティがあります。「第 23 章 : ワークスペース マ
ネージャ」を参照してください。
MapControl
MapControl は、Map オ ブ ジ ェ ク ト のインスタンスを含む MapXtreme Web サーバです。
MapControl は、MapXtreme アプリケーションの主要な Web コントロールです。バックグラウン
ド マップを表示したり、マップ上で行われるツールの対話操作に応答したりする役割をつかさど
ります。Map オブジェクトは、バックグラウンドで MapControl の MapAlias プロパティを使用し
て MapFactory から取得されます。このマップがイメージとしてレンダリングおよびエクスポート
され、コントロールの <img> タグとしてブラウザに返されます。
MapXtreme v7.2
82
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme Web アプリケーションのコンポーネント
MapXtreme Web アプリケーション テンプレートと同様、MapXtreme に付属するサンプル アプリ
ケーションには MapControl が組み込まれています。ただし、デザイン モードでは、マップはレン
ダリングされません。これは、Web MapControl からマップを取得するためには、動的に生成され
た javascript と共に、マップ イメージを処理するための Web アプリケーションがサーバ上で動作
している必要があるためです。これは、実行時/デバッグ時のみ使用できます。
L
Visual Studio Visual Basic または C# ASP..NET のテンプレートをひな形とする場合は、
MapControl およびツールを手動で Web フォームに追加しないと、MapXtreme のリソース
がプロジェクトに追加されません。
詳細については、「MapXtreme Web コントロールとツール」を参照してください。
図 : MapXtreme Web アプリケーションの設計時画面
MapXtreme v7.2
83
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme Web アプリケーションのコンポーネント
図 : MapXtreme Web アプリケーションの実行時画面
マップ ツール
MapXtreme には、バックグラウンド マップをナビゲートしたり対話的に操作したりするための、
さまざまなマップ ツールが用意されています。これらのツールは、Visual Studio のツールボックス
に存在します。これらのツールを Web フォームにドラッグ アンド ドロップして使用できます。
MapXtreme Web アプリケーションのテンプレートおよびサンプル アプリケーションには、こうし
たツールの多くが組み込まれています。次に、その例をいくつか示します。
•
•
中心表示、移動、拡大、縮小のための標準的なツール
ズーム レベル (500 ~ 12,500 マップ単位) があらかじめ設定された ZoomBarTool
•
45 度間隔で線を直接移動することのできる方位ツール (N、NE、E、SE、S、SW、W、NW)
LegendControl、Distance ツール、および選択ツールは、Visual Studio ツールボックスの MapXtreme
領域に置かれています。
ツールについては、「Web コントロールとツールについて」を参照してください。
ツールボックスには、あらゆる MapXtreme マップ ツールのベースとなる汎用的な WebTool も配
置されています。このツールは、ツールに独自の動作を追加したい場合に使用します。「カスタ
ム ツールの作成」を参照してください。
状態管理とプール機能
MapXtreme Web アプリケーションの作成目標の一つは、高い安定性とスケーラビリティ、およ
び、快適な操作感を実現することです。MapXtreme には、アプリケーションの状態を管理した
り、ユーザ数の増加に合わせて拡張したりするための構成が用意されています。
MapXtreme v7.2
84
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme Web コントロールとツール
MapXtreme Web アプリケーションのテンプレートおよびサンプル アプリケーションは、状態を手
動で管理するように構成されています。つまり、ユーザがアプリケーションとの対話操作を通じ
て行った変更だけが保存され、復元されます。独自のアプリケーションを作成する際は、実際の
アプリケーションおよび保存/復元の要件に合ったコードを作成することになります。
将来的なアプリケーション ユーザ数の増加に効率よく備えるためには、Microsoft COM+ プール
サービスを使用するようにテンプレートおよびサンプル アプリケーションを構成します。そうす
ることで、MapXtreme セッション オブジェクトを複数のリクエスト間で共有できます。
Web アプリケーションの計画時には、状態管理およびプールについて慎重に検討する必要があり
ます。「第 6 章 : 状態管理について」を参照してください。
MapXtreme Web コントロールとツール
MapXtreme の Web コントロールおよびツールは、Web ページに埋め込まれます。Web コントロー
ルは、Web ツールからの対話操作に反応します。ツールを使って取得した情報は、サーバ側で
Web ページによって処理され、通常は新しいマップ イメージとしてクライアントに返されます。
MapXtreme には、3 つの Web コントロール (MapControl、LayerControl、LegendControl) と複数
のマップ ツールが備わっています。Web コントロールに表示される内容としては、マップのほ
か、マップ レイヤやラベル レイヤとそのプロパティのリスト、レイヤが表している情報を識別す
るための凡例などがあります。ツールは MapControl との対話を通じてマップのビューを変化させ
ます。さらに、その後の分析のためにマップ上のフィーチャを選択するなど、さまざまな目的で
使用されます。Web コントロールおよびツールの詳細については、「Web コントロールとツール
について」を参照してください。
Web コントロールおよびツールは、Visual Studio 内のさまざまな場所から利用できます。
•
•
•
Visual Studio ツールボックス: MapXtreme の見出し下にあります。マッピング機能をプロ
ジェクトに追加するには、これらのコントロールを Web フォームにドラッグ アンド ドロップ
します。
Web アプリケーション テンプレート: MapXtreme Web アプリケーション テンプレート (Visual
Studio の [ファイル] > [新しいプロジェクト] メニュー) から作業を始めて、コードを一切記述す
ることなく、マッピングのプロトタイプを作成できます。
サンプル アプリケーション: タスク指向のサンプルが
\Samples\Visual Studio 20xx\Web\Features フォルダに格納されています。ソース コードも提供さ
れているため、独自にコードを作成する際の手本にしたり、応用したりすることができます。
Web コントロールおよびツールの API は、MapInfo.WebControls 名前空間にあります。詳細につ
いては、『開発者リファレンス』を参照してください。
MapXtreme v7.2
85
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme Web コントロールとツール
JavaScript 対応によるページの部分更新
MapXtreme の Web コントロールおよびツールでは、Web ページに JavaScript を組み合わせること
によって、必要な処理を MapXtreme サーバに伝えます。それぞれのマップ ツールでは、発生させ
るアクション (クリック、長方形、線、ポリゴンの描画など) を定義する JavaScript ClientInteraction
と、URL リクエストをサーバに送信して、コマンド (移動、拡大/縮小、オブジェクトの選択など)
を処理する JavaScript ClientCommand を指定します。
これらの JavaScript 対応ツールでは、使用のたびにページ全体をポスト バックさせる必要がありま
せん。通常、ツールが使用されると、その都度、マップのイメージだけが更新されます。この開発
モデルについては、「マップ ツールのアーキテクチャ」を参照してください。イベント処理、エ
ラー管理、および状態管理については、「Web コントロールの管理」を参照してください。
従 来 の (v6.5 リ リ ー ス よ り 前 の) MapXtreme コントロールでは、ツールを使用するたびに
Page_Load と Page_Unload を呼び出すポスト バックが必要でした。これらのツールは旧バー
ジョンとの互換性を確保するために提供されていますが、新たに開発するプロジェクトでの使用
はお勧めしません。「ポスト バック Web コントロールから JavaScript Web コントロールへの移
行」を参照してください。
カスタマイズ可能
付属ツールの機能だけではニーズを満たすことができない場合は、カスタマイズすることを検討
してください。カスタマイズは、ビルトイン ツールのプロパティを変更するだけの単純な方法か
ら、JavaScript やサーバ サイド クラスを独自に作成して機能を拡張するという複雑な方法まで幅
広く対応しています。Web コントロールおよびツールのソース コードは
Samples\MapXtremeWebControlsSourceCode フォルダに格納されています。「カスタム ツール
の作成」を参照してください。
MapXtreme に付属の ASP.NET AJAX サンプル アプリケーションでは、Microsoft の ASP.NET AJAX
コントロールを MapXtreme の Web マッピング アプリケーションで実際に使用する方法を紹介して
います。「ASP.NET AJAX と MapXtreme Web アプリケーション」を参照してください。
Web コントロールとツールについて
次の表は、利用可能な MapXtreme Web コントロールとツールをまとめたものです。
Web コントロール
概要
MapControl
Map オブジェクトのインスタンスを表示できます。各 Map オブジェ
クトは MapAlias で参照されます (Map1 など)。
実行時には、マップの MapAlias プロパティを使って MapFactory から
取得されたマップが MapControl に表示されます。マップは、マップ
イメージにエクスポートし、このイメージを HTML <img> タグ内で参
照することによって描画されます。MapAlias プロパティが指定されな
かったか無効であった場合、MapFactory の最初のマップが選択されま
す。MapControl MapAlias プロパティは設計時に設定します。
MapXtreme v7.2
86
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme Web コントロールとツール
LayerControl
マップのフィーチャ レイヤとラベル レイヤをツリー ビュー構造で表
示します。このコントロールを使用すると、特定のレイヤの表示/非表
示を切り替えたり、読み取り専用の現在のズーム値を表示したりでき
ます。表示/非表示の変更は、LayerControl を使用するアプリケーショ
ンがアクティブになっている間だけ保持されます。
LegendControl
LegendControl を使うと、特定の MapControl に凡例を表示できます。
凡例は、対話操作のできないイメージとして返されます。デフォルト
のエクスポート フォーマットは .GIF です。
表示する凡例は、LegendAlias またはマップの凡例リスト内の対応す
る イ ン デ ッ ク ス を 使 っ て 設 計 時 に 指 定 で き ま す。ペ ー ジ 上 で
JavaScript を使用して設定することもできます。凡例の表示と非表示
を、JavaScript を使って切り替えることもできます。凡例をスクロー
ル可能にすることもできます。
LegendControl では、主題図凡例とシンボル凡例の両方がサポートさ
れます。
Legend Control Web サンプル アプリケーションは、このコントロール
をサポートしています。このサンプル アプリケーションでは、現在の
Web コントロール アーキテクチャをベースとして、カスタマイズされ
た LegendControl を作成して使用する方法や、JavaScript を使ってサー
バに要求を送信することによって、ページ全体を更新する必要なく主
題図を作成したり、凡例を表示したりする方法を紹介しています。詳
細については、[すべてのプログラム] の [MapXtreme ラーニング リソー
ス] か、または MapInfo Web サイトの 「Support & Training」を参照し
てください。[ラーニング リソース] リンクを展開し、[サンプル アプリ
ケーション] をクリックします。
マップ ツール
概要
CenterTool
マップ上でクリックすることでマップの中心を変更できます。
DistanceTool
マップ上でクリックした 2 つ以上のポイントの間の距離を取得できま
す。
NavigationTools
固定方向 (北、南、東、西、北東、北西、南東、南西) にマップを移動
できます。
PanTool
マップを任意の方向にドラッグすることでウィンドウ内の位置を変更
できます。
PointSelectionTool
マップ上でクリックされた (ポイントに最も近い) フィーチャを選択で
きます。
MapXtreme v7.2
87
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールのアーキテクチャ
PolygonSelectionTool
ポリゴン内に中心点が存在するすべてのフィーチャを選択できます。
選択領域は、マップ上でマウスをクリックしてポリゴンのノードを表
すポイントを作成することで描画されます。ダブル クリックするとポ
リゴンが閉じられます。
RadiusSelectionTool
半径内に中心点が存在するすべてのフィーチャを選択できます。半径
は、マップ上でマウスをクリックして円の中心および境界を表すポイ
ントを作成することで描画されます。選択半径は、クリックとドラッ
グ操作でマップ上に描画されます。
RectangleSelectionTool
長方形内に中心点が存在するすべてのフィーチャを選択できます。長方
形の選択領域は、クリックとドラッグ操作でマップ上に描画されます。
ZoomBarTool
マ ッ プ の ズーム レベルを、あらかじめ設定された範囲内 (500 ~
12,500 マップ単位) で変更できます。
ZoomInTool
シングル クリックまたは長方形領域を選択することによってマップを
拡大表示できます。
ZoomOutTool
マップ上で縮小表示するビューを表す長方形を描画できます。
InfoTool サ ン プ ル Web サンプル Web アプリケーションには、InfoTool のサンプルが含まれて
アプリケーション
います。MapXtreme Web コントロール アーキテクチャに基づいてカ
スタマイズしたマップ ツールを作成および使用する方法が紹介されて
います。
Web コントロールのアーキテクチャ
MapXtreme Web コントロール アーキテクチャでは、ASP.NET モデルに従って Web アプリケー
ションを作成します。全体的なアーキテクチャには、MVC (Model-View-Controller) の設計パター
ンが採用されています。Model を表す Web アプリケーション、View を表す Web ページ (HTML、
JavaScript)、および Controller を表す MapXtreme サーバ (情報要求に応答する) で構成されます。
ユーザと Web アプリケーション間の対話操作は、Web コントロールとツールを介して行われま
す。Web コントロールとツールによってデータが収集され、必要な指示やコマンドがサーバに送
信されます。サーバでは、その情報を処理して返すことになります。
MapXtreme では、初期化時、Web ページがレンダリングされたときに、コントロールおよびツー
ルがレンダリングされます。初期化が完了し、ツールが使用されるときは、マップ イメージだけ
がレンダリングされます。これらの JavaScript 対応ツールは、ツール操作のたびにページ全体が
ポスト バックされる v6.5 以前の Web コントロールにはない利点を備えていると言えます。
MapXtreme コントロールは、次の動作と機能を備えています。
MapXtreme v7.2
88
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールのアーキテクチャ
•
バックグラウンド マップは定義済みのワークスペースを介して読み込まれます。設計時は、
MapControl の MapAlias プロパティを、事前に読み込まれるワークスペースに定義されている
マップのマップ エイリアスに設定します。対応するマップが実行時に MapControl に読み込ま
れ、マップ ツールを対話操作する準備が整います。
•
ページが初めてレンダリングされるとき、Page_Load および Page_Unload が呼び出されま
す。Page_Load では、アプリケーションの状態が、新しいセッションのデフォルトの状態に初
期化されるか、既存のセッションの場合は状態が復元されます。Page_Unload では、あらゆる
変更の状態が、別のリクエストに備えて保存されます。
StateManager は、アプリケーション内でクラスとしてインプリメントされ、そのクラスのイ
ンスタンスが MapXtreme セッションに入力されます。SaveState メソッドと RestoreState メ
ソッドは、このオブジェクトから呼び出されます。SaveState メソッドと RestoreState メソッ
ドは、ツールが使用されるたびに呼び出されます。状態管理に Manual モードが使用される場
合 (Web.config ファイル内で MapInfo.Engine.Session.State が Manual に設定されている場合)、
StateManager クラス インスタンスがセッションに含まれている必要があります。状態管理の
詳細については、「状態管理」を参照してください。
エラー処理は、application_error イベント ハンドラの global_asax.cs/.vb ファイルで実行され
ます。「エラーの管理」を参照してください。
イベントは、リクエストをサーバに送信するクライアント サイド JavaScript コマンドを介し
て処理されます。サーバ サイドの処理は、サーバ サイドのコマンド クラスによって処理され
ます。「イベント処理」を参照してください。
•
•
•
Visual Studio MapXtreme Web テンプレートに含まれる MapXtremeWebResources フォルダに
は、Web コントロールおよびマップ ツールに必要な依存ファイルが格納されています。アプリ
ケーションを展開する際は、これらのファイルを忘れずに追加するようにしてください。
マップ ツールのアーキテクチャ
MapXtreme のマップ ツールを使用すると、マップをさまざまな方法で対話的に操作できます (別
のビューに移動したり、マップの領域を選択してその後の分析に必要なデータを収集するなど)。
MapXtreme Web アプリケーション テンプレートには、基本的な移動ツールがひととおり用意され
ています。これらのツールは、マップ フィーチャを選択したり凡例を追加したりするための他の
ツールと一緒に、Visual Studio のツールボックスに表示されます。
マップ ツールは、クライアント サイド コンポーネントとサーバ サイド コンポーネントで構成さ
れます。クライアント サイド コンポーネントには、JavaScript 対話コンポーネントと JavaScript
クライアント コマンド コンポーネントがあります。サーバ サイド コンポーネントには、サーバ
コマンド クラス コンポーネントがあります。
次に、マップ ツールのクライアント サイド コンポーネントの役割を示します。
•
描画とマウス操作 (ラバー バンド長方形、マウス クリックなど)
•
マウス操作からのデータ収集 (拡大操作の画面座標を取得するなど)
•
サーバへの URL リクエスト送信
次に、マップ ツールのサーバ サイド コンポーネントの役割を示します。
•
ツールのビジネス ロジックの実行 (2 点間の距離を計算するなど)
MapXtreme v7.2
89
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールのアーキテクチャ
クライアント サイドのマップ対話
マップ ツールのクライアント サイドの対話は、JavaScript のクラスを使ってインプリメントされ
ます。これらは、任意のユーザ インターフェイスで使用して、任意の HTML 要素での対話操作を
実 行 す る こ と が で き る 汎 用 的 な クラスです。Interaction.js
に定義されている基本クラス
(Interaction) を拡張することで、ClickInteraction や RectInteraction など、特定の目的に特化したさ
まざまな対話操作を作成できます。以下は、Interaction クラスのコンストラクタを示しています。
Interaction(elementID, onComplete)
elementID はマップの IMG タグを、onComplete は対話操作の完了時に呼び出される関数
を表します。
たとえば、Interaction クラスを使用すると、マップ上にラバー バンド長方形を描画し、その範囲
内に含まれるすべてのポイント フィーチャを収集できます。
クライアント サイドのコマンド実行
マップ ツールは、特定のタスクを実行するためのクライアント サイド JavaScript コマンド オブ
ジェクトを持ちます。Command.js に定義されている基本クラス (Command) を拡張することで、
PanCommand や ZoomCommand など、特定の目的に特化したさまざまなコマンドを作成できま
す。マップ ツールの対話操作が完了すると、ツールによりクライアント コマンドが実行されま
す。以下は、Command クラスのコンストラクタを示しています。
Command(name, interaction)
name はサーバ サイドの Command クラス名を、interaction はクライアントの対話操作
中に収集されたデータを表します。
クライアント コマンドでは、URL リクエストが生成されます。このリクエストがサーバに送信さ
れ、レスポンスが処理されて、新しいマップが表示されます。
対話オブジェクトは null に設定できます。これは、コマンドを自動的に起動する、移動、ズー
ム、ポイント選択などのクライアント 側の対話操作がないことを意味します。コマンドを起動す
ることはできますが、プログラムから指定する必要があります。
サーバ サイドのコマンド アーキテクチャ
クライアントから送信された URL リクエストは、サーバ側の
MapInfo.WebControls.MapControlModel クラスによって処理されます。このクラスには、基本的
なマップ移動コマンド (移動やズームなど) を実行するためのメソッドのほか、長方形や選択半径
内のポイント、ポリゴン、フィーチャを選択するためのセレクション コマンドが用意されていま
す。InvokeCommand メソッドを使用すると、特定のツール コマンドを探し、その Execute メ
ソッドを呼び出すことができます。Execute は、RestoreState、Process、および SaveState を順
に呼び出します。
このクラスにインプリメントされている以外のコマンドを実行するには、
WebControls.MapBaseCommand クラスを継承する Command クラスを独自に作成する必要があ
ります。
MapXtreme v7.2
90
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールのアーキテクチャ
マップ ツールの動作
次の図は、Web マップ ツール (ここでは拡大ツール) の一般的なリクエスト/レスポンスのサイクル
を示しています。これと同じアーキテクチャを使ったカスタム マップ ツールを作成できます。
「カスタム ツールの作成」を参照してください。
図中の番号は、以降で説明する各処理段階と対応しています。
1. ユーザが、拡大ツールを使用して、MapControl に表示された欧州全体の領域を囲むように長方
形を描画します。
2. ツールの ClientInteraction プロパティ (RectInteraction) により、この長方形を定義する画面座
標が収集されます。RectInteraction は Interaction.js で定義されます。
3. ツールの ClientCommand プロパティ (MapCommand) によって URL リクエストが作成され、そ
れが MapControl の image.src プロパティに割り当てられます。ClientCommand は Command.js
で定義されます。以下は実際の URL リクエストの例です。
MapController.ashx?Command=Zoom&Width=300&Height=300&ZoomLevel=1200&Po
ints=1,50,100&MapAlias=Map1
4. URL リクエストがサーバに送信されます。
5. MapController がリクエストを受け取り、MapControlModel を呼び出します。MapController は
System.Web.IHttpHandler から派生します。
6. MapControlModel が URL リクエストを解析して、ZoomInCommand クラスを呼び出します。
7. ZoomInCommand が MapFactory からマップを受け取り、そのマップ上で拡大操作を実行しま
す。新しいビューを反映するようにマップ イメージが更新されます。
MapXtreme v7.2
91
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme Web コントロールの使用
8. マップ イメージがイメージにエクスポートされ、ストリームとして HTTP レスポンスに書き込
まれてクライアントに返されます。
MapXtreme Web コントロールの使用
Web アプリケーション内で MapXtreme Web コントロールを使用するには
1. 次のいずれかの操作を実行します。
a. Visual Studio の [ファイル] > [新しいプロジェクト] を選択し、MapXtreme Web アプリケー
ション テンプレートを選択することによって MapXtreme Web アプリケーションを作成し
ます。テンプレートには、MapControl、LayerControl、およびマップ移動ツールが組み込
まれています。
b. いずれかのサンプル Web アプリケーションを開き、必要に応じて変更します。
c. Visual Studio の MapXtreme Web 7.x.x ツールボックスから必要なツールをドラッグして
Web フォームにドロップします。
d. Visual Studio の [ファイル] > [新しいプロジェクト] を選択し、汎用 ASP.NET Web アプリ
ケーション テンプレートを選択することによって MapXtreme Web アプリケーションを作
成します。1
2. アプリケーションの Web.config ファイルで、MapControl に事前読み込みされるマップ レイヤ
を含んだワークスペースのパスと名前を指定します。この作業は、手順 1 で選んだ選択肢に関
係なく必要です。
テンプレートおよびサンプルの Web.config ファイルには、次のように、インストールされ
ているサンプル データのデフォルト ディレクトリへのパスが指定されています。
<configuration>
<appSettings>
<add key="MapInfo.Engine.Session.Workspace" value="c:\Program
Files\MapInfo\MapXtreme\7.x.x\Samples\Data\World.mws" />
</appSettings>
</configuration>
アプリケーションで複数のマップが必要になる場合は、それぞれ一意の MapAlias プロパ
ティを持つ 1 つまたは複数のワークスペースにマップを配置できます。複数のワークスペー
スを事前に読み込むように Web.config ファイルで設定するには、それぞれのワークスペー
スのフル パスをセミコロンで区切ります。
3. MapControl の MapAlias プロパティが設定されていることを確認します。テンプレートの
MapControl のデフォルト MapAlias は Map1 です。このプロパティを設定しなかった場合、期
1.
この場合、MapXtreme Web コントロールとツールのデザイナに、アイコンではなく赤色の X が表示され
ま す。ア イ コン を 適切 に 表示 す るに は、いず れ かの MapXtreme サン プ ル アプ リ ケー シ ョン か ら
MapXtremeWebResources フォルダをコピーし、自分のプロジェクトの Web.config および default.aspx
ファイルが置かれている場所に貼り付けます。Web ページをいったん閉じて開き直せば、アイコンが表
示されます。この手動での手順を避けるには、 "a" の選択肢を選んでください。
MapXtreme v7.2
92
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールの管理
待したマップがレンダリングされない場合があります。その場合は、セッションから取得され
た最初のマップがレンダリングされます。
MapAlias を調べるには、.mws ファイルをテキスト エディタで開き、MapDefinition 要
素を探します。MapAlias は alias 属性として格納されています。
ワークスペース マネージャから MapAlias を検索することもできます。マウス ポインタを
マップ ノード (レイヤ リストの最上位のノード) に重ねると、エイリアスがツールチップで
表示されます。
4. すべてのマップ ツール、LayerControl、LegendControl、およびカスタム コントロール (存在する
場合) の MapControlID プロパティを設定し、適切な MapControl が参照されるようにします。
Web コントロールの管理
Web コントロールを使用する場合はそれらを効率的に管理することが大切です。このセクション
では、次の点について具体的な方法を説明します。
•
•
•
「イベント処理」
「エラーの管理」
「状態管理」
イベント処理
マップ ツールのイベントは、リクエストをサーバに送信するクライアント サイド JavaScript コマ
ンドを介して処理されます。ツールの処理は、MapBaseCommand から派生したコマンド クラス
によってサーバ側で実行されます。
多くのコマンドの場合、サーバ サイドの処理の結果がクライアントに送り返されます。これは、
MapControl の場合はイメージで、LayerControl の場合は XML です。このとき、クライアント サ
イドの JavaScript を介して、コマンドの結果により Web ページの一部のみが更新されます (たと
えば、移動後に新しいマップ イメージが表示されます)。
エラーの管理
Web コントロールにおけるエラー処理の方法はいろいろあり、アプリケーションごとに異なりま
す。したがって、ここでは、複数あるエラー処理方法の 1 つを取り上げて説明します。クライア
ント サイドで期待されるレスポンスはイメージなので、詳細メッセージを使用して例外を捕捉
し、イメージとエラー メッセージの両方を含むレスポンスを返すやり方が考えられます。こうす
ることで、MapControl にエラー メッセージが含まれるようになります。
サンプル アプリケーションに付属する Global.asax ファイルには、アプリケーション エラーを処理
する具体的な例が紹介されています。マップ イメージのリクエストを処理しているときにアプリ
ケーションでエラーが発生した場合は、エラー メッセージを含んだイメージが Application_Error メ
ソッドによって作成され、そのイメージがクライアントに返されます。
MapXtreme v7.2
93
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
カスタム ツールの作成
エラー管理の詳細については、ASP.NET でのエラー処理に関する MSDN サイトを参照してくだ
さい。
状態管理
MapInfo.WebControls.StateManager は、SaveState メソッドと RestoreState メソッドを含んだ抽
象クラスです。MapXtreme のマップ ツールは、RestoreState および SaveState をそれぞれ処理の
前後で呼び出します。状態管理はアプリケーションに固有の処理なので、これらのメソッドをア
プリケーションの具象クラスにインプリメントするのは開発者の責任です。つまり、開発者は、
復元操作および保存操作の対象やその方法を制御できます。
状態管理の詳細については、「第 6 章 : 状態管理について」を参照してください。
カスタム ツールの作成
カスタム ツールは、ビルトイン ツールに修正を加えたり、動作を追加したりすることによって作
成できるほか、独自のカスタム コマンドやカスタム ツールを作成することもできます。
たとえば、1 回のクリックで拡大とフィーチャ選択の両方ができるように拡大ツールを修正すること
も可能です。このツールには、拡大と選択操作を実行するコードを含んだサーバ コマンド クラスが
必要です。すべてのサーバ コマンド クラスにはソース コードが付属しているため、単に ZoomIn コ
マンド クラスを変更し、選択操作のためのコードを追加すれば目的の機能を実現できます。
付属のソース コードを使ってカスタマイズすることができない場合は、独自のコマンドおよび
ツール クラスを作成する必要があります。ソース コードは、MapXtreme インストール フォルダ
の \Samples\MapXtremeWebControlsSourceCode に格納されています。
カスタマイズの計画を立てる際は、MapXtreme ツール アーキテクチャを念頭に置いてください。
MapXtreme マップ ツールは次の要素で構成されます。
•
MapInfo.WebControls.WebTool を継承するクライアント サイド ツール クラス。
•
ツール クラスのプロパティ。次の要素によってツールの動作が制御されます。
•
•
ツールと MapControl 間の対話 (クリック、長方形の描画など) を定義する JavaScript。
•
ツールの URL リクエストを作成する JavaScript。
MapInfo.WebControls.MapBaseCommand から派生し、ツールの目的の動作を実行するサーバ
サイド コマンド クラス。
ツールのプロパティは、クラス内に定義することも、Web ページ上で定義することもできます。
Web ページ上では、カスタム ツールがツール クラス名で参照されます。
次の手順で使用されているコードは、Samples フォルダの
\Web\Features\CustomTools\CustomToolsCS に格納されています。
カスタム ツールを作成するには
1. MapXtreme ツールボックスから Web フォームに汎用 WebTool をドラッグします。既にあるい
ずれかのマップ ツールを使用し、既存の動作を拡張することもできます。
MapXtreme v7.2
94
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
カスタム ツールの作成
2. WebTool のプロパティ ページで、MapControlID、InActive/ActiveImageUrl、CursorImageUrl の
各プロパティを設定します。
3. 適切な ClientInteraction プロパティをドロップダウン リストから選択して設定します。
クリックやドラッグ、線、ポリゴン、長方形、半径の描画といったマウス操作があらかじめ定
義されており、ほとんどの Web アプリケーションのニーズは、こうした組み込みの対話機能
だけで満たすことができます。プロジェクトの MapXtremeWebResources フォルダにある
Interaction.js を参照してください。
4. 適切な ClientCommand プロパティをドロップダウン リストから選択して設定します。
マッピング、移動、ズームなどの組み込みのクライアント コマンドによって、サーバに送信
する URL リクエストが作成されます。これらのコマンドの説明については、プロジェクトの
MapXtremeWebResources フォルダにある Command.js を参照してください。
組み込みのコマンドだけではニーズを満たすことができない場合は、既存の Command.js に
修正を加えるか、独自に作成します。カスタム コマンドは、手順 3 で選択した対話操作の名
前を入力として受け取ります。1 回のクリックで複数のレスポンスをサーバから受け取る具体
的な方法については、CustomToolsCS または CustomToolsVB のサンプルに含まれる
CustomCommand.js を参照してください。
5. JavaScript を手動で .aspx ページに登録します。次の行を Web ページ本体に挿入します。
<script language="javascript" src="CustomCommand.js"
type="text/javascript"></script>
6. MapInfo.WebControls.MapBaseCommand から派生した新しいサーバ コマンド クラスを作成
します。クライアント コマンドによって要求された動作を実行するコードを追加してくださ
い。代わりに、既存のサーバ コマンド クラスを拡張することもできます。
7. サーバ コマンド クラスのコンストラクタで、サーバ コマンドの名前を割り当てます。
namespace ToolsSample
{
public class AddPinPointCommand : MapInfo.WebControls.MapBaseCommand
{
/// <summary>
/// Constructor for this command, sets the name of the command
/// </summary>
/// <remarks>None</remarks>
public AddPinPointCommand()
{
Name = "AddPinPointCommand";
}
8. サーバ コマンド クラスの Process() メソッドをオーバーライドし、目的のコマンドのビジネス
ロジックを実行するコードを追加します。
public override void Process()
{
// Your code here.....
}
9. webform1.aspx の Page_Load メソッドで、MapControlModel のコマンドのコレクションに必
要なサーバ コマンドを追加します。
MapXtreme v7.2
95
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
カスタム Web コントロールの使用と配布
MapInfo.WebControls.MapControlModel controlModel =
MapControlModel.SetDefaultModelInSession();
controlModel.Commands.Add(new AddPinPointCommand());
10. 新しいアセンブリを作成して、このツールを Visual Studio ツールボックスに追加します。「カ
スタム Web コントロールの使用と配布」を参照してください。
11. カスタム ツールを Web フォームにドラッグ アンド ドロップし、そのプロパティに
ClientCommand と ClientInteraction の名前を設定します。手順 3 と手順 4 で触れた JavaScript
を参考にしてください。
12. 手順 6 で定義したサーバ コマンドのプロパティを設定します。
13. Web フォームでこのコントロールが存在するアセンブリおよび名前空間を指定するタグ接頭辞
を登録します。
<%@ Register TagPrefix="cc1" Namespace="MapInfo.WebControls"
Assembly="MapInfo.WebControls, Version=4.0.0.476, Culture=neutral,
PublicKeyToken=0a9556cc66c0af57" %>
<%@ Page language="c#" Inherits="ToolsSample.WebForm1"
CodeFile="WebForm1.aspx.cs" %>
<%@ Register TagPrefix="cc2" Namespace="CustomizedWebTools" %>
WebTool の既存の動作がニーズを満たさない場合は、クライアント サイドのコマンドおよび対話
操作を処理する独自のサーバ Command クラスおよび Javascript を作成できます。この例につい
ては、「Web アプリケーションへの InfoTool の追加」を参照してください。
カスタム Web コントロールの使用と配布
作成したカスタム Web ツールを Visual Studio ツールボックスから利用できるようにしたり、他の
ユーザに配布したりするには、それをアセンブリに追加する必要があります。
MapXtreme は Web コントロールのソース コードを提供しており、必要に応じてそれを参照、変
更、および配布できます。Web コントロールのソース コードは、
\Samples\WebControlsSourceCode フォルダにインストールされます。変更した Web コントロー
ルを使用および配布するためには、新しいアセンブリを作成し、それを Visual Studio に登録する
必要があります。
以 下 は、MapXtreme Web コ ン ト ロ ール アセンブリに関する重要な事柄を示しています。
MapXtreme のソース コードに修正を加えるか、独自のツール クラスを一から作成するかにかかわ
らず、これらの点を考慮するようにしてください。
•
•
•
アセンブリは、MapInfo.WebControls.dll という名前で、グローバル アセンブリ キャッシュに
インストールされます。このアセンブリは、テンプレートおよびサンプル アプリケーションで
使用される特定のバージョン番号を持ちます。
アセンブリ内のコントロールは、Visual Studio のツールボックスにインストールされます。
アセンブリは、MapInfo.CoreEngine.dll、MapInfo.CoreEngine.Wrapper.dll、および
MapInfo.CoreTypes.dll を参照します。
MapXtreme v7.2
96
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
カスタム Web コントロールの使用と配布
•
イメージやスクリプトなどのリソースは、C:\Program Files\Common
Files\MapInfo\MapXtreme\7.x.x\MapXtremeWebResources フォルダにインストールされます。
•
Web コントロールによって次のファイルが使用されます。
•
ツールのアクションを表す *.GIF イメージ (DistanceToolControlActive、
DistanceToolControlInactive など)
•
ツールのアイコンを表す *.BMP イメージ (ラベル、選択矢印など)
•
ツールの対話操作や動作を定義する JavaScript
(Interaction.js、Command.js、LayerControl.js、LegendControl.js、Tool.js)
•
マウス使用時にイメージを表示する *.CUR (cursor) ファイル
Web アセンブリの作成
カスタム Web コントロール アセンブリを作成するには
1. カスタマイズした Web コントロールのソース ファイルを別のディレクトリにコピーしてオリ
ジナルを保管します。
2. グローバル アセンブリ キャッシュおよび Visual Studio ツールボックスから元のアセンブリを
削除します。
32 ビットと 64 ビットのどちらの MapXtreme をインストールしたかに応じて、アセンブ
リは C:\Progiram Files\Windows\Assembly\GAC_32 または GAC_64 に保存されてい
ます。
3. sn - k MapInfo.WebControls.snk を使用して、厳密名キー ファイル (.snk) を作成し、この
キー ファイルをメイン プロジェクト フォルダ (プロジェクト ファイルと同じレベル) にコ
ピーします。
4. AssemblyInfo.cs ファイルまたは AssemblyInfo.vb ファイルのバージョン番号を Web アセンブ
リに合わせて変更します。
5. Visual Studio でプロジェクトを開き、必要な変更を加えてプロジェクトをビルドします。新し
いアセンブリが Bin\Release ディレクトリに作成されます。アセンブリのリリース バージョン
を配布できます。
6. 次の構文を参考にして、新しいアセンブリをグローバル アセンブリ キャッシュおよび Visual
Studio ツールボックスに登録します。詳細については、「Global Assembly Cache Tool」を
参照してください。
gacutil /i MapInfo.WebControls.dll
7. 新しいアセンブリを使用してアプリケーションを作成します。Visual Studio ツールボックスか
ら、新しいコントロールをフォームにドラッグ アンド ドロップします。
8. Web アプリケーションのインストーラで、新しいアセンブリがグローバル アセンブリ キャッ
シュにインストールされるようにします。Web アプリケーションがこのバージョンのアセンブ
リを指し示す限り、新しいコントロールが使用されます。
次のシナリオを検討してください。
MapXtreme v7.2
97
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web アプリケーションへの InfoTool の追加
•
•
Web コントロール プロジェクトおよびリソースを Web アプリケーション ソリューションに直
接挿入できます。その場合は、リソース (スクリプトおよびイメージ) の URL をプロジェクト
ルートから始まるように変更します。これにより、仮想ディレクトリを作成する必要がなくな
ります。
グローバル アセンブリ キャッシュおよび厳密名アセンブリを使用する必要はありません。ア
センブリの Copy プロパティを true に設定し、アセンブリをアプリケーションの Bin フォルダ
に格納します。
Web アプリケーションへの InfoTool の追加
MapXtreme には、Web アプリケーションで適用および使用できる InfoTool のサンプル アプリケー
ションが用意されています。このツールを使用すると、ユーザがマップ上でクリックしたポイン
トの情報を取得したり、Web アプリケーションから返された情報を取得できます。
InfoTool サンプルを変更するには
1. Samples フォルダ内の InfoToolCS または InfoToolVB Web アプリケーションを見つけます (デ
フォルトの場所は C:\Program
Files\MapInfo\MapXtreme\7.x.x\Samples\VisualStudio20xx\Web\Features\InfoTool\InfoToolVB
です)。
2. 以下のファイルをプロジェクト フォルダにコピーし、それをプロジェクトに追加します。
•
InfoTool フォルダのルートにある CustomCommand.js
•
\App_Code フォルダにある CustomizedCommands.cs または CustomizedCommands.vb
•
InfoTool フォルダのルートにある stylesheet.css
3. PointSelect ツールを Web Form に追加し、以下のコードをフォームの Page_Load メソッドに
追加します。
MapInfo.WebControls.MapControlModel controlModel =
MapControlModel.SetDefaultModelInSession();
controlModel.Commands.Add(new CustomWebTools.Info());
4. PointSelect ツールのプロパティを、サンプル アプリケーションの InfoTool のプロパティに一
致させます。これらは、ツールの [プロパティ] ウィンドウで設定します。
C l i e n t C o m m a n d 、C l i e n t I n t e r a c t i o n 、C o m m a n d 、C u r s o r I m a g e U R L 、
InactiveImageURL、 および MapControlID が、目的のプロパティです。
5. フォームを HTML 表示に切り替えて、以下の行を <form> タグの後に追加します。
<script language="javascript" src="CustomCommand.js"
type="text/javascript"></script>
6. サンプル アプリケーションの場合と同様に <div> を追加して、ツールが取得した情報を保持し
ます。
<div id="Info" class="infoDiv">
Div&nbsp;element to display selected feature information in
html table.</div>
7. Web アプリケーションをビルドします。
MapXtreme v7.2
98
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
ASP.NET AJAX と MapXtreme Web アプリケーション
ASP.NET AJAX と MapXtreme Web アプリケーション
MapXtreme の Web コントロールおよびツールには、Web アプリケーションに効率的なリクエス
ト/レスポンス サイクルを提供する JavaScript が使用されています。マップ ツールを使用するたび
に、JavaScript の対話機能とコマンドによって、クライアントにページ全体をポスト バックする
ことなく操作が実行されます。通常、更新されるのはマップ イメージだけです。
Microsoft の ASP.NET AJAX テクノロジは、スクリプティング ライブラリと ASP.NET Framework
を統合することによって、この動作をさらに発展させたものです。その中心となるコントロール
は、UpdatePanel (頻繁に更新されるサーバ コントロールのコンテナ) と ScriptManager (Web ペー
ジのスクリプト アクティビティを管理する) です。
MapXtreme に付属のサンプル アプリケーションでは、Microsoft の ASP.NET AJAX コントロール
を MapXtreme の Web マッピング アプリケーションで実際に使用する方法を紹介しています。サ
ンプルは、..\MapInfo\MapXtreme\7.x.x\Samples\VisualStudio2005\Web\Features に格納されてい
ます。
L
AJAXDemo サンプルを実行するには、Microsoft ASP.NET AJAX Extensions 1.0 以降がシス
テムにインストールされている必要があります。
次のセクションでは、AJAX コントロールを MapXtreme アプリケーションに追加する手順を説明
します。
AJAX Extensions には、"ASP.NET AJAX-Enabled Web Site" というテンプレートが付属していま
す。AJAX の概念を理解するためにも、まず、このテンプレートを使って Web アプリケーション
を作成してみることをお勧めします。このテンプレートの Web.config ファイルを見ると、アプリ
ケーションにコピーする必要のある設定が httpHandlers セクションや httpModules セクションに
含まれていることがわかります。
また、AJAXDemo サンプル Web アプリケーションも参考にしてください。以降の手順では、この
サンプルから抜粋した JavaScript コードおよび Web.config 設定が引用されています。
ASP.NET AJAX コントロールを MapXtreme Web アプリケーションに追加
する方法
ASP.NET AJAX コントロールを既存の MapXtreme Web アプリケーションに追加するには
1. Web フォームを Visual Studio のデザイン モードで開きます。
2. Visual Studio ツールボックスの "AJAX Extensions" セクションにある ScriptManager コント
ロールをフォームにドラッグします。(ScriptManager は実行時には見えないため、配置する位
置を気にする必要はありません。)
3. AJAX UpdatePanel コントロールをフォームにドラッグします。
MapXtreme v7.2
99
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
ASP.NET AJAX と MapXtreme Web アプリケーション
4. ページ全体が更新されてしまうのを防ぐため、Button コントロールなどの標準コントロールは
UpdatePanel 内に移動します。
L
MapControl や LayerControl などの MapXtreme コントロールは UpdatePanel の外に配
置します。詳しい例については、AJAXDemo サンプル アプリケーションを参照してく
ださい。
5. アプリケーションの Web.config ファイルを開き、httpHandlers セクションを探します。Web
アプリケーションの内容にもよりますが、httpHandlers セクションに、1 ~ 2 個のエントリし
か存在しない場合もあります。1 つは MapController.ashx のエントリで、もう 1 つは (アプリ
ケーションに LayerControl が含まれる場合) LayerController.ashx のエントリです。
<httpHandlers>
<add verb="*" path="MapController.ashx" ...
<add verb="*" path="LayerController.ashx" ...
</httpHandlers>
6. AJAXDemo サンプル アプリケーションの Web.config ファイルを開き、ASP.NET AJAX に必要
な追加のエントリを含んだ httpHandlers セクションを探します。
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" ...
<add verb="*" path="*_AppService.axd" ...
<add verb="GET,HEAD" path="ScriptResource.axd" ...
<add verb="*" path="MapController.ashx" ...
<add verb="*" path="LayerController.ashx" ...
</httpHandlers>
上 か ら 4 つ の い ず れ か の httpHandlers エントリが、対象のアプリケーションの
Web.config
フ ァ イ ル に 存在しない場合は、欠落しているエントリを
AJAXDemo
Web.config
フ ァ イ ル か らコピーし、Web.config
ファイルに貼り付けます。
(LayerController.ashx エントリをコピーする必要はありません。デザイナ モードで
LayerControl をページに配置すると、LayerController.ashx エントリが自動的に生成
されます。)
7. Web.config ファイルの httpModules セクションを探します。httpModules セクションにはおそ
らく、MapInfo.Engine.WebSessionActivator のエントリが 1 つ存在します。ここで、モジュー
ル セクションに対し、次のように AJAXDemo Web.config ファイルの "ScriptModule" エントリ
をコピーします。
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule...
<add type="MapInfo.Engine.WebSessionActivator...
</httpModules>
UpdatePanel 内のコントロールがマップに何らかの形で影響を与える場合は、マップ イ
メージが強制的に更新されるように、ページに JavaScript を追加する必要があります。特
定の UpdatePanel でページ更新が発生したときに、常にマップ イメージを更新する方法に
ついては、AJAXDemo サンプル アプリケーションに含まれる JavaScript を参考にしてく
ださい。
MapXtreme v7.2
100
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme タイル ハンドラ
8. AJAXDemo アプリケーションの MapForm.aspx ページをソース モードで開きます。<script>
ブロックをコピーして aspx ページに貼り付けます。スクリプトでは ScriptManager によって
提供されるオブジェクトが使用されるため、<script> ブロックは ScriptManager タグの後に貼
り付けてください。
9.
<script> ブロックから、DisplayEventInfo 関数と、それを呼び出すコードをすべて削除します。
DisplayEventInfo 関数は、AJAXDemo アプリケーションのデバッグ ツールです。他のアプリ
ケーションでは必要ありません。
10. UpdatePanel の名前を変更した場合は、新しい名前に合わせて <script> ブロックを編集します。
UpdatePanel の名前は、第 2 パラメータとして TargetPanelWasUpdated 関数に渡されます。
デフォルトの名前は "UpdatePanel1" です。
11. アプリケーションに複数の UpdatePanel を使用するとき、その中の一部の UpdatePanel だけが
マップに影響するようにするには、各 UpdatePanel の UpdateMode プロパティを Conditional に
設定する必要があります。詳細については、AJAXDemo サンプル アプリケーションに付属の
ReadMe ファイルを参照してください。
ASP.NET AJAX Extensions で 必 要となる Web.config 設定の詳細については、Microsoft の
ASP.NET AJAX に関するドキュメントを参照してください。
MapXtreme タイル ハンドラ
MapXtreme には、マップ タイルおよびマップ情報をリクエストする際に使用される、REST ベー
スのタイル ハンドラとパブリック URL があります。REST ベースのハンドラを使用すると、マッ
プ リクエストのすべての引数を 1 つの URL に埋め込むことができます。
マップ タイルは、事前にレンダリングおよび格納してユーザからのリクエストを待機できるた
め、現代の Web マッピングにおいて必須となりつつあります。ユーザ セッションの際に更新する
必要がないため、ベース マップを静的イメージとして格納するタイル サーバを設計できます。ク
エリから返される情報など、ユーザを限定した情報を含む動的に変化するデータの場合、これら
のマップは要求時に生成されます。これらはタイルされているため、(タイル サイズ、マップ ウィ
ンドウ サイズ、およびズーム レベルに基づき) マップ ウィンドウに表示可能なタイルのみが返さ
れます。
MapXtreme タイル ハンドラを利用する Web アプリケーションの例については、MapInfo 開発者
向けのコード変換のフォーラムにある、MapXtreme タイル ハンドラの例を参照してください。
MapXtreme は、以下の操作をサポートしています。
•
•
•
•
マップ内の行と列の位置によるタイルのリクエスト
利用可能なマップのリストのリクエスト
マップの説明のリクエスト
タイル パフォーマンスを向上するキャッシュ手順の指定
MapXtreme v7.2
101
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme タイル ハンドラ
MapXtreme タイル ハンドラ API は、MapInfo.WebControls.Tiling 名前空間に含まれています。詳
細については、『開発者リファレンス』を参照してください。タイル ハンドラのソース コードは
\Samples\WebControlsSourceCode フォルダに格納されています。
MapXtreme タイル ハンドラの使用
最も単純な形式で MapXtreme タイル ハンドラにアクセスし、タイル サーバからマップ タイルお
よびマップ情報をリクエストするには
1. web.config ファイルを以下のように変更して、ハンドラを指し示します。
<httpHandlers>
<add verb="*" path="TileServer/*"
type="MapInfo.WebControls.Tiling.TileHandler"
<add verb="*" path="TileServer/*/*"
type="MapInfo.WebControls.Tiling.TileHandler"
<add verb="*" path="TileServer/*/*/*"
type="MapInfo.WebControls.Tiling.TileHandler"
<add verb="*" path="TileServer/*/*/*/*"
type="MapInfo.WebControls.Tiling.TileHandler"
</httpHandlers>
/>
/>
/>
/>
2. 複数のマップを含むワークスペース (.MWS) を提供します。
たとえば、ユーザの場所が対応範囲 (携帯電話ネットワーク、商圏、学区など) の内側か外側か
を知ることができる対応範囲のロケータ アプリケーションの場合は、以下のものを含みます。
•
バックグランド マップおよび参照マップとしての役割を果たすベース マップ レイヤ。
•
ポイント位置や道路ネットワークなど、参照ポイントおよび参照線を含むオーバーレイ
マップ。
対応範囲を含む対応範囲レイヤ。
•
3. 以下の形式の URL を使用して、使用可能なマップのリストをリクエストします。
http://server/TileServer/maplist.{ext}
ext は、返される情報の形式を表す拡張子です (現在サポートされているのは JSON のみで
す)。
このクエリは、以下の形式で JSON (JavaScript Object Notation) オブジェクトを返
します。
{
[
"Map1Alias",
"Map2Alias",
"Map3Alias"
]
}
4. 手順 3 のリストされているマップ名を使用して、以下の URL 形式で、マップに関する詳細情
報をリクエストします。
MapXtreme v7.2
102
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme タイル ハンドラ
http://server/TileServer/{mapname}/description.{ext}
mapname は、メタデータを取得する、タイル サーバ上のマップの名前です。値の大文字と小
文字は区別されません。
ext は、返される情報の形式を表す拡張子です(現在サポートされているのは JSON のみで
す)。
指定したマップのメタデータが返されます。
{
"numberOfLevels": 20,
"coordSys": "epsg:41001",
"description": "Map of the World",
"name": "World",
"tileWidth": 256,
"tileHeight": 256,
"bounds": {
"minX": -3.756380109844111E7,
"minY": -4.497601034176671E7,
"maxX": 3.773376466605809E7,
"maxY": 4.49763662218225E7
}
"outputTypes":
[
"png"
]
}
5. 手順 3 および手順 4 で収集した情報を使用して、必要なすべての引数を URL に指定してマッ
プをリクエストします (以下で説明します)。
http://server/webapp/TileServer/{mapname}/{level}/{x;y}/tile.{ext}
たとえば、次のようなケースが考えられます。
http://<server>/<mywebapp>/TileServer/WorldOverlay/3/0;0/tile.png
これは、64 タイルで構成される WorldOverlay マップの左上のタイルをリクエストします。
次の表は各引数の説明です。
引数
概要
server
Web サーバ。
webapp
サーバ上で動作している Web アプリケーションの
名前。
TileServer
MapTiling ハンドラのインスタンスへのパス。 こ
れは、web.config の "httpHandlers" セクションに
ある "path" エントリの先頭に一致している必要が
あります。上記を参照してください。
mapname
タイル サーバ上のマップの名前。
MapXtreme v7.2
103
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
MapXtreme タイル ハンドラ
引数
概要
level
リクエストされたタイルのレベル。ゼロを基点と
します。
x;y
リクエストされたタイルの x 座標と y 座標 (ゼロを
基点とします)。
たとえば、レベル 3 の場合、マップは 8 行、8 列
の 64 タイルで構成されます。左上のタイルの x 引
数と y 引数は 0;0 です。左下のタイルの場合は 0;7
です。
ext
タイルの形式を表す拡張子 (gif、png など)。サ
ポートされている形式に一致している必要があり
ます。
キャッシュ
MapXtreme のタイル ハンドラは、アプリケーションのパフォーマンスが低下しないように、頻繁
に使用されるタイルのキャッシュをサポートしています。キャッシュの指定は、Microsoft .NET
Framework の「HttpCacheability」に従って、web.config ファイルに記述されます。
5 種類のキャッシュがサポートされています (これに加えて、キャッシュしないというオプション
もあります)。次の列挙値を使用して、Cache-Control HTTP ヘッダーを設定します。
NoCache
Cache-Control: no-cache ヘッダーを設定します。フィールド名が
指定されていない場合、ディレクティブはリクエスト全体に適用さ
れ、共有 (プロキシ サーバ) キャッシュは、リクエストを処理する
前に元の Web サーバによる再検証を実行する必要があります。
フィールド名が指定されている場合、ディレクティブは指定された
フィールドのみに適用されます。レスポンスの残りは、共有キャッ
シュから提供される可能性があります。
Private
デフォルト値。Cache-Control: private を設定すると、レスポンスは
クライアントでのみキャッシュ可能となり、共有 (プロキシ サーバ)
キャッシュではキャッシュできません。
Public
Cache-Control: public を設定すると、レスポンスはクライアントと
共有 (プロキシ) キャッシュでキャッシュ可能となります。
Server
レスポンスが元のサーバでのみキャッシュされることを指定しま
す。これは NoCache オプションに似ています。クライアントは
Cache-Control: no-cache ディレクティブを受け取りますが、ド
キ ュ メ ン ト は 元 の サ ー バ で キ ャ ッ シ ュ さ れ ま す。こ れ は
ServerAndNoCache に相当します。
MapXtreme v7.2
104
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
HTML/XHTML 検証の問題
ServerAndNoCache
Server と NoCache の両方の設定を適用して、コンテンツはサーバ
でキャッシュされ、それ以外はレスポンスをキャッシュする機能が
明示的に拒否されることを指定します。
ServerAndPrivate
レスポンスはサーバとクライアントでキャッシュされ、それ以外で
はキャッシュされないことを指定します。プロキシ サーバはレスポ
ンスをキャッシュできません。
キ ャ ッ シ ュ オ プ シ ョ ン を 指 定 するには、web.config ファイルを以下のように変更して、
MapInfo.Engine.Session.Cacheability キーを指し示します。
<appSettings>
<add key="MapInfo.Engine.Session.Cacheability"
value="private"></add>
</appSettings>
キャッシュの有効期限
キャッシュされたタイルの有効期限を設定することもできます。タイル内のデータを更新する必
要がある場合は、有効期限を設定します。タイルの有効期限を設定することにより、アプリケー
ションのユーザには、最新情報のみが表示されます。
キャッシュの有効期限を設定するには、以下のように web.config ファイルにキーを追加します。
<appSettings>
<add key="MapInfo.Engine.Session.CacheExpires"
value="4/1/2010"></add>
</appSettings>
value には、Microsoft の DateTime.Parse(String) メソッドで解析できる任意の文字列を指定でき
ます。
Microsoft は有効期限を 1 年に制限しているので注意してください。1 年を超える日付は有効では
ありません。
HTML/XHTML 検証の問題
MapXtreme Web アプリケーションを作成し、検証サービスを使って結果の HTML を実行した場
合、使用している DOCTYPE タグのバージョンによっては、次のような検証エラーが表示される
場合があります。
"ID" の属性の値が無効である。名前の先頭を "_" にすることはできない
この検証エラーは、次の属性を持つ隠しフィールドに関連したものです。
id="__VIEWSTATE"
こ の 検 証 エ ラ ー を 引 き 起 こ す id 属 性は、MapXtreme から出力されたものではありません。
ASP.NET によって出力された属性です。
MapXtreme v7.2
105
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
ポスト バック Web コントロールから JavaScript Web コントロールへの移行
この検証エラーを解決するには、.aspx ページ上の DOCTYPE タグを置き換える必要があります。
具体的には、DOCTYPE タグを XHTML DOCTYPE タグに更新すると、上記の id 属性があったと
しても、結果のページは正しく検証されます (ASP.NET によって、問題となるタグが DIV タグで
ラップされ、それらすべてが XHTML DOCTYPE と照らして検証されます)。たとえば、Visual
Studio の ASP.NET テンプレートから新しい Web アプリケーションを作成したときに自動的に生
成されるものと同じ DOCTYPE タグを使用することもできます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
ポスト バック Web コントロールから JavaScript Web コントロール
への移行
v6.5 より前の Web コントロール 1 をバージョン 6.6 以降の MapXtreme Web コントロールに移行
するプロセスは、自動的には実行されません。すべてのアプリケーションは古い Web コントロー
ルの機能や設計との結合の度合いがそれぞれ異なり、それに応じて移行プロセスも異なります。
推奨される移行プロセスは、多層のアプローチを使用することです。場合によっては、コードの
再構成を行う必要があります。Web コントロールを移行する場合は、次の各プロセスを考慮する
必要があります。
•
•
•
データの読み込み
コントロールの置き換え
状態およびイベントの管理
データの読み込み
MapXtreme Web コントロールでデータを読み込む唯一の方法は、事前に読み込まれるワークス
ペースを使用する方法です。MapControl は、マップを読み込むのではなく、ワークスペース内の
MapAlias を参照してマップを表示します。事前に読み込まれるワークスペースは、Web.config
ファイル内で指定します。「初期マップの設定」を参照してください。
MapControl を使用して複数のマップ イメージを表示する場合は、すべてのマップが 1 つの場所に
格納されるようにデータを設定し、MapControl の MapAlias を変更してマップを選択します。
1.
バージョン v6.5 より前の MapXtreme リリースでは、ツールを使用するたびに Page_Load と Page_Unload
を呼び出すポスト バック ページが必要でした。これらのコントロールは、より効率的な、JavaScript 対応
の部分ページ更新型のコントロールに置き換えられました。ポスト バック コントロールは、旧バージョン
との互換性を確保するために提供されていますが、廃止される予定です。これらのコントロールの情報は、
MapInfo.Web.UI.WebControls 名前空間に存在します。JavaScript コントロールの API については、
MapInfo.WebControls 名前空間を参照してください。
MapXtreme v7.2
106
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールの特殊な使用法
コントロールの置き換え
コントロールを置き換える方法はいくつかあります。1 つは、フォームから古い Web コントロー
ルを削除した後で、新しい Web コントロールをフォームにドラッグ アンド ドロップする方法で
す。また、新しい Web フォームを作成し、新しいコントロールをフォームにドラッグ アンド ド
ロップした後で、古いフォームから新しいフォームに機能を追加する方法もあります。このと
き、MapControl に適切な MapAlias を設定し、すべての依存コントロールおよび LayerControl に
適切な MapControlID を設定してください。
状態およびイベントの管理
ほとんどの場合、状態管理を行うための古いやり方は、Page_Load に状態を復元し、Page_Unload
に状態を保存するという方法です。このコードを、StateManager から派生した新しいクラスの
RestoreState メソッドおよび SaveState メソッドに移動する必要があります。
ただし、状態を手動で操作する場合は、StateManager をインプリメントし、ASP.NET セッション
に入力する必要があります。MapXtreme では、必要な情報だけを復元できるように状態を手動で
管理することをお勧めします。「第 6 章 : 状態管理について」を参照してください。
Web ページ内で Server.Transfer または Response.Redirect が使用されている場合、このセッショ
ンはもはや新しいものではありません。StateManager があらかじめ存在していない場合は、これ
を ASP.NET セッションに入力する必要があります。
Web コントロールの特殊な使用法
以降のセクションでは、MapXtreme Web コントロールの特殊な使用法について説明します。
•
「フレーム内での Web コントロールの使用」
•
「テーブル セル内での MapControl の使用」
•
「Web コントロールのローカライズ」
フレーム内での Web コントロールの使用
MapXtreme Web コントロールは、フレーム内でも動作します。フレームやフレームセットを作成
したり、ページをフレームに割り当てたりする方法については、Visual Studio のマニュアルを参照
してください。
フレーム内で Web コントロールを使用する場合は、フレームが Web ページを指し示し、フレー
ムセットに 1 つまたは複数のフレームが含まれていることを確認します。MapControl を含むペー
ジと、MapControl に依存するツールまたは LayerControl を含むその他のページがあるとします。
これらのすべてのページでフレームセットが構成されます。
上記のシナリオに対して、次のルールが適用されます。
MapXtreme v7.2
107
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールの特殊な使用法
•
•
依存コントロールのプロパティに MapControlID を手動で入力する必要があります。同じ ID を
持つ依存コントロールと同じページに MapControl がある場合は、ツールおよび LayerControl
によってそのコントロールが選択されます。
フレーム ページは特定の順序で描画されるため、MapXtreme セッションは、最初のフレーム
の後に描画されるフレームにとって、新しいセッションではありません。StateManager を配
置 す る に は、次 の コ ー ド を イ ンプ リメン トし ます。読 み込ま れる ペー ジにか かわ らず、
StateManager クラスが登録されていることを確認します。次のコードは、RestoreState が呼
び出される前に実行されます。
' If the StateManager doesn't exist in the session put it in, else get
it.
If StateManager.GetStateManagerFromSession() Is Nothing Then
StateManager.PutStateManagerInSession(New AppStateManager())
End If
テーブル セル内での MapControl の使用
HTML の動作により、ある要素に含まれている要素をドラッグして元の要素の外に移動すると、そ
のサイズは基本サイズ (通常は 0) に変更されます。MapControl をテーブル セル内に配置した場
合、要素に HTML での絶対幅および高さが設定されていないと、問題が発生します。要素をド
ラッグしてセルの外に移動すると、セル サイズは 0 になります。
この問題を解決するには、MapControl の高さと幅を明示的に設定します。HTML でサイズを設定
する方法を次のサンプルに示します。
<TR bordercolor="#ff3366">
<TD bordercolor="#0066ff">
<cc1:mapcontrol id="Mapcontrol2" runat="server" Width="300px"
Height="300px"></cc1:mapcontrol>
</TD>
</TR>
<TR>
<TD>
<cc1:pantool id="Pantool2" runat="server"
MapControlID="MapControl2"></cc1:pantool>
<cc1:zoomintool id="ZoomInTool1" runat="server"
MapControlID="Mapcontrol2"></cc1:zoomintool>
<cc1:zoomouttool id="ZoomOutTool1" runat="server"
MapControlID="Mapcontrol2"></cc1:zoomouttool>
</TD>
</TR>
</table>
Web コントロールのローカライズ
MapXtreme には、Web コントロールに関連するテキスト文字列を翻訳する必要がある開発者用
に、Visual Studio 2008 ソリューションが用意されています。この "ローカライゼーション キット"
には、 MapXtreme のすべての実行時コンポーネントのリソース プロジェクトが含まれています。
設計時リソースは含まれていません。
MapXtreme v7.2
108
開発者ガイド
第 5 章 : Web アプリケーション、コントロール、およびツール
Web コントロールの特殊な使用法
各プロジェクトには、翻訳用の英語リソース文字列と厳密名キー (.snk) ファイルが含まれていま
す。これは、MapXtreme アプリケーションに統合可能なアセンブリにコンパイルされます。
MapXtreme Web コントロールは、MapInfo.WebControls.resources というプロジェクトに含まれ
ています。
ローカライズされた Web コントロール リソースからサテライト アセンブリをビルドする手順に
ついては、「付録 K : ローカライゼーション キット」を参照してください。
MapXtreme v7.2
109
開発者ガイド
6
状態管理について
この章では、Web アプリケーションを作成するときに非常に重要な問題とな
る状態管理の概念とベスト プラクティスについて説明します。
この章の構成
Š
Š
Š
Š
Š
Š
Š
概要. . . . . . . . . . . . .
用語集. . . . . . . . . . . .
状態管理とは. . . . . . . . .
InProc 開発モデル . . . . . .
プール オブジェクトの状態管理
手動状態管理の詳細. . . . . .
MapXtreme Session の詳細 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
111
111
113
116
119
124
131
第 6 章 : 状態管理について
概要
概要
状態管理は、MapXtreme Web アプリケーションを設計および構築する際に考慮すべき重要事項で
す。ユーザの使い心地を高め、スケーラブルかつ高性能なアプリケーションを構築するために
は、Web サイトの訪問者が Web アプリケーションを操作するときにどのような方法で変更を加え
るのかが重要になります。
この問題について掘り下げる前に、この章で扱うテーマに関する必読の内容を次のセクションに
示します。MapXtreme Session と HTTP Session、ユーザの状態とアプリケーションの状態、ク
リーンな MapXtreme Session オブジェクトとダーティな MapXtreme Session オブジェクトについ
て、それぞれの相違を理解すれば、Web アプリケーションを開発当初から適切に計画し、構築す
ることができるでしょう。
用語集
MapXtreme Session - Catalog、MapFactory、CoordSysFactory を保持する MapInfo.Engine.Session
オブジェクト。ユーザは MapXtreme Session オブジェクトのインスタンスを操作します。
HTTP Session - リクエスト間にユーザの変更が保存される System.Web.HttpSessionState オブ
ジェクト。これらの変更は、各リクエストごとに保存され、復元されます。ユーザによる変更は
ユーザの状態と呼ばれます。
ブ ラ ウ ザ Session - 特 定 の ユ ー ザ が Web アプリケーションを操作している時間。これは、
ASP.NET セッションとも呼ばれます。
InProc 開発モデル - Web アプリケーション開発モデル。ここでは、各ユーザに個別の MapXtreme
Session オブジェクト インスタンスが与えられます。ブラウザ セッション中にユーザが加えた変
更が別のユーザに影響することはありません。MapXtreme Web アプリケーションは、現在のアプ
リケーション状態を含めて全体がメモリに格納され、個々のユーザに関連付けられます。このモ
デルは、部門別イントラネットなど、ユーザ数が決まっている環境における小規模で単純な Web
ア プ リ ケ ー シ ョ ン に 適 し て い ま す。これとは対照的に、Pooled
開発モデルではユーザが
MapXtreme Session とシステム リソースを共有するため、スケーラビリティが高くなっていま
す。「InProc開発モデル (116 ページ)」を参照してください。
Pooled 開発モデル - このモデルでは、Web アプリケーションに関連付けられた COM+ プールか
ら複数の MapXtreme Session インスタンスを使用でき、これらのインスタンスをアクティブ化し
て Web リクエストを処理します。プールされた MapXtreme Session オブジェクトを使用して、
複数の Web ユーザからのリクエストを処理します。アプリケーションで各ユーザの MapXtreme
Session の状態を管理する必要があるため、このモデルは InProc モデルよりも複雑です。一方
で、このモデルではシステム リソースをより効率的に使用できます。スケーラブルなアプリケー
ションを作成する場合は、このモデルを使用します。「プール オブジェクトの状態管理 (119 ペー
ジ)」を参照してください。
状態管理 - ブラウザ セッションで得られた情報の保存と復元に関する、Web アプリケーション開
発の一般用語です。
MapXtreme v7.2
111
開発者ガイド
第 6 章 : 状態管理について
用語集
バックグラウンド マップ - Web.config ファイルの設定に従って、Web アプリケーションに事前読
み込みされる初期マップです。このマップには、道路ネットワークや郵便番号境界などの参照レ
イヤだけでなく、販売店の場所や携帯電話基地局などのアプリケーション固有データも含まれて
います。この基本ワークスペースは MapXtreme Session インスタンスに事前読み込みされます。
ユーザによる基本マップの変更がアプリケーションで許可されていない限り、これを利用できま
す。「状態管理の選択肢 (113 ページ)」を参照してください。
アプリケーション状態 - Web アプリケーションの全ユーザおよび全セッションに適用される、メ
モ リ に 状 態 情 報 を 格 納 す る た め の ASP.NET 定義メカニズム。「ASP.NET Application State
Overview」(http://msdn2.microsoft.com/en-us/library/ms178594.aspx) を参照してください。ま
た、「初期リクエストの処理 (129 ページ)」も参照してください。
ユーザ状態 - ユーザのリクエスト間で保存される、MapXtreme Session およびアプリケーション
の状態。ユーザが MapXtreme Session やアプリケーションに加えた変更は、必ず HTTP Session
に保存されます。マップの再センタリングなどの単純な変更もあれば、主題図マップを作成する
クエリなど複雑な変更もあります。
開始状態 - プールされた MapXtreme Session インスタンスにユーザがアクセスしたときの状態。
開始状態には次の 4 種類があります。
•
サイトの新規ユーザ、プール内の使用可能な MapXtreme インスタンスはクリーン、バック
グラウンド マップは初期状態。
•
サイトの新規ユーザ、プール内の使用可能な MapXtreme インスタンスはダーティ (マップ
に他のユーザによる変更が加えられている)。
•
再訪問ユーザ、プール内の使用可能な MapXtreme インスタンスはクリーン。
•
再訪問ユーザ、プール内の使用可能な MapXtreme インスタンスはダーティ (マップにこの
ユーザまたは他のユーザによる変更が加えられている)。
MapInfo.Engine.Session.State - MapXtreme Session の状態が自動的に保存されるか手動で保存す
るかを指定する、MapXtreme 定義メカニズム。自動セッション状態の場合、MapXtreme Session
全体が HTTP Session に保存されます。自動セッション状態は、アプリケーションの Web.config
ファイルの次のキーで設定します。
<add key="MapInfo.Engine.Session.State" value="HttpSessionState" />
手動セッション状態の場合、ユーザごとに異なる状態を保存するコードを開発者が作成する必要
があります。スケーラブルな、プールされるアプリケーションを作成する際に使用するメカニズ
ムです。
手動セッション状態は、アプリケーションの Web.config ファイルの次のキーで設定します。
<add key="MapInfo.Engine.Session.State" value="Manual" />
StateManager - プールされた Web アプリケーションにユーザ状態を保存し、復元するために役立
つメソッドとプロパティを備えた、MapXtreme クラス。Web.config ファイルで
MapInfo.Engine.Session.State が Manual に設定されている場合、アプリケーションでは
SaveState メソッドと RestoreState メソッドをインプリメントする StateManager クラスを用意す
る必要があります。「StateManager のインプリメント (126 ページ)」を参照してください。
MapXtreme v7.2
112
開発者ガイド
第 6 章 : 状態管理について
状態管理とは
sessionState - ユ ー ザ 状 態 の 保 存 に使用する格納メカニズムを設定する、標準の ASP.NET
Web.config 要素。次の 3 種類があります。
•
InProc - ASP.NET セッションの有効期間の間、ユーザ状態がメモリに格納されます。
•
StateServer - ユーザの変更を後で取得できるように、ユーザ状態がサーバに保存されます。
•
SQLServer - 後でアクセスできるように、ユーザの状態が SQL Server データベースに保存
されます。
状態管理とは
状態管理、つまり各ユーザのセッションの状態に関する情報の保存と復元を行う処理は、さまざ
まな種類の Web アプリケーションで実行する必要があります。たとえば、小売り Web アプリ
ケーションでショッピング カートを提供する場合、各ユーザのショッピング カートに関する情報
をアプリケーションで保存しておく必要があります。
Web マッピング アプリケーションで、アプリケーション内でユーザがマップをクリックして拡大
できる場合、ヨーロッパを拡大しているユーザとオーストラリアを拡大しているユーザを別々に
記憶しておく必要があります。各ユーザのマップの状態を記録するコードを状態管理コードとし
て参照します。
状態管理の選択肢
MapXtreme における状態管理の方法には、次の選択肢があります。
•
•
•
InProc 状態管理を使用する場合、コード作成は簡単です。ただし、サーバ リソースに大きな負
担がかかるため、すべてのアプリケーションに適しているわけではありません。
Pooled アーキテクチャでは自動状態管理を使用できます。このモデルの場合、簡単にコード
作成できますが、要件によっては完成したアプリケーションの速度が不十分になることがあ
ります。
Pooled アーキテクチャでは手動状態管理を使用できます。このモデルの場合、多くのコードを
自分で作成する必要があります。ユーザの状態を構成する適切な MapXtreme Session オブ
ジェクトを保存し、復元するコードを作成する必要があります。ただし、このモデルを使用す
ると最もスケーラブルなアプリケーションを作成できるため、ユーザ数の多いアプリケーショ
ンには最適です。
つまり、それぞれの選択肢にトレードオフがあります。MapXtreme を使って Web アプリケーショ
ンを設計する際には、さまざまな要素を考慮する必要があります。こうした検討事項として、
MapXtreme の設計に関する意思決定と、Microsoft テクノロジの設計パターンがあります。この章
では、どのような意思決定が必要になるか、また、作成するアプリケーションの種類について、
適切な選択をするためにはどうすればよいかという点について説明します。
Web アプリケーションを作成する前に、状態管理について検討することを強くお勧めします。選
択した状態管理の種類によって、アプリケーションの作成方法は変わります。Web アプリケー
ションを作成した後で、状態管理の種類を決定した場合、アプリケーションの重要な部分を作成
し直す必要が生じることがあります。
MapXtreme v7.2
113
開発者ガイド
第 6 章 : 状態管理について
状態管理とは
アプリケーションを作成する前の検討事項
単純な MapXtreme Web アプリケーションを作成する場合には、とても簡単に手早く作成すること
が で き ま す。MapXtreme に 付 属 の Visual Studio テンプレート ("MapXtreme 7.2.0 Web
Application") を使用して、新規 Web アプリケーションを作成するだけです。
ただし、複雑な Web アプリケーションを作成する場合には、Web アプリケーションのビジネス
ロジックのコードを作成するために膨大な時間と労力を費やす前に、いくつかの検討事項につい
て考慮してください。その答えが、適切な状態管理の種類を決定するために役立ちます。
アプリケーションにアクセスするユーザ数
最も重要な検討事項は、このサイトにアクセスするユーザの数です。
Web アプリケーションのユーザ数を把握する時期が早ければ早いほど、スムーズに作業を開始で
きます。アプリケーションを開発し、非常に少ないユーザ数でテストした場合 (パイロット プロ
ジェクトなど)、ユーザ数が多くなると、アプリケーションが適切に動作していないことが後で判
明する場合があります。このような状況では、アプリケーションのアーキテクチャを変更する必
要に迫られ、場合によってはアプリケーションを作成し直す必要があります。適切な状態管理
アーキテクチャを最初から使用できるように、事前に計画を立ててユーザ負荷を前もって予測し
ておく方がはるかに良いでしょう。
ユーザ数がわかっている場合
使用する可能性のあるユーザが明確に限定されているイントラネット サイトを作成することもあ
るでしょう。たとえば、組織の特定の部門で使用される Web サイトを作成する場合などです。場
合によっては、サイトにアクセスする全員の名前がわかっていることもあるでしょう。
同時にアクセスするユーザが明確に限定されている場合、プールを使用しない InProc 開発モデル
の使用を検討できます。これはコード作成が最も容易なモデルですが、Web サーバ リソースへの
負荷が大きいため、アプリケーションによっては適切な選択とは言えません。このモデルでは、
同時にアクセスする各ユーザに対して 1 つの MapXtreme Session インスタンスを作成します。た
だし、ユーザのプールが明確に限定されている場合、このようなサーバ要件は問題にならないで
しょう。
ユーザ数が不明な場合
もう 1 つの開発モデルは、サイトにアクセスするユーザの数が不明な場合です。時間の経過とと
もに、Web サイトを訪れるユーザ数が増えていくことを想定することもあるでしょう。この場
合、プールを使用しない InProc 開発モデルは適切ではありません。各ユーザの状態を手動で取得
する Pooled 開発モデルの使用を検討する必要があります。Pooled 開発モデルでは、限られた数の
MapXtreme Session を作成し、プール内のオブジェクトの 1 つを再利用することで各ユーザ リク
エストを処理します。
Pooled アーキテクチャを使用することで、スケーラビリティの高いアプリケーションを開発でき
ます。負荷の増大に対処するために、後でサーバを増やす必要に迫られる可能性があります。そ
のため、アプリケーションには、ユーザの状態を常に把握し、次にサーバにリクエストが来たと
きに、その状態をいつ、どのように適用するかを管理できることが求められます。この管理は、
同じサーバが行う場合もあれば、サーバ ファーム内の別のサーバが行う場合もあります。高いス
ケーラビリティにより、システムにおける状態の保存方法、データへのアクセス方法、複数のリ
MapXtreme v7.2
114
開発者ガイド
第 6 章 : 状態管理について
状態管理とは
クエストに対する応答の方法に関して、さまざまな選択肢が生じることになります。そのため、
アプリケーションの計画を十分に練り、分散アプリケーションをサポートする堅牢なアーキテク
チャを構築することが重要です。
初期マップの設定
アプリケーションの開発時には、すべてのユーザで共通する情報を決めておく必要があります。
たとえば、マップ レイヤ、ラベル、タイトル、カラー コード、その他の主題図色分けなどです。
これをバックグラウンド マップといいます。
バックグラウンド マップを設定するには、MapXtreme ワークスペース マネージャ (MapXtreme で
インストールされるデスクトップ アプリケーション) を実行し、マップをワークスペース ファイ
ル (.mws ファイル) として保存します。「第 23 章 : ワークスペース マネージャ」を参照してくだ
さい。
.mws ファイルを作成した後で、Web アプリケーションの Web.config ファイルを編集して .mws
ファイルへの参照を指定します。Web.config における構文は次のようになります。
<configuration>
<appSettings>
<add key="MapInfo.Engine.Session.Workspace"
value="C:\MIDATA\EvalData\WorldDetail\World_Detail.mws" />
</appSettings>
</configuration>
このタグにより、新しい MapXtreme Session インスタンスが作成されたときにワークスペースが
読み込まれます。
ユーザによるマップの変更の許可
ほとんどの Web アプリケーションでは、クリックやドラッグなど、何らかの方法でマップを変更
する操作をユーザに許可します。次の操作をアプリケーションで許可するかどうかを検討します。
ユーザに許可する操作:
•
マップの拡大、縮小、再センタリング
•
マップ上のフィーチャの選択 (マップ上で直接クリックして選択する場合も)
•
マップ要素の表示と非表示 (チェック ボックスをオフにして道路を非表示にするなど)
•
主題図色分けの作成と変更 (マップでデータを表示するためのカラー コードなど)
•
シンボル マーカなどのマップ注釈のマップ上への配置
この操作はすべてマップ アプリケーションでサポートできます。ただし、Pooled モデルを使用し
て Web アプリケーションをインプリメントする場合は、ユーザがマップに加えたすべての変更を
確実に保存し、復元するコードをアプリケーションに含めるようにしてください。
たとえば、Web アプリケーションでユーザにマップへの注釈の配置を許可する場合、各ユーザの
カスタム注釈を保存するコードと、以降のリクエストのたびにユーザのカスタム注釈を復元する
コードを作成する必要があります。
MapXtreme v7.2
115
開発者ガイド
第 6 章 : 状態管理について
InProc 開発モデル
アプリケーションで手動の状態管理を行う Pooled モデルを使用する場合、ユーザにマップの変更
を許可するための機能を追加すればするほど、状態管理コードは複雑になります。ユーザがマッ
プをさまざまな方法で変更できるような機能を検討している場合、状態管理コードの開発とテス
トにかかる時間を確保することも忘れないでください。
InProc開発モデル
InProc 開発モデルを使用する場合、デスクトップ アプリケーションのコード作成に非常に近い方
法でアプリケーションのコードを作成します。InProc モデルの場合、各ユーザに対して 1 つの
MapXtreme Session オブジェクトが存在します。つまり、それぞれ独自のプロセス空間を持つ
ユーザごとにオーバーヘッドが発生し、リソースが共有されません。(Catalog、MapFactory、
CoorsSysFactory といった MapXtreme オブジェクトは、MapXtreme Session によって保持されま
す。)
開発上、InProc モデルは単純なモデルです。各ユーザが独自に MapXtreme Session を持つため、
その Session 内で変更を適用でき、他のユーザの Session に悪影響を及ぼすことがありません。
たとえば、ユーザがマップをクリックしてマップを拡大する場合、アプリケーション コードでは
単純にマップ オブジェクトの Zoom プロパティを変更するだけで済み、ズーム レベルの変更に
よって他のユーザが悪影響を受けることを考慮する必要はありません。そのため、InProc Web ア
プリケーションのコード作成は容易です。
Web アプリケーションをレストランにたとえて考えるとわかりやすいかもしれません。ウェイ
ターが複数のテーブルからの注文を受ける必要があるのと同様に、Web アプリケーションは複数
のユーザからのリクエストを同時に処理する必要があります。
InProc モデルは、1 つのテーブルにつき 1 人のウェイターを雇っているレストランにたとえられ
ます。レストランにとって、1 つのテーブルにつき 1 人のウェイターを雇うと高額な費用がかかり
ます。しかし、1 つのテーブルにつき 1 人のウェイターを雇う余裕があるレストランであれば、確
実にすべてのテーブルで優れたサービスを提供できるでしょう。また、各ウェイターの仕事も簡
単になります。各ウェイターは 1 つのテーブルに給仕するため、どの注文がどのテーブルのもの
であるかを覚えておくために余計な時間と労力をかける必要がなくなります。
InProc 開発モデルの長所と短所
InProc モデルを選択すると、各ユーザの状態を保存し、以降のリクエストのたびに復元するための
複雑なコードを用意する必要がなくなるため、Web アプリケーションの作成が容易になります。
ただし、InProc モデルでは同時にアクセスする各ユーザに対して専用の MapXtreme Session が必
要なため、スケーラビリティがありません。数千人のユーザが同時にサイトを使用すると、アプ
リケーションでは数千の MapXtreme Session をサーバ側で維持する必要があるため、サーバのリ
ソースに負担を強いることになります。多数の同時アクセス ユーザが予想される場合、InProc モ
デルはアプリケーションに適した選択肢ではありません。
MapXtreme v7.2
116
開発者ガイド
第 6 章 : 状態管理について
InProc 開発モデル
InProc 管理: 解説
ここでは、アプリケーションで InProc モデルを使用する場合に MapXtreme Session がどのような
方法で作成して使用されるかについて、例を挙げて説明します。以降に、順を追って簡単に説明
します。
1. ユーザがブラウザを起動し、マップ アプリケーション Web サイトにアクセスします。
2. サーバ上に新しい MapXtreme Session が作成されます。この ASP.NET セッションでは、この
MapXtreme Session を使用して、このユーザからのすべてのリクエストを処理します。
3. Web.config ファイルで指定されたワークスペース ファイルが読み込まれます。その結果、
MapXtreme Session の MapFactory に 1 つ以上の Map オブジェクトが収められます。この例
では、ワークスペースに 1 つのマップが含まれていると想定します。最初に世界全体が表示さ
れるとします。
4. Web ページの HTML がレンダリングされ、クライアントのブラウザに返されます。ページに
は HTML img タグが含まれます。これにより、サーバにマップのイメージがリクエストされま
す。サーバ側で、このユーザの MapXtreme Session のオブジェクト (特に Map オブジェクト)
を使用してマップ イメージがレンダリングされ、ユーザのブラウザに返されます。
5. ユーザが拡大ツールを選択し、オーストラリアの周囲に長方形ボックスを作成して、オースト
ラリアを拡大します。
6. サーバ側のアプリケーションにより、オーストラリアが拡大されるように Map オブジェクト
の Zoom プロパティが変更されます。新しいマップ イメージがレンダリングされ、イメージが
クライアント ブラウザにストリーミングされます。
これで、Map オブジェクトは最初と異なる状態になりました。世界全体ではなくオーストラリ
アを表示するために、Center プロパティと Zoom プロパティが変更されました。
7. ユーザが Select ツールをクリックし、マップの中でオーストラリアが表示されている部分をク
リックします。
8. サーバ側で、アプリケーションにより選択が実行され、オーストラリア地域が選択されます。
新しい選択部分を表示するために、新しいマップ イメージがレンダリングされます。
これで、マップの状態が元の状態から 2 種類の方法で変更されました。1 つは Center プロパ
ティと Zoom プロパティを変更する方法 (ステップ 6)、もう 1 つは、今ここで行った Selection
を追加する方法です。
9. 別の場所で、もう 1 人のユーザがブラウザを起動し、マップ アプリケーション Web サイトに
アクセスします。このユーザ向けに、サーバ上で新しい MapXtreme Session が作成されま
す。このセッションには、世界全体を表示するマップが含まれています。この Map オブジェ
クトは、最初のユーザの Map オブジェクトとは別のものです。
2 人目のユーザには、オーストラリアを拡大したマップではなく、世界全体のマップが表示される
ことに注意してください。オーストラリアが拡大されているのは、1 人目のユーザのマップだけで
す。2 つ目の MapXtreme Session (独自のマップを持つ) は、2 人目のユーザからのリクエストを処
理するために作成されています。したがって、2 人目のユーザには 1 人目のユーザと同じマップは
表示されません。
MapXtreme v7.2
117
開発者ガイド
第 6 章 : 状態管理について
InProc 開発モデル
InProc 開発モデルを使用するアプリケーションの設定
Web アプリケーションの Web.config ファイルには、アプリケーション モデルを制御する設定が
保存されます。InProc モデルの Web.config ファイルには、次のような設定が記述されています。
<!--Use this setting to turn Session pooling on/off (true/false)-->
<add key="MapInfo.Engine.Session.Pooled" value="false" />
<!--Use this setting to save Session state automatically
(HttpSessionState) or manually (Manual)-->
<add key="MapInfo.Engine.Session.State" value="HttpSessionState" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;userid=sa;password="
cookieless="false" timeout="20" />
この設定の場合、MapInfo.Engine.Session オブジェクトはプールされず、MapXtreme Session オ
ブジェクトの状態は自動的にユーザの HTTP セッション (キー値 = HttpSessionState) に保存され
ます。
sessionState 要素では、mode 属性を InProc に設定し、プロセス中にすべてが保存されるように指定
しています。sessionState が指定されなかった場合、InProc がデフォルトのモードになります。
MapXtreme Session インスタンスの有効期間は、Session 状態の設定によって異なります。サー
バベースの Session 状態を使用し、Web.config ファイルの ASP.NET sessionState 要素を InProc
に設定した場合、MapXtreme Session インスタンスは ASP.NET セッションの有効期間中、メモリ
にキャッシュされます。
その他の種類の Session 状態設定を使用した場合 (クライアントベースまたはサーバベースで
sessionState 要素を StateServer または SQLServer に設定した場合など)、MapXtreme Session イ
ンスタンスは ASP.NET リクエストごとに作成および破棄されます。ただし、この場合にはパ
フォーマンスに影響が及ぶため、開発モデルとしては避ける必要があります。InProc モデルを採
用する場合、sessionState を InProc に設定する必要があります。
InProc セッションの使用を選択した場合、Web サイトにアクセスするすべてのユーザに
MapXtreme Session オブジェクト (および、そこに保持されているすべての情報) が割り当てられ
ます。当然、ユーザ数が増えれば、メモリ消費量も増えます。
また、MapXtreme Session が作成されるたびに、アプリケーションでは Web.config で指定された
ワークスペースも読み込まれます。InProc モデルの場合、ユーザが初めてサイトにアクセスした
ときに新しい MapXtreme Session が作成され、ワークスペースが読み込まれます。
InProc 開発モデルを使用する MapXtreme テンプレートの使用
" テンプレートを使用して Web サイトを作成した場合、このテンプレートが InProc モデルに従っ
ていないことに注意してください。
InProc を使用するテンプレートでアプリケーションを作成するには、次の手順に従います。
1. 「InProc 開発モデルを使用するアプリケーションの設定 (118 ページ)」で説明したように、
Web.config ファイルを変更します。
MapXtreme v7.2
118
開発者ガイド
第 6 章 : 状態管理について
プール オブジェクトの状態管理
2. MapForm1.aspx.vb または MapForm1.aspx.cs で、アプリケーションの Page_Load メソッド
と Page_Unload メソッドを削除します。または、MapXtreme テンプレートによって自動的に
記述された手動状態管理コードをコメント アウトします。
プール オブジェクトの状態管理
Pooled アプリケーションの状態管理は、アプリケーションをスケーラブルにするために設計され
た開発モデルです。アプリケーションのユーザ数が多い、または増加し続けると予想される場
合、InProc モデルよりも Pooled モデルの方が適切な選択です。
プールとは
Pooled モデルでは、アプリケーションによってサーバ上に限られた数の MapXtreme Session オブ
ジェクトが作成されます。次に、それぞれのオブジェクト インスタンスがアプリケーション内で
共有され、再利用されます。次の図に示すように、各 MapXtreme Session で複数のユーザからの
リクエストが処理されます。
この図では、2 つの MapXtreme Session オブジェクトからなる COM+ プールを備えたアプリケー
ションが、3 人のユーザ (Web クライアント) によってアクセスされています。クライアントがリ
クエストを送信するたびに、2 つのうちどちらかの MapXtreme Session オブジェクトがリクエス
トを処理します。
このモデルの場合、専用の MapXtreme Session を持つクライアントは存在しません。その代わり
に、MapXtreme Session オブジェクトが共有され、再利用されます。次のような処理が考えられ
ます。
1. クライアント 1 がアフリカを中心にマップを拡大するリクエストを送信するとします。このリ
クエストが SessionObj1 を使用して処理されます。
MapXtreme v7.2
119
開発者ガイド
第 6 章 : 状態管理について
プール オブジェクトの状態管理
2. クライアント 3 がオーストラリアを中心にマップを拡大するリクエストを送信するとします。
このリクエストも SessionObj1 を使用して処理されます。つまり、1 つのセッションによって
複数のクライアントからのリクエストが処理されます。MapXtreme Session を "所有" するク
ライアントはありません。すべての MapXtreme Session が共有されます。
3. Client1 がマップをパンしてヨーロッパを表示するリクエストを送信するとします。このリクエ
ストが SessionObj2 を使用して処理されます。つまり、特定のクライアントが送信したリクエ
ストがすべて同じ MapXtreme Session (または同じ Map オブジェクト) によって処理されると
は限りません。
プールの長所と短所
Pooled 型のモデルでは、同時に使用される MapXtreme Session インスタンス数を抑えることがで
きるため、オブジェクトを新しく作成することによるオーバーヘッドを減らすことができます。
オブジェクトが必要なときは、プールから取り出されます。オブジェクトが不用になると、プー
ルに戻され、次のリクエスト待ちの状態になります。MapXtreme のプール機能を利用すること
で、Web リクエストが受信されたときには既に複数の MapXtreme Session オブジェクトが作成さ
れ、バックグラウンド マップに読み込まれており、使用することができます。
プールを使用することで、サーバのリソースを最適化できます。具体的な利点は次のとおりです。
•
•
•
複数の ASP.NET リクエストを同時に処理することによって Web アプリケーション全体として
の応答時間を短縮できる。
同時使用される MapXtreme インスタンス数を抑えることでリソースを節約できる。
同時実行されるリクエスト数 (およびスレッドのコンテキスト切り替え) を減らすことで CPU
の使用効率を最適化できる。CPU に対する負荷が大きいリクエストの場合 (マップ イメージの
エクスポートなど)、プールは特に有用です。プールのサイズは CPU あたり 1 ~ 2 セッション
にすることをお勧めします。
ただし、Pooled アプリケーションは複雑になる場合があります。MapXtreme Session (およびその
マップ) は共有され、再利用されます。そのため、アプリケーションでクライアント リクエストを
処理するたびに、各マップが適切な状態に再設定されているかどうかを確認する手順が必要にな
ります。
たとえば、クライアントがドイツの地図を表示するリクエストを送信したとします。単純にプー
ルから MapXtreme Session をフェッチして、そのセッションのマップを使用してイメージをレン
ダリングすることはできません。そのマップでドイツが拡大されているとは限らないからです。
そのリクエストを処理するマップを適切な既知の状態に設定する必要があります。オブジェクト
を使用して現在のリクエストを処理する前に、そのオブジェクトが適切な状態であることを確認
するために、アプリケーション開発者はオブジェクトの状態を管理する必要があります。
Pooled アプリケーションの状態の保存
Pooled 開発モデルでは、プール オブジェクトの状態を 2 つの方法で管理できます。MapXtreme
に現在のユーザ状態を管理させる方法 (自動状態管理) と、ユーザごとに保存/復元すべき状態の変
化を開発者が管理する方法 (手動状態管理) です。
MapXtreme v7.2
120
開発者ガイド
第 6 章 : 状態管理について
プール オブジェクトの状態管理
自動状態管理
この方法では、Web.config (StateServer または SQLServer) に定義されたセッション メカニズム
に、MapXtreme Session オブジェクトの状態を自動的に保存するように指定します。アプリケー
ション開発者がプログラムによって、現在のユーザの状態情報 (レイヤ、主題図、開いているテー
ブル、現在のズームなど) を保存する必要はありません。MapXtreme Session オブジェクトのすべ
ての状態が保存されます。
この設定では、すべてのユーザがプールされた MapXtreme Session オブジェクトを共有し、ユー
ザごとに MapXtreme Session を割り当てる必要がないため、InProc 型のモデルと比べるとシステ
ム リソースを節約できるというメリットがあります。欠点は、MapXtreme Session 全体が現在定
義されている状態メカニズムにシリアライズされる点です。通常、MapXtreme Session オブジェ
クトは、ファクトリ内のすべてのオブジェクトを取得し、それを状態メカニズムとしてシリアラ
イズします。たとえば、マップと、そこに含まれているレイヤ、開いているテーブルの定義、読
み込まれた投影法がすべてシリアライズされます。アプリケーションで自動状態管理が使用され
ている場合、MapXtreme Session オブジェクトでは個々のユーザの状態を判別せず、使用可能な
すべての情報を保存します。たとえば、ユーザ間で変化しないレイヤ (バックグラウンド マップ)
などです。これは時間のかかる処理であり、この種のアプリケーションの実行速度が InProc 型の
モデルと比べて遅くなる原因です。シリアライゼーションの詳細については、「シリアライゼー
ションと永続化 (第 9 章、217 ページ)」を参照してください。
手動状態管理
この設定では、MapXtreme Session インスタンスによってインスタンス データが自動的に保存さ
れることはありません。アプリケーション開発者が、各ユーザの状態を保存、復元するコードを
アプリケーションに組み込む必要があります。MapXtreme Session オブジェクトによって、状態
が現在定義されている状態メカニズムに保存されることはありません。
これは、パフォーマンスとスケーラビリティの点で最も優れた構成です。状態を保存しない、
プールされる MapXtreme Session インスタンスを使用している場合、このプール オブジェクトが
COM+ プール "ダーティ" に返されます。つまり、プール オブジェクトは、現在のユーザによって
マップに何らかの変更がなされているため、アプリケーションによってその状態をクリーンアッ
プし、次にそれを使うユーザのために適切に設定する必要があります。クリーンアップを Web ア
プリケーション リクエストの開始時に行うか、終了時に行うかも、開発者が指定できます。
「StateManager のインプリメント (126 ページ)」 を参照してください。
プールされた MapXtreme Session を使用し、ユーザの状態を手動で管理する場合、開発モデルは
複雑になります。特定のリクエストで使用される MapXtreme Session は予測できません。同時
に、そのユーザ専用の MapXtreme Session を使用してユーザ リクエストを処理する必要がありま
す。そのため、アプリケーションではプールされた MapXtreme Session の開始状態を把握してお
く必要があります。
MapXtreme v7.2
121
開発者ガイド
第 6 章 : 状態管理について
プール オブジェクトの状態管理
アプリケーションで処理する必要がある開始状態は、4 種類あります。各状態は、ユーザの状態と
MapXtreme Session の状態の組み合わせです。
プール内の MapXtreme Session の状態
ユーザの状態
初めてサイトにアクセスした
クリーン *
初めてサイトにアクセスした
ダーティ†
サイトに再びアクセスした
クリーン *
サイトに再びアクセスした
ダーティ†
*
†
MapXtreme Session およびバックグラウンド マップが最初の状態です。
MapXtreme Session またはバックグラウンド マップ、あるいはその両方に、別の
ユーザによる変更が加えられています。
手動状態管理: 解説
こ こ で は、ア プ リ ケ ー シ ョ ン で 手 動 の 状 態 管 理 モ デ ル を 使 用 す る 場 合 に、プ ー ル さ れ た
MapXtreme Session をどのような方法で管理するかについて、例を挙げて説明します。以降に、
順を追って簡単に説明します。
1. ユーザがブラウザを起動し、マップ アプリケーション Web サイトにアクセスします。
2. アプリケーションでプールを使用するため、プールから MapXtreme Session インスタンスが
取得されます。
3. Page_Load から RestoreState メソッドが呼び出されます。
MapXtreme Session にユーザによる変更が加えられ、"ダーティ" になっている場合、マップは
適切な開始状態に戻されます。AppStateManager クラスの RestoreDefaultState メソッドを参
照してください。
この例では、開始状態で世界全体のマップが表示されるとします。
4. Web ページの HTML がレンダリングされ、クライアントのブラウザに返されます。ページに
は HTML img タグが含まれます。これにより、サーバにマップのイメージがリクエストされま
す。サーバ側で、このユーザのブラウザ セッションのオブジェクト (特に Map オブジェクト)
を使用してマップ イメージがレンダリングされ、ユーザのブラウザに返されます。
5. Page_Unload メソッドで、AppStateManager.SaveState メソッドを呼び出すことでユーザの状
態を保存します。
6. ユーザが拡大ツールを選択し、オーストラリアの周囲に長方形ボックスを作成します。拡大
ツールに組み込まれている Javascript により、オーストラリアを拡大するリクエストがサーバ
に送信されます。
7. MapXtreme サーバ側では、プールから再び MapXtreme Session オブジェクトをフェッチする
必要があります。プールから返された MapXtreme Session が、前回のリクエストの処理に使
用されたオブジェクトと異なる場合があることに注意してください。このオブジェクトはク
リーンである可能性もあれば、ダーティである可能性もあります。
MapXtreme v7.2
122
開発者ガイド
第 6 章 : 状態管理について
プール オブジェクトの状態管理
8. サーバ上のアプリケーションで AppStateManager.RestoreState メソッドを呼び出し、ステッ
プ 4 で保存したユーザ状態を復元します。これにより、そのユーザに適した既知の状態に
MapXtreme Session が復元されます。
9. アプリケーションにより、オーストラリアが拡大されるように Map オブジェクトの Zoom プロ
パティが変更されます。新しいマップ イメージがレンダリングされ、イメージがクライアント
ブラウザにストリーミングされます。リクエストの最後で、ユーザの状態が再び保存されます。
10. ユーザが Select ツールをクリックし、マップの中でオーストラリアが表示されている領域をク
リックして、オーストラリアを選択します。
11. アプリケーションではプールから再び MapXtreme Session をフェッチし、再度 RestoreState
を呼び出して、プール オブジェクトを既知の状態に設定します。
12. サーバ側のアプリケーションで、オーストラリアを選択する処理が実行されます。新しい選択
部分を表示するために、新しいマップ イメージがレンダリングされます。
13. サーバ側のアプリケーションで、ユーザの状態を保存するために再び
AppStateManager.SaveState が呼び出されます。この例ではユーザが選択を実行できるため、
AppStateManager の SaveState メソッドと RestoreState メソッドに Selection の保存と復元を
行うコードを含める必要があります。
レイヤ、主題図、クエリ、マップ ビューなどの変更をユーザに許可する MapXtreme Session
の各部分は、各項目の保存と復元を行うコードで処理する必要があります。
手動でユーザ状態をプールして管理する方法は、効率を高め、アプリケーションのスケーラビリ
ティを高めるという利点があります。ただし、このモデルでは、各リクエストの最後でユーザ状態
を保存し、そのユーザの次回のリクエストで最初に状態を復元するという手順が必要になります。
Pooled アプリケーションにおける手動状態管理の使用
手動状態管理を使用した Pooled アプリケーションの例については、MapXtreme に付属するサン
プル Web アプリケーションを参照してください。次に、このようなアプリケーションの設定の要
点を示します。
プール オブジェクトを Web.Config ファイルで設定する場合、次のような設定を使用します。
<!--Use this setting to turn Session pooling on/off (true/false)-->
<add key="MapInfo.Engine.Session.Pooled" value="true" />
<!--Use this setting to save Session state automatically
(HttpSessionState) or manually (Manual)-->
<add key="MapInfo.Engine.Session.State" value="Manual" />
<sessionState mode="StateServer" stateConnectionString=
"tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user
id=sa;password=" cookieless="false" timeout="20" />
この 2 つの設定を組み合わせて、次の設定を指定できます。
•
プール オブジェクトと自動状態管理を有効にするには、Pooled を true に、State を
HttpSessionState に設定します。
•
プール オブジェクトと手動状態管理を有効にするには、Pooled を true に、State を Manual に
設定します。
MapXtreme v7.2
123
開発者ガイド
第 6 章 : 状態管理について
手動状態管理の詳細
ユーザの現在の状態を Page_Load メソッドに渡すロジックを記述します。「StateManager のイ
ンプリメント (126 ページ)」を参照してください。
ユーザ状態
アプリケーションでは、ユーザの現在の状態と、プールから取得したときの MapXtreme Session
オブジェクトの状態を考慮する必要があります。このとき、開発者は次のどちらかの処理を選択
する必要があります。
•
SaveState メソッドで、クリーン アップしたプール オブジェクトをプールに返す。
•
RestoreState メソッドで、プール オブジェクトを解放した後、状態を復元する。
必ずしも、適切な処理を明確に判断できるわけではありません。ユーザ別の状態の違いを示す変
数が多数あると、Session オブジェクトをダーティのまま解放し、プールに戻す必要がある場合が
あ り ま す。別 の ア プ リ ケ ー シ ョ ン によって、Page_Load によるクリーンアップを待つか、
Page_Load でセッションのクリーンアップが必要かどうかをチェックするのを待つことで、時間
を節約することもできます。
「手動状態管理: 解説 (122 ページ)」に示す例では、2 つ目の選択肢を採用しています。つまり、
プール オブジェクトを RestoreState メソッドでクリーン アップします。
次のセクションでは、状態の保存と復元について詳しく説明します。
手動状態管理の詳細
ここでは、Pooled アプリケーションで手動状態管理を実行する例について詳しく説明します。
MapXtreme に付属する主題図サンプル Web アプリケーションのコード内で、これに相当する部分
を見ていきましょう。まだ主題図サンプルを実行していない場合には、このセクションを読む前
に主題図サンプルを実行して、内容を把握してください。
次の場所にあるソリューションに含まれるプロジェクトの 1 つが、この主題図サンプルです。
C:\Program
Files\MapInfo\MapXtreme\7.x.x\Samples\VisualStudio20xx\Web\Features
次のトピックで構成されます。
•
「主題図サンプルの概要」
•
「アプリケーションの設定」
•
「StateManager のインプリメント」
•
「適切な順序での MapXtreme オブジェクトのシリアル化」
•
「MapXtreme オブジェクトの自動デシリアライズ」
•
「初期リクエストの処理」
•
「以降のリクエストの処理」
MapXtreme v7.2
124
開発者ガイド
第 6 章 : 状態管理について
手動状態管理の詳細
主題図サンプルの概要
このアプリケーションでは、World.mws (MapXtreme に付属するサンプル データの 1 つ) から読み
込まれた世界地図が表示されます。
Web フォームのオプションを使って、ユーザはマップ上でさまざまな種類の主題図色分けを作成
できます。この主題図色分けによって、world.tab テーブル内の地域 (国を表す範囲) の表示が変更
されます。主題図の属性データは、eworld.mdb という Microsoft Access データベースに格納され
ています (このファイルは Visual Studio プロジェクトに含まれています)。
この例では、MapXtreme Session の作成時にワークスペース ファイル world.mws が事前読み込み
されます。ただし、eworld から取得されるフィールドは、クライアントがアプリケーションにア
クセスしたときに追加されます。
L
パフォーマンスを高めるには、属性フィールド情報をワークスペース ファイルに配置しま
す。これによって、MapInfo Session の作成時に、必要なすべてのデータが事前に読み込ま
れます。
アプリケーションの設定
まず、Web.config ファイル内でアプリケーションの設定が含まれる部分を見てみましょう。
Web.config ファイルの冒頭部分に、次のような設定が記述されています。
<configuration>
<appSettings>
<!--Use this setting to turn Session pooling on/off (true/false)-->
<add key="MapInfo.Engine.Session.Pooled" value="true" />
<!--Use this setting to save Session state automatically
(HttpSessionState) or manually (Manual)-->
<add key="MapInfo.Engine.Session.State" value="Manual" />
MapXtreme v7.2
125
開発者ガイド
第 6 章 : 状態管理について
手動状態管理の詳細
<!--Use this setting to preload a workspace on Session creation-->
<add key="MapInfo.Engine.Session.Workspace" value="c:\Program
Files\MapInfo\MapXtreme\7.x.x\Samples\Data\World.mws" />
次に、この設定について説明します。
•
•
•
MapInfo.Engine.Session.Pooled: このキーの値が "true" であるため、MapXtreme Session オ
ブジェクトが COM+ サービスによりプールされます。新しいクライアント リクエストで新し
い MapXtreme Session が取得されたとき、その Session は "クリーン" オブジェクト (作成され
たばかりの新規オブジェクト) または "ダーティ" オブジェクト (前のリクエストを処理するため
に既に使用されているオブジェクト) です。このオブジェクトの状態は判別できないため、こ
のアプリケーションでは各リクエスト内で MapXtreme Session オブジェクトを使用前の既知
の状態に復元する処理を実行します。
MapInfo.Engine.Session.State: このキーの値が "Manual" であるため、アプリケーションで
Session 状態を明示的に保存し、復元する必要があります。どのオブジェクトを保存し復元す
るのかについて、アプリケーションの StateManager クラスで適切に指定されているため、こ
の "Manual" 設定はパフォーマンスの向上に貢献します。StateManager により、必要最小限の
オブジェクトのみが選択的に保存され、復元されます。そのため、これは最も効率の高い状態
管理オプションです。(「StateManager のインプリメント (126 ページ)」を参照)。
MapInfo.Engine.Session.Workspace: この設定で、.mws ワークスペース ファイルをセミコ
ロン区切りのリストとして指定できます。MapXtreme Session の作成時に、このワークスペー
ス ファイルが事前読み込みされます。複数のワークスペースを指定するには、ファイル名をセ
ミコロンで区切って指定します。
Web.config ファイルのもっと後方には、次の設定があります。
<sessionState mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data
source=127.0.0.1;user id=sa;password=" cookieless="false" timeout="20" />
こ こ で は、状 態 の 保 存 方 法 が 指 定 さ れ ま す。こ の 例 で は、情 報 を 後 で 取 得 で き る よ う に、
StateServer に保存するように指定しています。これを SQLServer に設定すると、状態がデータ
ベースに保存されます。
StateManager のインプリメント
こ の 主 題 図 サ ン プ ル ア プ リ ケ ー ションでは、手動状態管理を使用しています。そのため、
MapXtreme Session の適切な変更を保存し、復元するために、StateManager クラスをインプリメ
ントする必要があります。
このクラスは抽象ベース クラス MapInfo.WebControls.StateManager を継承します。次のメソッド
をインプリメントする必要があります。
Public Overrides Sub RestoreState()
Public Overrides Sub SaveState()
L
MapXtreme v7.2
" テンプレートを使用して Visual Studio で新しい Web サイトを作成すると、作成されたプ
ロジェクトには AppStateManager が含まれます。これは、StateManager のインプリメン
トです。
126
開発者ガイド
第 6 章 : 状態管理について
手動状態管理の詳細
AppStateManager クラスの詳細な内容は、アプリケーションによって異なります。ユーザがマッ
プをカスタマイズできるように、アプリケーションで提供されるオプションを増やせば増やすほ
ど、そのカスタマイズの保存と復元のために AppStateManager に追加するコードが増えていきま
す。そのため、主題図サンプル アプリケーションで使用されている AppStateManager には、
MapXtreme Web Site テ ン プ レ ートから新しいプロジェクトを作成したときに生成される
AppStateManager よりも多くのコードが含まれています。
たとえば、この主題図サンプルは主題図レイヤ、主題図テーブル、属性テーブル、グループ レイ
ヤのカスタマイズに対応します。一方、Web テンプレートにはレイヤと選択のカスタマイズを処
理するコードが含まれています。
次に、RestoreState メソッドと SaveState メソッドの使用方法を説明します。
1. クライアントがリクエストを送信するたびに、Page_Load メソッドにより RestoreState が呼び
出されます。さらに、クライアントでマップ ツールが使用されるたびに、RestoreState が呼び
出されます。プールから取得され、状態が不明な ("ダーティ" の可能性もある) MapXtreme
Session オブジェクトは、RestoreState メソッドによって既知の状態、つまりユーザの状態 (存
在する場合) または Application 状態のデフォルト状態に確実に復元されます。
たとえば、ユーザが前回マップをリクエストしたときにユーザのマップでフランスが拡大され
ていた場合、RestoreState メソッドによって、プールから取得されたマップが確実に "フラン
スを拡大" 状態に戻されます。このようにして、ユーザのセッションを前回中断された状態か
ら継続できます。
次に示す VB コードの例は、主題図サンプル アプリケーションの WebForm1.aspx.vb の一部
です。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
' The first time in
If Session.IsNewSession Then
'//************************************************************
'// You need to follow below lines in your own application.
'//*****************************************************************
Dim stateManager As New AppStateManager
' tell the state manager which map alias you want to use.
' You could also add your own key/value pairs, the value should be
' serializable.
stateManager.ParamsDictionary.Item(AppStateManager.ActiveMapAliasKey)_
= Me.MapControl1.MapAlias
' Put state manager into HttpSession, so we could get it later on from
' different class and requests.
MapInfo.WebControls.StateManager.PutStateManagerInSession_
(stateManager)
Me.InitState()
End If
MapXtreme v7.2
127
開発者ガイド
第 6 章 : 状態管理について
手動状態管理の詳細
MapInfo.WebControls.StateManager.GetStateManagerFromSession.RestoreState(
)
PrepareData()
End Sub
2. Page_Load メソッドの後で、クライアント リクエストの内容に応じて、適切なビジネス ロ
ジックがすべて適用されます。
たとえば、ユーザが拡大ツールをクリックすることでリクエストが生成された場合、ビジネス
ロジックによりマップの中心とズーム レベルが修正されます。
3. リクエスト処理サイクルの最後に、Page_Unload メソッドにより SaveState が呼び出されま
す。さらに、クライアントでマップ ツールが使用された後で、SaveState が呼び出されます。
以後にユーザがリクエストを送信したとき、そのリクエストで再び RestoreState を呼び出せる
ように、SaveState メソッドによりマップの最新の状態が保存されます。このような SaveState
呼び出しは、次回にリクエストが受信され、RestoreState が呼び出されるときに備えて実行さ
れます。
Private Sub Page_UnLoad(ByVal sender As Object, ByVal e As _
EventArgs) Handles MyBase.Unload
MapInfo.WebControls.StateManager.GetStateManagerFromSession()_
.SaveState()
End Sub
適切な順序での MapXtreme オブジェクトのシリアル化
主 題 図 サ ン プ ル で 使 用 さ れ て い る AppStateManager クラスでは、SaveState メソッドから
ManualSerializer.SaveMapXtremeObjectIntoHttpSession メソッドが数回呼び出されます。オブ
ジェクトは次の順序で保存 (シリアル化) されます。
ManualSerializer.SaveMapXtremeObjectIntoHttpSession(MapInfo.Engine.Sessio
n.Current.Catalog(SampleConstants.EWorldAlias), "mdb_table")
ManualSerializer.SaveMapXtremeObjectIntoHttpSession(MapInfo.Engine.Sessio
n.Current.Catalog(SampleConstants.ThemeTableAlias), "theme_table")
ManualSerializer.SaveMapXtremeObjectIntoHttpSession(map.Layers(SampleCons
tants.ThemeLayerAlias), "theme_layer")
ManualSerializer.SaveMapXtremeObjectIntoHttpSession(map.Layers(SampleCons
tants.GroupLayerAlias), "group_layer")
一部のオブジェクトは他のオブジェクトに依存しているため、この
SaveMapXtremeObjectIntoHttpSession 呼び出しは正しい順序で実行されることが重要です。
この例では、まずテーブルを保存します (これは Catalog を利用して参照されます)。次に、レイヤ
を保存します (これはマップの Layers コレクションを利用して参照されます)。ほとんどの種類の
レイヤがテーブルに依存しているため、これが適切な順序となります。
MapXtreme v7.2
128
開発者ガイド
第 6 章 : 状態管理について
手動状態管理の詳細
たとえば、FeatureLayer はそれぞれ 1 つのテーブルに関連付けられています。テーブルを使用す
る FeatureLayer をインスタンス化 (つまりデシリアライズ) するには、そのテーブルを先に開いて
おく必要があります。そのため、この AppStateManager クラスではテーブルを先に保存し、次に
レイヤを保存します。
同様に、RestoreState メソッドでは、最初にデータ オブジェクトを復元し、次にレイヤを復元し
ます。
ManualSerializer.RestoreMapXtremeObjectFromHttpSession("mdb_table")
ManualSerializer.RestoreMapXtremeObjectFromHttpSession("theme_table")
ManualSerializer.RestoreMapXtremeObjectFromHttpSession("theme_layer")
ManualSerializer.RestoreMapXtremeObjectFromHttpSession("group_layer")
MapXtreme オブジェクトの自動デシリアライズ
SaveState メソッドでは、マップ内の特定のレイヤなど、特定の参照を使用して保存するオブジェ
クトを指定します。
ManualSerializer.SaveMapXtremeObjectIntoHttpSession(map.Layers(SampleCons
tants.ThemeLayerAlias), "theme_layer")
ただし、RestoreState メソッドでは、Catalog や map.Layers コレクションを参照することはあり
ません。RestoreState メソッドでは ManualSerializer クラスのメソッドを呼び出しますが、その呼
び出しの結果に対して処理は行わず、map.Layers コレクションへの参照はありません。これら
は、Catalog コレクションや Layers コレクションなど、必要な場所に自動的にデシリアライズさ
れます。
ManualSerializer.RestoreMapXtremeObjectFromHttpSession("theme_layer")
L
ManualSerializer を使用して、オブジェクトの保存と復元を実行します。次のような構文を
使用して、MapXtreme オブジェクトを直接 HttpSessionState に格納しないでください。
HttpContext.Current.Session.Item("myTable") = _
MapInfo.Engine.Session.Current.Catalog("myTable")
初期リクエストの処理
アプリケーション状態は、すべてのユーザ セッションで共通する、またはグローバルな情報を保
存するために使用されるサーバ サイド情報管理メカニズムです。Session.IsNewSession が true の
場合、アプリケーション状態が初期化されます。アプリケーション状態は、初期リクエストを処
理する際に重要な要素です。
MapXtreme の場合、すべてのユーザの初期リクエストでデフォルト状態のマップを受け取られる
ように、アプリケーション状態によってバックグラウンド マップの初期状態が保持されます。
MapXtreme 主題図サンプルで、初期リクエストを処理する手順を示します。
MapXtreme v7.2
129
開発者ガイド
第 6 章 : 状態管理について
手動状態管理の詳細
アプリケーションで処理する必要がある "最初の" リクエストには、2 つの種類があります。1 つ
は、その Web アプリケーションに最初にアクセスしたユーザによる最初のリクエスト、もう 1 つ
は、それ以降のユーザによる最初のリクエストです。
どのユーザでも、最初にアプリケーションを使用する際には、プールからクリーンな MapXtreme
Session が取得されます。バックグラウンド マップは初期状態になります。この初期状態がアプ
リケーション状態に保存され、テンプレートのように使用されます。この処理は SaveDefaultState
メソッドで実行されます。
以降のすべてのユーザによる最初のリクエストでは、RestoreDefaultState が呼び出されます。こ
れにより、アプリケーション状態からマップの初期状態が取得されます。
次に、初期リクエストに関連する手順を示します。
1. Page_Load メソッドでは、現在のセッションが新規かどうかをチェックします。現在のセッショ
ンが新規の場合、StateManager をインスタンス化し、StateManager の ParamsDictionary プロパ
ティに MapAlias を追加します。手動状態管理を使用する場合、この操作は必須です。
2. 次に、これは新しいセッションであるため、Page_Load メソッドで InitState メソッドを呼び
出してアプリケーション データを初期化します。InitState メソッドで、マップの初期状態を設
定します。
3. 次に、Page_Load メソッドで RestoreState を呼び出して、これがこのアプリケーションに対
する最初のリクエストかどうかをチェックします。
これがこのアプリケーションに対する最初のリクエストである場合、SaveDefaultState メソッ
ドを呼び出してマップ上のさまざまなプロパティを初期状態に設定し、ManualSerializer メソッ
ドを呼び出してこの初期マップ状態を HttpApplicationState にバイト配列として保存します。
逆に、これがユーザの最初のリクエストであっても、アプリケーションに対する最初のリク
エストではない場合、RestoreDefaultState を呼び出してプロパティを初期状態にリセットし
ます。
以降のリクエストの処理
ユーザの最初のリクエストが処理された後で、マップをクリックして拡大するなどのリクエスト
を送信する場合があるでしょう。この場合、Page_Load メソッド、またはマップ ツールから
RestoreState が呼び出されると、初期リクエスト ロジックがスキップされます。その代わりに、
ユーザの状態を復元するコードが実行されます。
ユーザのセッションの終了時、またはマップ ツールの使用後に、SaveState メソッドが呼び出さ
れてセッションの状態が保存されます。
L
MapXtreme v7.2
endResponse フラグを true にして Server.Transfer または Response.Redirect を使用する
場合、この Page_Unload メソッドは呼び出されません。これらのメソッドがこのイベント
ハンドラを無視するためです。この問題に対処するには、endResponse フラグを true にし
て Server.Transfer または Response.Redirect を処理する前に、
MapInfo.WebControls.StateManager.GetStateManagerFromSession().SaveState() を明示的
に起動します。
130
開発者ガイド
第 6 章 : 状態管理について
MapXtreme Session の詳細
MapXtreme Session の詳細
MapXtreme Session は、すべての MapXtreme アプリケーション操作の開始点となります。これに
より、MapXtreme アプリケーションに必要なリソースの初期化を管理します。MapXtreme Session
を通じて、Data.Catalog、MapFactory、CoordSysFactory、Selections など、他の重要なオブジェク
トにもアクセスできます。
MapXtreme Session にアクセスするには、MapInfo.Engine.Session.Current() メソッドを呼び出し
ます。プロセスの 1 つのスレッドで使用できる MapXtreme Session オブジェクトは 1 つです。ス
レッドごとに 1 つの MapXtreme Session が存在しており、このセッションを複数のスレッドで共
有することはできません。
Web アプリケーションでは、1 ユーザにつき 1 つの MapXtreme Session オブジェクトが割り当て
られる場合と、プールされた MapXtreme Session を複数のユーザが共有する場合とがあります。
次のセクションでは、COM+ プール オプションについて詳しく説明します。
Microsoft COM+ オブジェクト プールの設定
MapXtreme Session オブジェクトは、システム上の COM+ サービスに登録されます。このシステ
ムによって、すべての登録済みプール オブジェクトの構成とアクティブ化が行われます。ランタ
イム インストーラは、MapInfo Session オブジェクトを登録し、デフォルト設定を作成するロジッ
クを備えています。MapXtreme Session オブジェクトには、デフォルトで 2 つのプール オブジェ
クトと 60 秒のタイムアウトが設定されます。
プール サイズの構成
システム構成メソッドを使用して、MapXtreme Session の適切なセクションを設定できます。こ
の設定は、コントロール パネルのシステム ダイアログ ボックスでも、アプリケーションの .NET
構成ファイルでも実行できます。プールされた MapXtreme Session を使用する場合、Web アプリ
ケーションで、これらの設定を管理する必要があります。
重要な設定の 1 つが、実行中のアプリケーションでの処理のために COM+ システムによって作成
されるプール オブジェクトの数です。この設定には、[コントロール パネル] > [管理ツール] > [コ
ンポーネント サービス] でアクセスできます。[コンポーネント サービス] > [コンピュータ] > [マイ
コンピュータ] > [COM+ アプリケーション] [MapInfo.CoreEngine] > [コンポーネント] を順に展開
してください。ここで、MapInfo.Engine Session オブジェクトを探し、 そのアイコンを右クリッ
クして、[プロパティ] を選択します。
[プロパティ] ダイアログで、アプリケーションごとのプール オブジェクトの数や、セッション作
成時におけるアクティブ化のタイムアウトなど、各種のプロパティを設定できます。プール オブ
ジェクトの数を適切に設定することが、アプリケーションのパフォーマンス向上につながりま
す。プール オブジェクトの数を正しく設定するには、アプリケーションと、そのデータ アクセス
方法を十分に理解していることが必要です。
MapXtreme v7.2
131
開発者ガイド
第 6 章 : 状態管理について
MapXtreme Session の詳細
バックグラウンド マップによるパフォーマンスへの影響
アプリケーションのパフォーマンスに直接影響するもう 1 つのセッション設定が、アプリケー
ションの Web.config ファイルで定義されるスタートアップ ワークスペースです。このワークス
ペースは、Session オブジェクトの作成時に読み込まれるマップ、レイヤ、およびテーブルを定義
するものです。この処理は、COM+ プール スレッドおよび Web アプリケーション空間外で行われ
ます。
アプリケーションの起動時、アプリケーション プールに対して、MapXtreme Session オブジェク
トを要求するリクエストが送られます。その後、コントロール パネルの [コンポーネント サービ
ス] ダイアログ ボックスで指定された数のプール オブジェクトが、COM+ プールによって作成さ
れます。この MapXtreme Session オブジェクトによって Web.config ファイルが読み取られ、指定
されたワークスペースが読み込まれた後で、アプリケーションによりプールからインスタンスが
取得されます。したがって、ワークスペースの読み込みがタイムアウトした場合 (つまり、[コン
ポーネント サービス] ダイアログで指定された時間を超えた場合)、COM+ のアクティブ化例外が
発生します。そのため、このワークスペースに何を読み込むか、完全に読み込むまでにどの程度
の時間がかかるかを把握しておく必要があります。
最小プール サイズに 2 を指定した場合、COM+ プールは、プール オブジェクトを要求する最初の
リクエストで 2 つの MapXtreme Session インスタンスを作成します。COM+ プールで、プール オ
ブジェクトを待ち受けている間にタイムアウトになった場合、最大数の設定に到達するまで追加
のオブジェクトが作成されます。ワークスペースが非常に複雑で読み込みに時間がかかる場合、
以降のオブジェクトのアクティブ化が開始されると、アプリケーションがアクティブなときにタ
イムアウト エラーが発生します。Web アプリケーション プールには、Pooled アプリケーション
の再アクティブ化を制御するための設定 (プールされたクラスのリサイクルに関する設定など) が
あります。そのため、いつかの時点でアプリケーションやプール オブジェクトがリサイクルされ
ると、別のワークスペースが読み込まれます。
MapXtreme v7.2
132
開発者ガイド
第 6 章 : 状態管理について
MapXtreme Session の詳細
アプリケーションのバックグラウンドに必要なマップ、テーブル、レイヤを決定し、それを
Web.config ファイルでワークスペースを使用して読み込む必要があります。ただし、ワークスペー
スの規模が大きいと読み込みに時間がかかることがあるため、注意してください。読み込みにかか
る時間をテストするには、単純にサーバ マシン上のワークスペース マネージャでワークスペース
を読み込んで実際の読み込み時間を調べます。それに応じてタイムアウト設定を調整します。
初期ワークスペースは、全ユーザで共通のマップ、レイヤ、テーブルなどを読み込むときに非常
に有効ですが、複雑なワークスペースを読み込む場合の影響について注意する必要があります。
参考資料
MapXtreme Session は柔軟な設定が可能であるほか、Microsoft COM+ や Web テクノロジとの親
和性を考慮して設計されています。その活用方法について理解するには、Microsoft の Web 配信
アーキテクチャを理解する必要があります。これまでに述べたトピックについては、さまざまな
情報が提供されています。Web アーキテクチャについて、参考になると思われるサイトを次に示
します。
COM+ プール
COM+ Object Pooling Concepts
IIS 7.0iis7.0
IIS 7.0: Managing Web Applications in IIS 7.0
IIS 6.0
インターネット インフォメーション サービス
IIS セッション状態
Selecting the Method for Maintaining and Storing ASP.NET Session
State (IIS 6.0)
MapXtreme v7.2
133
開発者ガイド
デスクトップ アプリケー
ション、コントロール、
ダイアログ、ツール
この章では、デスクトップ アプリケーションの計画に関する情報のほか、
MapXtreme で利用できる数々のデスクトップ コントロール、ダイアログ、
ツールについて概説しています。
この章の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
デスクトップ アプリケーションの計画 . . . . . . . . . . . 135
MapInfo.Windows.Controls 名前空間 . . . . . . . . . . . 137
デスクトップ アプリケーションで使用可能な主要コントロール 139
MapInfo.Windows.Dialogs 名前空間 . . . . . . . . . . . . 145
コントロールとダイアログ ボックスのカスタマイズ . . . . . 151
MapInfo.Tools 名前空間の概要. . . . . . . . . . . . . . . 151
MapXtreme デスクトップ ツール API. . . . . . . . . . . . . . . . . . . . . . .153
ツールのカスタマイズ. . . . . . . . . . . . . . . . . . . 158
ツール イベント . . . . . . . . . . . . . . . . . . . . . 159
選択 (Select) ツールを使用した FeatureGeometry の編集. . . 160
7
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションの計画
デスクトップ アプリケーションの計画
MapXtreme は、.NET を使ったあらゆる開発環境向けに、マッピング機能を公開する .NET ベース
のオブジェクト モデルです。.NET Framework を使ったアプリケーション開発に応用できるさま
ざまなテクノロジが日々生まれています。
デスクトップ アプリケーションは、豊富な対話操作を特徴としています。Web アプリケーション
は日々進化し、より洗練されている感がありますが、デスクトップ向けに設計されたアプリケー
ションにも依然として利点はあります。たとえば、デスクトップ アプリケーションには "スナップ
モード" があり、この機能を使用することで、ポイント フィーチャを特定の交差点に対して正確に
配置することができます。また、デスクトップ アプリケーションでは、マウス ポインタを重ねた
ときに表示される情報チップを活用することもできます。
WinForm または他の .NET ベースのアプリケーション フレームワークが既に存在する場合は、単
に MapXtreme のクラスをアプリケーションに統合するだけで済みます。MapXtreme のオブジェ
クト モデルは、.NET オブジェクト モデルとの完全な互換性があるため、.NET Framework が備え
る強力な機能とフルに連携させることが可能です。単に既存のアプリケーション フレームワーク
の中でアプリケーションを開発し、MapXtreme オブジェクトを参照するだけです。
デスクトップ アプリケーションのベスト プラクティス
MapXtreme MapForm アプリケーション テンプレートは、単に MapXtreme アセンブリを参照す
る、プロトタイプのみをすばやく作成するためのテンプレートです。このテンプレートは、概念
をざっと理解するための糸口として使用してください。
マルチ ドキュメント インターフェイス (MDI) ベースおよび シングル ドキュメント インターフェ
イス (SDI) ベースのアプリケーションに対する WinForm および .NET Framework のサポートはき
わめて基本的なものです。WinForm には、MFC (Microsoft Foundation Classes) に匹敵するほどの
アプリケーション フレームワークは備わっていません。ドキュメント ビューやデータ交換など、
MFC ベースのユーザ インターフェイスが持つ概念が不足しています。
しかし、Microsoft では、同社が推奨する手法や慣例を普及させる目的の一環として CAB (Composite
UI Application Block) を提供しています。Composite UI Application Block は .NET 2.0 Framework 以上
でのみ利用できます。詳細については、Microsoft Developer Network Web サイト
(msdn2.microsoft.com/en-us/library/aa480450.aspx) を参照してください。
.NET 開発モデルの大きな特長の一つに、ビジネス ロジックとプレゼンテーション (UI) が分離され
ていることが挙げられます。MapXtreme のコントロールも同様です。ユーザは、変更対象となる
オブジェクトのコピーを使ってダイアログを開くことができます。実行中のオブジェクトが直接
編集されなくて済むため、別のプロセスまたは別のコンピュータで新しいオブジェクトを作成
し、それをシリアライズして、元のコンピュータに返すようなことも可能です。
MapXtreme v7.2
135
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションの計画
MapXtreme と COM
.NET は、COM の終焉を意味するものではありません。さまざまな開発メーカーが、多大な労力
を COM オブジェクト モデルに費やしており、そのための計り知れない投資を簡単に投げ捨てる
ことはできません。では、COM オブジェクトを備えたアプリケーションを開発するための最良の
方法とは何でしょうか?
新しい .NET コードに既存の COM コードとの相互運用性を持たせる方が、その逆のケースよりも
多いことと思いますので、ここでは、前者のシナリオについて取り上げることにします。.NET ク
ライアントは、RCW (Runtime Callable Wrapper) を通じて COM サーバにアクセスします。RCW
が COM オブジェクトをラップし、COM と .NET 共通言語ランタイム (CLR) 環境との仲介役を果
たすため、.NET クライアントからは、COM オブジェクトがあたかもネイティブの .NET オブジェ
クトのように見え、逆に、COM オブジェクトからは、.NET クライアントが標準の COM クライア
ントであるかのように見えます。
たとえば、これらの COM オブジェクトを、Visual Studio から直接参照することもできます。
.NET クラスを扱う場合と何ら変わりなく、COM オブジェクトを操作することが可能です。その
ため、従来の COM オブジェクトと連携するような .NET アプリケーションを構築し、処理の結果
を MapXtreme .NET オブジェクトに渡すことができます。これから開発する .NET アプリケーショ
ンは、従来のアプリケーション フレームワークと一体となって目的の機能を果たす部品と考えて
ください。.NET Framework が備える最新のテクノロジを利用しながら、従来のライブラリに費や
してきた既存の投資を保護することができます。COM オブジェクトからのデータはすべて .NET
環境に合わせて変換されるため、受け取ったデータをさらに他のマネージド クラスに渡すことが
でき、ドメインの問題も生じません。
サンプル アプリケーションおよびプロジェクト テンプレート
MapXtreme は、各種のサンプル アプリケーションおよびプロジェクト テンプレートと共に Visual
Studio に統合されます。サンプル アプリケーションでは、.NET Framework や Windows フォーム
アプリケーションにおけるオブジェクト モデルの使用方法を、さまざまな側面から紹介していま
す。これらのテンプレートが、アプリケーション開発の最初の一歩を提供します。
Visual Studio に組み込まれるプロジェクト テンプレートを使用することで、スタート プロジェク
トを作成したり、一般的なアプリケーション フレームワークを体験したりすることができます。
新しいプロジェクトを作成するには、Visual Studio から MapForm アプリケーション テンプレー
トを選択します。これにより、基本的なシングル ドキュメント インターフェイス (SDI) アプリ
ケーションが作成されます。サンプル デスクトップ アプリケーションには、基本的なマルチ ド
キュメント インターフェイス (MDI) アプリケーションの例のほか、このモデルに MapXtreme を統
合する最適な方法が紹介されています。
.NET の Windows フォーム開発プラットフォームは、基本的なアプローチと機能を提供するもので
す。より高度な UI 開発プラットフォームを備えたサード パーティ ツールの使用をお勧めします。
MapXtreme に付属するデスクトップ アプリケーションのサンプルは、デスクトップ アプリケー
ションに固有の作業を紹介することを目的に設計され、必要最小限の機能しか実装されていませ
ん。実際の業務で運用するようなアプリケーションを開発するためのひな形として設計されてい
るわけではありません。サンプルはあくまで学習目的のツールとしてお使いください。
MapXtreme v7.2
136
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Controls 名前空間
この章の後半部分では、デスクトップ アプリケーションを作成するためのさまざまなコントロー
ル、ダイアログ、およびツールについて取り上げます。
MapInfo.Windows.Controls 名前空間
MapInfo.Windows.Controls 名前空間には、デスクトップ アプリケーションのコントロールをイン
プリメントするクラスが含まれています。Windows コントロールの使用は非常に簡単です。必要
なコントロールをフォームにドロップし、仕様に合わせてさまざまなプロパティを設定するだけ
で使用できます。この名前空間に含まれているコントロールは、MapInfo.WebControls 名前空間の
コントロールと似ています。ただし、これらの名前空間のコントロールを互いに代用することは
できません。この名前空間のコントロールはデスクトップ アプリケーションでのみ使用するよう
設計されています。Web ベース アプリケーションのコントロールの詳細については、「第 5 章 :
Web アプリケーション、コントロール、 およびツール」を参照してください。
L
コントロールの中には設計時に表示されないものがあります。それらをフォームにドラッ
グ アンド ドロップすると、長方形として表示されます。ただし、実行時には正常に表示さ
れます。
MapXtreme に用意されているデスクトップ コントロールは、標準のコントロールとマップ固有の
コントロールに分類されます。標準のコントロールには、ボタン、表示ツール、ラベル ツール、
さまざまな種類のボックスなどがあります。これらのコントロールは、System.Windows.Forms
名前空間のクラスとよく似ています (多くの場合、これらのクラスから継承されています)。
MapXtreme v7.2
137
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Controls 名前空間
マップ固有のコントロールは、Pitney Bowes Software のマッピングのインプリメントでのみ使用
します。マップ固有のコントロールには、オブジェクトのスタイル、ラベル、レイヤ、座標系、
主題図、その他の関連する機能を設定または変更するコントロールがあります。
使用可能な MapXtreme コントロールが一覧表示された Visual Studio のツールボック
スとデザイナ
最も複雑なコントロールは Layer Control です。Layer Control は、モーダル ダイアログ ボックス
として使用できるほか、フォーム上に直接表示させることもできます。Layer Control には、さま
ざまなカスタマイズを可能にする API が用意されています。詳細については、LayerControlDemo
サンプル アプリケーションを参照してください。
MapXtreme v7.2
138
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションで使用可能な主要コントロール
デスクトップ アプリケーションで使用可能な主要コントロール
MapXtreme に含まれているコントロールはすべて有用なものですが、コントロールの中には、ほ
とんどのマッピング アプリケーションに不可欠な特に重要なものがいくつかあります。ここで
は、これらのコントロールについて説明します。これらのコントロールを使用するには、適切な
参照がプロジェクトに含まれている必要があります (Visual Studio で、MapXtreme MapForm テン
プレートからプロジェクトを作成した場合、必要な参照は自動的に組み込まれます)。
L
用意されているテンプレートを使用せずにプロジェクトを作成する場合は、適切なコン
ポーネント (MapInfo.CoreEngine、MapInfo.Windows、MapInfo.Windows.Dialogs、
MapInfo.Windows.Framework など) への参照を必ず追加してください。また、
「MapXtreme マージ モジュール」も参照してください。
MapControl
MapControl は、マップを表示するすべてのアプリケーションに必要です。MapControl をフォーム
に追加するには、Visual Studio のツールボックスからフォームにドラッグします。MapControl を
フォームに配置したら、ユーザにとってより便利なマップにするためのさまざまな操作を実行で
きます。
MapControl に変更を加えるには、フォーム上で MapControl を選択した上で、[プロパティ] ウィンド
ウを使用してプロパティを変更します。デザイン モードのときに MapControl を右クリックすると、
コンテキスト メニューが表示されます。このメニューでは、[マップの読み込み]、[マップのクリ
ア]、[レイヤ管理]、および [主題図の作成] のメニュー項目を選択できます。[マップの読み込み] を選
択すると、標準のファイル選択ダイアログが表示され、MapControl に事前に読み込むマップを指定
できるようになります。[マップのクリア] は、MapControl をフォームに追加するとき、または設計
プロセスの途中で、コントロール内に既にあるマップを消去します。[レイヤの管理] は、マップをカ
スタマイズするための [レイヤの管理] ダイアログ ボックスを開きます (「レイヤの管理」を参照)。
[主題図の作成] を選択すると、主題図の作成ウィザード (「CreateThemeWizard」を参照) が起動し
て、マップ上の主題図を作成できるようになります。
MapXtreme v7.2
139
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションで使用可能な主要コントロール
MapControl、Layer Control、および MapToolBar が表示されたフォーム
MapControl には、読み込まれるマップに関連して事前に設定できる複数のプロパティもありま
す。プロパティを事前に設定すると、実行時に表示されるマップを特定の用途に合わせてさらに
カスタマイズできます。変更可能なプロパティには、ズーム レベル、座標系、マップの中心、実
行時の 3 つのマウス ボタンの設定などがあります。マウス ボタンは、ズーム、移動、描画の各ジ
オメトリ、または選択などのマップ ツールに設定できます。「MapInfo.Tools 名前空間の概要」
を参照してください。
Visual Studio で作業しているときにマップを操作するための設計時ツールを設定することもできま
す。設計時の機能には、ズームイン、ズームアウト、選択、移動、中心表示、デフォルトの矢印
などがあります。コンテキスト メニュー の [マップのクリア] は、MapControl のマップからすべて
のレイヤを削除し、対応するテーブルを閉じます (別の MapControl で使用されていない場合)。
MapToolStripButtons
MapXtreme には、Windows Form テンプレートおよび Visual Studio デザイナ ツールボックスに、
すぐに使用できるマップ ツールが用意されています。.NET の ToolStrip に ToolStripButton を 追加
することで、ツールがフォームに追加されます。
各ツールのプロパティはこのボタンで設定されます。現在のツールの管理に使用されていた
MapToolBar は、不要になりました。MapToolBar は、後方互換性を確保するため、また将来必要
に応じて使用する場合のために、保持されています。Visual Studio のツールボックスから引き続き
使用できます。
MapXtreme v7.2
140
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションで使用可能な主要コントロール
22 個の ToolStripButton には、移動、選択、フィーチャの追加、ラベル付け、テーブルのオープ
ン、レイヤ コントロールの表示など、これまで常に MapToolBar に用意されていたのと同じマッ
ピング機能が含まれています。
2 つを除いてすべての ToolStripButton が、ToolStrip または StatusStrip に追加できます。ズーム レ
ベルおよび現在のマップ ビューの縮尺を表示するツールは、StatusStrip のみに追加できます。
新しい ToolStripButton を追加するには、Visual Studio で、[メニューとツールバー] のツールボック
スから [ToolStrip] を選択します。フォームに、分割ボタンと小さな下矢印が表示されます。矢印を
クリックすると、サポートされている ToolStripButton のリストが表示されるので、必要なものを選
択します。ツールが MapControl に追加されると、すぐにその MapControl に関連付けられます。
ToolStripButton の API は、MapInfo.Windows.Controls 名前空間に含まれています。ToolStripButton
が派生する抽象ベース クラスは、MapInfo.Windows.Controls.MapToolStripButtonBase です。この
クラスは、.Net の System.Windows.Controls.ToolsStripButton クラスから継承しています。
ToolStripButton をプログラムで使用する方法については、MapForm テンプレートのコードを表示
し、『開発者リファレンス』を参照してください。各ツールの動作については、MapInfo.Tools 名
前空間の各 MapTool クラスを参照してください。
MapToolBar
バージョン 7.0 以降、MapToolBar は MapForm テンプレート内で ToolStrip に置き換えられまし
た。「MapToolStripButtons」を参照してください。MapToolBar は、Visual Studio のツールボッ
クスから引き続き使用できます。このセクションでは、MapForm に MapToolBar を追加する方法
の概要を示します。
MapXtreme v7.2
141
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションで使用可能な主要コントロール
MapToolBar は、複数のマップ ツール コントロール (ズームイン、テーブルを開くなど) を 1 つの
コントロールにまとめます。デフォルトで含まれているツールには、OpenTable、LayerControl、
Select、ZoomIn、ZoomOut、Pan、および Center があります。
MapToolBar を MapForm に追加するには、Visual Studio のツールボックスからドラッグします。(現
在、MapToolBar は MapForm テンプレートには含まれていません。)
MapToolBar にツール ボタンを追加するには、次のようにします。
1. [プロパティ] ウィンドウの Buttons プロパティの横にある省略記号 (...) をクリックして、
ToolBarButton コレクション エディタを開きます。
ToolBarButton コレクション エディタが表示されます。
2. [追加] ボタンをクリックします。
これによって、リスト内の一番下に新しい MapToolBarButton が作成されます。
L
カスタマイズされたツールを追加する場合は、[追加] ボタンの横にある矢印をクリック
して ToolBarButton を選択する必要があります。新しいボタン用にカスタマイズされた
ハンドラを作成する必要があります。
3. 新しいボタンに名前を付けます。
4. 右側のプルダウン メニューから ButtonType を選択します。
たとえば、Select ツール ボタンを追加する場合は、リストから [Select] を選択します。
MapXtreme v7.2
142
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションで使用可能な主要コントロール
5. [OK] をクリックします。
MapToolBarButton が作成され、ボタン バーに追加されます。新しく追加したツールはデ
フォルトの動作をします。
MapToolBar のカスタム ボタンの追加
MapToolBar にカスタム ボタンを追加するには、事前にカスタム ツールを作成して、そのツール
を MapControl.Tools コレクションに追加しておく必要があります。カスタム ボタンを追加する作
業では、追加するボタンの ToolId をカスタム ツールの名前に割り当て、カスタム ビットマップを
MapToolBar の ImageList に追加します。
カスタム デスクトップ ツールを作成する方法の詳細については、「ツールのカスタマイズ」を参
照してください。
MapXtreme に付属のカスタム ビットマップ シンボルの詳細については、「付録 F : カスタム シン
ボル」を参照してください。
MapToolBar にカスタム ボタンを追加するには、次のようにします。
1. MapToolBar をフォームに追加します。
2. Visual Studio の [プロパティ] ウィンドウで、Buttons プロパティを強調表示して [...] ボタンを
クリックし、[ToolBarButton コレクション エディタ] ダイアログ ボックスを開きます。
3. [追加] ボタンをクリックして、新しい MapToolBarButton を追加します。
4. ボタンの ButtonType プロパティを、(ドロップダウン リストの最後の項目として表示される)
[CustomTool] に設定します。このボタンにはまだイメージを関連付けていないので、この段階
では、ボタンは空白として表示されます。
5. ボタンの ToolId プロパティの値として、MapControl の Tools コレクションに追加したカスタ
ム ツールの名前を指定します。ToolId の値がコレクション内のツール名に一致していない場合
は、ユーザがボタンをクリックした時点で実行時例外がスローされます。
MapXtreme v7.2
143
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
デスクトップ アプリケーションで使用可能な主要コントロール
6. [OK] をクリックして、[ToolBarButton コレクション エディタ] ダイアログ ボックスを閉じます。
7. MapToolBar の ImageList にカスタム ビットマップを追加するコードを、フォームのコンスト
ラクタ内の InitializeComponent の呼び出しの後の位置に記述します。カスタム ビットマップ
をどのような方法でアプリケーションに関連付けるかは、プログラマの判断にまかされていま
す。1 つの選択肢は、設計時に ImageList をフォームに追加して、その ImageList にカスタム
イメージを格納しておき、実行時にそのイメージを MapToolBar の ImageList に追加すること
です。この処理のコードは次のようになります。
// Add custom tool button's bitmap to toolbar's image list
foreach (Image image in this.imageList1.Images) {
this.mapToolBar1.ImageList.Images.Add(image);
}
// Associate the bitmap with the custom tool's button (last image
in the list)
this.mapToolBarButtonBlueSelect.ImageIndex =
this.mapToolBar1.ImageList.Images.Count-1;
レイヤの管理
[レイヤ管理] ダイアログ ボックスには、現在のマップを構成するすべてのレイヤと、それらのレ
イヤの属性のステータスが表示されます。レイヤ属性には、表示/非表示、編集可能、選択可能、
およびラベルの自動作成があります。各チェック ボックス フィールドの上に表示されるアイコン
は属性の種類を表します。これらの属性アイコンの上にポインタを置くとツールチップが表示さ
れ、各アイコンの内容を把握できます。チェック ボックスを使用して、1 つまたは複数のレイヤ
の属性を簡単に変更できます。
[レイヤ管理] には、表示およびラベルの設定の変更、作成した主題図の変更、レイヤの並べ替え、
追加、または削除に利用可能なオプションも用意されています。
LayerControl に表示されるレイヤを再配置するには、[レイヤ管理] の レイヤ リスト内のレイヤを
ドラッグ アンド ドロップによって並べ替えます。
L
レイヤをラベル レイヤにドロップすると、そのラベル レイヤに新しいラベル セットが追加
されます。これは、偶発的に発生することがあります。たとえば、ラベル レイヤのすぐ上
にレイヤを移動しようとした場合に発生することがあります。
ヒント: レイヤをラベル レイヤの外側にドロップするには、Shift キーを押しながらレイヤ
をドロップします。Shift キーを押したり離したりするたびにポインタが変化し、レイヤが
ターゲット レイヤの上にドロップされるのか、内側にドロップされるのかが示されます。
LayerControl は、[レイヤ管理] ダイアログ ボックスのすべての機能をフォーム上に配置します。
LayerControl を MapControl のマップにリンクするには、Form_Load() メソッド内に次の 1 行の
コードを記述する必要があります。
layerControl1.Map = mapControl1.Map;
MapXtreme v7.2
144
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Dialogs 名前空間
LayerControl の複雑な機能に対する理解を深めるには、MapXtreme のユーティリティであるワー
クスペース マネージャを実行してください。このツールには、実際に操作して機能を確認できる
LayerControl の実例が用意されています。「第 23 章 : ワークスペース マネージャ」を参照してく
だ さ い。ワ ー ク ス ペ ー ス マ ネ ー ジ ャは、Windows の [ すべてのプログラム] の [MapInfo] >
[MapXtreme 7.x.x] から起動できます。
コンテキスト メニューのカスタマイズ
LayerControl では、レイヤ ツリーのノードを右クリックしたときに表示されるカスタムのメ
ニュー項目を作成できます。ContextMenuTargetObject プロパティを使用して、ユーザが右クリッ
クしたオブジェクトを返すように設定します。
LayerControlEnhancer クラスを定義して、LayerControl のコンテキスト メニューにカスタム項目
を追加することを可能にする方法については、提供されているサンプル コードを参照してくださ
い。このサンプル コードは、..\MapInfo\MapXtreme\7.x.x\Samples\Desktop\Features\LayerControl
ディレクトリ内の LayerControl サンプル アプリケーションに含まれています。
プログラムによるキーボード ショートカットの設定
LayerControl では、ツールバーの各ボタンの機能を実行するキーボード ショートカットを作成で
きます。プログラム内では、PerformDown、PerformUp、および PerformRemove の各メソッドを
使用することによって、[下へ]、[上へ]、および [削除] の各ボタンにアクセスできます。
また、プログラム内で AddMenuMnemonic プロパティを使用すると、[追加] メニューの表示に関
連付けられているキーにアクセスすることができます。AddMenuMnemonic プロパティを使用す
るための構文は次のようになります。
public System.Windows.Forms.Keys AddMenuMnemonic {get; set;}
MapInfo.Windows.Dialogs 名前空間
MapInfo.Windows.Dialogs 名前空間には、特定の機能を備えたダイアログ ボックスを作成するた
めのクラスが含まれています。ダイアログ ボックスは、コントロールとは対照的に、設計時には
表示されず、コードでのみ作成および設定できます。MapInfo.Windows.Dialogs 名前空間のクラス
を使用すると、カスタマイズされたダイアログ ボックスを作成できます。作成したダイアログ
ボックスを利用するには、System.Windows.Forms.Form.ShowDialog() メソッドを呼び出します。
ストック ダイアログは、MapXtreme オブジェクト モデルのパブリック API から作成されていま
す。フィールドはすべて公開され、プライベートに設定されているものはありません。これらの
ダイアログをそのまま使用することもできますが、目的に合わせてカスタマイズしたり、独自の
ダイアログを一から作成することもできます。ストック ダイアログ上のコントロールを減らすこ
とでユーザの操作を制限することもできます。
アプリケーションで特定のダイアログ ボックスを使用するには、次のように、
MapInfo.Windows.Dialogs 名前空間をコードに追加します。
using MapInfo.Windows.Dialogs
MapXtreme v7.2
145
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Dialogs 名前空間
private void DoLayerControl()
{
LayerControlDlg layerControl = new LayerControlDlg();
layerControl1.Map = mapControl1.Map;
layerControl.ShowDialog(this);
}
上記のコードでは、DoLayerControl() メソッドが呼び出された時点で [レイヤ管理] ダイアログ
ボックスが表示されます。
ストック ダイアログ
MapXtreme には、MapXtreme オブジェクトを操作するさまざまなタスクを扱うためのストック
ダイアログおよびコントロールが多数用意されています。ワークスペース マネージャで使用され
るすべてのダイアログおよびコントロールは、アプリケーションで利用できます。ストック ダイ
アログは、低レベルのコントロールのためのコンテナです。これらのコントロールは、各種の
MapXtreme オブジェクトを操作する目的に特化して設計されています。
MapXtreme に付属のコントロールは、ストック ダイアログが、基本的な UI コンポーネントを作
成するために使用されます。個々の UI コンポーネントは、ダイアログ内にコントロールを配置す
る方法で作成されています。同様に、開発者が、基本コントロールを基に独自のダイアログを設
計することもできます。独自のダイアログを作成する方法は簡単です。単にダイアログ クラスを
作成し、コントロールをデザイン画面にドラッグするだけです。
ストック ダイアログは、ビジュアル継承によってカスタマイズすることもできます。組み込みの
ダイアログからクラスを派生し、メソッドやプロパティをオーバーライドすることで、そのクラ
スが持っている動作を変えることができます。[レイヤ管理] ダイアログなど、その他のダイアログ
もカスタマイズできるので、デフォルトの動作を変更して、ユーザによるアクセスが不要なコン
トロールを非表示にすることができます。また、アイコンの表示を変更することや、タブを削除
することもできます。
基本的に、MapXtreme に付属するすべての UI コンポーネントは開発者が制御できます。そのた
め、カスタム インターフェイスを独自に作成することが可能です。ここで説明したいずれかの方
法を使用すれば、MapXtreme で定義されているすべての要素をアプリケーションでそのまま表示
する代わりに、開発者が必要と判断した要素だけが表示されるようにカスタマイズされたデスク
トップ アプリケーションを作成することができます。
CreateThemeWizard
CreateThemeWizard クラスは、開発の利便性のために用意されているクラスで、アプリケーショ
ンに追加して使用できます。このクラスを使用すると、ユーザが新しい主題図を作成する手順を
ガイドに従って進められるように、ウィザード (ダイアログ ボックスのセット) を起動することが
できます。主題図を作成するために必要な基本手順は、1) 主題図の種類を選択する、2) 主題図で
使用するテーブルとフィールドを選択する、3) 主題図の属性 (スタイル、レンジの数など) を変更
する、の 3 つです。ウィザードを使用すると、設定が必要なすべての項目が一連のダイアログ
ボックスに順に表示されるので、MapXtreme アプリケーションのエンド ユーザは、主題図の作成
を非常に簡単に実行できるようになります。
MapXtreme v7.2
146
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Dialogs 名前空間
CreateThemeWizard の使用
CreateThemeWizard は、ユーザによって行われる選択に応じて、複数の異なるダイアログ ボック
スを表示します。最初のダイアログ ボックスでは、主題図の種類を選択できます。
[主題図の作成 : 手順 1/3] ダイアログ ボックス
可変値が単一の主題図 ([レンジ]、[ドット密度]、[個別値]、または [サイズ可変シンボル]) をユーザ
が選択した場合、2 番目のダイアログ ボックスでは、テーブルとフィールドを 1 つずつ選択でき
ます。
[主題図の作成 : 手順 2/3] ダイアログ ボックス (単一フィールド)
可変値が複数の主題図 (円グラフまたは棒グラフ) をユーザが選択した場合、2 番目に表示されるダ
イアログ ボックスでは、主題図を作成するための複数のデータ フィールドを選択できます。
MapXtreme v7.2
147
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Dialogs 名前空間
[主題図の作成 : 手順 2/3] ダイアログ ボックス (複数フィールド)
その次に表示されるダイアログ ボックスは、手順 1 で選択された主題図の種類によって異なりま
す。レンジ主題図に固有の [主題図の作成 : 手順 3/3] ダイアログ ボックスを次の図に示します。
[主題図の作成 : 手順 3/3] ダイアログ ボックス (レンジ主題図)
ダイアログ ボックスには、デフォルトの主題図配分方法である EqualRangeSize が表示されま
す。ウィザードのユーザ インターフェイスに表示される、これに対応する配分方法の名前は [レン
ジ幅均等] です。
MapXtreme v7.2
148
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Dialogs 名前空間
レンジの数を変更するなど、[設定] タブにユーザが変更を加えると、[主題図を再計算] ボタンがア
クティブになります。ユーザは [主題図を再計算]、[適用]、[OK] ボタンのいずれか、または別のタ
ブをクリックして、再計算を実行する必要があります。再計算は自動的には実行されません。レ
ンジの数を変更した場合の手順 3 のダイアログ ボックスを次の図に示します。この図では、[主題
図を再計算] ボタンが使用できるようになっています。
設定を変更した後の [主題図の作成 : 手順 3/3] ダイアログ ボックス (レンジ主題図)
プログラムでは、次の操作の後で、[設定] タブの値が変更されたかどうか、および主題図 Bin の再
計算が必要かどうかが確認されます。
•
[スタイル] タブまたは [凡例] タブへの移動
•
[適用] ボタンのクリック
•
[OK] ボタンのクリック
CreateThemeWizard は、アプリケーション内のコントロールに応じて、設計時および実行時にさ
ま ざ ま な 場 所 か ら ア ク セ ス で き ます。設計時に CreateThemeWizard にアクセスするには、
MapControl の [プロパティ] ウィンドウの下部にあるメニューを使用するか、LayerControl でレイ
ヤを右クリックし、[主題図の追加] を選択します。
CreateThemeWizard を使用した開発
CreateThemeWizard の追加をプログラムで行うには、次のサンプル コードのようにコードを記述
します。
MapXtreme v7.2
149
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Windows.Dialogs 名前空間
using MapInfo.Windows.Dialogs;
CreateThemeWizard themeWizard = new CreateThemeWizard(mapcontrol1.Map,
this);
メソッド
CreateThemeWizard を作成したら、CreateThematicWizard クラスの CreateTheme() メソッドを
呼び出して主題図を作成します。オプションの文字列パラメータを追加して、主題図のエイリア
スを設定できます。エイリアスを使用すると、ObjectTheme (Bar、Pie、GraduatedSymbol) の場
合は Layers コレクションから、FeatureStyleModifier (Ranged、RangedLabel、IndividualValue、
IndividualValueLabel、Dot Density) の場合は Modifiers コレクションから主題図にアクセスできま
す。主題図にアクセスするのは、それを変更または削除することが目的です。
ITheme theme = themeWizard.CreateTheme("theme1");
主題図を作成するテーブルまたはラベル主題図で使用するラベル ソースがわかっている場合は、
CreateFeatureTheme() メソッド (テーブルの場合) または CreateLabelTheme() メソッド (ラベルの
場合) を使用できます。
プロパティ
主題図の作成に関する情報を取得するときに便利なプロパティがいくつかあります。WizardResult
には列挙型の WizardStepResult が含まれます。これを使用すると、ユーザがウィザードを終了し
た方法を確認できます。WizardResult の値は、WizardStepResult.Done または
WizardStepResult.Cancel のどちらかになります。これらは、アプリケーション内のコントロール
やメニューを適切に更新するために役立ちます。
このプロパティの使用例を、次のサンプル コードに示します。
if (createTheme.WizardResult == WizardStepresult.Done
{
// Update the menus
mnuRemoveTheme.Enabled = true;
mnuModifyTheme.Enabled = true;
}
CreateThemeWizard クラスの SelectedLabelSource、SelectedLayer、および SelectedThemeType
プロパティを使用すると、主題図が適用されたレイヤまたはラベル ソースを特定できます。これら
のプロパティは、主題図を変更する機能を提供するために、そのオブジェクトにアクセスする必要
があるときに使用すると便利です。
主題図を変更できるようにするには、主題図の種類を特定してから、その種類に適した変更用ダ
イアログ ボックスを表示します。主題図を変更するために使用できるダイアログ ボックス クラス
は、ModifyBarThemeDlg、ModifyDotDensityThemeDlg、ModifyGradSymbolThemeDlg、
ModifyIndValueThemeDlg、ModifyPieThemeDlg、および ModifyRangedThemeDlg です。
MapXtreme v7.2
150
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
コントロールとダイアログ ボックスのカスタマイズ
MapXtreme には、ThemeDialogs サンプル アプリケーションが用意されています。このアプリ
ケーションは、主題図の変更に使用されるダイアログ ボックスのインプリメントを理解するため
に役立ち、そのインプリメントを必要に応じてカスタマイズして使用することもできます。この
サ ンプル ア プ リケ ー ショ ン は、MapXtreme がインストールされているディレクトリの下の
..\MapInfo\MapXtreme\6.x.x\Samples\Desktop\Features\ThemeDialogs にあります。
コントロールとダイアログ ボックスのカスタマイズ
MapXtreme の MapInfo.Windows.Dialogs 名前空間には、さまざまなダイアログ ボックス クラスが
含まれています。名前空間に含まれる各ダイアログ ボックスには、それぞれに固有のカスタマイ
ズ方法があります。特定のダイアログ ボックスを変更するには、各ダイアログ ボックスに固有の
さまざまなプロパティに値を割り当てます。カスタマイズの数は膨大であるため、ここですべて
を提示することはできません。各ダイアログ ボックスの詳細については、オンライン リファレン
スを参照してください。
ダイアログ ボックスのカスタマイズの一例を紹介します。LineStyleDlg クラスは、[ライン スタイ
ル] ダイアログ ボックスを作成します。このダイアログ ボックスは、スパース スタイル モード (開
いたときに何も選択されていない) または選択肢は表示されているが無効になっている (グレー表示
) モードで作成できます。
プロパティの値を設定することによって提供されるカスタマイズは、変更中の特定のダイアログ
オブジェクトに限定されます。既に確立されたダイアログ ボックスのデザインに基づいて新しい
ダイアログ ボックスを作成するには、設計時にコントロールを新しいフォームに追加します。た
とえば、変更された [ライン スタイル] ダイアログ ボックスを作成するには、LineStyle コントロー
ルを新しいフォームにドロップし、その他のコントロールをそのフォームに追加します。これに
より、実質的に変更された [ライン スタイル] ダイアログ ボックスが作成されます。
MapInfo.Tools 名前空間の概要
MapTool オブジェクト モデル
MapTools は、マップとの対話を実現するオブジェクトです。これらのツールには、マップの基本
的な動作が実装されています。ビュー ベースのズームおよび移動ツール、特定のレイヤにジオメ
トリを作成するためのツールのほか、マップの領域に基づいたセレクションを生成するための
ツールがあります。これらのツールは、処理前後のイベントを取得するイベントを使用してカス
タマイズできます。
ツールに関連付けられたメソッドのプロパティは、レイヤではなく、ツールに対して割り当てられ
ます。たとえば、レイヤが選択可能かどうかを示すプロパティは、レイヤではなく、ツールで指定
されます。そのため、あるツールを使用して、特定のレイヤのオブジェクトを選択し、さらに別の
ツールを使って、さきほどとは別のレイヤからオブジェクトを選択することができます。これによ
り、ツールに柔軟性を持たせることができるだけでなく、レイヤ上のプロパティをエミュレートす
ることが可能となります。レイヤ コントロールは、そのプロパティ (選択可能かどうかのプロパ
ティなど) が UI を通じて変更されると、マップのツール コレクション全体に作用します。
MapXtreme v7.2
151
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapInfo.Tools 名前空間の概要
この設計により、特定のレイヤへの挿入を行うツールを作成できます。たとえば、都市計画の設
計で、水層図に対してだけマンホールを挿入し、植生図には木々を挿入するといったこともでき
ます。ツールを選択すると特定のシンボルやジオメトリだけが、適切なレイヤに挿入されるよう
なカスタム ツールの作成も可能です。これは、ストック ツールでも同様です。ポリゴンは常に特
定のレイヤに対して描画されます。前述のように、ストック レイヤ コントロールは、ツールのコ
レクションを操作することにより、単一レイヤに対してツールが挿入されているかのような視覚
効果を出しています。
MapInfo.Tools 名前空間には、自分の MapXtreme アプリケーション用の、基本的でカスタマイズ
可能なツールをユーザが作成できるようにするクラスがすべて格納されています。
イベント コードを使用してこれらのストック ツールの新しいインスタンスをカスタマイズした
り、ストック ツールから派生して特定のメソッドをオーバーライドする独自のツール クラスを作
成したりできます。「ツールのカスタマイズ (158 ページ)」を参照してください。
ツールは特定のマウス ボタン (左、右、中央) に割り当てることができます。該当するマウス ボタ
ン の プ ロ パ テ ィ に ツ ー ル 名 の 文 字 列 文 字 列 を 使 用 し ま す。使 用 す る 文 字 列 は、"Arrow"、
"ZoomIn"、"ZoomOut"、"Center"、"Pan"、"SelectPoint"、"SelectRect"、"SelectRadius"、
"SelectPolygon"、"SelectRegion"、"AddPoint"、"AddLine"、"AddPolyline"、"AddPolygon"、
"AddRectangle"、"AddCircle"、"AddEllipse"、"AddText"、"Label" です。
たとえば、次のコードは、マウスの左ボタンを ZoomIn ツールに設定します。
mapControl1.Tools.LeftButtonTool = "ZoomIn"
デスクトップ ツールをプログラムによって使用する例については、MapXtreme のインストール先
の ..\MapInfo\MapXtreme\7.x.x\Samples\Desktop\Features\DesktopTools に格納されているサンプ
ル アプリケーションを参照してください。
MapXtreme v7.2
152
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapXtreme デスクトップ ツール API
MapXtreme デスクトップ ツール API
UML で表現した MapTool クラスを次の図に示します。
ツールの最終的な派生元は MapTool クラスです。選択 (Select) ツールおよび追加 (Add) ツール
は、それぞれ SelectMapTool クラスおよび AddMapTool クラスから派生しています。
この名前空間に含まれているツールは、表示 (View) ツール、選択 (Select) ツール、追加 (Add)
ツール、およびカスタム (Custom) ツールの 4 つのカテゴリに分けることができます。
追加 (Add)、カスタム (Custom)、および選択 (Select) のツール カテゴリには、楕円 (Ellipse)、弧
(Arc)、円 (Circle)、長方形 (Rectangle)、ポリゴン (Polygon)、ポイント (Point)、ライン (Line)、お
よび折れ線 (Polyline) などのジオメトリ オブジェクトを描画または選択するためのツールが含まれ
ています。
すべてのツールは、3 つのインターフェイス (IMapToolProperties、ISelectMapToolProperties、お
よび IAddMapToolProperties) をインプリメントするプロパティを持ちます。
MapXtreme v7.2
153
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapXtreme デスクトップ ツール API
表示 (View) ツール
表示 (View) ツール (ZoomMapTool、CenterMapTool、および PanMapTool) は、マップのビューを
変更します。変更の種類は使用するツールによって異なります。これらのツールは、デフォルト
のツール コレクションの一部です。MapXtreme テンプレートを使用してデスクトップ アプリケー
ションの構築を開始すると、デフォルトのツールバーにこれらのツールが表示されます。
LabelMapTool を使用すると、マップ上のフィーチャにラベルを設定できます。このツールは、デ
フォルトのツール コレクションに含まれていません。MapForm テンプレートのデフォルトのツー
ル コレクションに含まれていません。MapControl に追加する場合は、最初に Visual Studio のツー
ルボックスから ToolStrip を追加し、コンテキスト メニュー項目 [LabelToolStripButton] を右クリッ
クします。
このツールを追加するには、 MapToolBar の Buttons プロパティで [コレクション] の横にある [...]
ボタンをクリックします。
選択 (Select) ツール
選択 (Select) ツール (SelectMapTool、SelectPointMapTool、SelectPolygonMapTool、
SelectRadiusMapTool、SelectRectMapTool、および SelectRegionMapTool) は、ジオメトリ オブ
ジェクト内にあるポイントおよびリージョンを選択します。選択の形状は使用するツールによっ
て 異 な り ま す。た と え ば、SelectRectMapTool は、長方形内のオブジェクトを選択します。
SelectMapTool は、他の選択ツールの派生元となる抽象ベース クラスです。
L
MapXtreme ではオブジェクトと折れ線との交差がサポートされないので、折れ線選択ツー
ルはありません。
SelectPointMapTool を使用すると、オブジェクトを回転できます。
MapXtreme v7.2
154
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapXtreme デスクトップ ツール API
ノード選択 (SelectNode) モードにすると、個々のポイントをオブジェクトに対して移動、追加、削除
できるようになります。この例については、「選択 (Select) ツールを使用した FeatureGeometry
の編集 (160 ページ)」を参照してください。
動 的 選択 モ ー ド (Dynamic Selection) では、SelectRectMapTool、SelectRadiusMapTool、および
SelectPolygonMapTool を使用しているとき、マウスを移動するとセレクションに含めることので
きるオブジェクトが示されます。
マップ選択ツールには、選択可能なレイヤを指定するオプションなど、各種のオプションを設定
す る た め の プ ロ パ テ ィ が 用 意 さ れています。これらのデフォルトのツール プロパティは、
MapInfo.Windows.Controls.MapControl.Tools にある MapTools コレクションに対して設定できま
す。それぞれのツールでは、オプションでオーバーライド プロパティを独自に設定したり、
MapTools コレクションのデフォルト値または自分で用意したオーバーライド値を使用することを
指定したりできます。
選 択 可 能 な レ イ ヤ の デ フ ォ ル ト の リ ス ト を 設 定 す る に は、選 択 可 能 な レ イ ヤ を 指 定 す る
IMapLayerFilter を作成します。次に、SelectableLayerFilter の MapTools でデフォルトのプロパ
ティを設定します。
たとえば、すべてのベクトル レイヤで動作する選択可能なレイヤのデフォルトのリストを設定す
るには、次のように指定します。
// select from all vector layers
IMapLayerFilter selectableLayerFilter =
MapLayerFilterFactory.FilterAnd(MapLayerFilterFactory.FilterVisibleLayers
(true), MapLayerFilterFactory.FilterByLayerType(LayerType.Normal));
mapControl1.Tools.SelectMapToolProperties.SelectableLayerFilter =
selectableLayerFilter;
選択 (Select) ツールのプロパティの詳細については、『MapXtreme 開発者リファレンス』にある
MapInfo.Tools.MapTool.ISelectMapToolProperties の説明を参照してください。
追加 (Add) ツール
追加 (Add) ツール (AddArcMapTool、AddCircleMapTool、AddEllipseMapTool、AddLineMapTool、
AddPointMapTool、AddPolygonMapTool、AddPolylineMapTool、および AddRectangleMapTool) は
すべて、AddMapTool クラスに基づいています。追加 (Add) ツールを使用すると、特定のジオメト
リ オブジェクトをマップに描画できます。マップにオブジェクトを追加するには、作成されたオブ
ジェクトが配置されるアクティブな挿入レイヤがマップに存在している必要があります。個々のオ
ブジェクトのサイズと形状は、使用するツールによって異なります。また、ツールの使用時に修飾
キー (Shift および Ctrl) を併用することによって特定のサイズや形状にすることができます。
追加 (Add) ツールのプロパティの詳細については、『MapXtreme 開発者リファレンス ヘルプ』に
ある MapInfo.Tools.MapTool.IAddMapToolProperties の説明を参照してください。
MapXtreme v7.2
155
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapXtreme デスクトップ ツール API
カスタム (Custom) ツール
カスタム (Custom) ツール (CustomArcMapTool、CustomCircleMapTool、CustomEllipseMapTool、
CustomLineMapTool、CustomPointMapTool、CustomPolygonMapTool、
CustomPolylineMapTool、および CustomRectangleMapTool) は、イベントを発生させるだけの非常
に標準的なツールです。これらのクラスを使用して、特定のツールに独自の動作を設計します。た
とえば、CustomEllipseMapTool を使用して、このツールを使用するたびに赤い縁取りの付いた緑色
の Ellipses を描画させることができます。さまざまなツールのイベントを使用して (「ツール イベ
ント (159 ページ)」を参照)、ツールによって生成される特定のイベントへのレスポンスを特定の動
作に指定することができます。
カスタム (Custom) ツールは、デフォルトのツール コレクションに含まれていません。カスタム
ツールをマウス ボタンに割り当てる場合は、ツールを識別するための文字列を指定します。
ツールのカスタマイズの詳細については、「ツールのカスタマイズ (158 ページ)」を参照してくだ
さい。
図形作成 (Shape) ツール
MapXtreme には、マップ上にジオメトリ フィーチャを描画するためのツール グループが用意され
ています。これらのツールを使用するには、オブジェクトをクリックしてドラッグします。オブ
ジェクトをクリックしてマップ上の他の場所にドラッグすると、描画中のオブジェクトの現在の
サイズと形状がラバーバンド イメージによって表示されます。それぞれのツールの現在の操作を
キャンセルするには、Esc キーを押します (該当する場合)。
MapXtreme でサポートされる図形作成ツールを次に示します。
ライン (Line) ツール
このグループに含まれているツールには、AddLineMapTool および CustomLineMapTool がありま
す。これらのツールは Line を描画します。このツールをアクティブにするには、開始点をクリッ
クして終了点までドラッグします。マウス ボタンを離すと、Line が作成されます。Shift キーを押
しながらドラッグすると、Line が作成される角度は 45 度の倍数になります。Ctrl キーを押しなが
らドラッグすると、ラインの長さと高さは 2 倍になります。マウスを離す前に Esc キーを押す
と、操作がキャンセルされます。
折れ線 (Polyline) ツール
このグループに含まれているツールには、AddPolylineMapTool および CustomPolylineMapTool が
あります。折れ線 (Polyline) ツールは、複数のセグメントのある Line を描画します。このツール
をアクティブにするには、ポイントをクリックし、続けて別のポイントをクリックします。ポイ
ントのクリックが終了したら、最後のポイントをもう一度クリックします。すると、Polyline が描
画されます。Shift キーを押しながらドラッグすると、Line が作成される角度は 45 度の倍数になり
ます。このツールの場合、Ctrl キーを押しても動作は変わりません。ラインを描画する前に Esc
キーを押すと、操作がキャンセルされます。
MapXtreme v7.2
156
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
MapXtreme デスクトップ ツール API
楕円 (Ellipse) ツールと 弧 (Arc) ツール
このグ ループに含ま れているツー ルには、AddEllipseMapTool、CustomEllipseMapTool、および
CustomArcMapTool があります。楕円 (Ellipse) ツールは Ellipse を描画します。CustomArcMapTool
は弧を描画するだけで、弧をレイヤに挿入することはしません。
楕円 (Ellipse) ツールをアクティブにするには、円周の片側となるポイントをクリックし、もう片
方となるポイントまでドラッグします。マウス ボタンを離すと、Ellipse が作成されます。Shift
キーを押しながらドラッグすると、Ellipse は半径が一定の円の内部に作成されます。Ctrl キーを押
しながらドラッグすると、Ellipse は中心にある開始点を使用して描画されます。マウスを離す前
に Esc キーを押すと、操作がキャンセルされます。Ellipse の軸は常に座標系に整列されます。
MapXtreme は、マップ上に Rreference Arc を描画する軽量の CustomArcMapTool を提供します
が、LegacyArc FeatureGeometry をレイヤに提供または挿入することはしません。このような動
作を持つ弧ツールを作成するには、独自のインプリメントを作成する必要があります。たとえ
ば、AddMapTool と同じ動作を CustomArcMapTool に持たせるには、CustomArcMapTool から派生
した新しい弧ツール クラスを作成し、IAddMapToolProperties インターフェイスをインプリメント
します。
円 (Circle) ツール
このグループに含まれているツールには、AddCircleMapTool および CustomCircleMapTool があり
ます。円 (Circle) ツールは Circle を描画します。これは、Shift キーを押しながら楕円 (Ellipse)
ツールを使用するのと同じことです。円ツールをアクティブにするには、Circle の中心となるポイ
ントをクリックし、円周となるポイントまでドラッグします。ドラッグすると、Circle のサイズが
中心点の周りに広がっていきます。マウス ボタンを離すと、Circle が作成されます。Ctrl キーを押
しながらドラッグすると、Circle は円周となるポイントから円周となるポイントまで描画されま
す。マウスを離す前に Esc キーを押すと、操作がキャンセルされます。
長方形 (Rectangle) ツール
このグループに含まれているツールには、AddRectangleMapTool および CustomRectangleMapTool
があります。長方形 (Rectangle) ツールは Rectangle を描画します。このツールをアクティブにす
るには、一方の隅をクリックして反対側の隅までドラッグします。マウス ボタンを離すと、
Rectangle が作成されます。描画オブジェクトは、常に軸整列されます。Shift キーを押しながらド
ラッグすると、Rectangle は四角形の内部に作成されます。Ctrl キーを押しながらドラッグする
と、Rectangle は中心にある開始点を使用して描画されます。マウスを離す前に Esc キーを押す
と、操作がキャンセルされます。
情報チップの使用
情報チップは、マウスをマップ フィーチャの上に置いたときに表示できる小さなテキスト ボック
スです。マップには、マップで使用できるすべてのツール (MapInfo.Tools.MapTool のインスタン
ス) が含まれている MapInfo.Tools.MapTools のインスタンスが関連付けられています。
MapInfo.Tools.MapTools クラスには、情報チップの外観を制御する 3 つのプロパティがありま
す。これらのプロパティを以下に示します。
MapXtreme v7.2
157
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
ツールのカスタマイズ
•
•
•
InfoTipsEnabled – マウスがアイドル状態であるときに情報チップを表示するかどうかを取得/
設定します。
InfoTipTimerDelay – 情報チップを表示するまでの待機時間 (ミリ秒単位) を取得/設定します。
デフォルトは 500 です。
InfoTipDisplayDelay – 情報チップの表示時間 (ミリ秒単位) を取得/設定します。デフォルトは 0
です。この場合、情報チップはマウスが移動するまで表示されます。
マウスが移動している限り、情報チップは表示されません。情報チップは、ラベルが付けられた
フィーチャの上にマウスが置かれたときにのみ表示され、少なくとも InfoTipTimerDelay で指定さ
れる期間にわたってアイドル状態になります。マウスが移動すると、情報チップは消えます。あ
るいは、InfoTipDisplayDelay にゼロより大きい値が指定されている場合は、この値より長い時間
にわたってマウスがアイドル状態になると消えます。
次のように記述すると、情報チップはまったく表示されません。
mapControl1.Tools.InfoTipsEnabled = false;
次のように記述すると、1 秒遅れで情報チップが表示されるように設定できます。
mapControl1.Tools.InfoTipTimerDelay = 1000;
次のように記述すると、マウスがアイドル状態であっても、2.5 秒間にわたって情報チップが表示
されるように設定できます。
mapControl1.Tools.InfoTipDisplayDelay = 2500;
API で情報チップを使用する方法の詳細については、『MapXtreme 開発者リファレンス』の
MapInfo.Tools.MapTools クラスを参照してください。
ツールのカスタマイズ
デスクトップ アプリケーション向けのツールは 2 つの方法でカスタマイズできます。既存のツー
ルのサブクラスを作成する方法と、カスタム ツール (Custom Tools) グループのいずれかのツール
を使用する方法です。MapXtreme で用意されている Tool クラスはいずれも、希望する特定の Tool
クラスから派生するサブクラスを作成することによって作成できます。たとえば、AddLineTool ク
ラスから新しいツール クラスを派生します。ツールは、特定の動作 (ラインが描画されると常に
ビープ音が鳴るなど)、特定の外観 (ラインを常に赤で描画するなど)、または特定の機能 (ラインの
描画間隔を常に 90 度にするなど) に変更できます。
また、同じツールに基づいて 2 つの異なるツールを作成する例もあります。たとえば、AddPointTool
をサブクラス化して、マップ上の 2 種類のポイントを異なるシンボルで表す 2 つの異なるツールを
作成できます。一方のツールをマウスの左ボタンに割り当て、もう一方のツールをマウスの右ボタ
ンに割り当てます。
次の例では、AddPolygonTool をカスタマイズする方法を示します。
VB の例:
Dim insertionlayerfilter As IMapLayerFilter
Dim style As MapInfo.Styles.CompositeStyle
MapXtreme v7.2
158
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
ツール イベント
Dim addmaptoolproperties As MapInfo.Tools.AddMapToolProperties
Dim maptool As MapInfo.Tools.MapTool
insertionlayerfilter = _
MapLayerFilterFactory.FilterByLayerType(LayerType.Normal)
style = New MapInfo.Styles.CompositeStyle
addmaptoolproperties = New _
MapInfo.Tools.AddMapToolProperties(MapLayerFilterFactory.Filter_
ForTools(MapControl1.Map, insertionlayerfilter, _
MapLayerFilterFactory.FilterVisibleLayers(True), _
"CustomPolygonAddMapToolProperties", Nothing), style)
maptool = New MapInfo.Tools.AddMapTool(MapControl1.Viewer, _
MapControl1.Handle.ToInt32(), MapControl1.Tools, New _
MapInfo.Tools.MouseToolProperties(Cursors.Default, _
Cursors.Default Cursors.Default),_
MapControl1.Tools.MapToolProperties, addmaptoolproperties)
さらに、MapXtreme には、デスクトップ ツールのサンプル アプリケーションが付属しているの
で、このインプリメントを分析し、必要に応じてカスタマイズすることができます。MapXtreme
のインストール先の ..\MapInfo\MapXtreme\7.x.x\Samples\Desktop\Features\DesktopTools\cs を参
照してください。
ツール イベント
MapInfo.Tools 名前空間は、ツール操作をキャンセルするための情報と機能によって、ツール イベ
ントをサポートしています。ツール選択 (Select Tools) イベントは、選択または選択解除されてい
る項目をリストします。イベントは特定ツールの使用時のあらゆる段階で発生させることができ
ます。ツールの使用期間中の特定の瞬間をトラップするコードを記述できます。特定のイベント
にコードを追加することにより、マッピング アプリケーション内の各ツールの使用を柔軟にカス
タマイズできます。
名前空間内のイベントを以下に示します。
MapXtreme v7.2
FeatureAddingEventArgs
追加ツールがオブジェクトを描画しようとしている
ときに発生します。
FeatureAddedEventArgs
追加ツールがオブジェクトをテーブルまたはマップ
に追加したときに発生します。
FeatureSelectingEventArgs
選択ツールによって選択が変更されるときに発生し
ます。
FeatureSelectedEventArgs
選択ツールによって選択が変更されたときに発生し
ます。
159
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
選択 (Select) ツールを使用した FeatureGeometry の編集
FeatureChangingEventArgs
選択ツールによってフィーチャが変更されるときに
発生します。このイベントを使用して、行われる変
更が有効であるかどうかを確認します。
FeatureChangedEventArgs
選択ツールによってフィーチャが変更された後に発
生します。
NodeChangedEventArgs
選択ツールによって選択内のノードが変更されたと
きに発生します。
NodeChangingEventArgs
選択されたフィーチャのノードが選択ツールによっ
て変更されるときに発生します。このイベントを使
用して、行われる変更が有効であるかどうかを確認
します。
ToolActivatedEventArgs
マウス ツールがアクティブ化されたときに発生し
ます。
ToolActivatingEventArgs
マウス ツールがアクティブ化されるときに発生し
ます。
ToolEndingEventArgs
マウス ツールが終了されるときに発生します。こ
のイベントは、新しいアクションの開始点として最
適です。
ToolUsedEventArgs
マウス ツールが使用されているときに発生しま
す。このイベントを使用して、一連のマウス ク
リックの開始点、中間点、および終了点のフラグを
設定します。
選択 (Select) ツールを使用した FeatureGeometry の編集
次のセクションでは、FeatureGeometry の形状変更やノードの追加を行ってフィーチャを編集す
る方法を説明します。MapControl、LayerControl、および選択 (Select) ツールの具体的な使用例が
紹介されています。「MapControl (139 ページ)」および「レイヤの管理 (144 ページ)」も参照し
てください。
MapXtreme v7.2
160
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
選択 (Select) ツールを使用した FeatureGeometry の編集
フィーチャの形状変更
1. MapControl にマップを読み込み、変更するフィーチャを拡大します。
2. LayerControl でオブジェクトのレイヤを選択します。
3. LayerControl の [表示/非表示] タブで、[表示] チェック ボックスをオンにします。
4. [オプション] タブで、[選択可能] チェック ボックスと [編集可能] チェック ボックスをオンにし
ます。
5. レイヤ管理ツリー ビューでマップのルート ノードを選択します。
MapXtreme v7.2
161
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
選択 (Select) ツールを使用した FeatureGeometry の編集
6. [編集] タブで、[編集モード] コンボ ボックスから [ノード編集可能] を選択します。
7. [OK] をクリックして、変更内容を確定します。マップ表示が変更され、オブジェクトのノード
が表示されます。
8. 項目の選択 (Select Item) ツールを使用して、変更するポリゴンを選択します。次に、位置を変
更するノードをクリックしてドラッグします。Shift キーを使用すると、特定範囲のノードを選
択できます。また、Ctrl キーを使用すると、ノードの選択状態を切り替えることができます。
MapXtreme v7.2
162
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
選択 (Select) ツールを使用した FeatureGeometry の編集
ノードの追加
Feature Geometry にノードを追加するには、次の手順を実行します。
1. 再び LayerControl を開き、マップのルート ノードを選択します。
2. [編集] タブで、[編集モード] コンボ ボックスから [ノード追加可能] を選択します。
3. [OK] をクリックして、変更内容を確定します。
4. マップで、変更するポリゴンを選択します。
5. 項目の選択 (Select Item) ツールを使用して、Ctrl キーを押しながら、ノードを追加するポリゴ
ンの辺上でクリックします。新しいノードが表示されます。
プログラムによる形状変更とノードの追加
このセクションでは、プログラムによって形状変更やノードの追加を行う方法を説明します。C#
と VB のコードが用意されています。
1. Visual Studio デザイナで、"btnEditNodeTool" という名前のボタンをメイン フォームに追加し
ます。
2. ボタンをダブルクリックして、コード
サンプルを追加します。
ページにボタンのハンドラを開きます。適切なコード
VB の例:
Private Sub btnEditNodeTool_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs)
MapControl1.Tools.LeftButtonTool = "Select"
MapControl1.Tools.SelectMapToolProperties.EditMode =
MapInfo.Tools.EditMode.Nodes
End Sub
3. アプリケーションを実行します。
MapXtreme v7.2
163
開発者ガイド
第 7 章 : デスクトップ アプリケーション、コントロール、ダイアログ、ツール
選択 (Select) ツールを使用した FeatureGeometry の編集
4. LayerControl でオブジェクトのレイヤを選択します。
5. LayerControl の [表示/非表示] タブで、[表示] チェック ボックスをオンにします。
6. [オプション] タブで、[選択可能] チェック ボックスと [編集可能] チェック ボックスをオンにし
ます。
7. [OK] をクリックして、変更内容を確定します。
8. フォームに追加した新しいボタンをクリックします。カーソルの形が Select 矢印に変化します。
9. 次に、(前の例のステップ 1と同様に) ノードをクリックし、ドラッグします。
MapXtreme v7.2
164
開発者ガイド
データでの作業
MapInfo.Data 名前空間には、MapXtreme アプリケーションから複数の方法
でデータにアクセスできるようにするクラスやインターフェイスが含まれて
います。
この章の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
MapInfo.Data 名前空間の概要 . . . . . . . . . . . . . . . 166
Catalog とテーブル . . . . . . . . . . . . . . . . . . . . 167
サポートされているテーブルの種類. . . . . . . . . . . . . 173
カタログとテーブルの操作. . . . . . . . . . . . . . . . . 176
テーブル メタデータ (TableInfo). . . . . . . . . . . . . . . . . . . . . . . . . . .179
MapInfo ADO.NET データ プロバイダ . . . . . . . . . . . 198
Feature と Feature コレクション . . . . . . . . . . . . . 202
データの分析. . . . . . . . . . . . . . . . . . . . . . . 209
データ アクセス パフォーマンスの強化 . . . . . . . . . . . 212
8
第 8 章 : データでの作業
MapInfo.Data 名前空間の概要
MapInfo.Data 名前空間の概要
MapInfo.Data 名前空間には、MapXtreme アプリケーションから複数の方法でデータにアクセスで
きるようにするクラスやインターフェイスが含まれています。この名前空間内には MapInfo
ADO.NET データ プロバイダがあります。このデータ プロバイダは、MapInfo SQL 言語を使用し
てデータベースとテーブルに対して標準のクエリを実行します。Feature オブジェクト モデルを使
用することで、SQL ではなくオブジェクトを使用してデータにアクセスすることも可能です。
Catalog はデータ アクセスの開始点であり、テーブルを管理する (開く、閉じる、作成する) メ
ソッド、およびデータを検索するメソッドが含まれています。
この章は、上記の MapXtreme のデータ アクセス モデル図に基づき、次のトピックで構成されて
います。
•
「Catalog とテーブル」
•
•
「サポートされているテーブルの種類」
「テーブル メタデータ (TableInfo)」
•
「MapInfo ADO.NET データ プロバイダ」
•
「Feature と Feature コレクション」
MapXtreme v7.2
166
開発者ガイド
第 8 章 : データでの作業
Catalog とテーブル
データ アクセスは、すべての MapXtreme アプリケーションの中核となる処理であるため、取り上
げるトピックも多方面にわたっています。上記のトピックには、データ アクセス以外にも重要な
情報が記載されています。
この章の後には、データ アクセスに関連した情報として、「第 10 章 : 式の作成」および「第 11
章 : DBMS のデータへのアクセス」の 2 つの章が補足されています。
Catalog とテーブル
Catalog は、MapXtreme のデータ アクセス モデルを管理します。テーブルは、MapXtreme の基
礎を成す単位です。テーブルには、アプリケーションで表示したり分析したりするためのデータ
が格納されます。データ アクセス モデルを管理する Catalog には、現在セッションで開いている
テーブルのリストが含まれます。テーブルは、Catalog から開いたり、作成したり、閉じたりする
ことができます。
MapXtreme のほぼすべてのデータ アクセス操作には、Catalog とテーブルが関係しています。
テーブル
Table ク ラ ス は、す べ て の デ ー タ アクセスの基本単位です。MapInfo Table から、Table、
Column、およびすべての TAB ファイル メタデータ情報にアクセスできます。Table は、マップ作
成可能 (FeatureGeometry 型のフィールドを持つ) にも、またマップ作成不可にもすることができ
ます。また、マップを表示せずに開いたり、アクセスしたりできます。
テーブルのエイリアス
テーブルが開いているときに、テーブルの名前 (またはエイリアス) を割り当てると、テーブルが
開いている間にそのテーブルを参照することができます。たとえば、テーブルは、SQL ステート
メント内のエイリアスによって参照されます。TAB ファイルから開いたテーブルにエイリアスが
MapXtreme v7.2
167
開発者ガイド
第 8 章 : データでの作業
Catalog とテーブル
割り当てられていない場合、このテーブルにはデフォルトのエイリアスが割り当てられます。デ
フォルトのエイリアスは、TAB ファイルの名前に基づいたものなります。このプロパティは null
に設定することもできます。テーブルにはエイリアスを割り当てることをお勧めします。
Column (フィールド)
Column オブジェクトは、テーブル、フィーチャ、またはフィーチャ コレクション内のフィールド
のプロパティを識別し、フィールドの名前 (エイリアス)、データ型、幅 (文字列フィールドと数値
フィールド) など、フィールドのプロパティを指定します。
サポートされているデータ型には、次のものがあります。
データ型
説明
Int
32 ビット符号付き整数型の値を提供します。.NET Framework のデータ型
Int32 にマッピングします。
SmallInt
16 ビット符号付き整数型の値を提供します。.NET Framework のデータ型
Int16 にマッピングします。
Double
-1.79E +308 ~ 1.79E +308 の浮動小数点数。倍精度浮動小数点数型にマッ
ピングします。
dBaseDecimal
浮動小数点数を提供します。この値は内部的には倍精度浮動小数点数型の値
として処理されます。テーブル内で保持されている場合は有効桁数と小数点
部桁数が固定です。その名前が示すとおり、dBase ファイル形式から派生し
たデータ型です。倍精度浮動小数点数型にマッピングします。
Boolean
ブール型の値を提供します。ブール型にマッピングします。
String
可変長の、null で終了する UNICODE 文字列値を提供します。文字列型に
マッピングします。
Date * †
日付値を提供します。MapXtreme v 6.8 以降、Date 型は、MapInfo.Data 名
前 空 間 の 構 造 体 と し て イ ン プ リ メ ン ト さ れ て い ま す。そ れ ま で は、
System.DateTime にマップされていました。
DateTime *‡
日付値および時刻値を提供します。DateTime 型は System.DateTime にマッ
ピングされます。
Time
時刻値を提供します。MapInfo Professional テーブル (TAB ファイル) の 9.0
以 降 の バ ー ジ ョンでは、Time 型がサポートされます。Time 型は、
MapInfo.Data 名前空間の構造体としてインプリメントされます。
FeatureGeometry
FeatureGeometry を提供します。
Binary
バイナリ データの配列を提供します。Byte 値の配列にマッピングします。
MapXtreme v7.2
168
開発者ガイド
第 8 章 : データでの作業
Catalog とテーブル
データ型
説明
Key
テーブルのキーを提供します。Table の Key 擬似フィールドのデータ型です。
CoordSys
座標系を提供します。座標系オブジェクトを MICommand にバインドする
目的のためだけに存在します。座標系の指定が必要な関数で使用します。
Style
Style クラスのインスタンスを提供します。MapInfo.Styles.Style を参照して
ください。Table のスタイル フィールドに格納される Style オブジェクトの
データ型です。
Raster
テーブルのラスタ フィールドの RasterInfo を提供します。これは Table の
ラスタ フィールドに格納される RasterInfo オブジェクトのデータ型です。
Grid
テーブルのグリッド フィールドの GridInfo。Table のグリッド フィールドに
格納される GridInfo オブジェクトのデータ型です。
Wms
テーブルの Wms フィールドの WmsClient を提供します。Table の Wms
フィールドに格納される WmsClient オブジェクトのデータ型です。
*
†
‡
旧バージョンの MapXtreme との互換性を維持するために、
MapInfo.Data.MIDataReader.GetDateTime メソッドは、DateTime および Date の両方のデータ型に
対して使用できます。どちらの場合にも、System.DateTime 値が返されます。ただし、
MapInfo.Data.Column.DataType は、実際のデータ型である Date または DateTime のどちらかを反
映します。
Time 型および DateTime 型は、MapInfo SQL 関数ではサポートされていません。ただし、DateTime
型を呼び出す、または使用する MapInfo SQL 関数では、DateTime 値の日付部分が返されます。詳
細については、「MapInfo SQL リファレンス」を参照してください。
Time 型および DateTime 型は、MapInfo SQL 関数ではサポートされていません。ただし、DateTime
型を呼び出す、または使用する MapInfo SQL 関数では、DateTime 値の日付部分が返されます。詳
細については、「MapInfo SQL リファレンス」を参照してください。
Time および DateTime のデータ ソース サポート
MapXtreme で は、サ ポ ー ト さ れ て いるデータ ソースおよびデータ プロバイダで Date、
DateTime、および Time の各データを読み取る (および適用された場合は保存する) ことができま
す。データ ソースが異なると日付/時刻の型定義が異なる場合があり、MapXtreme の型と完全に一
致しないことがあります。
新しいデータ型は、次のデータ ソースでサポートされています。
•
Mem テーブル
•
ネイティブ テーブル (TAB ファイル)
•
ADO.NET
•
OCI 経由の Oracle
•
ODBC 経由の MS SQL Server
ASCII、dBase、および Microsoft Access の各データ ソースはサポートされていません。
MapXtreme v7.2
169
開発者ガイド
第 8 章 : データでの作業
Catalog とテーブル
リモート データベースでの Date および DateTime のサポート
MapXtreme がサポートしているすべてのデータ型を、リモート データベースがサポートしてると
は限りません。次の表は、ネイティブ TAB ファイルおよびサポートされている各データベースで
サポートされている日付および時刻ベースの型を示しています。
MapXtreme
ネイティブ
TAB ファイル
Date
Date
Time
Time
DateTime
DateTime
ADO.NET
Oracle (OCI)
MS SQL
Server
Date
DateTime
DateTime
DateTime
リモート データベースのフィールドの戻り型および戻り値の変更
新しいデータ型が追加されたため、リモート データベースのフィールドの戻り型および戻り値に
いくつかの変更が発生しました。次の表は、各リモート データベースでサポートされている型に
対応する、MapXtreme 6.7.x および MapXtreme 6.8 のフィールドの戻り型および戻り値を示して
います。
サーバ / データ型
MapXtreme 6.7.x
フィールドの戻り型 / 戻り値
MapXtreme 6.8.0 *
フィールドの戻り型 / 戻り値
SQL Server/DateTime†
Date/System.DateTime
DateTime/System.DateTime
Oracle/TimeStamp
Date/System.DateTime
DateTime/System.DateTime
Oracle/Date
Date/System.DateTime
Date/MapInfo.Data.Date
*
†
v 6.8.0 以降に適用。
SQL Server 2005 以前の場合。
以降の各セクションでは、MI_Key、MI_Geometry、および MI_Style フィールド情報について説明
します。
MI_Key
すべてのテーブルに MI_Key という名前の擬似フィールドがあります。このフィールドは Key のイ
ンスタンスを返します。MI_Key 擬似フィールドは、MapInfo Professional および MapBasic の rowid
擬似フィールドと根本的にはよく似ています。rowid とは異なり、このフィールドは数値フィールド
ではありません。Key インスタンスは、文字列リテラルと相互に変換することもできます。
MapXtreme v7.2
170
開発者ガイド
第 8 章 : データでの作業
Catalog とテーブル
MI_Geometry
テーブル、フィーチャ、またはフィーチャ コレクション内の Geometry フィールド オブジェクト
には FeatureGeometry オブジェクトが含まれており、フィールドの座標系、Geometry フィールド
に含まれる全ジオメトリの境界全体などのプロパティを指定します。
ほとんどの種類のテーブルについて、ジオメトリ フィールドには "Obj" という名前が付いていま
す。旧バージョンの MapX と MapInfo Professional との互換性を保つため、エイリアス "Obj" は
テーブル内の最初の GeometryColumn に解決されます。また、エイリアス "MI_Geometry" はどの
テーブルでも使用でき、"Obj" が参照するフィールドと同じフィールドを参照します。
MI_Style
Geometry フィールドを持つテーブルは、"MI_Style" という名前のフィールドも持っています。こ
のフィールドが見つからない場合は、MIDbType.Style 型の最初のフィールドに設定されます。こ
のフィールドは、Geometry オブジェクトのスタイル情報の格納に使用されます。スタイル情報に
は、ポリゴンのライン幅、ポイントのシンボル サイズなどがあります。このフィールドを単独で
更新することはできません。Style フィールドと Geometry フィールドは、同時に更新する必要が
あります。
MI_Style フィールドは、MapInfo のネイティブ形式 (.TAB) のテーブルを開くときに自動的に作成
されます。それ以外の種類のテーブルの場合は、このフィールドを明示的に作成する必要があり
ます。MapInfo.Data.ColumnFactory.CreateStyleColumn を使用すると、"MI_Style"という名前 (エ
イリアス) で MIDbType.Style データ型のフィールドが作成されます。
MISQL を使用してテーブルに行を挿入する場合は、insert ステートメントに必ず MI_Style フィー
ルドを含めてください。次のコード例を参照してください。
Table tab = MapInfo.Engine.Session.Current.Catalog.GetTable("MapViewer");
TableInfo ti = TableInfoFactory.CreateTemp("Test",
((MapInfo.Data.GeometryColumn)tab.TableInfo.Columns["Obj"]).CoordSys);
Table tabTemp =
MapInfo.Engine.Session.Current.Catalog.CreateTable(ti);
MIConnection conn = new MIConnection();
conn.Open();
MICommand comm = conn.CreateCommand();
comm.CommandText = "Insert Into " + tabTemp.Alias +
" (Obj, MI_Style) SELECT MI_Point(MI_X(Obj), MI_Y(Obj), '" +
((MapInfo.Data.GeometryColumn)tab.TableInfo.Columns["Obj"]).Coord
Sys.SrsString + "'), MI_Style" + " FROM " + tab.Alias + " WHERE msaname
= 'Minneapolis-St.Paul, MN-WI' AND Not Obj = Null";
MessageBox.Show(comm.CommandText);
int numChanged = comm.ExecuteNonQuery();
mapControl1.Map.Layers.Add(new FeatureLayer(tabTemp));
mapControl1.Map.SetView(mapControl1.Map.Layers["Test"] as FeatureLayer);
MapXtreme v7.2
171
開発者ガイド
第 8 章 : データでの作業
Catalog とテーブル
Catalog (カタログ)
Catalog は、実質的に MapXtreme のデータ アクセス モデルを管理します。Catalog には、現在
MapXtreme セッションで開いているテーブルのリストが含まれます。テーブルは、Catalog から
開いたり、作成したり、閉じたりすることができます。Catalog は、その実際のデータ ソースとは
無関係に、開いているテーブルをすべて格納した単一のデータベースと考えることができます。
各 MapXtreme Session は、1 つの Catalog を管理します。
Catalog には、最初はテーブルが一切含まれていません。テーブルを開いたときに、エイリアス (名
前) がそのテーブルに割り当てられられるか、または呼び出し側によって提供されます。エイリア
スは、クエリなどの操作でテーブルを識別する際に使用します。
テーブルには、マップ作成可能で空間成分を持つテーブルと、マップ作成不可でデータ フィール
ドだけを持つテーブルとがあります。MapXtreme Catalog は、両方のタイプのテーブルを開くこ
とができ、開いたテーブルをクエリや結合で使用できます。
また、Catalog には、新しいテーブル定義を作成したり、現在開いているテーブルを列挙したりす
るための機能も用意されています。さらに、Catalog には、開いているテーブル内のデータへのア
クセスに使用する検索メソッドが入っています。
Catalog には、テーブルやそこに格納されているデータの選択、挿入、更新、削除を可能にする
SQL エンジンが備わっています。この SQL エンジンにより、カタログに定義されているテーブル
の結合が可能となります (Native から SQLServer、または SQLServer から Oracle など)。各種
ソースからの統合は Catalog によって自動的に処理されるため、ユーザが処理する必要はありませ
ん。これは、各種のデータ ソースから必要なデータを取り出して再編成するような場合に、きわ
めて強力な手段です。
MapXtreme Catalog は、MapInfo ADO.NET データ プロバイダを介して公開されます。テーブルお
よ び 結 果セ ッ ト へ の アク セ ス は、このインターフェイスを介して制御されます。「MapInfo
ADO.NET データ プロバイダ」を参照してください。
コード サンプル
次の例では、MapXtreme Session オブジェクトから Catalog にアクセスする方法、テーブルを開
く方法、Catalog 内のすべてのテーブルの列挙および Catalog 内の編集可能なテーブルのみの列挙
を行う方法を示します。
VB の例:
Public Shared Sub MapInfo_Data_Catalog()
' Catalog is accessible off the Session object
Dim catalog As Catalog = Session.Current.Catalog
' Open a bunch of tables
Dim table As Table = catalog.OpenTable("States.tab")
table.SessionInfo.ReadOnly = True ' Make states ReadOnly
table = catalog.OpenTable("world.tab")
table = catalog.OpenTable("worldcap.tab", "World Capitals")
' Enumerate the catalog directly - includes All tables
MapXtreme v7.2
172
開発者ガイド
第 8 章 : データでの作業
サポートされているテーブルの種類
Dim t As Table
For Each t In catalog
Console.Out.WriteLine("Table : {0}", t.Alias)
Next
Console.Out.WriteLine()
' Now enumerate through only tables that are editable (not ReadOnly)
Dim tEnum As ITableEnumerator = _
catalog.EnumerateTables(TableFilterFactory.FilterEditableTables())
While tEnum.MoveNext()
Console.Out.WriteLine("Table: {0}", tEnum.Current.Alias)
End While
Session.Current.Catalog.CloseAll()
End Sub
サポートされているテーブルの種類
MapXtreme の持つ優れた特徴の 1 つは、アクセスできるデータの豊富さです。つまり、多彩な
データ形式を扱うことができるという点です。MapXtreme でサポートされているテーブルの種類
を次に示します。
MapInfo .TAB 形式
MapInfo ネイティブ テーブル形式。
このファイル ベースのテーブルには、FeatureGeometry 情報と Style 情
報を含む .MAP ファイルが関連付けられている場合があります。非空間
データは .DAT ファイルに格納されます。TAB は、キャッシュ用のスト
レージ形式として利用できます。「新しいテーブルの作成」を参照して
ください。
dBase
dBase ファイルに格納されたデータ。
テーブルには、FeatureGeometry 情報と Style 情報を含む MAP ファイル
が関連付けられている場合があります。非空間データは .DBF ファイルに
格納されます。関連する .IND ファイルには、非空間属性値 (文字列、数
値、および日付) の B ツリー インデックスが 1 つ以上含まれています。
ASCII
デリミタ付き .CSV ファイルまたはテキスト ファイルに格納されたデー
タ。文字列の最大長は 255 文字 (最大 2 つの二重引用符を含む)。ASCII
テーブルでは、Insert のみ行うことができます。
テーブルには、FeatureGeometry 情報と Style 情報を含む MAP ファイル
が関連付けられている場合があります。非空間データは .CSV ファイルま
たは .TXT ファイルに格納されます。
MapXtreme v7.2
173
開発者ガイド
第 8 章 : データでの作業
サポートされているテーブルの種類
MS Access
Microsoft Access データベース テーブル。
Microsoft Access .MDB データベース内に存在するファイル ベースのテー
ブルで、FeatureGeometry 情報と Style 情報を含む .MAP ファイルが関連
付けられている場合があります。非空間データは Access ファイルに格納
されます。
Shapefile
ESRI Shapefile テーブル。
読み取り専用のテーブルで、3 次元ジオメトリ (X, Y, Z, M) をサポートしま
す。非空間属性データは .DBF ファイル形式で保存されます。
FeatureGeometry の値は、ESRI .shp ファイル形式で格納されます。
MapXtreme は空間インデックスにはアクセスできません。キャッシュは
.MAP ファイルとしてサポートされ、一時的または永続的です。永続的な
キャッシュは、MapInfo Professional と共有できます。これは
TableInfoShapefile クラスの PersistentCache プロパティで制御されます。
MemTable
非空間属性データのインメモリ ストレージ。
FeatureGeometry データおよびインデックスはディスクに格納されま
す。これらは一時テーブルであるため、テーブルを閉じるとすべての
データが破棄されます。MemTable はシリアライズ可能です。データを
ワークスペース内に永続化することもできます (データのみ可能。キーは
再読み込み時に変更される場合があります)。この種類のテーブルは、
キャッシュ用のストレージ形式として利用できます。MemTable に相当す
る .TAB ファイルはありません。「一時 MemTable の作成」を参照して
ください。
RDBMS サーバ
リモート データベース管理システム (SQL Server や Oracle) に格納され
る空間テーブル。
テーブルの定義は、ネイティブ SQL SELECT ステートメントで行います。
クエリの解析や修正は MapXtreme によって実行されます。デフォルトでは
キャッシュが有効になります。サポートされているプロトコル (ツールキッ
ト) としては、OCI (Oracle Spatial) や ODBC (SQL Server、SpatialWare、
XY) があります。「第 11 章 : DBMS のデータへのアクセス」を参照して
ください。
サポートされている RDBMS のリストについては、「インストール要
件」を参照してください。
MapXtreme v7.2
174
開発者ガイド
第 8 章 : データでの作業
サポートされているテーブルの種類
ADO.NET
ADO.NET DataTable または IDbCommand に基づいた非空 間データの
テーブル。
この種類のテーブルは、プロバイダ固有の実装を持った、さまざまなデー
タ プロバイダをサポートしています。固有のデータ プロバイダがサポー
トされていない場合は、より汎用的な ADO.NET を選択することになりま
す。ADO.NET は接続型 (IDBCommand) と非接続型 (DataTable) の両方の
ADO.NET モデルをサポートするように設計されています。IDBTable は読
み取り専用です。キャッシュが強制的に適用される場合があります (暗黙
的なキー)。DataTable は編集することができ、実行時のシリアライゼー
ションがサポートされています。「ADO.NET データ プロバイダの使用」
を参照してください。
ラスタ
ラスタ イメージを含むテーブル。
一般に、他の空間型テーブルのベース マップを提供します。テーブルに
は、単 一 の レコードと固定フィールド スキーマのみが 存在します
(RasterInfo、MI_Geometry、MI_Style)。これらのテーブルは、空間述語
("within" など) を使用して、ベクトル テーブルと結合できます。「第 17
章 : ラスタとグリッドの操作」を参照してください。
グリッド
グリッド イメージを含むテーブル。
他の空間型テーブルのベース マップを提供します。テーブルには、単一
の レ コ ー ド と 固定フィールド スキーマのみが存在します (GridInfo、
MI_Geometry、MI_Style)。これらのテーブルは、空間述語 ("within" など)
を使用して、ベクトル テーブルと結合できます。GridRead クラスを使用
することで、グリッド セルの値にアクセスできます。
MapInfo.Raster.GridCreatorFromFeatures クラスは、補間機能を使用して
グリッドを作成します。「第 17 章 : ラスタとグリッドの操作」を参照し
てください。
WMS
WMS (Web Map Service) からのイメージを含むテーブル。
他の空間型テーブルのベース マップを提供します。テーブルには、単一
の レ コ ー ド と固定フィールド スキーマのみが存在します (GridInfo、
MI_Geometry、MI_Style)。これらのテーブルは、空間述語 ("within" など)
を使用して、ベクトル テーブルと結合できます。WMS テーブルは、
MapInfo.Wms.WmsClient を使用することで動的ラスタのようにアクセス
できます。「第 19 章 : Web Map Service」を参照してください。
MapXtreme v7.2
175
開発者ガイド
第 8 章 : データでの作業
カタログとテーブルの操作
シームレス
複数のベース テーブルを連続する地形と組み合わせたテーブル。単一の
マップ レイヤとして表示されます。
シームレス テーブルは、空間クエリ専用に調整されています。たとえ
ば、マップの描画時には、シームレス テーブルを使用することで、最適
なコンポーネント テーブルを検索できます。通常、シームレス テーブル
を構成するコンポーネント テーブルは、ベクトルまたはラスタになりま
す。これらのコンポーネント テーブルはすべて同じスキーマを共有して
いることが必要であり、 読み取り専用です。基本となるコンポーネント
テーブルを直接変更することはできません。ソート操作や集計操作で
は、すべてのコンポーネント テーブルのすべてのレコードが調査されま
す (ベクトル テーブルを使用した場合、著しくパフォーマンスが低下する
可能性があります)。
ビュー
(サーバ テーブルがサポートするネイティブ SQL ではなく) MapInfo SQL
Select ステートメントをベースとするビュー。「ビュー テーブル」を参
照してください。
ResultSet
検索の結果を含んだテーブル。ResultSet は IResultSetFeatureCollections
でのみ使用されます。「結果セット」を参照してください。
カタログとテーブルの操作
このセクションでは、以下のような基本的なテーブル操作について説明します。
•
「開いているテーブルの検索」
•
「テーブルを閉じる」
•
「テーブルを圧縮する」
•
「テーブル イベントとカタログ イベントのリッスン」
『MapXtreme 開発者リファレンス』の「MapInfo.Data.Table クラス」も参照してください。
開いているテーブルの検索
開いているテーブルを検索するには、カタログを列挙する必要があります。カタログを列挙する
には、以下のセクションのメソッドを使用します。
Catalog.GetTable
MapInfo.Data.Catalog.GetTable メソッドは、TableAlias パラメータによって参照される Table オブ
ジェクトを返します。これは既に開いているテーブルである必要があります。開いているテーブ
ルが見つからなかった場合 (またはその後テーブルが閉じられた場合) は、このメソッドは null を
返します。
MapXtreme v7.2
176
開発者ガイド
第 8 章 : データでの作業
カタログとテーブルの操作
Catalog.Item (インデクサ)
MapInfo.Data.Catalog.Item プロパティは、Alias によって Table を検索するためのインデクサとし
て使用できます。これは、機能的には Catalog.GetTable メソッドを使用するのと同じですが、さ
らに読みやすいコードが生成されます。Alias には、既に開いているテーブルを指定する必要があ
ります。
VB の例:
Public Shared Sub MapInfo_Data_Catalog2()
Dim tbl As Table
For Each tbl In Session.Current.Catalog
System.Console.WriteLine("Table: " + tbl.Alias)
Next
End Sub
TableEnumerator
オーバーロードされたさまざまな EnumerateTables メソッドを使用してテーブルの列挙子を取得
できます。フィルタを使ってテーブルの列挙子を作成する場合もあります。列挙子は列挙体のメ
カニズムを提供しているにすぎませんが、フィルタは実際にどのテーブルが列挙体に含まれてい
るかを判断します。ユーザ独自のテーブル フィルタを作成して、TableEnumerator で使用するこ
ともできます。ITableEnumerator インターフェイスをインプリメントして、ユーザ独自のテーブ
ル列挙子を作成することもできます。
VB の例:
Public Shared Sub MapInfo_Data_Catalog3(ByVal catalog As Catalog)
Dim te As ITableEnumerator = _
catalog.EnumerateTables(TableFilterFactory.FilterEditableTables())
While te.MoveNext()
Dim tbl As Table = te.Current
End While
End Sub
テーブルを閉じる
テーブルを閉じるためには、3 つのメソッドを使用できます。MapInfo.Data.Catalog.CloseAll は開
いているすべてのテーブルを閉じ、Catalog.CloseTable は開いているテーブルを 1 つ閉じます。
Close メソッドは Table クラスにも存在します。
MapXtreme v7.2
177
開発者ガイド
第 8 章 : データでの作業
カタログとテーブルの操作
テーブルを圧縮する
MapInfo.Data.Table.Pack メソッドは、削除対象として指定されているレコードをテーブルから取り
除きます。テーブルが圧縮されるときに、テーブルの TablePacked イベントが発生します。このイ
ベントの引数は、圧縮の結果、テーブルのキーが変更されたかどうかを示します (削除されたレコー
ドが取り除かれた場合に発生します)。キーが変更されるのは、PackType に RemoveDeletedRecords
が含まれる場合、および削除されたレコードがテーブルの途中にある場合に限ります。削除された
レコードがテーブルの最後にある場合、キーは変更されません。キーの変更がイベントによって通
知されることもありません。
L
ResultSet テーブルはキーのコレクションを保持しているため、元のテーブルが圧縮された
場合には注意が必要です。キーが変更された場合、ResultSet の無効になります。
PackType Enumeration には、以下のオプションがあります。
•
•
•
•
•
PackGeometry - ジオメトリ オブジェクトが圧縮されることを示します。オブジェクトを圧縮
すると、未使用領域が可能な限り削除されます。RTree (ジオメトリ オブジェクトへの空間的
なアクセスで使用する空間インデックス) を完全に圧縮すると、不必要な読み取りが数多く行
われるため、パフォーマンスが低下する可能性があります。ディスク空き領域と処理速度のバ
ランスを取るため、ジオメトリ オブジェクトの圧縮では、一部の未使用領域が RTree に残さ
れる場合があります。また、RTree を圧縮すると、挿入および更新の操作によってわずかなパ
フォーマンス ペナルティが発生します。これらの操作では、RTree を解凍する必要性が高くな
るためです。
RebuildGeometry - ジオメトリ オブジェクトを再構築すると、一連の挿入、更新、または削除
の操作によって生じた未使用領域が削除されます。ジオメトリ オブジェクトの圧縮とは異な
り、このオプションでは、RTree インデックス内に未使用領域を意図的に残すことによって、
将来の挿入および更新の操作のパフォーマンスを向上させます。
PackIndex - 非空間インデックスは B* ツリーとして維持されます。このツリー構造に、値が格
納された内部ノードまたはリーフ ノードが常にあるとは限りません。これは、インデックスの
大幅な再構成を行わなくても挿入および更新の操作を行えるようにするためのデフォルトの処
置です。未使用領域は、挿入、更新、または削除の操作によって必要以上に消費される場合が
あります。インデックスを完全に圧縮すると、すべての内部ノードおよびリーフ ノード (最後
のノードを除く) が圧縮されます。このオプションによって、インデックスによって使用され
るディスク空き領域が最小限に抑えられ、インデックスの読み取りパフォーマンスも向上しま
す。完全に圧縮されたインデックスに対して挿入および更新の操作を行うと、パフォーマンス
ペナルティが発生します。
RebuildIndex - インデックスの再構築では、PackIndex オプションのような内部ノードとリー
フ ノードの完全圧縮は行いません。その代わりに、インデックス用に確保した未使用領域を使
用してインデックスを作成し直すことによって、ディスク空き領域、読み取りパフォーマン
ス、および変更パフォーマンスのバランスを取ります。変更操作を複数回行った後では、イン
デックスにかなりの未使用領域が含まれる場合があります。このオプションによって、その未
使用領域が再取得されます。
RemoveDeletedRecords - MapInfo Native および dBase を含む一部のデータ ソースでは、削除
されたレコードが物理的に取り除かれることはありません。削除されたレコードを物理的に取
り除くには、このオプションを指定してテーブルを圧縮する必要があります。一般に、レコー
ド番号は、これらのデータ ソースの種類のレコード キーとして使用されます。削除されたレ
コードをテーブルから取り除くと、キーが無効になる場合があります。これは、圧縮の結果、
キーが変更される場合があるからです。
MapXtreme v7.2
178
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
•
•
CompactDb - テーブルのデータ ソースが Microsoft Access (Access の TableType) の場合、
テーブルのデータを含む MDB ファイルは、Pack メソッドでこのオプションを指定して圧縮す
ることもできます。
All - これは、PackGeometry | PackIndex | RemoveDeletedRecords に相当する便利なオプショ
ンです。
テーブル イベントとカタログ イベントのリッスン
テーブルは、アプリケーションがサブスクライブできるイベントをいくつか公開しています。デ
フォルト設定を以下に示します。
•
RowInsertedEvent - テーブルに新しい行が追加されたときに発生します。
•
RowUpdatedEvent - テーブル内の既存の行が更新されたときに発生します。
•
RowDeletedEvent - テーブル内の行が削除されたときに発生します。
•
TablePackedEvent - テーブルが圧縮されたときに発生します。
•
TableCloseRequestEvent - テーブルを閉じるよう求められたときに発生します。
•
TableIsClosingEvent - テーブルが閉じられるときに発生します。
•
TableClosedEvent - テーブルが閉じられたときに発生します。
また、カタログは以下のイベントを公開しています。
•
TableOpenedEvent - テーブルが開かれたときに発生します。
•
TableCreatedEvent - 新しいテーブルが作成されたときに発生します。
•
TableIsClosingEvent - テーブルが閉じられるときに発生します。
テーブル メタデータ (TableInfo)
MapInfo.Data 名前空間の TableInfo クラスは、以下のような、既存のテーブルに関する情報または
メタデータを含んだ抽象ベース クラスです。
•
フィールド - 番号、名前、データ型など
•
テーブルのエイリアス、および、データ ソースの説明とパス名
•
クライアント メタデータ (TAB ファイル内の begin_metadata/end_metadata タグ間の情報)
TableInfo は、テーブルを開いたり、新しいテーブルを作成したりするときに使用します。また、
開いているテーブルに関する情報を取得するときにも使用できます。
TableInfo から派生したクラスには、プロバイダ固有のメタデータが含まれています。MapXtreme
がサポートしているすべての種類のテーブルには、TableInfo がインプリメントされています。
「データ ソース」を参照してください。
TableInfo のインスタンスは手動で作成できるほか、次のように .TAB ファイル定義から (テーブル
を開かずに) 作成することもできます。
TableInfo.CreateFromFile(…)
MapXtreme v7.2
179
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
TableInfo には、テーブル サービスを有効にするためのプロパティがあります (キャッシュ機能を
使用したり、空間スキーマを介してテーブルをマップ作成可能にしたりするなど)。「キャッシュ
の設定」および「テーブルをマップ作成可能にする」を参照してください。
MapXtreme では、M 値と Z 値のテーブル フィールド メタデータをサポートしています。ある
データ プロバイダのジオメトリが 3D および測定値をサポートできるかどうかを、個々のジオメ
トリを評価せずに知りたい場合に、この機能は役立ちます。
テーブルのメタデータには、テーブルの TableInfo プロパティからアクセスできます。そのテーブ
ル メタデータから GeometryColumn にアクセスし、テーブルが M 値や Z 値をサポートするかど
うか、および、範囲がわかっている場合はそのテーブルの値の範囲を調べることができます。M
値と Z 値のサポートの詳細については、「M 値と Z 値のサポート」を参照してください。
TAB ファイル メタデータの検証
TAB ファイル メタデータは、アクセスしたり編集したりできます。テーブル構造に関する情報を
取得するには、Table から TableInfo クラスを取得します。
次のコードは、開いているテーブルのメタデータを取得する方法を示しています。また、ジオメト
リ フィールドを使用して座標系とテーブルの境界を調べる方法も示しています。M 値と Z 値を返す
コード例については、『開発者リファレンス』の MapInfo.Data.TableInfo を参照してください。
VB の例:
Public Shared Sub MapInfo_Data_TableInfo2()
' Get the metadata for an open table
Dim ti As TableInfo = Session.Current.Catalog("states").TableInfo
' Print out some information to the console
Console.Out.WriteLine("Table Alias={0}, Datasource={1}, _
Description={2}, Type={3}", _
ti.Alias, ti.DataSourceName, ti.Description, ti.TableType)
' Print out some information about each column
Dim col As Column
For Each col In ti.Columns
Console.Out.WriteLine("Column {0} Type={1} Width={2}", _
MapXtreme v7.2
180
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
col.Alias, col.DataType, col.Width)
' If the column is a geometry column, print csys and bounds.
If col.DataType = MIDbType.FeatureGeometry Then
Dim geocol As GeometryColumn = col
Dim csys As MapInfo.GeomeTry.CoordSys = geocol.CoordSys
Console.Out.WriteLine("CSys : {0}", csys.MapBasicString)
Dim dr As MapInfo.GeomeTry.DRect = geocol.Bounds
Console.Out.WriteLine("Bounds=({0},{1}),({2},{3})", dr.x1, _
dr.y1, dr.x2, dr.y2)
End If
Next
End Sub
新しいテーブルの作成
以 下 の セ ク シ ョ ン で は、永 久 ネ イ ティブ テーブル、一時ネイティブ テーブル、および一時
MemTable の作成方法について説明します。
新しい永久ネイティブ テーブルの作成
MapInfo ネイティブ テーブルの MapInfo.Data.Table.TableInfo プロパティは、TableInfoNative のイ
ンスタンスを返します。ネイティブ テーブルは、MapInfo .TAB ファイルです。このクラスを使用
して、ネイティブ テーブルに固有のプロパティにアクセスできます。このクラスの新しいインス
タンスを作成し、これを使用して新しいテーブルを作成できます。また、「データ ソース」も参
照してください。
ColumnFactory クラスの使用方法に注意してください。このクラスを使用すると、データ型ごとに必
要な引数を確認することができます。たとえば、ジオメトリ フィールドには座標系が必要です。
VB の例:
Public Shared Sub MapInfo_Data_TableInfoNative()
Dim ti As TableInfoNative = New TableInfoNative("NewTable")
ti.TablePath = "c:\data\Capitals.TAB"
ti.Columns.Add(ColumnFactory.CreateIndexedStringColumn("Capital",_
25))
ti.Columns.Add(ColumnFactory.CreateStringColumn("Country", 30))
ti.Columns.Add(ColumnFactory.CreateDoubleColumn("Pop_Grw_Rt"))
' Make the table mappable
ti.Columns.Add(ColumnFactory.CreateStyleColumn())
Dim Robinson As CoordSys = _
Session.Current.CoordSysFactory.CreateFromPrjString("12, _
62, 7, 0")
ti.Columns.Add(ColumnFactory.CreateFeatureGeometryColumn(Robinson))
' Note we do not need to (nor should we) add a column of type Key.
' Every table automatically contains a column named "MI_Key".
Dim table As Table = Session.Current.Catalog.CreateTable(ti)
End Sub
MapXtreme v7.2
181
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
一時ネイティブ テーブルの作成
VB の例:
Public Shared Sub MapInfo_Data_TableInfo3(ByVal conn As MIConnection)
Dim ti As TableInfoNative = New TableInfoNative("NewTable")
ti.Temporary = True
Dim col As Column
col = New Column
col.Alias = "FString30"
col.DataType = MIDbType.String
col.Indexed = True
col.Width = 30
ti.Columns.Add(col)
col = New Column
col.Alias = "FInt32"
col.DataType = MIDbType.Int
col.Indexed = True
ti.Columns.Add(col)
col = New Column
col.Alias = "FInt16"
col.DataType = MIDbType.SmallInt
col.Indexed = True
ti.Columns.Add(col)
col = New Column
col.Alias = "FDouble"
col.DataType = MIDbType.Double
ti.Columns.Add(col)
col = New Column
col.Alias = "FDateTime"
col.DataType = MIDbType.Date
ti.Columns.Add(col)
col = New Column
col.Alias = "FBoolean"
col.DataType = MIDbType.Boolean
ti.Columns.Add(col)
' Note we do not need to (nor should we) add a column of type Key.
' Every table automatically contains a column named "MI_Key".
Dim miTable As Table = conn.Catalog.CreateTable(ti)
End Sub
一時 MemTable の作成
MapInfo.Data.Table.TableInfo プロパティは、TableInfoMemTable のインスタンスを返します。こ
のクラスを使用して、メモリ テーブルに固有のプロパティにアクセスできます。このクラスの新
しいインスタンスを作成し、これを使用して新しいテーブルを作成できます。
MapXtreme v7.2
182
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
Web サービスから返された XML や GML などの形式のデータは、この方法で Catalog に格納して
使用できます。MapXtreme API を介して、MultiPolygon、LineString、Point などのジオメトリに変
換することが可能です。このジオメトリは、MapXtreme によって FeatureCollection に変換され、
さらに、memTable やネイティブの TAB 形式として保存されます。
このアプローチは、マップ表示には不要なデータを MapXtreme で利用できるようにしたい場合に
も適しています。
MapXtreme は、MemTable へ の Z 値 と M 値の読み取りと書き込みをサポートしています。
MultiCurve で M 値を使用すると、線形参照操作と動的セグメント化を実行できます。「第 21 章 :
線形参照」を参照してください。
VB の例:
Public Shared Sub MapInfo_Data_TableInfoMemTable()
Dim ti As TableInfoMemTable = New TableInfoMemTable("NewTable")
' Note: The TablePath property does not apply - it can be set but it _
' is meaningless.
ti.Columns.Add(ColumnFactory.CreateIndexedStringColumn("Capital",_
25))
ti.Columns.Add(ColumnFactory.CreateStringColumn("Country", 30))
ti.Columns.Add(ColumnFactory.CreateDoubleColumn("Pop_Grw_Rt"))
' Make the table mappable
ti.Columns.Add(ColumnFactory.CreateStyleColumn())
Dim Robinson As CoordSys = _
Session.Current.CoordSysFactory.CreateFromPrjString("12, 62, _
7, 0")
ti.Columns.Add(ColumnFactory.CreateFeatureGeometryColumn(Robinson))
' Note we do not need to (nor should we) add a column of type Key.
' Every table automatically contains a column named "MI_Key".
Dim table As Table = Session.Current.Catalog.CreateTable(ti)
End Sub
テーブルへの式フィールドの追加
テーブルに式フィールドを追加するには、MapInfo.Data.Table.AddColumns メソッドを使用しま
す。この形式の AddColumns は、1 つの Columns オブジェクトを引数とし、関数、演算子、リテ
ラル値、およびテーブル内の他のフィールドから構成される式に基づいて一時的なフィールドを
作成します。columns 引数の Column のインスタンスすべてに文字列式が指定されている必要があ
ります。
L
Table.AddColumns は、Server、View、Seamless、AdoNet、ResultSet、および Drilldown
のテーブルではサポートされていません。MapXtreme によってテーブルの種類が検査さ
れ、これらのいずれかの種類である場合には、例外がスローされます。
VB の例:
Public Shared Sub MapInfo_Data_TableAddColumns(ByVal miTable As Table)
MapXtreme v7.2
183
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
Dim NewCols As Columns = New Columns
NewCols.Add(New Column("PopDensity1990", "Pop_1990 / _
MI_Area(Obj, 'sq mi', 'Spherical')"))
NewCols.Add(New Column("PopDensity2000", "Pop_2000 / _
MI_Area(Obj, 'sq mi', 'Spherical')"))
miTable.AddColumns(NewCols)
End Sub
文字列式 "Pop_1990 / MI_Area(Obj, 'sq mi', 'Spherical')" は、一時フィールドに格納される派生情報
を表しています。このコードは、「各レコードについて、平方マイルごとの領域に人口を分割し
て、人口密度を作成する」ことを示しています。式内の SQL 関数 MI_Area() は、レコードのジオ
メトリから領域を派生させます。
結合が一回で済むような (ビューの場合のように、後続の各アクセスで結合を実行するのではない)
デスクトップ アプリケーションでは、AddColumns メソッドを使用することでパフォーマンスが
向上する場合があります。
詳細およびコード例については、開発者リファレンス ヘルプで MapInfo.Data.Table.AddColumns
クラスを参照してください。
式の作成の詳細については、「第 10 章 : 式の作成」を参照してください。
データ ソース
MapXtreme でサポートされているデータ ソースのリストを以下の表に示します。データ ソースに
は、その種類に応じて特定のデータ プロバイダ (MapInfo.Data.TableInfo から派生した TableInfo ク
ラス) を使ってアクセスします。各データ型の概要については、「サポートされているテーブルの
種類」を参照してください。
データ ソース
クラス
ネイティブ (MapInfo.TAB)
TableInfoNative
dBase
TableInfodBase
MS Access
TableInfoMSAccess
ASCII
TableInfoAscii
RSBMS サーバ
TableInfoServer
ESRI Shapefile
TableInfoShapefile
シームレス
TableInfoSeamless
ラスタ
TableInfoRaster
グリッド
TableInfoGrid
WMS
TableInfoWMS
MapXtreme v7.2
184
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
データ ソース
クラス
ADONET
TableInfoAdoNet
MemTable
TableInfoMemTable
ビュー
TableInfoView
ResultSet
TableInfoResultSet
正しいデータ ソースの選択
適切なデータ ソースを選択するかどうかで、アプリケーションのパフォーマンスに違いが現れま
す。ネイティブの MapInfo ファイル (.TAB) など、他の選択肢がない場合もあれば、複数の選択肢
がある場合もあります。通常は、そのデータ ソースに対してサポートされたデータ プロバイダを
使用することになりますが、 そのいずれを使ってもデータにアクセスできない場合は、MapInfo
ADO.NET データ プロバイダを使用することができます。これは、Catalog がデータを取得すると
きに使用するデータ プロバイダでもあります。
これらのデータ ソースは、それぞれ異なるパフォーマンス特性を備えています。アクセス時間と
マップの描画時間に最も優れているのは、ネイティブ テーブルです。データがシステムのローカ
ルに保存されるため、高速なレスポンスが求められる操作に向いています。その他のファイル
ベースのテーブルは、現在のハードウェアおよびファイル サイズによっては優れたパフォーマン
スを提供します。
データへのアクセス方法
MapXtreme には、データを Catalog に取り込むための方法がいくつか用意されています。
•
データ ソースへの直接アクセス
•
ADO.NET データ プロバイダ (TableInfoAdoNet) を介したアクセス
•
サード パーティの Web サービスから取得したデータ (XML/GML) を使用
デ ー タ に ア ク セ ス す る た め の 最 適 な方法は、使用するデータ ソースに固有の、いずれかの
TableInfo クラスを使用して直接データを開くことです。
内部的にサポートされていないデータでも、ADO.NET プロバイダが定義されていれば、2 つ目の
方法 (TableInfoAdoNet) を使用してアクセスできます。
3 つ目の方法では、XML または GML を返す HTTP サービスからのデータを Catalog に取り込むこ
とができます。
MapXtreme v7.2
185
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
データ ソースへの直接アクセス
MapXtreme では、ファイル ベースのテーブル形式や RDBMS サーバ (SQL Server や Oracle など)
に格納されたデータに直接アクセスできます。ファイルベースのアクセスでは、適切な TableInfo
イ ン ス タ ン ス (TableInfoNative、TableInfodBase、TableInfoMSAssess、TableInfoAscii) にパスと
ファイル名を指定します。
RDBMS サーバに格納されたデータに直接アクセスする場合は、TableInfoServer クラスを使用して、
リモート テーブルに対する接続文字列および SQL ステートメントを定義できます。MapXtreme
は、内部的に ODBC または OCI を使用して、リモート データベースにアクセスします。
TableInfoServer により、サーバとの接続が確立され、テーブルのメタデータが照会されて、リ
モート サーバで定義された空間的特性に基づく適切なテーブル定義が作成されます。リモート
データを扱う場合、一般には、この方法で最も高いパフォーマンスを得ることができます。内部
的には、MapXtreme は現在の操作に必要なデータにしかアクセスしません。マップの描画時、
MapXtreme は、データ フィールドは取得せずに、ジオメトリ フィールドだけを取得するクエリを
作成します。これにより、ネットワーク トラフィックを最小限に抑えることができます。キャッ
シュを有効にした場合、トラフィックが問題になるのは、初回アクセスだけで、それ以降のすべ
てのリクエストは、キャッシュから取得されます。「第 11 章 : DBMS のデータへのアクセス」を
参照してください。
ADO.NET データ プロバイダを介したアクセス
データにアクセスする 2 つ目の方法として、ADO.NET データ プロバイダを使用した方法があり
ます。この方法では、データを取得するための ADO.NET のクラスが定義されている必要がありま
す。AdoNet テーブルとして使用できるのは、マップ作成不可のテーブルだけです。マップ作成不
可のテーブルとは、データに関するジオメトリ情報を持たないテーブルのことです。ただし、
ADO.NET プロバイダから取得したテーブルでも、SpatialSchema をテーブル定義に適用すること
により、マップ作成可能にできます。この方法では、ユーザからデータが要求されるたびに、
MapXtreme DataAccess エンジンが ADO.NET データ プロバイダを呼び出します。そのため、
データへのアクセスが遅くなる傾向があります。ただし、キャッシュと組み合わせて使用するこ
とにより、パフォーマンスを高めることが可能です。「ADO.NET データ プロバイダの使用」を
参照してください。
サード パーティの Web サービスから取得したデータ
MapXtreme では、Web サービスの出力 (XML または GML) を Catalog に追加して、MapXtreme の
デスクトップ アプリケーションまたは Web アプリケーションで使用できます。データを Catalog
に取り込み、MapXtreme API を介して、MultiPolygon、LineString、Point などのジオメトリに変換
することが可能です。このジオメトリは、MapXtreme によって FeatureCollection に変換され、さ
らに、memTable やネイティブの TAB 形式として保存されます。
このアプローチは、マップ表示には不要なデータを MapXtreme で利用できるようにしたい場合に
も適しています。
MapXtreme v7.2
186
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
データ リーダー、MemTables、結果セット
データにアクセスするメソッドでは、データ リーダーまたは結果セットが返されます。データ
リーダーを使用することで、データに対してシーケンシャルにアクセスできます。データのコ
ピーは保存されません。データはデータ ソースから取り出されます (データ ソースがキャッシュ
されている場合を除く)。結果セットは、キーのコレクションです。これらのキーを使用すること
で、元のテーブルにアクセスでき、データのコピーは作成されません。
MemTable では、各種のソースから取得したデータを、1 つのテーブルに保存することができま
す。このタイプのテーブルでは、メモリ アレイと一時的なディスク ストレージを併用することに
よってデータが保存されます。データが追加されると、MemTable は、元のテーブルを指し示す
キーやポインタを保持するのではなく、データのコピーを作成します。マップの一時レイヤを保
存する場合や、処理で返された値 (ジオコード結果やルーティング結果) のコンテナとして使用す
ることができます。MemTable におけるアクセス性能とマップのレンダリング パフォーマンス
は、ネイティブのテーブルと匹敵します。
結果セットは、定義された一連の行にアクセスしたり、データ ソースから特定のデータを取得し
たりする必要がある場合の強力な手段となります。データ ソースが同時アクセスをサポートして
いれば、取り出し元のデータがセッション中に変更された可能性がある場合、この方法を用いる
ことで、結果を確認できます。MemTables はデータのコピーであるため、取得されたデータ行は
不変です。元のデータ ソースに対して行われた変更は反映されません。
ADO.NET データ プロバイダの使用
特定の TableInfo データ ソースで直接アクセスできないデータの場合、TableInfoAdoNet を使用で
きます。ADO.NET テーブルの形式は、DataTable (メモリ内に維持される単一テーブルの行の集
合。読み取りおよび書き込みアクセスが可能) または IDbCommand (データ ソースで実行される
SQL ステートメント。読み取り専用の動的データを生成する) のいずれかになります。
DataTable のデータへのアクセス
DataTable の使用時、Catalog は、Catalog.OpenTable の呼び出し (TableInfoAdoNet クラスを使用)
で指定する DataTable への参照を保持します。DataTable は、Insert、Update、または Delete の各
コマンドを実行すると、MapInfo ADO.NET データ プロバイダを使用して編集できます。アプリ
ケーションでも DataTable に直接アクセスできます。ただし、Catalog がテーブルへの参照を保持
している間は、その構造を変更しないでください。また、MapInfo データ プロバイダの外部にあ
るデータに対して変更を行っても (MICommand を使用せずに Insert、Update、または Delete の各
コマンドを実行する場合など)、テーブルの挿入、更新、または削除のテーブル イベントは発生し
ません。
DataTable には、Catalog がテーブルを定義するための十分な情報が含まれています。ただし、文
字列フィールドの場合、Catalog ではこのフィールドに対して長さを割り当てる必要があります。
長さは、データ集約用の一時インデックスや一時テーブルを作成するときに必要です。このよう
な操作では、文字列の長さを正しく指定することが重要です。DataColumn には MaxLength プロ
パティがあります。このプロパティを設定して、フィールドが保持できる文字列の最大長を指定
する必要があります。最大長を設定しなかった場合、この値はデフォルトで -1 に設定され、実際
MapXtreme v7.2
187
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
には 254 の値が使用されます。Catalog は MaxLength プロパティを確認する前に、DataColumn
のプロパティが "StringWidth" という名前で ExtendedProperties コレクションに定義されているか
どうかを確認します。定義されている場合は、このプロパティの値がフィールドの幅として使用
されます。
次の例では、データが DataTable に格納される MapInfo テーブルの作成方法を示します。
VB の例:
Public Shared Sub MapInfo_Data_TableInfoAdoNet(ByVal connection As _
MIConnection)
' Create a new DataTable.
Dim dt As DataTable = New DataTable("CityData")
Dim dc As DataColumn
dc = dt.Columns.Add("City", Type.GetType("string"))
dc.MaxLength = 30
dc = dt.Columns.Add("Country", Type.GetType("string"))
dc.MaxLength = 30
dc = dt.Columns.Add("Continent", Type.GetType("string"))
dc.MaxLength = 30
dc = dt.Columns.Add("Population", Type.GetType("string"))
' Populate the DataTable...
dt.Rows.Add(New Object() {"Madrid", "Spain", "Europe", 1500000})
dt.Rows.Add(New Object() {"Stockholm", "Sweden", "Europe".985000})
' Now open a MapInfo Table which accesses this DataTable
Dim ti As TableInfoAdoNet = New TableInfoAdoNet("Cities")
ti.ReadOnly = False
ti.DataTable = dt
Dim table As Table = connection.Catalog.OpenTable(ti)
End Sub
ADO.NET オブジェクトの保存と復元
ここでは、MapXtreme で ADO.NET テーブルを保存したり復元したりするための手順を紹介して
います。基本となる System.Data.DataTable の復元に伴う制約上、ADO.NET テーブルの明示的な
シリアライゼーション/デシリアライゼーションはサポートされません。ADO.NET テーブルは、
MapInfo.Data.TableInfoAdoNettable オブジェクトを使って作成された Catalog 内のテーブルです。
ADO.NET ベースの MapInfo テーブルをシリアライズ/デシリアライズするには、SaveState メソッ
ドを使用します。まず、ADO.NET テーブルを参照するすべてのテーブル (ViewTables や結合など)
をシリアライズした後、ADO.NET テーブルを閉じます。RestoreState メソッドでは、ADO.NET
MapInfo テーブルを同じ名前で再作成した後、そのテーブルに依存するすべての MapInfo テーブル
をデシリアライズします。この順番に注意してください。まず、ADO.NET テーブルを作成した後
で、それ以外のテーブルを復元する必要があります。
MapXtreme v7.2
188
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
MapXtreme Web アプリケーションで手動による状態管理を行う場合、クライアント リクエスト間
で ADO.NET テーブルを保存したり復元したりするには、以下の手順に従います。
L
以下に示した手順は、DataTable から作成された ADO.NET テーブルを想定しています。
1. MapInfo.WebControls.StateManager.SaveState メソッドで次の処理を行います。
a. ADO.NET の DataTable または DataSet を HTTPSession インスタンスに格納します。
b. ADO.NET テーブルに依存する MapInfo.Data.TableInfoView テーブルまたは
MapInfo.Data.TableInfoResultSet テーブルを、
ManualSerializer.SaveMapXtremeObjectIntoHttpSession を使って保存します。
c. Catalog 内の ADO.NET テーブルを閉じます。
2. MapInfo.WebControls.StateManager.RestoreState メソッドで次の処理を行います。
a. HTTPSession インスタンスから取得した DataTable を基に新しい TableInfoAdoNet オブ
ジェクトを作成します。
b. カタログ内の新しい ADO.NET テーブル (元のオブジェクトと同じ名前の TableInfoAdoNet
オブジェクト) を開きます。
c. この ADO.NET テーブルに依存する MapInfo.Data.TableInfoView テーブルまたは
MapInfo.Data.TableInfoResultSet テーブルを、
ManualSerializer.RestoreMapXtremeObjectFromHttpSession を使用して復元します。
テーブルとその依存関係をすべて適切に作成するためには、保存と復元の順序がきわめて重要です。
シリアライゼーションの詳細については、「第 6 章 : 状態管理について」を参照してください。
IDbCommand を使用したデータへのアクセス
ADO.NET テーブルの第 2 の形式は、ADO.NET の接続オブジェクト タイプである Connection、
Command、および DataReader に基づいています。この方法で作成された MapInfo テーブルは読
み取り専用です。これらのテーブルは、Catalog に IDbCommand オブジェクトを渡すことによって
作成されます。このオブジェクトは、テーブルを構成するすべてのデータが返されるように構成さ
れています。テーブルを初めて作成するときは (Catalog.OpenTable を呼び出して)、IDbCommand
に対して ExecuteReader が呼び出されます。生成されるデータ リーダーを使用して、フィールド
とそのデータ型が判断されます。それ以降のすべてのカーソル リクエストでも (キー フェッチと呼
ばれる、特定のレコードを取得するカーソル以外のカーソル)、ExecuteReader を呼び出してカーソ
ルの条件を満たすデータをフェッチします。この方法は非効率的な場合があります。可能な場合
は、他の種類のテーブルを使用してデータにアクセスしてください。
コマンドベース形式の ADO.NET テーブルは、一般的なインターフェイスを使用し、インターフェ
イスの特定のインプリメントに関する具体的な知識がなくても使用できるように設計されている
ので、テーブルは IDbCommand.CommandText が標準 SQL の形式であると見なしません。実際に
は SQL ではない場合もあります。この種類のテーブルは、CommandText に対してアクセス、解
析、または変更を行いません。つまり、この種類のテーブルには、結果内のどのフィールドが一
意の、null でないキー値を構成しているかを判断するメカニズムがありません。この種類のテーブ
ルでは、どのフィールドがキーを構成しているかを明示する必要があります。明示するには、
KeyType を Explicit として指定し、KeyColumns プロパティを設定します。
MapXtreme v7.2
189
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
MapInfo データ プロバイダの内部には、キーを使用して特定のレコードを取得する必要のある操
作 (キー フェッチとも呼ぶ) が数多くあります。簡単な例では、MI_Key = '5' の形式の where 句を
含む Select ステートメントがあります。ここでは、MI_Key フィールドを文字列リテラル "5" で表
すことのできるレコードを取得する必要があります。キーの取得は、マッピングの選択、ラベル
付け、および MIScrollableReader でのスクロール (この場合、リーダーはキー値のリストをスク
ロールします) で頻繁に行われます。MapInfo テーブルは、キー値を使用してレコードを効率的に
フェッチする機能に依存しています。コマンド ベース形式の ADO.NET テーブルが、テーブルを
定義する IDbCommand オブジェクト ("シーケンシャルな" IDbCommand) の CommandText の読み
取り、解析、または変更を行わないのと同様に、MapInfo テーブルも IDbCommand オブジェクト
を変更して特定のレコードをフェッチする機能はありません。したがって、この目的のために、2
つ目の IDbCommand オブジェクトを指定する必要があります。"FetchByKey" IDbCommand オブ
ジェクトは、以下の要件を満たす必要があります。
•
•
このコマンド オブジェクトに対して ExecuteReader を呼び出したとき、それに続くコマンド
オブジェクトと同じフィールドを同じ順番で持つデータ リーダーが生成される必要がありま
す。
FetchByKeyCommand には Parameters コレクションと、キーのメンバごとに 1 つのパラメー
タが含まれている必要があります。たとえば、TableInfo.KeyColumns で "city" フィールドと
"state" フィールドで構成されるキーを指定した場合、FetchByKeyCommand には 2 つのパラ
メータ オブジェクトが含まれている必要があります。1 つ目のパラメータ オブジェクトには
TableInfo.KeyColumns コレクションで指定した 1 番目のフィールドを表す値 ("city" の値など)
が割り当てられ、2 つ目のパラメータ オブジェクトには TableInfo.KeyColumns コレクション
で 指 定 し た 2 番 目 の フ ィ ー ル ド を 表 す 値 ("state" の 値 な ど) が 割 り 当 て ら れ ま す。
FetchByKeyCommand に対して ExecuteReader を呼び出したとき、リーダーは指定された
キーを表すレコードを返す必要があります。
次の例では、ADO.NET に接続されたコマンド オブジェクトを通じてデータにアクセスする
MapInfo テーブルの作成方法を示します。
VB の例:
Public Shared Sub MapInfo_Data_TableInfoAdoNet2(ByVal connection _
As MIConnection)
Dim ti As TableInfoAdoNet = New TableInfoAdoNet("EuropeanCities")
Dim _conn As OleDbConnection = New _
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data _
Source=C:\Data\EuropeCities.mdb")
Dim selectQuery As String = "SELECT City, Country, Continent, _
Pop_1994 FROM EuropeCities"
Dim _OleDbCommand As OleDbCommand = New OleDbCommand(selectQuery)
_OleDbCommand.Connection = _conn
selectQuery = selectQuery + " where City = @City AND _
Country = @Country"
Dim _OleDbKeyCommand As OleDbCommand = New _
OleDbCommand(selectQuery)
_OleDbKeyCommand.Parameters.Add("@City", OleDbType.Char)
_OleDbKeyCommand.Parameters.Add("@Country", OleDbType.Char)
_OleDbKeyCommand.Connection = _conn
MapXtreme v7.2
190
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
'
'
'
'
The MapInfo Table will Open/Close the connection as necessary.
If this is expensive the application could open the connection
before opening the table and closing the connection after the
table is closed.
ti.SequentialCommand = _OleDbCommand
ti.FetchByKeyCommand = _OleDbKeyCommand
' Tell the table which column(s) constitute a key - for this table
' it is acompound key consisting of values from the City and County
' columns.
Dim sc As StringCollection = New StringCollection
sc.Add("City")
sc.Add("Country")
ti.KeyColumns = sc
ti.KeyType = KeyType.Explicit
' Ask the Catalog to open the table.
Dim tbl As Table = connection.Catalog.OpenTable(ti)
' Now the MICommand object may be used to select data from the table
' (by the name EuropeanCities since that is the alias we assigned to
' it).The data in thistable may be joined with any other table and
' it may be used as source data in a call to AddColumns to populate
' temporary columns with data from this table.
End Sub
データ バインド
データ バインドとは、データをデータ ソースから MapXtreme に格納する処理のことをいいま
す。外部データ (ADO.NET やその他のレガシー ソース) の MapInfo.Data.Table へのデータバイン
ドは、TableInfoAdoNet を使用して ADO.NET DataTable を Table として開くことによって実現し
ま す。テ ー ブ ル は 別 の テ ー ブ ル と 結 合 し た り、そ の テ ー ブ ル 自 体 と 結 合 し た り、
Table.AddColumns を使用してフィールドを別のテーブルにバインドしたりできます。
テーブルをそのテーブル自体と結合するには、次の例のように指定します。
Select ... From T as A, T as B Where A.X = B.Y
DataTable に格納されているデータまたは ADO.NET データ プロバイダを通じてアクセスできる
データが アプリ ケーシ ョン に含ま れる場合は、Catalog からそれらのデータにアクセスし、
MapInfo テーブルとして扱うことができます。この方法は、その他の種類のテーブルからデータに
アクセスできない場合に使用すると特に便利です。
たとえば、データが dBase ファイルや Microsoft Access テーブルに格納されている場合、または
ODBC インターフェイスや Oracle の OCI インターフェイスからアクセスできる場合は、これらの
TableInfo タイプを使用してデータにアクセスすることをお勧めします。これらの種類のテーブル
からアクセスできないデータでも、DataTable に読み込んだり、Command、Parameter、および
DataReader の各オブジェクト タイプをインプリメントしている一部の ADO.NET データ プロバ
イダを通じてアクセスしたりできる場合は、Catalog からアクセスできます。
MapXtreme v7.2
191
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
アプリケーションでは、クエリを実行してデータをその他の MapInfo テーブル データと結合でき
るようにするため、データを MapInfo ネイティブ テーブルとして使用できるようにすることが必
要な場合があります。また、Table.AddColumns の呼び出しでソース データとして使用できるよう
にするために、Catalog からアクセス可能にすることが必要な場合もあります。
コード例: Oracle テーブルのデータを結合する方法
public Shared Sub MapInfo_Data_TableAddColumns5(ByVal map As Map)
Dim Connection As MapInfo.Data.MIConnection = New _
MapInfo.Data.MIConnection
Connection.Open()
'Add the USA table to the map
map.Load(New _
MapInfo.Mapping.MapTableLoader("C:\\maps\\usa.TAB"))
Dim lyr As MapInfo.Mapping.FeatureLayer = map.Layers("usa")
' Open the table from Oracle
Dim ti As TableInfoServer = New TableInfoServer("StateCapXY",_
"SRVR=tempest;UID=tn;PWD=tn", "Select * from usa_caps", _
MapInfo.Data.ServerToolkit.Oci)
Dim StateCapXY As Table = Connection.Catalog.OpenTable(ti)
' Add the Oracle columns to the USA table
Dim states As Table = Connection.Catalog.GetTable("usa")
states.AddColumns(Nothing, MapInfo.Data.BindType.Static, _
StateCapXY, "state", MapInfo.Data.Operator.Equal, "state")
'Create a ranged theme on the USA layer using a field
'from the Oracle table
Dim thm As MapInfo.Mapping.Thematics.RangedTheme = New _
MapInfo.Mapping.Thematics.RangedTheme(lyr, _
"pop_1990", "popusa", 4, _
MapInfo.Mapping.Thematics.DistributionMethod.EqualCount_
PerRange)
lyr.Modifiers.Insert(0, thm)
'Create a legend to appear on the map
Dim legend As MapInfo.Mapping.Legends.Legend = _
map.Legends.CreateLegend(New Size(5, 5))
legend.Border = True
Dim frame As MapInfo.Mapping.Legends.ThemeLegendFrame = _
MapInfo.Mapping.Legends.LegendFrameFactory.CreateTheme_
LegendFrame(_"Pop", "pop", thm)
legend.Frames.Append(frame)
frame.Title = "pop"
map.Adornments.Append(legend)
End Sub
MapXtreme v7.2
192
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
ビュー テーブル
ビューを使ってテーブルを関連付ける方法もあります。名前付きの Select ステートメントに基づ
いて 1 つまたは複数のテーブルから情報を取り出すことができます。Catalog では、任意のテーブ
ル定義に基づいてビューを作成できます。ビュー テーブルは、次のような特徴を持ちます。
•
•
データはコピーされません。
ビューにアクセスすると、実際にはベース テーブルが参照されます。
•
ビューとは、名前 (エイリアス) 付きの MapInfo SQL Select ステートメントです。
•
通常は結合クエリが使用されます (複合キーが形成される)。
•
•
ビューの構成内容は絶えず変化します。
データを集約してキャッシュするビューは例外です。データの変化を示すイベントによって再
計算がトリガされます。
シリアライズしてワークスペースに永続化できます。
•
詳細およびコード例については、開発者リファレンス ヘルプで MapInfo.Data.TableInfoView クラ
スを参照してください。
結果セット
ResultSet とビュー テーブルは、いずれも MapInfo SQL Select ステートメントを使って定義され
る点、および、名前 (エイリアス) が関連付けられるという点で似ています。しかし、ResultSet
は、その作成時に指定された where 句 (指定された場合) の評価に基づいてレコードの構成内容が
固定されます。ResultSet 内のデータに対するアクセスは、常に元のテーブルのデータに反映され
ます。ただし、取り出し元のデータを変更しても、元の where 句が再評価されて、ResultSet にレ
コードが追加されたり、ResultSet からレコードが削除されたりすることはありません。ResultSet
では一連のキーが内部的に管理されます。
一般に、ResultSet は軽量かつ一時的であるという特性を備えています。結果セットの特徴として
は、次のようなことが挙げられます。
•
•
データはコピーされません。
ResultSet にアクセスすると、実際にはベース テーブルが参照されます。
•
ResultSet は、キーを並べ替えたリスト、一連のフィールド定義、および名前から成ります。
•
ResultSet の構成内容は不変です。
•
データを集約してキャッシュする ResultSet は例外です。データの変化を示すイベントによっ
て再計算がトリガされます。
シリアライズすることはできますが、ワークスペースに永続化することはできません。
削除操作や圧縮操作に弱いという欠点があります。
•
•
詳細については、開発者リファレンス ヘルプで MapInfo.Data.TableInfoResultSet クラスを参照し
てください。
MapXtreme v7.2
193
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
ソース行
ソース行は、Table.AddColumns に関連するテーブル レコード間の一致を表します。一時フィールド
をテーブルに追加するときに、データ ソースの複数のレコードがまとめて集計され、追加先のテーブ
ル (バインド テーブルとも呼ばれます) の各レコードの値を計算します。MapInfo.Data.SourceRows ク
ラスは SourceRows のコレクションであり、集計されたレコードを、データ ソースから識別します。
SourceRows は、BindType プロパティが DynamicCopy (ソース データに対する変更が一時フィー
ルドに自動的に反映される) の場合にのみ存在します。
L
Table.AddColumns は、Server、View、Seamless、AdoNet、ResultSet、および Drilldown
のテーブルではサポートされていません。
また、「テーブルへの式フィールドの追加」も参照してください。
GeoDictionary
GeoDictionary は、マップ エンティティと情報の対応付けに関する情報が格納されています。
GeoDictionaries クラスは、GeoDictionary オブジェクトのコレクションです。
MapInfo.Data.GeoDictionary 名前空間は、GeoDictionary ファイルをプログラムで記述することに
より、データの自動バインドをサポートします。GeoDictionary ファイルには、テーブルに関する
情報が入っています (TAB ファイルのみ)。GeoDictionary を使用して、テーブルをどのアプリケー
シ ョ ン デ ー タ に バ イ ン ド す る か、自動的に判断します。GeoDictionary はファ イル ( 通常
GeoDict.DCT) に永続化され、GeoDictionary マネージャ ユーティリティ アプリケーションを使用
して保持されます (「第 24 章 : GeoDictionary マネージャの使用」を参照)。
GeoDictionary を使用する自動比較処理
Data.GeoDictionary 名前空間の MatchResolver.AutoMatch メソッドが自動比較処理を開始しま
す。こ の メ ソ ッ ド は AddColumns を呼び出しません。つまり、バインドは行いません。
BindColumn の以降の呼び出しでは、自動バインドまたは AutoMatchAndBind の直接呼び出しを実
行する必要があります。
自動比較処理中に、あいまいな状況に対処しなければならないことがあります。このような状況
には、以下のような場合があります:
•
ユーザ データで複数のソース フィールドが検出されている。
•
ソース フィールドに一致する複数のテーブル/レイヤが検出されている。
•
一致したテーブル/レイヤで複数の Geoset/ワークスペースが利用できる。
比較処理中 GeoDictionary と通信する MatchResolver は、こうした状況を解決に導きます。このク
ラスは一致アルゴリズムを提供します。基本クラスが、最初の一致、つまり一致率が一番高いも
のを選択します。このクラスはシールド クラスではありません。クライアント アプリケーション
は、このクラスから独自の派生クラスを作成して、その動作をオーバーライドします。
MapXtreme v7.2
194
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
テーブルをマップ作成可能にする
テーブルには、マップ作成可能 (GeometryColumn を含む) テーブルとマップ作成不可 (空間属性
デ ー タ な し) テ ー ブ ル が あ り ま す。マップ作成可能テーブルは、マップ内のレイヤとして
MapXtreme アプリケーションに追加できます。顧客データのようなマップ作成不可テーブルも、
GeometryColumn を作成 すると マップ作成可能にすることができます。これを行うために、
MapXtreme では空間スキーマが用意されています。
空間スキーマとは、テーブルの空間機能を拡張することができるサービスです。空間スキーマには
XY と PointRef の 2 種類があります。X 値および Y 値を表す属性フィールド (緯度と経度など) を持
つマップ作成不可テーブルでは SpatialSchemaXY が使用され、マップ作成可能テーブルのレコード
の参照に使用できる属性フィールドを持つテーブルでは SpatialSchemaPointRef が使用されます。
SpatialSchemaXY
SpatialSchemaXY は、テーブル内の各レコードの X 値と Y 値を使用してポイント オブジェクトを
構築し、それらを MI_Geometry という一時フィールドに格納します。この空間スキーマは、シー
ムレス、ビュー、および ResultSet を除く任意のデータ ソースのテーブルに適用できます。
GeometryColumn を持たせることにより、テーブルをマップ内のレイヤとして表示し、空間分析
に使用することができます。
SpatialSchemaXY は、次のような特徴を持ちます。
•
ジオメトリ フィールドは編集可能です。
•
ジオメトリを編集すると、X 値と Y 値が自動的に更新されます。
•
•
テーブル内の各ポイントにスタイルを定義できます。
空間情報は TAB ファイルとして保存し、他のテーブルと同じように開くことができます。
この空間スキーマは、従来のサーバの XY データに MapCatalog なしで使用できます (MapCatalog
を使用した場合、より多くの処理をサーバ側で実行できるため、RDBMS のパフォーマンスが向上
します。「MapInfo_MapCatalog」を参照してください)。
TableInfo.WriteToTab メソッドを使って TAB ファイルに明示的に出力しない限り、MI_Geometry
は一時フィールドになります。テーブルを開くとスキーマが自動的に生成されます。
VB の例:
Public Shared Sub MapInfo_Data_SpatialSchemaXY()
Dim ti As TableInfo = _
TableInfo.CreateFromFile("c:\data\customers.TAB")
' a non-mappable table
Dim xy As SpatialSchemaXY = New SpatialSchemaXY
xy.XColumn = "Xcoord"
xy.YColumn = "Ycoord"
xy.NullPoint = "0.0, 0.0"
' Any customer at 0,0 means we don't know their location.
xy.StyleType = StyleType.None
xy.CoordSys = _
Session.Current.CoordSysFactory.CreateLongLat(DatumID.WGS84)
ti.SpatialSchema = xy
MapXtreme v7.2
195
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
' Now set the spatial schema information before
' opening the table.
Dim table As Table = Session.Current.Catalog.OpenTable(ti)
End Sub
Public Shared Sub MapInfo_Data_TableInfoNative2(ByVal ti As _
TableInfoNative)
ti.WriteTabFile()
End Sub
SpatialSchemaPointRef
この空間スキーマは、テーブル データの値をマップ作成可能テーブル内の対応する値と比較する
ことによって、Point ジオメトリ オブジェクトを作成します。
たとえば、顧客テーブルに郵便番号付きの住所が格納されている場合、その顧客レコードを、郵
便番号参照テーブル内の空間ポイントに関連付けることができます。
SpatialSchemaPointRef では、実際には 2 つのテーブル (データの格納されているテーブルと結合
フィールド/オブジェクト フィールドが格納されているテーブル) が結合されます。この結合
フィールドには、マップ作成不可テーブル内のデータ フィールドと同じ値が格納されます (郵便番
号など)。SpatialSchemaPointRef を適用した結果のテーブルには、以前の非空間レコードに対す
る空間ジオメトリ フィールドが存在することになります。このジオメトリ フィールドは、次のよ
うな特徴を持ちます。
•
データ テーブルが、ジオメトリ テーブルの複数のレコードと一致する場合があります。その
場合、類似する行が MultiPoint ジオメトリに集約されます。
•
このフィールドに格納されるジオメトリは、他のテーブルから得られたジオメトリの中心点に
なります。
SpatialSchemaPointRef は、次のような特徴を持ちます。
•
一時ジオメトリ フィールドは読み取り専用です。
•
参照テーブル内の値に変更を加えると、データ テーブルのジオメトリ値が自動的に更新され
ます。
SpatialSchemaPointRef は、シームレス、ビュー、および ResultSet を除く任意のデータ ソー
スに適用できます。
テーブル内の各ポイントにスタイルを定義できます。
テーブル情報は TAB ファイルとして保存し、他のテーブルと同じように開くことができます。
•
•
•
詳細およびコード例については、開発者リファレンス ヘルプで MapInfo.Data.SpatialSchemaPointRef
クラスを参照してください。
VB の例:
Public Shared Sub MapInfo_Data_SpatialSchemaPointRef(ByVal _
map As _Map)
' a non-mappable table
Dim ti As TableInfo = _
TableInfo.CreateFromFile("c:\data\customers.TAB")
Dim pr As SpatialSchemaPointRef = New SpatialSchemaPointRef
MapXtreme v7.2
196
開発者ガイド
第 8 章 : データでの作業
テーブル メタデータ (TableInfo)
pr.CoordSys = map.GetDisplayCoordSys()
pr.StyleType = StyleType.None
pr.RefTable = "us_zips"
' the column in RefTable which will match the MatchColumn in my data
pr.RefColumn = "zipcode"
' a column in the Customer table
pr.MatchColumn = "zip"
pr.RefTableLocation = "c:\data\us_zips.tab"
' Now set the spatial schema information before opening the table.
ti.SpatialSchema = pr
Dim table As Table = Session.Current.Catalog.OpenTable(ti)
End Sub
MapXtreme v7.2
197
開発者ガイド
第 8 章 : データでの作業
MapInfo ADO.NET データ プロバイダ
MapInfo ADO.NET データ プロバイダ
MapXtreme は、ADO.NET を使用して、テーブルからレコード セットを返す SQL コマンドを発行
するメカニズムを備えています。MapInfo ADO.NET データ プロバイダは、このような方法で
.NET アプリケーションのデータにアクセスするメカニズムの 1 つです。Catalog に対して Feature
ク ラ スと SearchInfo メ ソ ッ ド を 使 用する方法もあります。詳細については、「Feature と
Feature コレクション」を参照してください。
以下の各セクションでは、MapInfo ADO.NET データ プロバイダを通してデータにアクセスするた
めの主要なインターフェイスとクラスについて説明します。
•
「MIConnection」
•
「MICommand」
•
「MIDataReader」
•
「MapInfo SQL」
MIConnection
MIConnection は、Catalog への接続を表します。接続は、SQL コマンドを実行し結果を取得するた
めの開始点を提供します。ほとんどの場合、データ プロバイダの接続で、ユーザは既存のテーブル
(スキーマ オブジェクト) に対して直ちにクエリなどのコマンドを実行できますが、MapInfo
ADO.NET データ プロバイダには、最初の段階ではテーブルが含まれていません。テーブルへのア
クセス時に、テーブルを開くか作成する必要があります。テーブルを開くときに、クエリ エンジン
で識別子を解決するときに使用するテーブルに、名前 (エイリアス) を関連付けることができます。
MapInfo データ プロバイダでは接続がプールされません。また、新しい接続の作成に必要とされ
る接続文字列はありません。
MapInfo.Engine.Session クラスが、Session.Current.Catalog プロパティを使用してアクセスする
Catalog を作成および初期化します。この Catalog への参照を MIConnection.Open メソッドが
Session.Current.Catalog プ ロ パ テ ィを使用して取得します。MIConnection.Close メソッドは
Catalog への内部参照を null に設定します。
VB の例:
MapXtreme v7.2
198
開発者ガイド
第 8 章 : データでの作業
MapInfo ADO.NET データ プロバイダ
Public Shared Sub MapInfo_Data_MIConnection()
Dim connection As MIConnection = New MIConnection
Dim command As MICommand = connection.CreateCommand()
command.CommandText = "Select * From States Where Pop > 1000000"
connection.Open()
Dim reader As MIDataReader = command.ExecuteReader()
Dim i As Integer, n As Integer = reader.FieldCount
For i = 0 To n - 1 Step i + 1
Console.Out.Write("{0}\t", reader.GetName(i))
Next
Console.Out.WriteLine()
While reader.Read()
For i = 0 To n - 1 Step i + 1
Dim o As Object = reader.GetValue(i)
If o Is DBNull.Value Then
Console.Write("null\t")
Else
Console.Write("{0}\t", o.ToString())
End If
Next
Console.Out.WriteLine()
End While
reader.Close()
command.Dispose()
connection.Close()
End Sub
MICommand
MICommand には、MapInfo データ プロバイダに対して SQL コマンドを実行するために必要なイ
ンターフェイスが用意されています。MICommand は、ExecuteReader メソッドでデータを取得
するために MIDataReader インスタンスを、ExecuteScrollableReader メソッドでデータを取得す
るために MIScrollableReader インスタンスを作成します。
サポートされているコマンド
MICommand コマンドによって解釈されるコマンドを以下に示します。
Select
SELECT < select_list >
FROM { < table_source > } [ ,...n ]
[ WHERE < search_condition > ]
[ GROUP BY expression [ ,...n ] ]
[ ORDER BY {expression | column_position [ ASC | DESC ] } [ ,...n ]]
< select_list > ::=
{
*
| { table_name | table_alias }.*
MapXtreme v7.2
199
開発者ガイド
第 8 章 : データでの作業
MapInfo ADO.NET データ プロバイダ
| { expression } [ [ AS ] column_alias ]
} [ ,...n ]
< table_source > ::=
table_name [ [ AS ] table_alias ]
Insert
INSERT [INTO] { table_name } [ ( column_list ) ]
{ VALUES ({expression | NULL}[, ...n]) | query_specification
Update
UPDATE { table_name }
SET {{ column_name } = { expression | NULL }} [, ...n]
[WHERE < search_condition > ]
Delete
DELETE [FROM] { table_name } [ WHERE < search_condition > ]
< search_condition > ::=
{ [ NOT ] < predicate > | ( < search_condition > ) }
[ { AND | OR } [ NOT ] { < predicate > |
( < search_condition > ) } [ ,...n ] ]
< predicate > ::=
{
expression [ { = | < > | != | > | >= | < | <= } expression ]
| string_expression [ NOT ] LIKE string_expression [ ESCAPE
'escape_character' ]
| expression [ NOT ] BETWEEN expression AND expression
| expression IS [ NOT ] NULL
}
expression
フィールド名、擬似フィールド、フィールド エイリアス、定数、関数のいずれか、または、演算
子 (複数可) で結ばれたフィールド名、フィールド エイリアス、定数、および関数の組み合わせ。
フィールド名および擬似フィールドの先頭には、テーブル名またはテーブル エイリアスに続いて
ドット (".") 文字が付きます。
group_by_expression
選択リストの中のフィールドへの参照です。選択リストの式、エイリアス、フィールドの位置を
示す数値 (1 を基準にしたもの)、または COLn (n はフィールドを表す数値) のいずれかとまったく
同じものになります。
order_by_expression
選択リストの中のフィールドへの参照です。選択リストの式、エイリアス、フィールドの位置を
示す数値 (1 を基準にしたもの)、または COLn (n はフィールドを表す数値) のいずれかとまったく
同じものになります。
使用されている位置や作成方法など、式の作成の詳細については、「Feature と Feature コレク
ション」を参照してください。
MapXtreme v7.2
200
開発者ガイド
第 8 章 : データでの作業
MapInfo ADO.NET データ プロバイダ
ExecuteFeatureCollectionexecutefeaturecollection
MICommand クラス内の ExecuteFeatureCollection メソッドは、MapInfo ADO.NET データ プロバ
イダと Feature オブジェクト モデルのブリッジです。このメソッドは、データ ソース接続に対し
てコマンド テキスト (SQL ステートメント) を実行し、IResultSetFeatureCollection を構築しま
す。Feature モデルについては、「Feature と Feature コレクション」を参照してください。
MIDataReader
MIDataReader では、SQL Select ステートメントを実行して返されたデータに対して、前方向の
み、かつ読み取り専用でアクセスできます。MIDataReader を作成するには、コンストラクタを直
接使用するのではなく MICommand オブジェクトの ExecuteReader メソッドを呼び出します。
MapInfo データ プロバイダを使用すると、1 つの接続で複数の MIDataReader インスタンスを使用
できます。ただし、アクセス対象の Table が Microsoft SQL Server データベースにある場合は、1
つの MIDataReader しか一度に開くことはできません。
IsClosed プロパティと RecordsAffected プロパティは、MIDataReader が閉じた後でなければ呼び
出せません。RecordsAffected プロパティについては、MIDataReader が存在していればアクセス
可能です。ただし、正確な値を取得するには、RecordsAffected の値を取得する前に必ず Close を
呼び出す必要があります。
MIDataReader を使い終わったら、Close メソッドを明示的に呼び出す必要があります。
IEnumerator インターフェイスまたは IFeatureEnumerator インターフェイスを使用して DataReader
にアクセスするとき、MoveNext() が false を返すと、Close() が自動的に呼び出されます。なお、
DataReader では 1 つの列挙子しか使用できません。
L
MIDataReader は、パフォーマンス上の理由から不必要なオブジェクトや不必要なデータの
コピーはできるだけ作成しないようにしています。その結果、GetValue などのメソッドへ
の複数の呼び出しが、同じオブジェクトへの参照を返すことがあります。GetValue などの
メソッドによって返された、オブジェクトの基本となる値を変更するときは、特に注意を
払う必要があります。
MIDataReader は、MapInfo データ プロバイダからの前方向ストリーム行の読み取りを可能にしま
す。このタイプのカーソルは、セットアップに伴うオーバーヘッドがほとんど発生しないため、
選択された一連の行にアクセスする目的では最も高いパフォーマンスを発揮します。
スクロール可能データ リーダー
MIScrollableReader は MIDataReader から派生し、前方向および逆方向の読み取りを行うことが
できます。MIScrollableReader で使用できるオプションには、次のものがあります。
•
ReadPrevious
•
Rewind
•
Unwind
•
ReadTop
MapXtreme v7.2
201
開発者ガイド
第 8 章 : データでの作業
Feature と Feature コレクション
•
ReadBottom
•
AtTop / AtBottom
L
MIScrollableReader を作成すると、MIDataReader を作成するよりも大きな負荷がかかりま
す。スクロールが可能であるという反面、セットアップに伴うオーバーヘッドが発生する
ほか、レコードの順序を追跡するために余分なリソースが必要となるため、最も負荷の大
きいカーソルと言えます。レコード セットをスクロールする必要がある場合以外は使用し
ないでください。
MapInfo SQL
MapInfo SQL 言語を使用すると、MapXtreme アプリケーションに強力な分析機能を追加できま
す。MapXtreme では、データ (特に 「MICommand」 オブジェクト) アクセス用の SQL 処理機能
を MapInfo ADO.NET データ プロバイダによってユーザに公開します 。式は、ラベル付け、主題
図、凡例、AddColumns、Feature 検索、および Selection 処理にも使用されます。
MapInfo SQL は、SQL-3 仕様に基づいて標準化されています。たとえば、次の点が挙げられます。
•
•
•
文字列定数は、一重引用符で囲みます。
識別子は、二重引用符で囲むことができます。
Select は、Selection と関係ありません。
95 MapInfo SQL 言語とコード例については、Visual Studio のヘルプシステムから直接表示できる
「MapInfo SQL リファレンス」を参照してください。
Feature と Feature コレクション
MapXtreme の Feature クラス オブジェクト モデルは、SQL ベース以外のアプローチでデータへ
のアクセスと操作を行います。このセクションでは、Feature クラスと IFeatureCollection イン
ターフェイスについて説明します。Feature での作業で最も重要なのは、クエリ定義オブジェクト
を使用して Feature を検索する能力です。
MapXtreme v7.2
202
開発者ガイド
第 8 章 : データでの作業
Feature と Feature コレクション
Feature
Feature は、ジオメトリ、スタイル、データ ソース、キー、および属性で記述されています。通
常、Feature はテーブル内の行です。Feature のジオメトリは、FeatureGeometry オブジェクトで
す。FeatureGeometries は、指定した領域 (MultiPolygon)、位置 (Points, MultiPoints)、および距離
(MultiCurves, LegacyArcs) を覆います。FeatureGeometry から派生する追加の Geometry クラスに
は、FeatureGeometryCollection と LegacyText があります (Rectangle、RoundedRectangle、およ
び Ellipse オブジェクトも FeatureGeometry から派生しますが、基本的に見た目をよくする目的で
使用されます)。
コンピュータ処理されたマップの主な用途の 1 つとして、Feature に関する情報を収集するという
ことがあります。MapXtreme では、スキーマを使って新規に作成する方法、選択ツールやメソッ
ドを使って選択する方法、条件に基づいて Catalog を検索する方法など、いずれの方法でもフィー
チャは FeatureCollections で返されます。
Load メソッドを使用すると、Load を実行できます。Feature に加えられた変更を基本となるテー
ブル (存在する場合) に反映させるには、Feature をテーブルに保存する必要があります。Feature
をテーブルに保存するには、Update メソッド、UpdateFeature、または InsertFeature を使用しま
す。Feature オブジェクトに対する編集は、保存前であれば DiscardEdits メソッドを使用してすべ
て破棄することができます。
Feature には、Feature の属性を記述するスキーマがあります。そのスキーマは、Columns プロパ
ティによって記述されます。
Table から Feature を取得
Table は Feature コレクションの種類の 1 つです。したがって、テーブル内の Feature は直接列挙
できます。以下に例を示します。
VB の例:
Dim ftr As Feature
For Each ftr In table
...
テーブルに対するデフォルトの列挙子は、次のコマンドで MIDataReader を内部的に使用します。
command.CommandText = "Select MI_Key, * From \"" + table.Alias + "\"";
テーブル内の Feature のサブセットを取得するには、Catalog.Search メソッドの 1 つを使用する
か、または MICommand.ExecuteFeatureCollection メソッドの 1 つを使用します。
Table 内の Feature を修正
テーブル内の Feature を修正するには、次のメソッドの 1 つを使用します。
•
Feature.Update
•
Table.UpdateFeature
•
Table.InsertFeature
MapXtreme v7.2
203
開発者ガイド
第 8 章 : データでの作業
Feature と Feature コレクション
Feature コレクション
Feature コレクション は、Feature オブジェクトのグループです。コレクション内のすべての
Feature は、同じ Schema (フィー ルド) を共有します。Feature コレクションは、そのメンバ
Feature のすべてのインスタンスのスキーマとなるスキーマを持っています。Feature コレクショ
ンによっては独自の Feature を持つものがあり、また他の Feature コレクションには Feature への
参照を保持するものがあります。
Feature の検索
Pitney Bowes Software のマッピング アプリケーションの最も共通性の高いタスクの 1 つに、特定
の条件を満たす Feature の検索があります。必要な Feature を取得したら、主題図など、より一層
の分析を実行できます。MapXtreme では、Feature の検索は、ツールの使用、Catalog 検索メソッ
ドの使用、または SQL および MapInfo ADO.NET データ プロバイダの使用など、いくつかの方法
で実行できます。
同じ対象 (この例ではニューヨーク州内の市) を検索する 2 つの方法を、次のコード例に示します。
// Using SQL
command.CommandText = "Select Obj From States Where state = 'NY';
FeatureGeometry nyGeom = command.ExecuteScalar() as FeatureGeometry;
command.CommandText =
"SELECT * FROM Cities WHERE Obj within @newyork";
command.Parameters.Add("@newyork", nyGeom);
MIDataReader reader = command.ExecuteReader();
// or… to get a FeatureCollection
IFeatureCollection fc = command.ExecuteFeatureCollection();
// Using Features
Feature fNY = catalog.SearchForFeature("States", _
SearchInfoFactory.SearchWhere("state='NY'"));
SearchInfo si = SearchInfoFactory.SearchWithinFeature(fNY, _
ContainsFilter.ContainsType.Centroid);
IDynamicFeatureCollection dfc = _
catalog.Search("Cities", si) as IDynamicFeatureCollection;
Console.Out.WriteLine( _
"There are {0} cities whose centroid is within NewYork." _
dfc.Count);
SQL 検索については、「MapInfo ADO.NET データ プロバイダ」でさらに詳しく説明します。以
降の各セクションでは、Catalog と SearchInfo を使用する検索を中心に説明します。
Catalog 検索メソッド
Catalog には、いくつかの検索メソッドがメンバとして含まれています。オーバーロードされた
Search メソッドを使用すると、1 つ以上のテーブルを検索できます。これらのメソッドに異なる
引数を指定すると、一意な検索を行うことができます。たとえば、基本的な Search(Table,
MapXtreme v7.2
204
開発者ガイド
第 8 章 : データでの作業
Feature と Feature コレクション
SearchInfo) は、指定されたテーブルを検索し、FeatureCollection を返します。
Search(ITableEnumerator, SearchInfo) メソッドは、複数のテーブルで検索を実行し、
MultiResultSetFeatureCollection を返します。
SearchForFeature メソッドは、検索結果から最初の Feature を返します。SearchReader メソッド
は、検索結果と共に MIDataReader カーソルを返します。
コード サンプル: SearchForFeature
次の例では、Catalog.SearchForFeature および Catalog.SearchWithinGeometry の使用方法について
示します。ここでは、uscty_1k テーブル内で、Florida にあるすべての都市を検索します。この例
は、テーブル "usa" および "uscty_1k" が開いており、1 つのマップがあることを前提としています。
VB の例:
Public Shared Sub MapInfo_Data_SearchInfo(ByVal catalog As Catalog)
Dim fFlorida As Feature = _
catalog.SearchForFeature("usa",MapInfo.Data._
SearchInfoFactory.SearchWhere_("State='FL'"))
Dim si As SearchInfo =
MapInfo.Data.SearchInfoFactory.SearchWithinGeomeTry(fFlorida._
Geometry,ContainsType.Centroid)
Dim fc As IResultSetFeatureCollection = _
MapInfo.Engine.Session.Current.Catalog.Search("uscty_1k",si)
' Set the map view to show search results
MapInfo.Engine.Session.Current.MapFactory(0).SetView(fc.Envelope)
' Set the view of the first map.
' Add results to selection.
MapInfo.Engine.Session.Current.Selections.DefaultSelection.Add(fc)
End Sub
SearchInfo と SearchInfoFactory
MapInfo.Data.SearchInfo クラスは、検索と検索結果に対して必要となる後処理で使用するクエリ
を定義しています。
SearchInfoFactory は SearchInfo オブジェクトを作成します。SearchInfoFactory には、検索場所
への空間的参照を使用する検索や、画面に描画されるジオメトリを使用する検索を可能にする検
索メソッドがいくつか含まれています。
SearchInfoFactory 検索メソッドを、次の表に示します。
MapXtreme v7.2
205
開発者ガイド
第 8 章 : データでの作業
Feature と Feature コレクション
SearchInfoFactory
メソッド
動作
SearchAll
すべての行を返します。
SearchNearest
指定した検索ポイントに一番近いテーブル ジオメトリの行を返し
ます。
SearchWhere
where 句で指定された行を返します。
SearchWithinDistance
テーブル ジオメトリが検索ポイント、長方形、またはジオメトリ
の距離内に含まれている行を返します。このメソッドでは、オブ
ジ ェ ク ト が 検 索 範 囲 の 内 に あ る か 外 に あ る か の 判 別 に、
Geometry.Distance メソッドが使用されます。以前の
SearchWithinDistance では、距離をバッファにしてそのバッファ
内を検索していたため、結果の正確性が低くなっていました。
SearchWithinFeature
テーブル ジオメトリが検索フィーチャのジオメトリに含まれてい
る行を返します。
SearchWithinGeometry
テーブル ジオメトリが検索ジオメトリに含まれている行を返し
ます。
SearchWithinRect
指定した長方形とテーブル ジオメトリが交差する行を返します。
SearchIntersectsFeature
テーブル ジオメトリと検索フィーチャのジオメトリが交差する行
を返します。
SearchIntersectsGeometry
テーブル ジオメトリと検索ジオメトリが交差する行を返します。
SearchWithinScreenRadius
画面上の円とテーブル ジオメトリが交差する行を返す SearchInfo
を作成します。
SearchWithinScreenRect
指定した画面上の長方形とテーブル ジオメトリが交差する行を返
します。
MapXtreme には、Search サンプル アプリケーションが同梱されてます。このアプリケーション
を実行すると、各検索についての理解を深めることができます。以下の図は、空間的な参照を使
用 す る SearchInfoFactory メ ソ ッ ド が表示される [Search] メニューです。Map の [Search] メ
ニューからは、描画された画面上のジオメトリ オブジェクト (円と長方形) に基づいて検索を実行
することができます。[QueryDefinition] メニューでは、SQL ステートメントに対して機能する、使
用されているフィルタが強調表示されます。このサンプルは、
..\MapInfo\MapXtreme\7.x.x\Samples\Desktop\Features\Search フォルダにあります。
MapXtreme v7.2
206
開発者ガイド
第 8 章 : データでの作業
Feature と Feature コレクション
コード サンプル
このセクションでは、SearchInfoFactory メソッドに関連するコード サンプルをいくつか示します。
SearchNearest
このコードは、SearchNearest メソッドを使用して Select Point ツールの動作をシミュレートする
方法を示しています。ここでは、マウスをクリックして最上位の項目を選択し、選択範囲に追加
しています。
VB の例:
Public Shared Sub MapInfo_Mapping_SearchInfoFactory(ByVal _
mapControl1 As MapControl)
' Get a point from mouse click.Hard coded value use in sample.
Dim pt As System.Drawing.Point = New System.Drawing.Point(100, 100)
' Assumes there is a MapControl with a map in it.
Dim map As Map = mapControl1.Map
Dim session As ISession = MapInfo.Engine.Session.Current
Dim si As SearchInfo = _
MapInfo.Mapping.SearchInfoFactory.SearchNearest(map, _
pt, 3) ' 3 pixel tolerance radius
si.QueryDefinition.Columns = Nothing
' fetch all columns instead of just default
' Customize to stop at topmost layer where something is found
CType(si.SearchResultProcessor, ClosestSearchResultProcessor)._
Options = ClosestSearchOptions.StopAtFirstMatch
' Puts results of search directly into default selection
' Searches all tables in map in order from top to bottom.
MapInfo.Engine.Session.Current.Catalog.Search(map._
Layers.GetTableEnumerator(), si, _
session.Selections.DefaultSelection, _
ResultSetCombineMode.Replace)
End Sub
MapXtreme v7.2
207
開発者ガイド
第 8 章 : データでの作業
Feature と Feature コレクション
SearchIntersectsFeature
VB の例:
Public Shared Sub _
MapInfo_Data_SearchInfoFactorySearchIntersectsGeomeTry(ByVal _
map As Map)
Dim ti As Table = _
MapInfo.Engine.Session.Current.Catalog.GetTable("usa")
Dim lParks As MapInfo.Mapping.FeatureLayer = _
CType(map.Layers("USA"), MapInfo.Mapping.FeatureLayer)
Dim g As MapInfo.Geometry.FeatureGeometry = New _
MapInfo.Geometry.Point(map.GetDisplayCoordSys(),-98,34)
Dim si As SearchInfo = _
MapInfo.Data.SearchInfoFactory.SearchIntersects_
Geometry(g,MapInfo.Data.IntersectType.Geometry)
Dim fc As IResultSetFeatureCollection = _
Session.Current.Catalog.Search("usa",si)
map.SetView (fc.Envelope)
End Sub
SearchWithinScreenRadius
このサンプルは、画面に描画された円を使用してフィーチャを検索する方法を示しています。
C# の例:
// find nearest city to center of map
private void menuItemSearchNearest_Click(object sender, System.EventArgs
e)
{
try
{
Cursor.Current = Cursors.WaitCursor;
// to compare to SearchWithinScreenRadius, we are
// calculating the search distance the same way it does
System.Drawing.Rectangle rect=mapControl1.Bounds;
System.Drawing.Point pt = new System.Drawing.Point(rect.Left,
rect.Top);
pt.X += rect.Width/2;
pt.Y += rect.Height/2;
DPoint dpt1 = new DPoint();
// convert center point to map coords (could use map.Center)
_map.DisplayTransform.FromDisplay(pt, out dpt1);
Distance d = MapInfo.Mapping.SearchInfoFactory.ScreenToMapDistance
(_map, 3);
SearchInfo si =MapInfo.Data.SearchInfoFactory.SearchNearest(dpt1,
_map.GetDisplayCoordSys(), d);
IResultSetFeatureCollection fc = _catalog.Search("uscty_1k", si);
MapInfo.Geometry.Point p = new
MapInfo.Geometry.Point(_map.GetDisplayCoordSys(), dpt1);
MapXtreme v7.2
208
開発者ガイド
第 8 章 : データでの作業
データの分析
FeatureGeometry buffer = p.Buffer(d.Value, d.Unit, 20,
DistanceType.Spherical);
ShowSearchGeometry(buffer);
SelectFeatureCollection(fc);
}
finally
{
Cursor.Current = Cursors.Default;
}
}
コード例: ポイントを含むフィーチャの検索方法
逆の種類の検索を実行して、特定のポイントを含むフィーチャを探すことが必要な場合もありま
す。たとえば、配送計画のために、顧客がどの地域に位置しているかを把握したい場合などです。
VB の例:
Dim g As MapInfo.Geometry.FeatureGeometry = New _
MapInfo.Data.SearchInfoFactory.SearchIntersectsGeometry(g, _
MapInfo.Data.IntersectType.Geometry)
Dim irfc As MapInfo.Data.IResultSetFeatureCollection = _
MapInfo.Engine.Session.Current.Catalog.Search("british_
columbia", si)
Me.MapControl1.Map.SetView(irfc.Envelope)
データの分析
Catalog 内のデータを分析することによって、その結果を事業目標の達成に役立てることができま
す。Catalog には、データを解析したり集計したりするための SQL プロセッサが備わっていま
す。その際の選択肢としては、次の 2 つがあります。
•
OGC オブジェクト ベースのクエリ インターフェイス
•
ADO.NET SQL ベースのインターフェイス
以下の図は、両者の関係を示したものです。
グループ 1 は、OGC のクエリ インターフェイスです。クエリを作成するには、これらのオブジェ
クトを使用します。このインターフェイスを使用すると、空間/非空間の条件を追加したり、列と
行をフィルタリングするためのクエリを作成したりできます。作成したクエリは、これらの Query
オブジェクトの検索メソッドを通じて、データ リーダーおよび結果セットを返します。オブジェ
クト指向のプログラミングには精通しているが、SQL 構文には自信がないという方は、これらの
オブジェクトを使用できます。「SearchInfo と SearchInfoFactory」を参照してください。
ADO.NET インターフェイス (グループ 2) は、定義済みの ADO.NET モデルを採用することで、
MapInfo SQL 言語を介したアクセスを可能にします。ADO.NET インターフェイスでは、Catalog
と の 対 話 に SQL 構 文 が 使 用 さ れ ま す。この場合、SQL ステートメントを作成して、それを
MapXtreme v7.2
209
開発者ガイド
第 8 章 : データでの作業
データの分析
MICommand オブジェクトに渡す必要があります。これらのオブジェクトでは、データ リーダー
または結果セットを返す Execute コマンドが使用されます。「MapInfo ADO.NET データ プロバ
イダ」を参照してください。
MapXtreme データ モデル
OGC オブジェクトまたは SQL クエリに対するレスポンスとしてデータ ソースをオーガナイズする
役割は、Catalog (グループ 3) がつかさどります。これは、OGC クエリベースのアプローチを使用
するか、ADO.NET コマンドベースのアプローチを使用するかに関係ありません。OGC オブジェク
トベースのクエリ API は、SQL を生成し、これを Catalog に渡して処理を委譲します。場合によっ
ては、より効率的な SQL を開発者が作成することもできますが、OGC オブジェクトは最適な SQL
を生成できるよう、熟慮を重ねて定義されており、開発者による対話方法が制限されています。
SQL 言語に慣れている方は、ADO.NET を使用した方法をお勧めします。ただし、SQL に不慣れな
方も、OGC オブジェクト ベースのクエリを使用することで同様の操作を実行できます。
MapInfo SQL 構文は、MapXtreme に付属の SQL リファレンスに記載されています。このリファ
レンスは、MapXtreme をインストールすると、Visual Studio からも参照できます。この SQL 言語
は、SQL3 をベースに設計され、空間分析を可能にする MapInfo の特殊な演算子が追加されていま
す。これらの演算子には、MI_ という接頭辞が付きます。
MapXtreme v7.2
210
開発者ガイド
第 8 章 : データでの作業
データの分析
Visual Studio に表示される MapInfo SQL Language Reference テーブルの内容
データ リーダー、MemTables、結果セット
データにアクセスするメソッドでは、データ リーダーまたは結果セットが返されます。データ
リーダーを使用することで、データに対してシーケンシャルにアクセスできます。データのコ
ピーは保存されません。データはデータ ソースから取り出されます (データ ソースがキャッシュ
されている場合を除く)。結果セットは、キーのコレクションです。これらのキーを使用すること
で、元のテーブルにアクセスでき、データのコピーは作成されません。
MemTable では、各種のソースから取得したデータを、1 つのテーブルに保存することができま
す。このタイプのテーブルでは、メモリ アレイと一時的なディスク ストレージを併用することに
よってデータが保存されます。データが追加されると、MemTable は、元のテーブルを指し示す
キーやポインタを保持するのではなく、データのコピーを作成します。マップの一時レイヤを保
存する場合や、処理で返された値 (ジオコード結果やルーティング結果) のコンテナとして使用す
ることができます。MemTable におけるアクセス性能とマップのレンダリング パフォーマンス
は、ネイティブのテーブルと匹敵します。
結果セットは、定義された一連の行にアクセスしたり、データ ソースから特定のデータを取得し
たりする必要がある場合の強力な手段となります。データ ソースが同時アクセスをサポートして
いれば、取り出し元のデータがセッション中に変更された可能性がある場合、この方法を用いる
ことで、結果を確認できます。MemTables はデータのコピーであるため、取得されたデータ行は
不変です。元のデータ ソースに対して行われた変更は反映されません。
MapXtreme v7.2
211
開発者ガイド
第 8 章 : データでの作業
データ アクセス パフォーマンスの強化
データ アクセス パフォーマンスの強化
パフォーマンスは、データにアクセスするあらゆるアプリケーションに共通した重要な要素で
す。アプリケーションの設計と開発の計画を立てる際は、次の点を考慮してください。
•
•
•
•
•
•
•
•
必要なデータだけをリクエストする (特に RDBMS からデータを取得する場合)。これにより、
接続を介してやり取りされるデータ量を抑えることができます。
Web アプリケーションの場合は、属性フィールド情報をワークスペース ファイルに配置しま
す。これによって、MapInfo Session の作成時に、必要なすべてのデータが事前に読み込まれ
ます。この例については、「主題図サンプルの概要」を参照してください。
データに序列を付ける必要がある場合以外、テーブルの並べ替えは行わない。テーブルを並べ
替えるには、テーブル全体を読み取る必要があるため、時間がかかります。フィールドがイン
デックス化されていない場合、さらに速度が低下します。
テーブルへのランダム アクセスが必要な場合は、必ずスクロール可能なリーダーを使用する。
インデックスが構築され、データ全体を読み込む必要がないため、アクセス速度も向上しま
す。不要なデータが読み取られることなく、目的のデータに直接アクセスできます。
Join や Search では一貫した座標系を使用する。アクセスのたびにジオメトリを変換する負荷
を排除できます。
Join / Filter / Sort / Aggregate の各操作では、インデックス付きフィールドを使用する。
実際にジオメトリの交差をチェックする前に CentroidWithin、ContainCentroid、および
EnvelopesIntersect を使用する。これらのテストはきわめて高速に実行されます。また、ほと
んどの場合、大量のジオメトリをわずかな手間で排除できます。
複数のクエリまたは更新操作を実行する場合 (ファイルベースのテーブルの場合は特に)、
BeginAccess/EndAccess を使用する。
•
Where 句で Area や Buffer を呼び出すことはできるだけ避ける (新しいカーソルが作成される
たびに実行する必要が生じてしまうため)。
•
Select ステートメントでビューや結果セットに含めるフィールドを定義するときに Area や Buffer
を呼び出すことはできるだけ避ける (上記と同様の理由による)。
•
中間的な結果や、キーを扱う操作には結果セットを使用する。結果セットはきわめて軽量であ
り、オリジナルのデータに直接的かつ迅速にアクセスできます。
MapXtreme v7.2
212
開発者ガイド
9
中核 MapXtreme クラスで
の作業
MapInfo.Engine 名前空間には、MapXtreme アプリケーションを実行する際に
必要となる機能に直接関連するインターフェイスとクラスが含まれています。
た と え ば、す べ て の MapXtreme ア プ リ ケーション操作の開始点となる
ISession インターフェイスがあります。この名前空間のクラスとしては、
Session と Selections、および SearchPath があります。この名前空間にはこ
れ以外に、Collections、Resources、および CustomProperties をサポートし
ているクラス、デリゲート、構造体、および列挙体が含まれます。
この章の構成
Š
Š
Š
Š
Š
Š
Š
セッション インターフェイス . . . . . . . . . . . . . . .
シリアライゼーションと永続化. . . . . . . . . . . . . . .
名前付きリソースが含まれるワークスペースを開いて保存する.
Selection ( 選択 ) クラス . . . . . . . . . . . . . . . . .
Selection のコード例 . . . . . . . . . . . . . . . . . . .
イベントの引数. . . . . . . . . . . . . . . . . . . . . .
例外. . . . . . . . . . . . . . . . . . . . . . . . . . .
214
217
219
220
222
224
224
第 9 章 : 中核 MapXtreme クラスでの作業
セッション インターフェイス
セッション インターフェイス
ISession インターフェイスは、すべての MapXtreme ベース アプリケーション操作の開始点となりま
す。このオブジェクトは、MapXtreme アプリケーションに必要なリソースの初期化を管理します。
ISession のインスタンスは、DataAccess エンジン、MapFactory、CoordSysFactory など、デスク
トップまたは Web アプリケーションの動作に必要な MapXtreme オブジェクト モデルのコンポー
ネントを保持します。ISession インターフェイスを実装するクラスを次の図に示します。
ASP.NET アプリケーションの場合は、クライアント リクエストごとにそれぞれの ISession インス
タンスがあります。このインスタンスは呼び出し元のコンテキストに存在し、クライアント リク
エストが有効である間ずっと使用できます。
シングル スレッドのデスクトップ アプリケーションの場合は、インスタンスが 1 つしか存在しま
せん。マルチ スレッドのデスクトップ アプリケーションの場合は、1 つのスレッドごとにインス
タンスが 1 つ存在します。
MapInfo.Engine.Session クラスは、ISession オブジェクトへのアクセスを可能にします。現在の
ISession インスタンスを取得するには、MapInfo.Engine.Session.Current プロパティを使用します。
MapXtreme v7.2
214
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
セッション インターフェイス
セッションの管理
セッション管理については、アプリケーションの設計時に理解しておくことが重要です。デスク
トップ アプリケーションのセッション管理は単純ですが (ユーザごとに独自の ISession インスタ
ンスがあります)、Web アプリケーションの場合は、何人のユーザがそのアプリケーションを使用
するかわからないという点を考慮する必要があります。各ユーザの状態を処理する方法を把握し
て、正しいユーザに正しい情報とビジュアル表示を返すことが必要になります。
MapXtreme では、状態を適切に管理するのに役立つ Web アプリケーション作成用テンプレートが
用意されています。詳細については、「第 6 章 : 状態管理について」を参照してください。状態の
管理、プール、パフォーマンス、およびデータ アクセスに関する重要な判断が提示され、コーディ
ング開始前のプロジェクト設計段階において十分な情報に基づく判断を行うのに役立ちます。
Session.Dispose メソッドの使用方法
MapInfo.Engine.Session クラスには、オーバーロードされた 2 つの Dispose メソッドがありま
す。どちらを使用するかは、作成するアプリケーションの種類によって異なります。
Session.Dispose()
Session.Dispose() は、Session.Current プロパティからアクセスできる ISession のインスタンスを破
棄します。このメソッドは、マルチスレッド デスクトップ アプリケーションでのみ使用します。
Web アプリケーションおよびシングルスレッド デスクトップ アプリケーションでは使用しないでく
ださい。Web アプリケーションの場合、ISession は WebSessionActivator によって管理されます。
シングルスレッド デスクトップ アプリケーションの場合、Dispose は、アプリケーションの
シャットダウン時または MapXtreme を使用する AppDomain がアンロードされるときに自動的に
呼び出されます。
Session.Dispose(HttpSessionState)
Session.Dispose(HttpSessionState) は、デフォルトのセッション状態設定を使用する Web アプリ
ケーションで使用します。デフォルト設定では、ISession はメモリ内に格納されます。これ以外
の構成では ISession はメモリ内に格納されないので、このメソッドを呼び出さないでください。
状態設定は、アプリケーション プロジェクトの Web.config ファイル内に以下のキーで示されます。
<add key="MapInfo.Engine.Session.State" value="HttpSessionState" />
<sessionState mode="InProc" />
1 番目の設定はアプリケーション固有の設定であり、MapInfo.Engine.ISession インスタンスの状
態 を 保 存 お よ び 復 元 す る た め の メ カ ニ ズ ム を 制 御 し ま す。こ の イ ン ス タ ン ス に は、
MapInfo.Engine.Session.Current プロパティからアクセスできます。HttpSessionState 設定は、
セッションが ASP.NET セッション状態を通して保存および復元されることを示します。この状態
は、現在の HttpContext によって公開され、HttpSessionState という型で表されます。
2 番目の設定は ASP.NET 設定で、HttpSessionState の保存および復元の方法を制御します。
InProc は、ASP.NET セッションの状態がメモリ内に格納され、ASP.NET ISession インスタンス
ごとに固有になることを示しています。これはデフォルトの設定です。
MapXtreme v7.2
215
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
セッション インターフェイス
これらの設定を使用すると、ASP.NET セッションごとに 1 つの ISession インスタンスが生成さ
れ、その ASP.NET セッションの有効期間の間、HttpSessionState に格納されます。セッションが
タイムアウトになったり終了したりしたときに ISession インスタンスが適切に破棄されるように
するには、Global.asax ソース コード ファイルで Session_End メソッドに次のステートメントを
追加する必要があります。
VB の例:
MapInfo.Engine.Session.Dispose(this.Session);
Protected Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
MapInfo.Engine.Session.Dispose(this.Session);
End Sub
この呼び出しを行うことで、ISession インスタンスが適切に破棄され、メモリがクリアされます。
ISessionEventHandler
MapXtreme には、MapXtreme の機能を拡張するカスタム DLL を読み込むための
MapInfo.Engine.ISessionEventHandler インターフェイスが用意されています。このインターフェイ
スを使用して、拡張可能なデータ プロバイダ、永続化プロバイダ、デフォルトのワークスペースで
使用するスタイルなど、アプリケーションに必要な任意の拡張 DLL を自動的に読み込むことができ
ます。MapXtreme は、起動時にこれらのアセンブリを初期化し、必要な手順を実行します。
たとえば、MapXtreme には SpatiaLite サンプル インプリメントが用意されています。これは、コ
ンパイルされると、SpatiaLite データ プロバイダをサポートし、MapXtreme セッションの初期化
時にこのデータ プロバイダを読み込むためのコードを含んだ、アセンブリを生成します。
SessionEventHandler アセンブリが起動時に初期化されるようにするには、\Common
Files\MapInfo\MapXtreme\7.x.x\SessionEventHandlers フォルダに格納しておく必要があります。
実際には、このフォルダ内で .SessionEventHandler.DLL というファイル接尾辞を持つアセンブリ
が読み込まれます。
ISessionEventHandler インターフェイスには、アプリケーションで必要な任意の拡張コードを読
み込み、追加の初期化機能を提供するために呼び出すことができる、2 つのメソッドがあります。
void BeforeWorkspaceLoad(ISession session)
このメソッドは、デフォルトのワークスペースが読み込まれる前に呼び出されます。このメソッ
ドを使用して、拡張可能なデータ プロバイダ、edp コールバック、edp 永続化プロバイダ、名前
付き接続を設定したり、スタイルを読み込んだり作成したり、デフォルトのワークスペースで使
用される可能性のあるテーブルやデータベース接続などを開いたりできます。
void AfterWorkspaceLoad(ISession session)
このメソッドは、デフォルトのワークスペース (app.config または web.config で指定) が読み込ま
れた後で呼び出されます。このメソッドは、アプリケーションで必要となる最終的なセッション
の初期化を行うのに便利です。
MapXtreme v7.2
216
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
シリアライゼーションと永続化
MapXtreme では、アセンブリ内に ISessionEventHandler インターフェイスをインプリメントする
クラスを検出すると、そのクラスのインスタンスを構築し、それを内部のコレクションに追加し
ます。新しい MapXtreme Session インスタンスが作成されると (デスクトップ アプリケーション
に対しては 1 回、Web アプリケーションの場合は複数セッションが可能)、初期化されるセッショ
ンのインスタンスについてすべてのセッション ハンドラが呼び出されます。
複数の SessionEvent ハンドラが読み込まれる可能性があり、それらの呼び出し順序は不定である
ため、ハンドラを記述する場合には、セッションに何が既に含まれているか (マップ、テーブルな
ど) について仮定することは避けてください。
この機能の使用には注意が必要です。コンピュータ上で作成されたすべての MapXtreme セッショ
ンが、これらのセッション イベント ハンドラを読み込みます。ダイアログ ウィンドウや他のユー
ザ インターフェイスを表示するハンドラを追加すると、これらのダイアログがサーバ上で表示さ
れるため、Web アプリケーションがハングする可能性があります。
シリアライゼーションと永続化
Map は ISession オブジェクトにバインドされます。ある ISession オブジェクトから Map オブ
ジェクトを取り出して別の ISession オブジェクトで使用することはできません。ISession オブ
ジェクト全体を複製する場合は、シリアライゼーションと永続化という 2 つの方法のうちいずれ
かを行います。
シリアライゼーション
シリアライゼーションとは、オブジェクトをデータ ストリームに変換してサーバ上に保持するプ
ロセスです。このプロセスは、MapXtreme の Web アプリケーションでオブジェクトを維持するう
えで不可欠です。オブジェクトが維持されなかった場合、サーバは Web リクエストごとにオブ
ジェクト (マップなど) を再作成する必要があります。オブジェクトに対するリクエストがある
と、オブジェクトはデシリアライズされ (データ ストリームから復元すること)、変更が加えられ
ます。このアルゴリズムではオブジェクトのコピーは作成されません (シリアライゼーションの他
のアルゴリズムでは作成される)。したがって、デシリアライズされるオブジェクトは 1 回しか作
成されません。
シリアライゼーションは、Microsoft.NET Framework に組み込まれているフォーマッタによって実
行されます。Framework には、バイナリ オブジェクト用の BinaryFormatter、SOAP オブジェクト
用の SOAPFormatter の 2 つの異なるフォーマッタがあります (SOAP は、Web などの分散化され
た環境で構造化情報を交換するための簡易プロトコルです)。SOAPFormatter は BinaryFormatter
より処理が高速です。SOAPFormatter は一部の基本データ型 (Int、Byte、Decimal など) に使用さ
れ、BinaryFormatter は オ ブ ジ ェ ク トの複合体に対して呼び出されます。SOAPFormatter と
BinaryFormatter の詳細については、Microsoft MSDN のドキュメントを参照してください。
オブジェクトをこれらのうちいずれかのフォーマッタに渡すには、GetObjectData() メソッドを使
用します。オブジェクトをデシリアライズする (ストリームからオブジェクトを復元する) には、
SetObjectData() メソッドを使用します。
MapXtreme v7.2
217
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
シリアライゼーションと永続化
ISerializable インターフェイスをサポートしているオブジェクトの復元、デシリアライズは自動的に
行われます。ASP.NET フレームワークは、HttpApplication.BeginRequest の後に context.Session[] 配
列を自動的にデシリアライズします。HttpApplication.BeginRequest ハンドラで
MapInfo.Engine.Session が設定され、オブジェクトは MapInfo.Engine.Session にデシリアライズさ
れます。
Session オブジェクトのシリアライズ/デシリアライズ
Session オブジェクトのシリアライズとデシリアライズの例を次に示します。
// Create a MemoryStream to serialize into
MemoryStream stream = new MemoryStream();
// Serialize the MapXtreme Session object
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, Session.Current);
stream.Position = 0;
// Make changes to the Session object to make sure the
// deserialization works correctly
...
// Recreate the MapXtreme Session object from the stream
// Note: this will replace the current MapXtreme Session object with the
// contents of the stream
formatter = new BinaryFormatter();
formatter.Deserialize(stream);
formatter.Serialize メソッドに渡す stream パラメータは、System.IO.Stream から派生した任意の
ストリームです。
このシリアライゼーション機能は、MapXtreme の状態管理機能で使用するために設計されまし
た。この情報をディスクに保持し、将来 (製品の別のバージョンで) 再読み込みしようとしても、
その動作は保証されません。
シリアライゼーションおよび状態管理の詳細については、「StateManager のインプリメント」を
参照してください。
永続化
MapXtreme における永続化とは、アプリケーション オブジェクトを XML 形式の MapInfo ワーク
スペース (.MWS) ファイルに格納するプロセスです。ISession オブジェクトの永続化と永続化解除
は、WorkSpacePersistence クラスと WorkSpaceLoader クラスを使用して行います。これら 2 つ
のクラスは、.MWS ファイルの書き出しおよび読み込みを行います。アプリケーションはワークス
ペース (Session のコピー) を書き出し、ワークスペース ファイルの内容を新しい Session オブ
ジェクトに適用することによって、Session の複製を作成できます。
VB の例:
Public Shared Sub MapInfo_Persistence_WorkSpacePersistenceSave()
' Create a named connection point to "D:\data\version2"
Dim info As NamedConnectionInfo = New NamedConnectionInfo("file",_
ConnectionMethod.FilePath, "D:\data\version2")
Session.Current.Catalog.NamedConnections.Add("MyDataFolder",_
MapXtreme v7.2
218
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
名前付きリソースが含まれるワークスペースを開いて保存する
info)
' Create a map
Dim map As Map =
Session.Current.MapFactory.CreateEmptyMap("MyMap",_
"MyMapAlias", New Size(400, 400))
Dim table As Table =
Session.Current.Catalog.OpenTable("MyDataFolder", _
"myTableAlias", "Seamless\Lines - NYALBA\SeamCapDist.TAB")
map.Layers.Add(New FeatureLayer(table))
'
Save the Session to a workspace file
Dim w As WorkSpacePersistence = New WorkSpacePersistence
w.Save("c:\workspace\mySeamless.mws")
End Sub
(WorkSpaceLoader クラスを使用して) ワークスペースを追加するプロセスは、累積的であること
に注意してください。Mapxtreme Session に新しいワークスペース ファイルの内容のみが含まれ
るようにするには、先に ISession オブジェクトに対して Reload() メソッドを呼び出す必要があり
ます。このメソッドはセッションの状態をクリアし、アプリケーションの Web.config ファイルで
事前定義されているワークスペースを再読み込みします。
永続化および XML スキーマの詳細については、「付録 C : MapInfo ワークスペースについて」を
参照してください。
名前付きリソースが含まれるワークスペースを開いて保存する
MapXtreme では、マップ定義、マップ レイヤ、データ ソース定義、およびスタイルの名前付きリ
ソースがサポートされています。以前の MapXtreme では、名前付き接続がサポートされていまし
た。名前付きリソースは、別の場所にあるリソースへの参照で、名前によって識別されます。
名前付きリソースが含まれる MapInfo ワークスペース形式のファイル (.MWS) は、MapInfo.Engine
名前空間の INamedResourceResolver インターフェイスを使用して、プログラムによって開いた
り保存したりすることができます。このインターフェイスには、MWS ファイルの解析中に名前付
きリソースを解決し、また MWS ファイルの保存時に名前付きリソースの xml ノードを生成する
関数が含まれています。
MWS を開く: ResolveResource()
名前付きリソースが含まれる MWS を開いて解析するときに、ResolveResource() 関数は名前付き
リソースの名前と種類に対応する xmlNode を返します。
たとえば、MWS の名前付きスタイルを解析するときは、NamedResourceType.Style と XmlNode
を文字列形式で渡します。ResourceResolver がパラメータを解析し、名前付きリソースのノード
を XmlNode 形式で返します。
MapXtreme v7.2
219
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
Selection ( 選択 ) クラス
MWS を保存する: GetResourceName()
MWS ファイルの保存時に、メモリ内で解析されるファイルには、展開されたすべてのノードが含
ま れ ま す。名 前 付 き リ ソ ー ス を MWS ファイルに書き戻すには、Table、Map、Style、および
IMapLayer のオブジェクトを受け取るすべての種類の GetResourceName をインプリメントする
必要があります。これらの関数は、対応するオブジェクトの NamedResource ノードを返します。
保存した MWS ファイルには、名前付きリソースのエントリが含まれます。
MapXtreme へのインプリメントの登録
INamedResourceResolver のインプリメントを MapXtreme に登録するには、
Session.Current.NamedResourceResolver プロパティを設定する必要があります。これにより、
MapXtreme は MWS ファイルを開くときと保存するときにインプリメント オブジェクトを参照す
るようになります。
設定の指定
特定の種類の名前付きリソースのみを保存し、それ以外はそのままの状態にしておきたい場合
は、WorkspacePersistence オブジェクトで利用できる PreferenceForNamedResource プロパティ
を使用して設定を指定する必要があります。デフォルトでは、このプロパティは
NameResourcePreference.All に設定されています。たとえば、このプロパティを
NameResourcePreference.PreferNamedTables などの値に設定すると、テーブルのみが名前付き
リソースとして保存されるようになります。複数のリソースを名前付きリソースとして保存する
場合は、OR 演算子を使用します。たとえば、次のように設定します。
NameResourcePreference.PreferNamedTables |
NameResourcePreference.PreferNamedLayers
詳細については、『開発者リファレンス』で INamedResourceResolver の説明を参照してくだ
さい。
Selection (選択) クラス
Selection は、フィーチャのリストを格納する IResultSetFeatureCollection オブジェクトのコレク
ションです。フィーチャは、テーブル内の行のサブセットです。たとえば、所有地の境界、番
地、携帯電話のアンテナの場所、川などの地物がフィーチャとなります。これらは通常、Map に
表示すると特別に強調表示されて描画されます。Selection 内には、指定したテーブルの
IResultSetFeatureCollection は 1 つしか存在できません。
ISession には、複数の Selection を含めることができます。Selections コレクションは、アプリ
ケーションのすべての Selection を格納しています。DefaultSelection という名前のセレクション
が必ず少なくとも 1 つあります。
Selection には名前と一意のエイリアスが必要です。デフォルトでは、Selection はマップ選択ツー
ルで変更します。各ツールは、任意の Selection を使用するように設定できます。
MapXtreme v7.2
220
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
Selection ( 選択 ) クラス
MapXtreme 内のセレクションはコピーではなく、Selection 内で指定されたテーブルの
IResultSetFeatureCollection への参照です。作業中のテーブルを閉じた後 Selection を変更しよう
とすると、IResultSetFeatureCollection が無効となり例外が発生します。
フィーチャは、ツールまたは検索メソッドを使用して選択します。Windows フォーム アプリケー
ションの作成で使用できる選択ツールについては、「第 7 章 : デスクトップ アプリケーション、
コントロール、 ダイアログ、ツール」を参照してください。選択用の Web コントロールと選択
ツールの詳細については、「第 5 章 : Web アプリケーション、コントロール、 およびツール」を
参照してください。
フィーチャは、IResultSetFeatureCollection コレクションを返す MapInfo.Data.Catalog クラスの検
索メソッドでも選択できます。検索で Selection オブジェクトを渡して、Selection の作成や変更に
使用することができます。
フィーチャは、Data.MICommand クラスの ExecuteFeatureCollection メソッドを使用して選択で
きます。この場合、MapInfo データ プロバイダに対して SQL コマンドを実行します。
フィーチャ、テーブル、Catalog、および MICommand の詳細については、「第 8 章 : データでの
作業」を参照してください。
Selection プロパティの使用方法
Selection クラスのプロパティは、(必須の) 名前とエイリアスの設定、Selection が可視または編集
可能かどうかの設定、Selection のスタイルの取得に使用します。Selection が選択されていること
または編集可能であることを強調表示で示すかどうかは、それぞれ Visible プロパティと Editable
プロパティを使用して指定されます。
Editable プロパティが true に設定されている場合は、作業中のテーブルも編集可能であることが
必要です。
Style プロパティは Selection のスタイルを示し、Selection の複合スタイルへの参照を返します。
Style プロパティを変更すると、Selection オブジェクトに変更が通知されます。変更内容は、次
回、Selection オブジェクトを描画するときに反映されます。スタイルについては、「第 15 章 :
マップのスタイル設定」を参照してください。
Selection の強調表示とエクスポート
Selections は、マップ上では一般に特殊な強調表示で描画され、周囲の選択されていないフィー
チャと区別されます。強調表示は、Mapping.FeatureViewer.DrawSelections プロパティで制御しま
す。このプロパティを true にすると、選択レイヤが可視レイヤにある場合は、その選択は強調表
示で描画されます。
同様に、MapExport.ExportSelection プロパティは、エクスポートされたイメージに選択を描画す
るかどうかを制御します。
MapXtreme v7.2
221
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
Selection のコード例
SelectionChangedEvent
この選択が変更されたことを伝える通知を受け取るには、SelectionChangedEvent にデリゲート
メソッドをアタッチします。たとえば、レコードが追加されると、SelectionChangedEvent が発生
します。
Selection クラスと Selections クラスの ISerializable インターフェイス
ISerializable インターフェイスは Selection クラスと Selections クラスでインプリメントされてい
ます。Selections オブジェクトをシリアライズまたはデシリアライズする方法を示すコード例を次
に示します。
// Create a MemoryStream to serialize into
MemoryStream stream = new MemoryStream();
// Serialize the Selections object
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, Session.Current.Selections);
stream.Position = 0;
// Make changes to the Session's Selections object to make sure the
// deserialization works correctly.
...
// Recreate the Selections object from the stream.
// Note: this replaces the current Session's Selections object with
// the contents of the stream
formatter = new BinaryFormatter();
formatter.Deserialize(stream);
Selection のコード例
一般的な選択操作のコード例を以下に示します。これ以外にも、『MapXtreme 開発者リファレン
ス』の多くのトピックにコード例が含まれています。
別のフィーチャ内のフィーチャの選択
MapXtreme を使用した一般的な検索手法として、別のフィーチャ内のフィーチャの検索がありま
す。このような検索は、特定の郵便番号境界内のすべての顧客、特定区域内の工事中の高速道路
などを検索する場合に行います。例を次に示します。パラメータ f は MapInfo.Data.Feature です。
VB の例:
Dim si As MapInfo.Data.SearchInfo = _
MapInfo.Data.SearchInfoFactory.SearchWithinFeature(f, _
MapInfo.Data.ContainsType.Centroid)
Dim irfc As MapInfo.Data.IResultSetFeatureCollection = _
MapInfo.Engine.Session.Current.Catalog.Search("USCty_8k", si)
MapXtreme v7.2
222
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
Selection のコード例
MapInfo.Engine.Session.Current.Selections.DefaultSelection.Clear()
MapInfo.Engine.Session.Current.Selections.DefaultSelection.Add(irfc)
irfc.Close()
テーブル内の選択範囲を調べる
次のコード例は、テーブル内の Selection の数を取得する方法を示します。
VB の例:
Public Shared Sub MapInfo_Engine_Selection2()
Dim session As ISession = MapInfo.Engine.Session.Current
Dim tableUsa As Table = session.Catalog("usa")
' Get fc for selection on usa.
Dim fc As IResultSetFeatureCollection = _
session.Selections.DefaultSelection(tableUsa)
Dim nCount As Integer = 0
If Not fc Is Nothing Then
nCount = fc.Count
End If
End Sub
Selection の処理は、MapInfo SQL クエリおよび ADO.NET データ プロバイダを使用して行うこと
もできます。「第 8 章 : データでの作業」を参照してください。
テーブルのすべてのフィールドの取得
次の例は、Selection からすべてのフィールドを返す方法を示します。
VB の例:
Dim Connection As MIConnection = New MIConnection
Connection.Open()
Dim lyr As FeatureLayer = MapControl1.Map.Layers("usa")
Dim ti As MapInfo.Data.Table = _
MapInfo.Engine.Session.Current.Catalog.GetTable("usa")
Dim si As MapInfo.Data.SearchInfo = _
MapInfo.Data.SearchInfoFactory.SearchAll()
si.QueryDefinition.SetColumns("*")
Dim irfc As MapInfo.Data.IResultSetFeatureCollection = _
MapInfo.Engine.Session.Current.Catalog.Search(ti.Alias, si)
Dim l As MapInfo.Data.Feature
For Each l In irfc
Dim column As MapInfo.Data.Column
For Each column In l.Columns
MessageBox.Show(column.ToString())
Next
Next
MapXtreme v7.2
223
開発者ガイド
第 9 章 : 中核 MapXtreme クラスでの作業
イベントの引数
Selection に合わせたマップ ビューの変更
次の例は、Selection 内のすべてのフィーチャが表示されるようにズームを変更する方法を示し
ます。
VB の例:
Me.MapControl1.Map.Bounds = _
MapInfo.Engine.Session.Current.Selections.DefaultSelection.Envelope.Bound
s
イベントの引数
MapInfo.Engine 名前空間には、イベント用のデータを提供する各種のイベント引数クラスが含ま
れます。詳細については、オンライン ヘルプを参照してください。イベント引数クラスには、次
のものがあります。
•
•
•
•
CollectionCancelableEventArgs - キャンセルできるコレクション イベントのデータを提供し
ます。
CollectionEventArgs - コレクション イベントのデータを提供します。
NodeSelectionChangedEventArgs - ノードの選択が変更されたときに、これらのイベントの引数
を発生させます。
SelectionChangedEventArgs - 他のオブジェクトは、デリゲートをこのイベントにアタッチし
て、選択が変更されたことを通知します。
例外
Engine 名前空間には、さまざまな例外クラスが含まれます。詳細については、オンライン ヘルプ
を参照してください。例外クラスには、次のものがあります。
•
•
•
ResourceNotFoundException - リクエストされたオブジェクトが Resource テーブル内に見つ
からなかった場合に、この例外がスローされます。
ResourceTypeMismatchException - Resource から読み込んだオブジェクトが予想された型と
異なっていた場合に、この例外がスローされます。
TimeoutException - プールされた ISession が使用できるようになるのを待機している間に Current
タイムアウトが発生すると、この例外がスローされます。
MapXtreme v7.2
224
開発者ガイド
10
式の作成
式は、マッピング アプリケーションで具体的にどのような情報を表示し、分
析するかを表すために、MapXtreme 全体を通して使用されます。この章で
は、データのアクセス、主題図の作成、マップへのラベル付けなど、さまざま
な用途における式の作成について説明します。
この章の構成
Š
Š
Š
Š
Š
式の概要. . . . . .
式の作成. . . . . .
where 句 – ブール式
式内の関数. . . . .
式の例. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
226
226
227
227
228
第 10 章 : 式の作成
式の概要
式の概要
式は、データの記述と書式設定に使用するステートメントです。たとえば、日本語で式の意味を
記述すると、「50,000 ドルを超える収入の中央値」や「人口に占める女性の割合」のようになり
ます。
式は、フィールド名、定数 (具体的なデータ値)、およびフィールドや定数に作用する関数と演算子
を 使 用 し て 構 成 し ま す。演 算 子 と 関 数は MapInfo SQL 言語で定義されています。これは、
MapXtreme、および MapInfo .NET がサポートするその他の製品を発展させるために開発されたも
のです。詳細については、Visual Studio のヘルプ ビューアから「MapInfo SQL リファレンス」を
参照してください。
式を使用して、データを最大限に活用してください。式では、次の操作を行うことができます。
•
•
•
•
興味のあるデータのフィールドと行だけを表示。
既存のフィールドの内容に基づいて新しい値を計算することにより、新しいフィールドを派生
させる。
テーブル全体ではなく、部分合計で作業を行うためにデータを集計。
2 つ以上のテーブルを、1 つの結果テーブルに結合。
使用するデータ セットの多くには、ユーザのプロジェクトで必要とするものよりも多くのオブ
ジェクトや情報が含まれています。多くの場合、完全なデータ製品のサブセットで作業するほう
が簡単です。たとえば、国勢調査の報告書を使用して特定の郡の犯罪統計を追跡する場合は、州
全体の構成調査報告書は必要ありません。この場合、その郡の国勢調査だけを抽出する式を使用
します。
式は、MapXtreme 全体を通して、次の分野で使用されます。
•
SQL ステートメント (select、insert、update、delete、group by、order by)
•
引数に式を取る SQL 関数 (たとえば、MI_Area() のジオメトリ引数は、Geometry オブジェク
トを返す式)
•
フィールドの追加 (MapInfo.Data.Table.AddColumn は、式に基づいて一時フィールドを作成)
•
フィーチャの検索 (SearchInfo と SearchInfoFactory)
•
主題図 (FeatureStyleModifier)
•
ラベル (LabelModifier)
•
InfoTips (FeatureLayer、MapTools)
•
Expression ダイアログ
式の作成
最も単純な式は、"2" (数値式) や "Friday" (テキスト例) など、1 つの定数で構成されます。
また、次に示すように、1 つのフィールドで構成されるものもあります。
POP_2000
STATE
MapXtreme v7.2
226
開発者ガイド
第 10 章 : 式の作成
where 句 – ブール式
たとえば、1 つのステートメントで複数のフィールドを要求する場合、これらのフィールドはまと
めて式リストと呼ばれます。
Select colA, colB, colC from Table1, Table2
Select colA/2, ColB/ColC from Table1
また、データに対して数学演算を実行する式を記述できます。
たとえば、RENT + UTILITIES は、2 つのフィールドを加算する式です。SQL ステートメントでこ
の式を使用すると、合計費用が月額 800 ドル未満のアパートをすべて見つけることができます。
where 句 – ブール式
ブール式は、true または false のいずれかの値になる検索条件です。たとえば、次の式
2 < 5
は、結果が true になるのでブール式です。
より小さいことを示す記号 (<) などの比較演算子を含む式は、すべてブール式です。演算子
AND、OR、および NOT はブール演算子です。ブール式は、比較式、条件式、および関係式とも
呼ばれます。
POP_2000
POP_2000
PROVINCE
County =
> 500000
<= POP_1990
<> 'Ontario'
'Columbia' AND VALUE >= 250000
MapInfo SQL でサポートされる演算子は、Visual Studio の統合ヘルプの「MapInfo SQL リファレン
ス」(ダイナミック ヘルプ ペインで「MapInfo SQL リファレンス」を検索) で定義されています。
ブール式は、SQL ステートメントの「where 句」で使用されます。where 句は、返される行 (true
になる行) を制御する式です。
たとえば、このステートメントでは、WHERE の後にブール式が記述されています。France との
境界に該当する Europe テーブル内のオブジェクトだけが、true となって返されます。
"SELECT * FROM Europe WHERE MI_Geometry within @France";
式内の関数
MapXtreme の関数を使用すると、特定の条件を満たすデータを抽出する複雑な式を作成できま
す。たとえば、MapInfo SQL は、文字列、日付、および数値に作用する多くの一般的なデータ
ベース関数をサポートしています。MapXtreme 7.1 からは、DateTime 関数および Time 関数もサ
ポートしています。
MapXtreme v7.2
227
開発者ガイド
第 10 章 : 式の作成
式の例
MapInfo SQL で最も強力なのは、マッピング データの空間的な性質を利用する関数です。これら
の地理的関数を使用して、新しいジオメトリの作成、領域や長さの計測、空間情報の取得、ジオ
メトリ間の空間的な関係の検証などを行います。サポートされる関数は、「MapInfo SQL リファ
レンス」で定義されています。
たとえば、学区などの境界テーブルで領域を見たいときに、式で関数を使用します。MI_Area() 関
数を使用して、テーブル内の各レコードの領域を返します。
さらに、式で関数を使用する例を、以下の「式の例」のセクションに示します。
DateTime 型および Time 型の式
MapXtreme で DateTime 型および Time 型の式を使用するときは、以下の点の注意してください。
•
•
•
DateTime 型フィールドまたは Time 型フィールドを式内で単独で使用すると、現在のロケール
に基づいて書式設定されます。
式内に DateTime 型フィールドまたは Time 型フィールドがある場合、フィールドの文字列値
は TimeToNumber または DateToNumber + スペース + TimetoNumber になります。
Time 型または DateTime 型に対する演算子計算はサポートされていません。Date 型に数値を
加えることはできますが、Time 型や DateTime 型に数値を加えることはできません。
式の例
以下に、MapXtreme の各領域での式の使用例を示します。
SQL ステートメントの例
この例では、Germany 内にあり、人口が 100 万を超えるすべてのレコードを Eurcity_1K テーブル
から選択します。
Select * from Eurcity_1K WHERE (MI_Geometry MI_Within @Germany) AND
Tot_Pop > 1000000
次の例では、テーブル内の Time および Date 型フィールドに基づいて選択が実行されます。この
例では、"CrimeActivity" テーブルから、午前 12 時から午前 6 時までの間に発生した犯罪に関する
レコードがすべて選択されます。
SELECT * FROM CrimeActivity WHERE CrimeTime BETWEEN '12:00:00 AM' AND
'6:00:00 AM'
この式に含まれている CrimeTime は、犯罪が発生した時間が格納されている Time 型フィールド
です。
次の例では、1970 年 12 月 31 日より前に生まれた従業員の名前が "Employee" テーブルから選択
されます。
SELECT Names FROM Employee WHERE BirthDay < '12/31/1970 12:00:00 AM'
この式に含まれている BirthDay は、従業員の生年月日が格納されている Date 型フィールドです。
MapXtreme v7.2
228
開発者ガイド
第 10 章 : 式の作成
式の例
MapInfo SQL 関数の例
次の例では、MapInfo SQL 関数を使用してバッファ内のフィーチャを検索しています。
Obj CentroidWithin MI_Buffer(Obj, 5, 'km', 'Spherical', 24)
この式では、地理的オブジェクト用に予約された 'Obj' と呼ばれる MapInfo SQL の特殊キーワード
を使用しています。このキーワードは、座標系や境界など、オブジェクトのジオメトリを記述し
ます。このキーワードは、旧バージョンの MapX および MapInfo Professional と互換性がありま
す。これは、フィールド名 MI_Geometry に相当します。
km と Spherical が一重引用符で囲まれていることに注意してください。MapInfo SQL では、解析
ロジックが識別子を正確に解析できない場合にのみ、文字列リテラルを一重引用符で囲み、
フィールド名、テーブル名、エイリアスなどの識別子を二重引用符で囲む必要があります。名前
の中にスペースや他の特殊文字が含まれる識別子がこれに該当します。
バッファに含まれないフィーチャを検索する場合、式は次のようになります。
NOT Obj CentroidWithin MI_Buffer(Obj, 5, 'km', 'Spherical', 24)
フィールドを追加する例
AddColumns メソッドを使用して一時 (計算) フィールドをテーブルに追加するとき、指定した
フィールドには、フィールドの値の計算方法を定義する式が含まれます。フィールドを追加する
テーブルの 1 つのレコードに対して複数のソース レコードが対応付けられることが予想される場
合は、その式に集計関数を含めることができます。
以下の例では、人口密度を表現する式 "Pop_1990 / MI_Area(Obj, 'sq mi', 'Spherical')" を使用してい
ます。式の前には、新しいフィールド名が付記されています。PopDensity1990 と PopDensity2000
がフィールド名です。
VB の例:
Public Shared Sub MapInfo_Data_TableAddColumns(ByVal miTable _
As Table)
Dim NewCols As Columns = New Columns
NewCols.Add(New Column("PopDensity1990", "Pop_1990 / _
MI_Area(Obj, 'sq mi', 'Spherical')"))
NewCols.Add(New Column("PopDensity2000", "Pop_2000 / _
MI_Area(Obj, 'sq mi', 'Spherical')"))
miTable.AddColumns(NewCols)
End Sub
フィールドの追加の詳細については、「テーブルへの式フィールドの追加」を参照してください。
フィーチャ検索の例
次の例では、実行すると FL を含む各行について値 1 を返すブール式 SearchWhere("State='FL'")
を使用します。
VB の例:
Public Shared Sub MapInfo_Data_SearchInfo(ByVal catalog As Catalog)
Dim fFlorida As Feature = catalog.SearchForFeature("usa", _
MapXtreme v7.2
229
開発者ガイド
第 10 章 : 式の作成
式の例
MapInfo.Data.SearchInfoFactory.SearchWhere("State='FL'"))
Dim si As SearchInfo = _
MapInfo.Data.SearchInfoFactory.SearchWithinGeometry(fFlorida._
Geometry, ContainsType.Centroid)
Dim fc As IResultSetFeatureCollection = _
MapInfo.Engine.Session.Current.Catalog.Search("uscty_1k", si)
' Set the map view to show search results
MapInfo.Engine.Session.Current.MapFactory(0).SetView(fc.Envelope)
' Set the view of the first map.
' Add results to selection.
MapInfo.Engine.Session.Current.Selections.DefaultSelection.Add(fc)
End Sub
Feature クラスおよび検索メソッドの詳細については、「Feature と Feature コレクション」を参
照してください。
主題図の式の例
円グラフ主題図は、主題図の式の数値によって決まる円グラフを描画するオブジェクト主題図で
す。主題図に関する式は、"Pop_Native"、"Pop_Asian"、および "Pop_Other" の 3 つのフィールド
で構成されいます。
VB の例:
Public Shared Sub MapInfo_Mapping_Thematics_PieTheme(ByVal _
map As Map)
' Load a map based on one table
map.Load(New MapTableLoader("world.tab"))
Dim lyr As FeatureLayer = CType(map.Layers("world"), FeatureLayer)
' Create a new pie theme
Dim pieTheme As MapInfo.Mapping.Thematics.PieTheme = New _
MapInfo.Mapping.Thematics.PieTheme(map, lyr.Table, "Pop_Native", _
"Pop_Asian", "Pop_Other")
' Create an object theme layer based on that pie theme
Dim thmLayer As ObjectThemeLayer = New ObjectThemeLayer("World _
Pop Growth Rate", Nothing, pieTheme)
'Add object theme to the map's layer collection.
map.Layers.Add(thmLayer)
End Sub
主題図の詳細については、「第 14 章 : 主題図と凡例の使用」を参照してください。
Date および Time を使用するラベルの式の例
式は、ラベル修飾子のプロパティであり、このラベル修飾子はラベル作成で使用するプロパティの
デフォルト値の変更に使用されます。以下のコード例の式は、ラベルを Date/Time: <日付と時刻>
の形式で表示するように指定しています。
MapXtreme v7.2
230
開発者ガイド
第 10 章 : 式の作成
式の例
VB の例:
Public Shared Sub MapInfo_Mapping_OverrideLabelModifier(ByVal _
modifier As OverrideLabelModifier)
modifier.Name = "'Date/Time: ' + DateTimeToString( dateTimeColumn,
'm/d/yyyy hh:mm tt')"
End Sub
ラベル付けの詳細については、「Labels」を参照してください。
InfoTips 式の例
InfoTips は、ツールを Feature 上に置いたときに表示されるテキスト項目です。ラベルに対するの
と同様の方法で式を使用して、InfoTips 用のテキストを生成することができます。静的なヘルパ関
数 MapTool.SetInfoTipExpression を使用して、InfoTip を設定します。この関数は InfoTip ハッシュ
テーブルを作成し、ハッシュテーブルにレイヤ エントリが存在しない場合には追加します。各
ツールは、InfoTips を有効または無効にするよう設定できます。
次の例では 2 行のテキスト ラベルが生成され、オブジェクト上にカーソルが置かれたときに、
テーブル エイリアスと、オブジェクトの中心点の X 座標または Y 座標が表示されます。
VB の例:
Public Shared Sub MapInfo_Mapping_HowDoICreateExprForInfoTip(ByVal
mapControl1 As MapControl)
MapTool.SetInfoTipExpression(mapControl1.Tools.MapToolProperties,_
CType(mapControl1.Map.Layers(0), FeatureLayer), "@TableAlias + _
char(13) + _ 'Centroid X:' + MI_CentroidX(obj) + ' Y:' + _
MI_CentroidY(obj)")
End Sub
InfoTip の詳細については、「レイヤの管理」を参照してください。
MapXtreme v7.2
231
開発者ガイド
DBMS のデータへのアク
セス
MapXtreme には空間サーバへのアクセス機能があります。これは、Microsoft
SQL Server や Oracle Spatial などのデータベースで実行されている MapInfo
SpatialWare などの空間サーバに保存されているライブ データに接続できる強
力な機能です。空間サーバとは、データの一元管理を実現すると共にセキュリ
ティ保護のために、企業内のエンタープライズ データベースでマップ データ
をホストするサーバです。空間サーバには SpatialWare などがあり、企業の空
間データを処理できるように、高度なクエリ処理機能のほか、高いパフォーマ
ンスを備えています。
この章の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
リモートの空間データへのアクセス. . . . . . . . . . . . . 233
.TAB ファイルを使用するリモート テーブル アクセス . . . . 233
.TAB ファイルを使用しないリモート テーブル アクセス . . . 233
DBMS データと X/Y フィールドとのマッピング . . . . . . . 234
Oracle データへのアクセス . . . . . . . . . . . . . . . . 234
MS SQL Server データへのアクセス . . . . . . . . . . . . 238
DBMS 接続文字列の形式 . . . . . . . . . . . . . . . . . 241
サーバ テーブル クエリでのマップ作成可能テーブルの定義 . . 243
属性データへのアクセス. . . . . . . . . . . . . . . . . . 245
パフォーマンスに関する問題. . . . . . . . . . . . . . . . 246
キャッシュの設定. . . . . . . . . . . . . . . . . . . . . 246
MapInfo_MapCatalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248
MapInfo_MapCatalog への行の追加 . . . . . . . . . . . . 251
レコードごとのスタイル. . . . . . . . . . . . . . . . . . 256
トラブルシューティング. . . . . . . . . . . . . . . . . . 257
11
第 11 章 : DBMS のデータへのアクセス
リモートの空間データへのアクセス
リモートの空間データへのアクセス
MapXtreme では、他の DBMS サーバのデータにアクセスできます。対応しているサーバは以下の
とおりです。
•
Microsoft Access 2007 および Excel 2007
•
Microsoft Access 2003
•
Oracle 11G (11.1.0.6.0 および 11.1.0.7.0)
•
Oracle 10G、10GR2
•
Microsoft SQL Server 2012 (および SQL Native Client 11)
•
Microsoft SQL Server 2008 (および SQL Native Client 10)
•
MapInfo SpatialWare® 4.9 および 4.9.2 for Microsoft SQL Server 2005
•
MapInfo SpatialWare® 4.9.2 for Microsoft SQL Server 2008 32 ビットおよび 64 ビット エディ
ション
MapInfo.Data 名前空間の TableInfoServer クラスを使用して、DBMS のデータからテーブルを追加
できます。
以降のセクションでは、空間データを追加する方法について詳しく説明します。
.TAB ファイルを使用するリモート テーブル アクセス
MapXtreme で開発したアプリケーションでは、DBMS のデータにライブでアクセスすることも、
MapInfo Professional のリンク テーブルとして開くこともできます。しかし、リンク テーブルは
読み取り専用となるため、アプリケーションが更新することはできません。データは実際にはリ
モート データベースに存在しており、ローカルのリンク データベースを変更しても、リモート
データベースのデータは変更されません。
リ モ ー ト デ ー タ に ア ク セ ス す る には、.TAB ファイルを作成する方法があります。MapInfo
Professional で .TAB ファイルを作成するには、[ファイル] メニューの [DBMS テーブルを開く] を
選択します。
.TAB ファイルはテキスト ファイルです。このため、テキスト エディタでも作成できます。作成し
た .TAB ファイルは、MapInfo の他の .TAB ファイルと同じように、Catalog オブジェクトを使用す
るかワークスペース マネージャを使用することによってプログラムから操作できます。
.TAB ファイルを使用しないリモート テーブル アクセス
アプリケーションでは、.TAB ファイルを使用せずにリモート データにアクセスすることもできま
す。以下のコード サンプルに、その方法を示します。
VB の例:
Public Shared Sub MapInfo_Data_TableInfoServer(ByVal connection As _
MIConnection)
MapXtreme v7.2
233
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
DBMS データと X/Y フィールドとのマッピング
' Note: Do not specify any columns.These are determined
' dynamically from the query
Dim ti As TableInfoServer = New TableInfoServer("Provinces")
ti.ConnectString = "SRVR=ontario;UID=mapx;PWD=mapx"
ti.Query = "Select * From Provinces"
ti.Toolkit = ServerToolkit.Oci
ti.CacheSettings.CacheType = CacheOption.Off ' On is the default
Dim tbl As Table = connection.Catalog.OpenTable(ti)
End Sub
DBMS データと X/Y フィールドとのマッピング
X 座標と Y 座標を格納している DBMS テーブルのデータにアクセスできます。これを行うには、
MapInfo_MapCatalog を 作 成 し、DBMS テーブルを SpatialType 4.0 として登録して、2 つの
フィールドを座標フィールドとして指定します。このフィールドは、テーブルのインデックスで
ある必要があります。次に ODBC 経由で DBMS に接続し、クエリ内で、これらの新しいフィール
ドを "Obj" または "MI_Geometry" として指定します。
Oracle データへのアクセス
MapXtreme アプリケーションから Oracle データベースに接続するには、Oracle OCI 接続クライ
アントをインストールしていて適切な権限があることが必要です。詳細については、Oracle のマ
ニュアルを参照してください。
ジオメトリ変換
MapXtreme のオブジェクトから Oracle Spatial (SDO_GEOMETRY) への変換が行われた場合の、
両者の対応関係を以下の表に示します。
MapInfo オブジェクト
Oracle の変換先
NULL ジオメトリ
NULL
Point
1 POINT
MultiCurve (IsLegacyLine = true の 場 2 1 つの線ストリングを持つ LINESTRING ジオメトリ
合)
Polygon
3 1 つのポリゴンを持つ POLYGON ジオメトリ
FeatureGeometryCollection
4 異種要素コレクションである Collection ジオメトリ
MapXtreme v7.2
234
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
Oracle データへのアクセス
MapInfo オブジェクト
Oracle の変換先
MultiPoint
5 MULTIPOINT
MultiCurve
6 複数の線ストリングを持つ MULTILINESTRING ジオ
メトリ
MultiPolygon
7 複数のポリゴンを持つ MULTIPOLYGON ジオメトリ
Ellipse
NULL
LegacyArc
NULL
Rectangle
NULL
LegacyText
NULL
RoundedRectangle
NULL
PieTheme、BarTheme
NULL
Oracle (GTYPES) から MapInfo 空間オブジェクトへの変換が行われた場合の、両者の対応関係を
以下の表に示します。
MapInfo のオブジェクト
Oracle GTYPES
0 *UNKNOWN_GEOMETRY (Spatial はこのジオメトリを無視)
1 1 つの ポイントを持つ POINT ジオメトリ
Point
2 1 つの線ストリングを持つ LINESTRING ジオメトリ
MultiCurve
3 1 つのポリゴンを持つ POLYGON ジオメトリ
MultiPolygon
4 *異種要素コレクションである Collection ジオメトリ
FeatureGeometryCollection
5 複数のポイントを持つ MULTIPOLYGON ジオメトリ
MultiPoint
6 複数の線ストリングを持つ MULTILINESTRING ジオメトリ
MultiCurve
7 複数のポリゴンを持つ MULTIPOLYGON ジオメトリ (複数の外 MultiPolygon
部境界)
*MapInfo オブジェクト形式との間で変換を行うと、データの一部が失われる場合があります。こ
れらの型は、可能な場合、既に NULL でなければ 1 ポイントの SDO_POINTTYPE 値として解釈
されます。これらは、順序付き配列の先頭の要素を占めるようになり、これが NULL ジオメトリ
として解釈される可能性があります。
MapXtreme v7.2
235
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
Oracle データへのアクセス
Oracle での Z 値と M 値のサポート
MapXtreme では、Z 値と M 値を含めた Oracle GTYPE の読み取りおよび書き込みをサポートして
います。Z 値と M 値が存在するかどうか、およびそれらの順序は、
USER_SDO_GEOM_METADATA 内の DIM_INFO 配列によって決定されます。MapXtreme では、
以下の次元名を確認します (大文字と小文字は区別しません)。
•
Z 次元 : "Z"、"Elevation"、" Depth"、"Z Dimension"
•
M 次元 : "M"、"Measure"、"M Dimension"
M 値または Z 値を含むテーブルは、存在する次元のデータを含む FeatureGeometry オブジェクト
を返します。Oracle テーブルに対して挿入または更新された FeatureGeometry インスタンスに
は、Oracle テーブルでサポートするよう定義されている新しいジオメトリの 4 つの各次元 (XYZM)
が保持されます。Oracle テーブルでサポートされていない次元を含むジオメトリについては、挿
入/更新操作でそれらの次元の値が無視されます。Oracle テーブルでサポートされている次元を含
んでいないジオメトリについては、挿入/更新操作で、存在しない次元に対して NULL 値が使用さ
れます。たとえば、次元 x、y、m が定義されたテーブルに、Z 値または M 値を含まないジオメト
リを挿入すると、テーブルに格納される M 値は NULL となります。
これらの挿入/更新操作が成功するかどうかは、明示的なフィールド制約や、
SDO_GEOM_METADATA システム テーブルで指定された次元の範囲に対する値の検証など、
サーバ側での追加の検証にも依存する場合があります。
SDO_GEOMETRY Arc および Circle の変換
円および円弧は MultiCurve に解決することができます。このとき、360 度の円が 25 セグメントに
変換されます。
変換できない Oracle オブジェクトの表示
MapXtreme アプリケーションが変換できない Oracle Spatial オブジェクトは、デフォルト スタイ
ル (黒い星印) の Point オブジェクトとなり、SDO_Spatial ポイントの位置 (座標配列の先頭の
SDO_Spatial ポイント) に配置されます。これにより、変換できないオブジェクトも、そのオブ
ジェクトが属する地理エリアに正しく表示されるようになります。変換できないオブジェクトの
例には、ユーザ定義オブジェクトの GType 0、4、5、または認識できない GType、EType、解釈を
含む無効な SDO_geometry があります。後者は SDO_VALIDATE_GEOMETRY() を使用すると失
敗します。
MapXtreme v7.2
236
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
Oracle データへのアクセス
中心点のサポート
MapXtreme アプリケーションは、SDO_POINT をポリゴンの中心点の値として使用します。この
中心点フィーチャは、ラベルの配置に用いられるほか、オブジェクトの選択ツールにも影響を与
えます。Oracle の SDO_GEOMETRY.SDO_POINT_TYPE フィールドは、NULL でない場合、ポ
イントがリージョン内にあれば、フィーチャの中心点であると解釈されます。ポイントがリー
ジョンの外にある場合は、通常の方法で中心点が計算されます。
L
現在、MapXtreme にはリージョン フィーチャの中心点を設定するためのメソッドやツール
がありませんが、保存されている中心点を読み込んで使用することは可能です。
Oracle 空間参照系 (SRID) のサポート
Oracle の SDO_GEOMETRY フィールドは、空間参照系と共に定義することができます。これを
行うには、USER_SDO_GEOM_METADATA に Oracle SRID を与え、保存されている
SDO_GEOMETRY 値内にこの SRID を割り当てます。割り当てた SRID を持つ Oracle Spatial
フィールドがテーブルに含まれる場合、MapXtreme アプリケーションは、そのテーブルのデータ
を ク エ リ し て、正 し く 解 釈 で き ま す。デ ー タ の 解 釈 お よ び 更 新 に 現 在 使 用 さ れ て い る
MapInfo_MapCatalog 内 の Coordsys は SRID であるため、データの SRID と同じ MapInfo
Professional CoordSys 文字列が MapInfo_MapCatalog に定義されている必要があります。
Spatial フィールドが SRID 値を含まない (値が NULL である) 場合、MapXtreme アプリケーション
は、MapCatalog に定義されている MapInfo Professional Coordsys を使用してデータを解釈するこ
ともできます。
緯度/経度座標系 (世界測地系データ) を使用しているテーブルを Oracle Spatial に読み込む場合、
すべてのジオメトリ座標の経度が -180 ~ 180 の範囲内にあり、かつ緯度が -90 ~ 90 の範囲内に
あることを必ず確認します。この範囲を超える測地データ座標は Oracle Spatial ではサポートされ
ず、問 題 が 発 生 す る 可 能 性 が あ り ます。Oracle Spatial にデータを読み込む前に、MapInfo
Professional でデータを検査します。また、テーブルの読み込み後に Oracle Spatial の
SDO_GEOM.VALIDATE_LAYER() 関数を使用してテーブルを検査することも可能です。
OCI 接続ダイアログ
MapInfo.Data.DBMSConnectionCollection クラスは、ConnectionFailedEvent イベント ハンドラを
サブスクライブすることで ConnectionFailed イベントをサポートします。このイベントが発生す
ると、OCILoginDlg が表示され、ユーザはログイン情報を変更して Oracle データベースへの接続
をもう 1 回試みることができます。このハンドラは MapXtreme OCI ツールキットに固有です。こ
のイベントは、MapInfo.Windows.Dialogs 名前空間の LoadMapWizard クラスからも使用すること
ができます。
MapXtreme v7.2
237
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MS SQL Server データへのアクセス
MS SQL Server データへのアクセス
MapXtreme では、Microsoft SQL Server 2005、SQL Server 2008、SQL Server 2012 に格納された
データにアクセスできます。以下の情報は、SQL Server 2008 に適用されます。
SQL Server 2008 のサポート
MapXtreme では、Microsoft SQL Server 2008 からのデータの読み取り、および Microsoft SQL
Server 2008 へのデータの書き込みをサポートしています。これには、空間データ型 GEOMETRY
および GEOGRAPHY が含まれ、両方の空間形式に対して M 値と Z 値がサポートされます。
MapXtreme で SQL Server 2008 のデータにアクセスするには、SQL Server Native Client 10 が必
要です。これにより、データは、MapXtreme でサポートする他のリモート データベース管理シス
テム1のデータと同じように扱われます。MapInfo.Data.TableInfoServer クラスを使用して、リモー
ト テーブルに対する接続文字列および SQL ステートメントを定義できます。MapXtreme は、内
部的に ODBC を使用して、リモート データベースにアクセスします。
SQL Server 2008 の各種のオブジェクトが MapXtreme でどのように扱われるかを次の表に示し
ます。
SQL Server 2008 Spatial の
GEOGRAPHY または GEOMETRY
MapXtreme の FeatureGeometry
SQL Server 2008 Spatial の
GEOGRAPHY/GEOMETRY
FeatureGeometry
Point
Point
LineString
MultiCurve
Polygon
MultiPolygon
MultiPoint
MultiPoint
MultiLineString
MultiCurve
MultiPolygon
MultiPolygon
GeometryCollection
FeatureGeometryCollection
Point、MultiPoint だけを含む
GeometryCollection
MultiPoint
LineString、MultiLineString だけを含む
GeometryCollection
MultiCurve
1.
ユニバーサル データ形式の一覧については、「インストール要件 (30 ページ)」を参照してくだ
さい 。
MapXtreme v7.2
238
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MS SQL Server データへのアクセス
SQL Server 2008 Spatial の
GEOGRAPHY または GEOMETRY
MapXtreme の FeatureGeometry
Polygon、MultiPolygon だけを含む
GeometryCollection
MultiPolygon
空の GEOMETRY/GEOGRAPHY
(Point empty など)
NULL
MapXtreme の FeatureGeometry が SQL Server 2008 にどのように書き戻されるかを次の表に示し
ます。
SQL Server 2008 Spatial の
GEOGRAPHY または GEOMETRY
MapXtreme の FeatureGeometry
Point
Point
MultiPoint
MultiPoint
1 つの Point だけを含む MultiPoint
Point
MultiCurve
MultiLineString
2 つの Point で構成される 1 つの Curve だ LineString
けを含む MultiCurve
MultiPolygon
MultiPolygon
FeatureGeometryCollection
GeometryCollection *
Rectangle
NULL
RoundedRectangle
NULL
Ellipse
NULL
LegacyArc
NULL
LegacyText
NULL
*
MapXtreme v7.2
この GeometryCollection には、MultiPoint、MultiLineString、MultiPolygon のいずれかまた
は全部が含まれる場合があります。
239
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MS SQL Server データへのアクセス
SQL Server 2008 では、日付と時刻の情報のために新しい型が提供されています。日付と時刻の型が
MapXtreme の日付と時刻の型にどのようにマッピングされるかを次の表に示します。MapXtreme で
は、バージョン 6.8 以降、Time および DateTime のサポートが 導入されました。
SQL Server
MapXtreme
Date
Date
Time
Time
DateTime
DateTime
SmallDateTime
DateTime
DateTime2
DateTime
DateTimeOffset
未サポート
MapXtreme で内容を認識できるようにするため、SQL Server 2008 の空間テーブルは
MapInfo_MapCatalog に登録する必要があります。
MapCatalog には、SQL Server 2008 のテーブルを表すために 4 つの新しい SpatialColumn 値が追
加されています。
17.x : M 値と Z 値を含まない GEOMETRY 用
18.x : M 値と Z 値を含まない GEOGRAPHY 用
20.x : M 値と Z 値を含む GEOMETRY 用
21.x : M 値と Z 値を含む GEOGRAPHY 用
MapInfo Professional または EasyLoader を使用してデータをアップロードできます。または、
MapInfo Professional を使用して既存のデータをマップ作成可能にすることで、MapCatalog にエ
ントリが作成されます。MapCatalog の詳細については、「MapInfo_MapCatalog」を参照してく
ださい。
MapXtreme では、MapInfo Professional (テーブル バージョン 900、950、1000) および EasyLoader
で作成された SQL Server 2008 のテーブルをサポートしています。
MapXtreme v7.2
240
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
DBMS 接続文字列の形式
DBMS 接続文字列の形式
ODBC 接続文字列の形式
ODBC 接続文字列は複数の句で構成され、句どうしがセミコロン (;) で区切られています。各句は
「キー=値」の形式を持ちます。重要なキーは以下のとおりです。
キーワード
DLG=
説明
接続ダイアログ ボックスの表示を制御する数値:
0 - 接続ダイアログを表示しません。
1 - 接続ダイアログを表示します。
2 - 必要な場合だけ接続ダイアログを表示します (一部の必須情報が提供されな
かった場合) (デフォルト)。
L
DSN=
プールを使用する ASP.NET アプリケーションでは、ODBC 接続文字列に
「DLG=0」句を指定する必要があります。
ODBC データ ソース名を指定します。
注意: 「DSN= 構文キー」を使用する場合、指定する名前は、ユーザのシステムで
使用されているデータ ソースの名前に一致している必要があります。さまざまな
ユーザが別々の名前を使用して同じデータ ソースを参照する可能性があります。
使用するデータ ソース名が事前にわからない場合は、「DSN= 構文キー」の代わ
りに、「DRIVER= 構文キー」を使用します。
DRIVER=
イ ン ス ト ー ル さ れ ているドライバの名前を正確に指定します。「DSN= 構文
キー」の代わりに使用されます。
例:
DRIVER={SQL Server}
L
これは Oracle Spatial には適用されません。
UID=
必要に応じて、データ ソースを使用するユーザの ID を指定します。
PWD=
必要に応じて、データ ソースを使用するユーザのパスワードを指定します。パス
ワードが接続文字列の中になくても文字列は一致すると見なされます。同じデー
タベース内に 2 つのテーブルがある場合、接続文字列は同じです。
MapXtreme v7.2
241
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
DBMS 接続文字列の形式
L
接続の属性とパラメータは任意に指定することができるため、冗長な接続を回避するに
は、ダイアログを使用して既存の接続プールから接続を取得するようにします。API の以
前のバージョンでは、同じデータベースに接続するたびにダイアログを使用したり、接続
文字列内の接続キーワードを指定された順序で記述しなかったりすると、その接続は共有
されず、複数の接続が確立されていました。
Web アプリケーションの ODBC レイヤおよびプール
プールを使用する ASP.NET アプリケーションに ODBC 経由でリモート レイヤを追加する場合、
接続文字列に必ず「DLG=0」句を指定するようにします。こうすることで、ユーザ ID とパスワー
ドを入力するための不要なダイアログが表示されなくなり、タイム アウトの発生を防ぐことがで
きます。これは、.TAB ファイルとワークスペースにも当てはまります。「DLG=0」句を含む接続
文字列の例を次に示します。
<ConnectString>DRIVER={SQL Server};DATABASE=Devel;Server=Paladin;
UID=devel;PWD=devel;QuotedID=Yes;Trusted_Connection=No;
Network=DBMSSOCN;Address=PALADIN,1433;DLG=0</ ConnectString>
TableInfoServer を使用していてプールがオンの場合に SQL Server にアクセスするには、接続文字
列で「DLG=SQL_DRIVER_NOPROMPT」を指定して、MapInfo.Data.TableException "テーブルを
開くことができません。" がスローされるのを回避します。
Oracle Spatial の接続文字列の形式
Oracle Spatial のキーワードを以下に示します。文字列はセミコロン (;) で区切られる複数の句で構
成されます。各句は「キー=値」の形式を持ちます。重要なキーは以下のとおりです。
キーワード
説明
SRVR=
Oracle Net8 EasyConfig ユーティリティで設定したサーバのサービス名です。
Oracle 接続には必要ですが、ODBC 接続には該当しません。
UID=
必要に応じて、データ ソースを使用するユーザの ID を指定します。
PWD=
必要に応じて、データ ソースを使用するユーザのパスワードを指定します。
接続文字列の例
Oracle Spatial、Microsoft SQL Server 2008、および SpatialWare の ODBC ドライバの接続文字列
の例を以下に示します。
Oracle Spatial の接続文字列:
UID=george;PWD=password;SRVR=OracleSpatial9i
MapXtreme v7.2
242
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
サーバ テーブル クエリでのマップ作成可能テーブルの定義
Microsoft SQL Server 2008 の接続文字列:
DRIVER={<driver>};
SERVER=<server>;UID=<uid>;PWD=<pwd>;Database=<database>
こ こ で、SQL Server Spatial の <driver> は、現在入手できる最新版である SQL Server Native
Client 10.0 とします。
SpatialWare for SQL Server の接続文字列:
DRIVER={SQL SERVER};
SERVER=ServerName;UID=Troll;PWD=secret;Database=GEORGETOWN
サーバ テーブル クエリでのマップ作成可能テーブルの定義
サーバ テーブルに対して指定したクエリは、DBMS のデータの結果セットを定義しており、これ
が追加しようとしているテーブルのデータを表しています。複雑なクエリを作成して、マップ作
成 可 能 テ ー ブ ル を 定 義 す る サ ー バ サイドの分析を MapXtreme で行うことができます。
MapXtreme アプリケーションはこのクエリを内部的に使用してデータにアクセスします。
MapXtreme は、selection/key を使用するクエリのほか、開発者が作成したクエリを基に内部クエ
リをいくつか生成して、マップ内のデータにアクセスします。ジオメトリ フィールドの選択先と
なるテーブルは、サーバの MapInfo MapCatalog に登録されている必要があります。MapXtreme
では、座標系、空間の種類、デフォルトのスタイルなどのジオメトリ フィールドに関する特定の
メタデータを取得するには、テーブルを登録する必要があります。
クエリによってマップ作成可能テーブルを定義するには、そのクエリがジオメトリ フィールドと
キー フィールドの両方を含んでいる必要があります。少量のデータに対して複雑なクエリを実行
すると、空間インデックスまたは空間述語が原因でクエリが失敗します。少量のデータに対して
複雑なクエリを実行するには、「TableInfoServer.MbrSearch=false」と指定し、クエリ結果をマッ
プ可能にします。
ジオメトリ フィールド
MapXtreme アプリケーションによって認識可能なジオメトリ フィールドを指定しない場合、テー
ブルは開くことはできますが、マップに追加できなくなります。つまり、テーブルはマップ作成
可能ではなくなります。MapXtreme は、MapCatalog 内でテーブルのジオメトリ フィールドを検
索するほか、フィールドの結果セットのデータ型を調べてジオメトリ フィールドを決定します。
擬似フィールド名 "Obj" を使用すれば、総称的にジオメトリ フィールドを参照することができま
す。また、ジオメトリ フィールドの固有のフィールド名を指定して、ジオメトリ フィールドを参
照することも可能です。この形式は、X/Y マップ作成可能レイヤのジオメトリ フィールドを参照
するのに必要となります。サーバがサポートしているジオメトリ関数またはジオメトリ式を使用
してジオメトリ フィールドを指定する方法もあります。
例
Select Obj from rdbsdata
Select sw_geometry from rdbsdata
MapXtreme v7.2
243
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
サーバ テーブル クエリでのマップ作成可能テーブルの定義
select sw_member, ST_Buffer(geometry, 66.0, 0.1) from rdbsdata
// a geometry function
Select st_geometry(st_point(72.5, 42.5) from rdbsdata
// a geometry constructor
Oracle sdo_buffer の例:
Select mi_prinx, mdsys.sdo_geom.sdo_buffer(geoloc, (select diminfo from
sdo_geom_metadata where table_name = 'ALINE'), 20) from aline where prinx
= 1
Oracle constructor の例:
Select 1 "mi_prinx",
mdsys.sdo_geometry(3,null,null,mdsys.sdo_elem_info_array(1,3,3),
mdsys.sdo_ordinate_array(-79.919909,40.553465,-71.060457,45.363657)) from
dual
SQL Server 2008 Spatial 関数の例:
select location_id, geography::Point(lat, long, 4326 /*WGS84*/) as geog
from dbo.store_locations
SpatialWare 関数の例:
select sw_member, ST_Buffer(sw_geometry, 66.0, 0.1) from rdbsdata
select ST_Overlap(flood100.sw_geometry, lake.sw_geometry) from flood100,
lake where ST_Overlaps(flood100.sw_geometry, lake.sw_geometry)
キー フィールド
クエリをテーブルとして開くためには、クエリ内にキー フィールドが返される必要があります。
キー フィールドがあれば、MapXtreme アプリケーションが結果セットの各行を識別できるように
なり、レイヤで色分け、選択およびラベル操作を行えます。
多くの場合、クエリ内にキー フィールドを指定する必要はありません。
MapXtreme アプリケーションは、結果セット内の行を一意に参照するために、キー フィールドを探
して、最も適したキー フィールドを決定することができます。キー フィールドがなければクエリに
追加します。多くの場合、キー フィールドはプライマリ キー/一意のインデックスになります。
Oracle Spatial のテーブルでは MI_PRINX が使用されることもあります。
クエリの中には、MapXtreme アプリケーションがキーを特定できないものもあります。このよう
な例に、ビューまたはシノニムに対するクエリがあります。ビューまたはシノニムは MapInfo
MapCatalog に定義されている必要があります。また、多くの場合、基本となる Spatial インデッ
クス システムも併せて必要であることが登録されている必要があります。ビューまたはシノニム
では MapXtreme によってキーが特定されないため、結果セット内でキー フィールドを特定するた
めの方法が提供されています。キーは、1 つのフィールドであり、かつ結果セット内で固有の値で
ある必要があります。キー フィールドとして使用するフィールドを特定するには、prinx または
mi_prinx のフィールド エイリアスを指定します。たとえば、「select custid mi_prinx, custname,
Obj from mycust」のように指定します。
MapXtreme v7.2
244
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
属性データへのアクセス
例
Select customer_id mi_prinx, obj from customer_view
フィールド エイリアス "mi_prinx" を使用して、customer_id フィールドをテーブルのキー フィー
ルドとして特定して使用します。または、create view ステートメント内で、必要なキー フィール
ドのエイリアスを作成し、そのビューに対するすべてのクエリにおいてキー フィールドが自動的
に特定されるようにすることもできます。
例
Create view customer_view as select customer_id mi_prinx, geoloc from
customer
一般に、フィールド名か、prinx または mi_prinx のフィールド エイリアスが結果セット内に存在す
る場合は、そのフィールドがテーブルのキー フィールドとして使用されます。このため、クエリ
で好きなキー フィールドを指定できるようになります。
属性データへのアクセス
利用可能な全データ フィールドを指定するには、クエリを「Select * From tablename」のように
指定します。アスタリスク (*) は必ず必要というわけではありません。アスタリスクの代わりに、
使用するフィールド名を指定しても構いません。クエリのパフォーマンスを上げるには、必要な
フィールドのみを取得するようにクエリを指定します。
DBMS テーブルを追加する際には、パフォーマンスを上げるために、アプリケーションで使用す
るフィールドのみをクエリに指定します。空間フィールド、キー フィールドなどが必要で、これ
らは指定しなくても自動的に追加されます。また、ラベル用のフィールドや主題図を作成するた
めのフィールドも使用します。マップ作成可能テーブルでは、擬似フィールド "OBJ" を使用し
て、空間データを格納しているフィールドを参照できます。これは、X/Y フィールドを持つテーブ
ルの MapMarker MDIGEOADDRESS フィールドを使用するテーブルで必要です。
サーバ サイドの式または関数を使用して、フィールドを指定することができます。また、実際の
アプリケーションでは、「select * from tab」のようなクエリを使用するのを避けます。
以下のコード サンプルでは、TableInfoServer を使用してサーバ テーブルを定義し、この定義によ
りマップにレイヤを追加しています。このテーブルのフィールドを使用して、ラベルや主題図を
作成できるようになります。
VB の例:
Public Shared Sub MapInfo_Data_TableInfoServer(ByVal connection As _
MIConnection)
' Note: Do not specify any columns.These are determined
' dynamically from the query
Dim ti As TableInfoServer = New TableInfoServer("Provinces")
ti.ConnectString = "SRVR=ontario;UID=mapx;PWD=mapx"
ti.Query = "Select * From Provinces"
ti.Toolkit = ServerToolkit.Oci
MapXtreme v7.2
245
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
パフォーマンスに関する問題
ti.CacheSettings.CacheType = CacheOption.Off ' On is the default
Dim tbl As Table = connection.Catalog.OpenTable(ti)
End Sub
パフォーマンスに関する問題
データベース サーバへの接続を確立できるまで数秒かかることがあります。この待ち時間は、
テーブルを最初に開くときのみに生じる一度限りのものです。
マップの表示速度は、サーバから取得するデータの量によって決まります。時には、ローカル
ファイルのマップの場合と比べて、サーバのデータのマップ表示が目立って遅いこともありま
す。速度は、表示しようとしているマップ フィーチャを MapXtreme アプリケーションがキャッ
シュしているかどうかによっても変わります。
キャッシュの設定
MapXtreme で Cache がどのように動作するかを覚えておくと、アプリケーションのパフォーマン
ス を 上 げ る こ と が で き ま す。以 降 の 各 セ ク シ ョ ン で は、キ ャ ッ シ ュ と は 何 か を 紹 介 し、
MapXtreme オブジェクト モデルでのその動作と、TableInfoServer オブジェクトの CacheSettings
プロパティについて説明します。
キャッシュとは
アプリケーションは、ローカル ファイルではなく、リモート データベースにある MapXtreme の各種
フィーチャにアクセスすることができます。キャッシュにはデータベースのレコードが一時的に保存
されます。つまり、マップを操作するたびにいちいちそのレコードをデータベースから読み取る必要
がないのです。これにより、アプリケーションとリモート データベース間の呼び出しの数を抑えるこ
とができます。サーバ テーブルのレコードをキャッシュすれば、アプリケーションの描画、主題図作
成およびラベル作成などのパフォーマンスが向上します。サーバ テーブルのデータが Map ウィンド
ウに読み込まれて描画されると、そのデータが内部的にキャッシュされます。その後、再描画が行わ
れるたびに、このデータがサーバ データベースから取得される代わりに、キャッシュから取得される
ようになります。キャッシュにより、再描画のパフォーマンスが格段に向上します。
キャッシュの使用状況は、さまざまな設定を使用して開発者がカスタマイズします。サーバ テー
ブルを追加するときに、TableInfoServer オブジェクトの CacheSettings プロパティでキャッシュ
の有効/無効を切り替えることができます。このプロパティはデフォルトで On になっています。
キャッシュの動作
キャッシュされたレコードごとに、属性データ値がメモリに格納され、各フィーチャ オブジェク
トが一時 Rtree ファイルのディスクに格納されます。テーブルに格納されているレコードの数が多
い場合、あるいはレコードのサイズ (属性データのレコードあたりのバイト数) が大きい場合、
キャッシュ機能はかなりの量のメモリを消費します。このため、アプリケーションが大量のデー
MapXtreme v7.2
246
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
キャッシュの設定
タをキャッシュしようとすると、大量の仮想メモリが必要となり、パフォーマンスが低下してし
まうことがあります。アプリケーションでのキャッシュの使用方法をよく検討して決定するよう
にします。MapXtreme では、さまざまな方法によってキャッシュを管理できます。
TableInfoServer オブジェクトおよび CacheSettings プロパティ
マップにテーブルを追加すると、デフォルトでキャッシュが有効になりますが、TableInfo オブ
ジェクトの CacheSettings プロパティでキャッシュの有効/無効を切り替えることができます。こ
のプロパティに設定できる値は、ON、OFF、ALL、USER の 4 つです。TableInfoServer の場合の
デフォルトは ON、それ以外の TableInfo オブジェクトの場合のデフォルトは OFF です。
パラメータ
説明
OFF
テーブルが一切キャッシュされません。データ操作を行うたびに、データベース
サーバに直接接続されます。
ON
キャッシュが有効になっており、テーブルではマップ ビュー (中心/ズーム) に基
づいてキャッシュを自動的に行います。ユーザは、キャッシュ制約のオブジェク
トを使用してキャッシュを制御することもできます。
キャッシュされたテーブルにはレコード キャッシュが維持されます。これに
よって、標準的なマップ操作の効率性が向上します。キャッシュは、テーブルが
属している (表示されている) 各 Map の現在のウィンドウに表示されているすべ
てのレコードが最低でも含まれるように維持されます。初期のマップ ウィンド
ウがいったんキャッシュされると、キャッシュの初期範囲に収まる移動操作およ
びズーム操作では、キャッシュ済みのレコードがアクセスされます。そのため、
データベースに対してクエリを実行する必要がありません。移動/ズーム操作が
キャッシュ領域の範囲外に及ぶ場合、テーブルはマップ ウィンドウの新しい
MBR (ビュー) をキャッシュに追加し、不足しているレコードをデータベース
サーバから取得して、キャッシュに追加します。古いマップ ビューが最初に破
棄されることはありません。その代わりに、以前のマップ ビューの内部履歴が
維持されます。キャッシュのサイズが過度に大きくならないようにするため、コ
ントロールを利用できます。このコントロールをテーブルのキャッシュに配置し
て、キャッシュ済みの古いビュー (マップ ウィンドウの MBR 領域) を破棄するタ
イミングを判断できます。これらのコントロールは CacheParameters オブジェ
クトのプロパティであり、テーブルを最初に開くときに設定できます。開発者は
これらのコントロールを使用して、キャッシュによって使用されるメモリ量や
ディスク容量の最大値、履歴で維持する以前のマップ ウィンドウ ビューの最大
数、キャッシュ内で維持するレコードの最大数、および古いマップ ウィンドウ
ビューをキャッシュ履歴に残す最長時間について上限を設定できます。これらの
制限を個別に、または組み合わせて使用することによって、アプリケーション側
で必要となる最適なキャッシュ管理を行うことができます。
TableInfoServer の場合、CacheParameter 設定のデフォルトは ON です。それ以
外の TableInfo データ ソースの場合、デフォルトは OFF です。たとえば、TAB
ファイルはデフォルトではキャッシュされません。
MapXtreme v7.2
247
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog
パラメータ
USER
説明
LayerInfo CACHE パラメータを USER に設定すると、アプリケーションによっ
てキャッシュが作成されますが、指定されたレコードのみがキャッシュされるよ
うになります。キャッシュに格納するレコードを指定できるオブジェクトは、
BoundConstraint、FeaturesConstraint、および AllFeaturesConstraint です。名前
に含まれる "Constraint (制限)" という語は、これらのオブジェクトが、指定され
たレコードのみをキャッシュに格納するように制約を課していることを示してい
ます。BoundsConstraint オブジェクトでは、フィーチャの MBR と制約の MRB
とが交差するすべてのレコードをキャッシュに格納します。
FeaturesConstraint オブジェクトでは、特定のレコードをキャッシュに追加する
ことができます。たとえば、多段階の分析や、フィーチャの Feature または
RowValues
を 何 度も読み出す分析を実行し、その対象が、Layer.Search、
Layer.SearchWithinDistance 等から返されるフィーチャのセットである可能性が
ある場合、分析中にレコードをローカル キャッシュに格納して、分析が終わっ
たらレコードを削除できれば便利です。FeaturesConstraint ではこのような操作
が可能です。また、全レコードが対象となる可能性のある、分析を多用する操作
を実行する場合、レイヤのデータのセット全体を一時的にキャッシュできれば便
利 で す。AllFeaturesConstraint ではこのような操作が可能です。上に挙げた
キャッシュ制約オブジェクトは、キャッシュが ON に設定されている場合にも使
用できます。この場合、キャッシュ制約オブジェクトはレコードをキャッシュに
追加しますが、以前のマップ ウィンドウ ビューのキャッシュ履歴には影響を与
えません。キャッシュが OFF または ALL に設定されている場合にもキャッシュ
制約オブジェクトを使用できますが、これらは影響を及ぼさなくなります。
L
ALL
制約オブジェクトは、サーバ テーブル以外のテーブルはキャッシュしま
せん。
テーブル全体がキャッシュされます。このオプションを使用すると、テーブルの
データはサーバから 1 回だけ取得され、それ以降はローカルでアクセスされま
す。キャッシュ内のデータをリフレッシュするには、テーブルに対して Refresh
メソッドを使用します。
大量のデータまたはテーブルをキャッシュすると、仮想メモリが使用されるようになり、キャッ
シュによるパフォーマンスの向上効果が得られないことがあります。
MapInfo_MapCatalog
MapXtreme アプリケーションでデータをマップに表示するには、MapInfo_MapCatalog という特
別なテーブルにアクセスする必要があります。MapXtreme アプリケーションがデータベース内の
テーブルをマップ レイヤとして表示するには、このカタログがあらかじめ作成されている必要が
あります。カタログはデータベースごとに 1 つ必要です。データベースの、アクセスしようとし
MapXtreme v7.2
248
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog
ているすべてのマップ作成可能テーブルの空間フィールドが MapCatalog に登録されている必要が
あります。データベースにテーブルをアップロードするときに、MapInfo EasyLoader ユーティリ
ティが、MapInfo_MapCatalog に必要な行を自動的に追加します。
サーバに MapInfo_MapCatalog が既に存在する場合、アプリケーションはこれを利用できます。
このカタログは、さまざまな MapInfo クライアントによって共有されます。サーバに
MapInfo_MapCatalog がない場合は、作成が必要です。MapXtreme では、リモート データベース
内の個々のフィーチャにスタイル情報を保存することができます。
DBMS への空間データのロード
空間データを MapInfo テーブルに格納している場合、このデータを DBMS データベースにイン
ポートできます。
Microsoft SQL Server、MapInfo SpatialWare for SQL Server、および Oracle Spatial にデータをロードす
るには、MapInfo EasyLoader を使用します。このユーティリティは、MapInfo Professional に付属し
ており、 www.pbinsight.com からダウンロードすることも可能です。EasyLoader ユーティリティ
は、テーブルのアップロード時に MapInfo_MapCatalog が存在しなければ、MapInfo_MapCatalog を自
動的に作成します。
手動による MapInfo MapCatalog の作成
MapInfo Professional または EasyLoader のいずれも使用していない場合は、MapCatalog を手動
で作成するか、データベース管理者に手動で作成してもらう必要があります。これを行うには、
以下の手順に従います。サーバ/データベースごとに一度 MapCatalog を作成すれば、それ以降作
成する必要はありません。
1. マップ作成可能テーブルが格納されているデータベースに、MAPINFO という名前のユーザを
作成します。
2. このデータベースに、MAPINFO_MAPCATALOG というテーブルを作成します。
このときの Create Table ステートメントは、以下のようになります。
Create Table MAPINFO_MAPCATALOG (
SPATIALTYPE Float,
TABLENAME Char(32),
OWNERNAME Char(32),
SPATIALCOLUMN Char(32),
DB_X_LL Float,
DB_Y_LL Float,
DB_X_UR Float,
DB_Y_UR Float,
VIEW_X_LL Float,
VIEW_Y_LL Float,
VIEW_X_UR Float,
VIEW_Y_UR Float,
COORDINATESYSTEM Char(254),
SYMBOL Char(254),
XCOLUMNNAME Char(32),
MapXtreme v7.2
249
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog
YCOLUMNNAME Char(32),
RENDITIONTYPE INTEGER,
RENDITIONCOLUMN CHAR(32),
RENDITIONTABLE CHAR(32)
NUMBER_ROWS INTEGER
)
L
テーブルの構造は、このステートメントとまったく同じでなければなりません。唯一の
例外は、varchar データ型または text データ型をサポートするデータベースの場合で、
Char データ型の代わりにこれらのデータ型を使用することが可能です。
3. TABLENAME と OWNERNAME に対して一意のインデックスを作成します。これにより、1 人
の所有者につき 1 つのテーブルだけがマップ作成可能になります。
create unique index mapcat_i1
on mapinfo.mapinfo_mapcatalog (OwnerName,TableName)
4. MAPINFO_MAPCATALOG に Select、Update、Insert および Delete の権限を設定します。こ
の設定により、ユーザはテーブルをマップ作成可能にすることができます。
grant select, insert, update, delete on mapinfo.mapinfo_mapcatalog to
public
MapXtreme v7.2
250
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog への行の追加
MapInfo_MapCatalog への行の追加
アプリケーションからアクセスするすべての空間テーブルについて、MAPINFO_MAPCATALOG
テーブルに行を追加します。MapInfo_MapCatalog の管理に MapInfo Professional を使用しない場
合は、MAPINFO_MAPCATALOG テーブルに手動で行を追加します。次の表に、各フィールドの
構文とその意味を示します。
MapXtreme v7.2
251
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog への行の追加
フィールド名
SPATIALTYPE
割り当てる値
例
MapInfo 空間オブジェクトの形式
14.0 = SQL Server
14.1
1: micode (シリアライズされた四分木キー) でイン 14.2
デックスが設定された
14.3
X/Y フィールドのポイント レイヤ
4: X/Y フィールドのポイント レイヤ
5.x: SpatialWare for Oracle
6.x: Ingres SQL - サポートされていません
7.x: Sybase SQS - サポートされていません
8.x: Oracle SDO バージョン 2 - サポートされてい
ません
9.x: MapInfo Geocoding DataBlade
SpatialWare Point Module
10.x: MapInfo Geocoding DataBlade XY Module
11.x: SpatialWare IDS/UDO datablade
13.x: Oracle Spatial
14.x: SpatialWare for Microsoft SQL Server
17.x:M 値と Z 値を含まない SQL Server 2008
GEOMETRY
18.X: M 値と Z 値を含まない SQL Server 2008
GEOGRAPHY
20.x: M 値と Z 値を含む SQL Server 2008
GEOMETRY
21.x: M 値と Z 値を含む SQL Server 2008
GEOGRAPHY
空間オブジェクトのタイプ
x.0: ポイントのみ
x.1: ラインのみ
x.2: リージョンのみ
x.3: すべてのタイプがサポートされます
L
このフィールドは、データの保存およびイン
デックス付けの方法を定義する空間オブジェ
クトの形式のほか、フィールドでサポートさ
れている、またはサポートされていない空間
オブジェクトのタイプを示します。整数部分
は、空間オブジェクトの形式を表します。小
数部分は、フィールドに保存可能な空間オブ
ジェクトのタイプを表します。
MapInfo.GeometryColumn.PredominantGeometry
Type および
Has<Line/Point/Region/Text>Geometries にマッピ
ングされます。
TABLENAME
MapXtreme v7.2
テーブルの名前。
STATES
252
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog への行の追加
フィールド名
割り当てる値
例
OWNERNAME
テーブルの所有者の名前。
SPATIALCOLUMN
空間フィーチャを格納しているフィールド名 (存在 SW_GEOMETRY
する場合)SW_GEOMETRY (SpatialWare
Type/IDS/UDO を使用してマップ作成可能)
NO_COLUMN (X–Y を使用してマップ作成可能)
MI_SQL_MICODE (MI Code を使用してマップ作成
可能)。あるいは
IDS/UDO
の名前、または
ST_SPATIAL データ型の Oracle フィールドの名
前。Oracle SDO_GEOMETRY フィールドの名前。
DB_X_LL
レイヤの外接四角形の左下隅の X 座標の値。単位 –360
は、COORDINATESYSTEM (下記参照) によって
示される単位。
BOB
MapInfo.Data.GeometryColumn.Bounds にマッピ
ングされます。
DB_Y_LL
外接四角形の左下隅の Y 座標の値。
–90
DB_X_UR
外接四角形の右上隅の X 座標の値。
360
DB_Y_UR
外接四角形の右上隅の Y 座標の値。
90
VIEW_X_LL
デフォルト ビューの左下隅の X 座標。
-180
デフォルト ビューは、最初に開かれるテーブルの
場合にだけ適用されます。
MapInfo.Data.GeometryColumn.DefaultView にマッ
ピングされます。
VIEW_Y_LL
デフォルト ビューの外接四角形の左下隅の Y 座標 -45
の値。
VIEW_X_UR
デフォルト ビューの外接四角形の右上隅の X 座標 180
の値。
VIEW_Y_UR
デフォルト ビューの外接四角形の右上隅の Y 座標 45
の値。
MapXtreme v7.2
253
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog への行の追加
フィールド名
COORDINATESYSTEM
割り当てる値
例
MapInfo CoordSys 句を表す文字列 (ただし、先頭 Earth Projection 1,
に CoordSys キーワードを付けません)。マップ投 0
影法、座標単位などを指定します。単純な緯度/経
度マップでは、「Earth Projection 1, 0」と指定し
ます。
MapInfo.Data.GeometryColumn.CoordSys にマッ
ピングされます。
SYMBOL
MapInfo Symbol 句 (レイヤがポイントのみを含む
場合)。または、Symbol 句、線形フィーチャのス
タイルを示す Pen 句、リージョンの枠のスタイル
を示す別の Pen 句、Brush 句の順に指定します。
Symbol(35,0,12)
Pen(1,2,0)
Pen(1,2,0)
Brush(2,255,255)
MapInfo.Data.GeometryColumn.DefaultStyle にマッ
ピングされます。
XCOLUMNNAME
X/Y マップ作成可能テーブルでは、X 座標を含む NO_COLUMN
フィールド名を指定します。このフィールドがな
い場合 (X フィールドと Y フィールドの対ではな
く、単一の空間フィールドを使用するテーブルの
場合) は、「NO_COLUMN」を指定するか、指定
せずにおきます。
MapInfo.Data.SpatialSchemaXY にマッピングされ
ます。
YCOLUMNNAME
X/Y マップ作成可能テーブルでは、Y 座標を含む NO_COLUMN
フィールド名を指定します。このフィールドがな
い場合は「NO_COLUMN」を指定します。
MapInfo.Data.SpatialSchemaXY にマッピングされ
ます。
MapXtreme v7.2
254
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
MapInfo_MapCatalog への行の追加
フィールド名
RENDITIONTYPE
割り当てる値
オブジェクト スタイル情報の適用方法を示します。
例
0 または 1
0 - MapCatalog のシンボル フィールドに指定され
ているスタイルが、テーブル内のすべてのオブ
ジェクトに適用されます。レコードごとのスタイ
ルは適用されません。テーブルのデフォルトのス
タイルを使用してオブジェクトがロードまたは更
新されます。
1 – テーブルにレコードごとのスタイルが使用さ
れます。テーブル内の各オブジェクトに対するス
タイル情報を定義する MapBasic の文字列フィー
ル ド を、テ ー ブ ルが別に持っています
( 現在
MapCatalog の SYMBOL フィールドで使用されて
い る も の と 同 じ 形式 )。テーブル内のスタイル
フィールドは、RENDITIONCOLUMN に記録され
ます。
RENDITIONCOLUMN
RENDITIONTYPE が 1 の場合、このフィールドに MI_SYMBOLOGY
は、スタイル情報を格納している空間テーブルの
フィールド名が保存されています。このフィール
ドは、テーブルに対するすべてのクエリに自動的
に追加され、オブジェクトが更新されると維持 (
更新) されます。intersect ステートメントまたは
update ステートメントで問題が発生するため、ク
エリ内でこのフィールドを指定しないでくださ
い。ワイルドカード文字 "*" を使用する場合を除
き、select 句にこのフィールドが含まれるクエリ
は、Dataset オブジェクト経由で値にアクセスす
ることがあります。スタイル フィールドが NULL
値の行では、MapCatalog の SYMBOL フィールド
のスタイルがオブジェクトに適用されます。
MIDBType.Style を持つ MapInfo.Column.DataType
を作成します。
RENDITIONTABLE
現在は使用されていません。将来のために予約さ NULL
れています。
NUMBER_ROWS
MapInfo Professional で現在使用されています。
MapXtreme v7.2
255
NULL
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
レコードごとのスタイル
レコードごとのスタイル
レコードごとのスタイルがサポートされていることにより、MapInfo TAB ファイルで長い間使用さ
れてきた空間データベースにフィーチャを使用できるようになります。具体的に言うと、1 つの
テーブル内の各ジオメトリにスタイルを設定できるようになります。たとえば、Oracle Spatial に
ある public institution という 1 つのテーブルに、学校、市役所、図書館、および警察署のレコード
があり、各ポイントの種類を別個のシンボルによって表す (すべての学校を学校のシンボルによっ
て表す) 場合があります。同様に、SpatialWare SQL Server の 1 つの道路テーブルにさまざまな道
路タイプのレコードがあり、道路を 1 ピクセル幅の黒のライン、補助道路を 2 ピクセル幅の赤の
ライン、交差点を平行な赤のラインで表す例もあります。
レ コ ー ド ご と の ス タ イ ル を 使 用 す る に は、RENDITIONTYPE、RENDITIONCOLUMN、
RENDITIONTABLE が適切に設定された MapCatalog 内のエントリでテーブルが定義されている必
要があります。
L
上に挙げたフィールドがない場合は、テーブルのデフォルトのスタイルが全オブジェクト
に適用されます。
Symbol 句、Pen 句および Brush 句の構文
リモート空間データベースをサポートするために MAPINFO_MAPCATALOG テーブルを手動で作
成する際には、シンボル スタイルを設定する必要があります。また、ライン スタイルおよびフィ
ル スタイルの指定も必要となる場合もあります。
ポイント スタイルの指定
ポイント スタイルを指定するには、Symbol 句を使用します。Symbol 句には 3 種類あり、それぞ
れ MapInfo 3.0 スタイルのシンボル、TrueType フォント シンボル、およびビットマップ シンボル
の指定に使用されます。
Symbol の構文
例
Symbol(shape, color, size)
または
Symbol(shape,color,size,font,fontstyle,rotation)
または
Symbol(bitmapname,color,size,customstyle)
Symbol(35,0,12)
Symbol(64,255,12,"MapInfo
Weather",17,0)
Symbol("sign.bmp", 255, 18, 0)
ライン スタイルの指定
ライン スタイルを指定するには、Pen 句を使用します。MapInfo_MapCatalog では、線形フィーチャ
の外観を指定する Pen 句と、リージョンの境界を指定する Pen 句の 2 つの Pen 句を使用します。
MapXtreme v7.2
256
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
トラブルシューティング
Pen の構文
例
Pen(thickness, pattern, color)
Pen(1, 2, 0)
フィル スタイルの指定
閉じたフィーチャ (リージョン) のスタイルを指定するには、Brush 句を使用します。
Brush の構文
例
Brush(pattern,color,backgroundcolor)
Brush(2, 255, 65535)
MapXtreme のスタイル API については、「第 15 章 : マップのスタイル設定」を参照してくださ
い。スタイルのパターンは、「付録 F : スタイルのルックアップ」に示されています。
Text オブジェクトの制限
LegacyText オブジェクトには、MI_Style フィールドを使用する方法とは別のスタイルの表示方法
があります。このため、どのような種類のテキスト オブジェクトも、他のオブジェクトとは異な
る方法で処理する必要があります。すべてのテキスト オブジェクトでは、スタイルが埋め込まれ
ており、スタイル フィールドに NULL 値が挿入されています。
トラブルシューティング
SpatialWare アプリケーションまたは Oracle アプリケーションで問題が発生した場合、次の表を
参考にして問題を解決します。
問題の内容
テーブルを照合できない。
MapXtreme v7.2
考えられる原因
解決法
SpatialWare レイヤに対して 現在、SpatialWare レイヤに
データ バインドを行おうとし AddColums がサポートされてい
た。
ません。
257
開発者ガイド
第 11 章 : DBMS のデータへのアクセス
トラブルシューティング
問題の内容
考えられる原因
解決法
指定したインデックスを使用 存在しないテーブルに対して 大 文 字 と 小 文 字 の 区 別 を 含 め
て、テーブル名を正しく指定し
してオブジェクトを検索でき クエリを行った。
て い る こ と を 確 認 し ま す。ま
ない。
た、テーブルがマップ作成可能
である必要があります。
空間クエリの結果に空間オブ EasyLoader Upload ユーティリ
ジェクトが含まれていない。
テ ィ を 使 用 し て、テ ー ブ ル を
マップ作成可能にします。
空間テーブル以外のテーブル クエリに構文エラーがないかを
に対してクエリを行った。
確認します。また、
MapInfo_MapCatalog の空間
フィールドに指定されている
フィールドが、クエリ結果に含
まれていることを確認します。
マップのズーム レベルが正
しくない。たとえば、マップ
の縮小度が高すぎて、地形を
識別できない。
MapXtreme v7.2
DBMS レイヤの MBR は、
MapInfo_MapCatalog テーブ
ルによって決定されます。
MapCatalog のテーブル範囲が
原因で、ズーム レベルが、
マップに出力しようとしてい
るズーム レベルから外れるこ
とがあります。
258
MapInfo Professional MBX ツー
ル (MISETMBR.MBX) を使用し
て MapInfo_MapCatalog に格納
されている範囲の値
(DB_X_LL、DB_X_UR、
DB_Y_LL、DB_Y_UR) を変更し
ます。
開発者ガイド
アプリケーションへのマッ
ピング機能の追加
MapInfo.Mapping 名前空間を使用して、アプリケーションにマッピング機能を
追加します。この章では、Mapping 名前空間を使用してマッピング アプリ
ケーションを拡張する方法について説明します。
この章の構成
Š
Š
Š
Š
Š
Š
Š
MapInfo.Mapping 名前空間とは . . . . . . . . . . . . . . 260
マッピングのベース クラス . . . . . . . . . . . . . . . . 260
Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267
Adornments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
フィーチャ スタイル修飾子 . . . . . . . . . . . . . . . . 273
マップの印刷. . . . . . . . . . . . . . . . . . . . . . . 275
12
第 12 章 : アプリケーションへのマッピング機能の追加
MapInfo.Mapping 名前空間とは
MapInfo.Mapping 名前空間とは
MapInfo.Mapping 名前空間には、マップ、レイヤ、修飾子、主題図、凡例、およびラベルを作成、
表示、エクスポートするためのクラス、インターフェイス、および列挙体が含まれています。
Map クラスは、デスクトップ アプリケーション内のマップに関する最上位のオブジェクトです。
Map オブジェクトごとに 1 つのマップを含めることができます。各 Map は、Adornment コレク
ションと Layer コレクションを 1 つずつ持っています。Web アプリケーションを開発するとき
に、マ ッ プ イ メ ー ジ を ビ ッ ト マ ップまたはストリームにエクスポートするために、Map を
MapExport オブジェクトにアタッチします。
「レイヤ」に説明されているように、マップは、基本的にはお互いに上に積み重ねられたレイヤ
の集合です。Mapping 名前空間クラスを使用すると、これらのレイヤを操作するよう必要に応じ
てアプリケーションを設計できます。
マッピングのベース クラス
このセクションでは、MapInfo.Mapping 名前空間で使用されているマップのベース クラスについ
て説明します。Map 階層を UML で表したものを、次の図に示します。
MapExport (マップのエクスポート)
MapExport クラスは、イメージへの Map のエクスポートで使用します。このクラスのプロパティ
は、BorderPen、ExportSize、Format などのイメージの各項目を指定します。
MapExport は、BMP (デフォルト)、WBMP、WMF、EMF、GIF、J2K、JPG、PNG、PSD、TIFF、
TIFFCymk、TIFFLzw など、さまざまなイメージ形式をサポートします。パフォーマンスが懸念さ
れる場合は、LEADTOOLS API の代わりに .NET Framework API を使用して、BMP、GIF、JPG、
PNG、TIFF の各フォーマットをエクスポートすることもできます。エクスポートの速度は異なり
ますが、どちらの方法も、エクスポート後のイメージの品質は同じです。
MapXtreme v7.2
260
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
マッピングのベース クラス
形式を選択するには、ExportFormat プロパティに、上記のいずれかの形式
(ExportFormat.WindowsPNG など) を設定します。
L
LegendExport クラスも、.NET framework および LEADTOOLS の API を使用し、上記の形
式でファイルがエクスポートされます。
MapExport の使用例
MapControl を使用する場合は、次の例に示すように、エクスポートする前にマップを複製してお
く必要があります。
VB の例:
Public Shared Sub MapInfo_Mapping_MapExport(ByVal mapControl1 As
MapControl)
'must clone since map is coming from mapcontrol and is linked to it via
the HWND
Dim NewMap As Map = CType(mapControl1.Map.Clone(), Map)
Dim exportObject As MapExport = New MapExport(NewMap)
exportObject.ExportSize = New MapInfo.Mapping.ExportSize(2931, 4104)
exportObject.Format = ExportFormat.Gif
exportObject.Export("C:\Temp\ExportImage.gif")
End Sub
Map
Map クラスには、マップに包含できるものがすべて含まれます。Map オブジェクトは、デスク
トップ アプリケーションに関しては MapControl オブジェクトに置かれており、また Web アプリ
ケーションに関しては MapExport オブジェクトにアタッチされています。
Map には、次のプロパティがあります。
•
Bounds
•
Center
•
Zoom
•
Scale
•
Size
•
Rotation
•
DisplayTransform
•
DisplayCoordSys
Map ごとに Layers コレクション (「Layers」を参照) と 1 つの Adornment コレクションがありま
す。Layers コレクションにはマップを構成するすべてのレイヤ、Adornment コレクションには
マップの修飾すべてが含まれています。また、Adornment には、凡例、タイトル、スケール バー
が含まれます (「凡例の概要」を参照)。
MapXtreme v7.2
261
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
マッピングのベース クラス
MapFactory
MapFactory クラスには、Geoset ファイル、ワークスペース、テーブルのリストからマップを作成
するためのオブジェクトが含まれます。また、MapFactory は、特定のセッションで作成された全
マップのコレクションのコンテナとして機能するとともに、そのコレクションを追跡します。
MapFactory の使用例
この例は、MapFactory の CreateEmptyMap を使用して、300×300 ピクセルのサイズで空のマッ
プを作成します。
' Create a new map
Dim map As Map = Session.Current.MapFactory.CreateEmptyMap(New Size(300,
300))
MapLoader
MapLoader クラスは、Geoset ファイル、XML ワークスペース ファイル、または TAB ファイルか
らマップのレイヤを読み込むためのメカニズムを提供します。各種類のマップを読み込むため
に、マップの読み込みに使用する MapLoader のサブクラスが用意されています。これらのサブク
ラスには、MapGeosetLoader、MapWorkspaceLoader、MapTableLoader などがあります。
VB の例:
Public Shared Sub MapInfo_Mapping_MapLoad()
' Create an empty map
Dim map As Map = _
MapInfo.Engine.Session.Current.MapFactory.CreateEmptyMap(New Size(400,_
300))
' Create a maploader.Make sure that Session.Current.TableSearchPath
points to the folder with the tables in it
Dim tl As MapTableLoader = New MapTableLoader("ocean.tab", _
"usa.tab", "mexico.tab", "us_hiway.tab")
' Load tables into a map
map.Load(tl)
End Sub
MapViewList、MapView
これらのクラスには、マップの前のビューまたは次のビューのリストを保持するためのオブジェ
クトが含まれます。MapViewList クラスを使用してマップ ビューのスタックを順に移動し、
MapView クラスを使用して各マップ ビューの固有情報 (Name、Center、および Zoom) を表示し
ます。
MapXtreme の VB サンプルは、<MapXtreme のインストール ディレクトリ>\MapInfo\
MapXtreme\7.x.x\Samples\Desktop\Features に収録されています。
MapXtreme v7.2
262
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Layers
MapControl
MapControl クラスには、画面上にマップを視覚化するためのオブジェクトが含まれます。Windows
フォームに MapControl を追加してマップを表示します。MapControl には、MapTools コレクション
も含まれます。Web アプリケーションで使用するバージョンの MapControl も存在します。
デスクトップ アプリケーションで使用する MapControl クラスは、MapInfo.Windows.Controls 名
前空間にあります。実際に操作して機能を確認できるデスクトップ MapControl の実例を見るに
は、Windows の [スタート] メニューからワークスペース マネージャを実行してください。また、
「第 23 章 : ワークスペース マネージャ」も参照してください。
Web アプリケーションで使用する MapControl クラスは、MapInfo.WebControls 名前空間にありま
す。「Web コントロールのアーキテクチャ」を参照してください。Web アプリケーションに対し
て広域図を作成する方法のチュートリアルについては、[スタート] メニューからラーニング リ
ソースの「チュートリアル」セクションを参照してください。
Layers
以下のセクションでは、Layers オブジェクトとクラスについて説明します。Layers 階層を UML
で表したものを、次の図に示します。
FeatureLayer
FeatureLayer は、Table から Feature を表示するレイヤです。たとえば、世界各国を表すリージョ
ン オブジェクトのレイヤが FeatureLayer です。FeatureLayers は、ネイティブ .TAB データ、リ
モート RDB、シームレス、またはラスタ データとすることができます。
MapXtreme v7.2
263
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Layers
Layers
各マップには、Layers クラスで表現される FeatureLayers のコレクションがあります。コレク
ション内の順序は、レイヤが描画される順序です。このコレクション クラスのメソッドには、
Add、Insert、Move、および Delete があります。Layers コレクションは LayersBase クラスから
派生します。レイヤを通して列挙していく最も良い方法は、Layer フィルタを使用することです。
レイヤを変更するには、まず、そのレイヤを編集可能にする必要があります。レイヤを編集可能
にするには、EditMode プロパティを変更します。EditMode プロパティは、LayerControl 内の設定
を変更するか、またはプログラムによって変更されます。レイヤがいったん編集可能になると、
そのレイヤ内のフィーチャを移動または削除したり、そのサイズを変更したりできます。
L
特定のレイヤについては、レイヤに対する編集がすぐに反映されます。したがって、編集
可能なレイヤでフィーチャを選択するときは注意が必要です。
フィルタをインプリメントするには、MapLayerFilterFactory クラスを使用します。このクラスを
使用すると、レイヤ タイプや可視レイヤなど、ストック フィルタのセットからフィルタを作成で
きます。独自のフィルタを作成するには、インターフェイス IMapLayerFilter をインプリメントす
るクラスを記述します。
MapLayer
MapLayer クラスは、すべてのレイヤのベース クラスです。このクラスは IMapLayer インター
フェイスをインプリメントします。プロパティには、Enabled、VisibleZoomRange、Name、およ
び Alias が含まれます。このクラスを使用して、一般的なレイヤ プロパティにアクセスします。
UserDrawLayer
UserDrawLayer は、描画メソッドをオーバーライドして独自のレイヤを描画できるようにする抽
象クラスです。これにより、マップの座標系を使用し新しいフィーチャを作成して実際にマップ
に追加するのではなく、Windows の描画メソッドを使用して MapControl の上にカスタム オブ
ジェクトを追加するという効率的な方法を使うことができます。
ObjectThemeLayer
ObjectThemeLayer クラスには、異なる 3 種類の主題図 (円グラフ、棒グラフ、およびサイズ可変
シンボル) が含まれます。これらのレイヤは他のレイヤと同様に機能します。また、グループ化し
たり、表示/非表示を設定したりすることもできます。
GroupLayer
このクラスは、移動やオンとオフの切り替えが同時に行われるレイヤ グループを示します。
GroupLayer は、IMapLayer に結合された LayersBase コレクションです。このオブジェクトは、
AnimationLayers を実行する機能もサポートしています。
MapXtreme v7.2
264
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Layers
グループ内のレイヤの VolatilityHint が Animate の場合は、グループ内のそれらのレイヤを再描画
するだけで済みます。レイヤの VolatilityHint が CacheIfPossible または Normal の場合は、すべて
のレイヤを再描画する必要があります。
LabelLayer
LabelLayer クラスは、ラベルを生成し、そのラベルをマップの特定のレイヤ位置に描画します。
「LabelLayer」および「ラベル レイヤの設定」を参照してください。
GraticuleLayer
このクラスは、マップ ウインドウに経線と緯線のグリッドを表示するために使用されます。「経
緯度線レイヤ」を参照してください。
レイヤ フィルタ
IMapLayersFilter および IMapLayersFilterFactory インターフェイスは、レイヤ列挙体をサポートし
ます。
IVisibilityConstraint
IVisibilityConstraint は、特定のオブジェクトを表示するかどうかを決定するインターフェイスで
す。このインターフェイスは、LabelModifiers、FeatureStyleModifiers、および Themes などのす
べてのレイヤ タイプを含む、さまざまなタイプによりインプリメントされます。
コード例: Animation レイヤ
次の VB サンプルは、レイヤのアニメーションを設定する方法を示しています。
Private Sub btnInitializeObjects_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnInitializeObjects.Click
Dim Cat As Catalog = MapInfo.Engine.Session.Current.Catalog
'Create Temp layer
Dim tblInfoTemp As New TableInfoMemTable("Animation")
Dim tblTemp As Table = Cat.GetTable("Animation")
If IsNothing(tblTemp) = False Then 'Table exists close it
Cat.CloseTable("Animation")
End If
tblInfoTemp.Columns.Add(ColumnFactory.CreateFeatureGeometryColumn(Map_
Control1.Map.GetDisplayCoordSys()))
tblInfoTemp.Columns.Add(ColumnFactory.CreateStyleColumn())
tblInfoTemp.Columns.Add(ColumnFactory.CreateStringColumn("Name", 40))
tblInfoTemp.Columns.Add(ColumnFactory.CreateStringColumn("Dept", 15))
tblInfoTemp.Columns.Add(ColumnFactory.CreateIntColumn("Level"))
tblTemp = Cat.CreateTable(tblInfoTemp)
MapXtreme v7.2
265
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Layers
Dim lyr As New FeatureLayer(tblTemp)
MapControl1.Map.Layers.Add(lyr)
'Create Points
Dim pt As FeatureGeometry = New Point(lyr.CoordSys, New DPoint(-76, 42))
Dim cs As New CompositeStyle(New SimpleVectorPointStyle(37, _
System.Drawing.Color.Red, 10))
Dim ftr As New Feature(tblTemp.TableInfo.Columns)
ftr.Geometry = pt
ftr.Style = cs
ftr.Item("Name") = "Kelly"
ftr.Item("Dept") = "Sales"
ftr.Item("Level") = 3
tblTemp.InsertFeature(ftr)
Dim pt2 As FeatureGeometry = New Point(lyr.CoordSys, New DPoint(-119, 34))
Dim cs2 As New CompositeStyle(New SimpleVectorPointStyle(44, _
System.Drawing.Color.Purple, 10))
Dim ftr2 As New Feature(tblTemp.TableInfo.Columns)
ftr2.Geometry = pt2
ftr2.Style = cs2
ftr2.Item("Name") = "Greg"
ftr2.Item("Dept") = "Marketing"
ftr2.Item("Level") = 2
tblTemp.InsertFeature(ftr2)
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
Dim cat As Catalog = MapInfo.Engine.Session.Current.Catalog
Dim tbl As Table = cat.GetTable("Animation")
If IsNothing(tbl) = False Then
'Update the position of the points
Dim si As SearchInfo = MapInfo.Data.SearchInfoFactory.SearchWhere("Name= _
'Kelly'")
Dim ftr As Feature = cat.SearchForFeature(tbl, si)
Dim si2 As SearchInfo =_
MapInfo.Data.SearchInfoFactory.SearchWhere("Name = 'Greg'")
Dim ftr2 As Feature = cat.SearchForFeature(tbl, si2)
If TimeOfDay.Now.Second Mod 4 = 0 Then
ftr.Geometry.GetGeometryEditor().OffsetByXY(-5, -25, DistanceUnit.Mile, _
DistanceType.Spherical)
ftr2.Geometry.GetGeometryEditor().OffsetByXY(0, 25, DistanceUnit.Mile, _
DistanceType.Spherical)
Else
ftr.Geometry.GetGeometryEditor().OffsetByXY(-10, 0, DistanceUnit.Mile, _
DistanceType.Spherical)
ftr2.Geometry.GetGeometryEditor().OffsetByXY(10, 5, DistanceUnit.Mile, _
DistanceType.Spherical)
End If
MapXtreme v7.2
266
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Labels
ftr.Geometry.EditingComplete()
ftr2.Geometry.EditingComplete()
ftr.Update()
ftr2.Update()
End If
End Sub
Labels
以下のセクションでは、Labels オブジェクトとクラスについて説明します。Labels 階層を UML で
表した図を次に示します。
LabelLayer
LabelLayer クラスでは、ラベルとレイヤに独自の順序を付けることができます。LabelLayer は
MapLayer の一種であり、MapLayer のように扱うことができます。このように MapLayer と似て
いるため、MapLayer を配置できる場所ならどこでも LabelLayer を配置することができ、マップ
内の他のレイヤと比較して、Labels を相対的に位置づけることができるようになります。各
LabelLayer は LayerSources で構成されており、これらのオブジェクトのコレクションとして動作
します。
MapXtreme v7.2
267
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Labels
LabelSource
LabelSource クラスは、データ ソースと、そのソースへのラベルの設定方法を定義するルールに
基づいて、地形をラベルとして視覚的に表示します。LabelSource は、描画できるように、Map
の LabelLayer に 追 加 さ れ ま す。LabelLayer は、Map 内の位置を提供するとともに、他の
LabelSources との対話操作を制御するルールを提供します。LabelSource クラスを使用するに
は、データを取得するテーブル (MITable)、ラベル テキストを定義する式、およびその他のデフォ
ルトのラベル プロパティを適切に指定します。
LabelModifier
LabelModifier クラスは、ラベル作成で使用するプロパティのデフォルト値を変更する際に使用し
ま す。Sources コ レ ク シ ョ ン に 含 まれる各 LabelSource のラベルを作成する場合、まず、
LabelLayer が DefaultLabelProperties を使ってラベルを作成します。次に、Modifiers コレクショ
ン内の表示されている LabelModifier を使用します。
ILabelSourceFilter
このインターフェイスでは、特定のルールに従ってフィルタリングしながら、LabelLayer 内の
LabelSource オブジェクトを列挙することができます。また、このインターフェイスをインプリメ
ントして、独自のフィルタリング ルールを定義できます。
LabelProperties
このクラスには、スタイルや位置づけなどのラベル プロパティ情報が入っています。ラベル プロ
パティは限定的に指定することができます。この機能は、LabelModifier を使用してラベル プロパ
ティの一部だけを変更する場合に非常に便利です。また、優先度をラベルに設定して、ラベル位
置を調整することもできます。
ラベルの生成
LabelLayer クラスは、マップが描画されるとき、または LabelLayer.Refresh メソッドが呼び出さ
れたときに、ラベルを生成します。可視の各ラベル ソースがその対象です。1 つのマップに複数
のラベル レイヤを含めることができます。
現在のマップ ビュー内にあるソースのテーブル内の各フィーチャについてラベルを生成する場
合、LabelLayer クラスでは次の処理が行われます。
1. DefaultLabelProperties
て使用します。
プロパティを、ラベルの作成で使用するプロパティの開始セットとし
2. Modifiers コレクション内の可視ラベル修飾子ごとに Modify メソッドを呼び出します。これ
で、各修飾子を使用して、ラベルの作成で使用するラベル プロパティを変更できるようになり
ます。
3. 表示制約チェックを実行して、ラベルを保持するかどうかを判断します。
MapXtreme v7.2
268
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Labels
a. 表示制約を現在のマップのズーム / スケールと比較して、ラベルが表示されるかどうかを確
認します。
b. ラベルが表示され、このラベルで重なり合いも重複も発生してはならない場合は、 他の既
存のラベルと重なり合ったり重複したりしていないかどうかを確認します。重なり合いま
たは重複が検出された場合は、「ラベルの優先度」を使用して、どのラベルを残すかを判
断します。
4. 表示制約を継承する場合は、生成されたラベルのコレクションにラベルを追加します。
ラベル生成ルールは各ラベル レイヤ内でのみ適用され、マップ全体には適用されないことに注意
してください。たとえば、マップのすべてのラベル レイヤに含まれるすべてのラベル ソースで
AllowOverlap プロパティを False に設定しても、ラベル レイヤの間でラベルは重なり合います。
これは、ラベルがラベル レイヤに関係なく個別に生成されるためです。
現 在のマッ プ ビ ュー から ラ ベル を作成するためにマップがまだ描画されていない場合は、
LabelLayer.Refresh メソッドを使用します。
生成されたラベルへのアクセス
生成されたラベルにアクセスするには、LabelSource.Labels プロパティを使用します。このコレ
クションは、現在のマップ ビュー内にあるラベルを表します。マップ内のすべてのラベルを表す
わけではありません。マップのビューが変更されると、コレクション内の項目も変更されます。
ラベルの優先度
AllowOverlap または AllowDuplicates が False に 設定されているとき、同じ LabelLayer 内のどの
ラベルを生成するかがラベルの優先度によって決定されます。「ラベルの生成」でも説明されて
いるように、各ラベル レイヤは個別に設定されるため、他のレイヤで重なり合いや重複の設定が
違っていても影響しません。
ラベルが同じレイヤ内の別のラベルと重なり合うか、重複している場合、両方のラベルの優先度
を比較して、どちらのラベルを残すかが判断されます。まず、各ラベルの優先度 (ラベル間関係の
ソースと呼ばれます) を比較します。優先度が高いラベルが残ります。
MapXtreme では、ラベルの表示を制御するために Major と Minor という 2 つの優先度レベルを使用
します。これにより、優先度を基準にグループおよびサブグループに分類することができます。た
とえば、人口の多い都市のラベルを中小都市よりも高い優先度に設定できます。ただし、修飾子を
追加することで中小都市の Major 優先度を高め、大都市よりも上にすることもできます。
Major 優先度に null (Visual Basic の場合は nothing) が設定されている場合、LabelLayer 内のラベ
ルの LabelSource の位置を逆にした値が使用されます。つまり、インデックス位置の値が大きい
ほ ど、優 先 度 は 低 く な り ま す。た と えば、LabelSource がインデックス 3 にあり、10 個の
LabelSource (インデックス 0 ~ 9) がある場合、Major 優先度は 6 (インデックス計の反対の値) に
なります。
MapXtreme v7.2
269
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Labels
Minor 優先度が null (Visual Basic の Nothing) のときは、使用される値は、ラベルが付けられる
Feature の Key に基づきます。Table 内の行数に対するキーの数値表記の反対の値が使用されま
す。たとえば、Table が 10 行のテーブルの場合、行 ID 7 のフィーチャに対するラベルのデフォル
トの Minor 優先度は 3 (10 - 7 = 3) です。キーが数値以外の場合、マイナー優先度のデフォルトは 0
です。
Major 優先度が等しいときは、Minor 優先度が高いラベルが残ります。
優先度を作成するには、結果が数値となる式を使用します。たとえば、C# の式で結果が数値とな
るのは、数値型フィールドまたは以下のような式 (フィールド値の最初の文字の Asc 値など) とな
ります。
"(1/Asc(Country))*1e6"
ラベル レイヤの選択可能性
ラベル レイヤを選択可能にするかどうかを制御するには、プログラムから
SelectMapToolProperties.LabelsAreEditable プロパティを使用するか、ワークスペース マネージャ
の [ラベルの編集可能] チェックボックスを使用します。
LayerHelper.SetSelectable メソッドは、特定のレイヤ タイプの選択可能性に影響を及ぼしませ
ん。このレイヤには、Label、WMS/WFS、Raster、Group の各レイヤが含まれます。
コード例: LabelLayer の作成
以下の例は、Labels に関連するクラスの使用方法を具体的に示しています。
VB の例:
' Open usa table using the data catalog
Dim table As Table = Session.Current.Catalog.OpenTable("usa.tab")
' Create a new map
Dim map As Map = Session.Current.MapFactory.CreateEmptyMap(New _
Size(300, 300))
' Create a new feature layer that references the table and add it to the
map
Dim featureLayer As New FeatureLayer(table)
map.Layers.Add(featureLayer)
' Create a new label layer and add it to the map.
' Note that if you call MapInfo.Mapping.LayersBase.Add" method instead of
' MapInfo.Mapping.LayersBase.Insert method it will automatically position
the
' label layer before the feature layer
Dim labelLayer As New MapInfo.Mapping.LabelLayer()
map.Layers.Insert(0, labelLayer)
MapXtreme v7.2
270
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Adornments
' Create a new label source that references the table
Dim source As New MapInfo.Mapping.LabelSource(table)
' Change its caption expression to be a specific column from the table
' called "State_Name"
source.DefaultLabelProperties.Caption = "State_Name"
' Append the label source to the label layer so that it shows on the map
labelLayer.Sources.Append(source)
湾曲ラベル
湾曲ラベルとは、ラインの湾曲に沿って表示されるラベルのことです。湾曲ラベルを使うことで、
道路や河川など、ラインから構成されるマップ フィーチャの外観を美しくすることができます。
湾曲ラベルをワークスペース マネージャで作成するには、ラベル レイヤを選択し、[位置] タブで
[セグメントに沿ってラベルを曲線化] を選択します。「湾曲ラベル」を参照してください。
API を介して湾曲ラベルをレンダリングするには、ILayout インターフェイスおよび
UseRelativeOrientation プロパティを使用します。ラベルをジオメトリに沿って湾曲させるには、
MapInfo.Text.RelativeOrientation.FollowPath を指定します。『開発者リファレンス』で ILayout イ
ンターフェイスのコード例を参照してください。
Adornments
Adornments クラスは、マップの修飾の順不同コレクションです。修飾は、Legend、Title、Scalebar、
またはユーザ定義の他のオブジェクトです。各マップには、Adornments コレクションが 1 つ含まれ
ます。各修飾は、単一の AdornmentControl に属します。
独自の修飾を作成するには、IAdornment インターフェイスおよび AdornmentControl 抽象クラス
からクラスを取得します。
Legends
凡例を主題図と組み合わせて使用できます。主題図の詳細については、「第 14 章 : 主題図と凡例
の使用」を参照してください。凡例は LegendFactory クラスを使用して作成します。凡例 は 1 つ
以上の凡例フレームで構成されます。各フレームには、ThemeLegendFrame または
CartographicLegendFrame を使用します。どちらの LegendFrames も、LegendFrameFactory ク
ラスを使用して Legend から作成されます。凡例の取り扱いとカスタマイズには、
MapInfo.Mapping.Legends 名前空間のクラスを使用します。この名前空間のクラスには、
CartographicLegendFrame、ThemeLegendFrame、LegendFormat、LegendControl な ど が あ り
ます。
Legend のサイズは Legend.Size プロパティを使って設定できますが、LegendFrames のサイズは
設定できません。LegendFrame のサイズは、中に収められるデータの量に応じて決まります。
VB の例:
MapXtreme v7.2
271
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
Adornments
Private Sub Page_Load(ByVal sender As Object, ByVal e As _
System.EventArgs)
LegendControl1.Map = MapControl1.Map
If Not IsPostBack Then
Dim normalLyr() As MapInfo.Mapping.LayerType = New _
MapInfo.Mapping.LayerType(1) {}
normalLyr(0) = MapInfo.Mapping.LayerType.Normal
Dim filter As MapInfo.Mapping.IMapLayerFilter = _
MapInfo.Mapping.MapLayerFilterFactory.FilterByLayerType(normalLyr)
Dim frame As MapInfo.Mapping.Legends.LegendFrame
Dim NewLegend As MapInfo.Mapping.Legends.Legend = _
MapControl1.Map.Legends.CreateLegend(New System.Drawing.Size(5, 5))
NewLegend.Format.FrameAlignment = _
MapInfo.Mapping.Legends.LegendFrameAlignment.Horizontal
Dim ftrLayer As MapInfo.Mapping.FeatureLayer
For Each ftrLayer In _
MapControl1.Map.Layers.GetMapLayerEnumerator(filter)
frame = _
MapInfo.Mapping.Legends.LegendFrameFactory.CreateCartographic_
LegendFrame(ftrLayer)
NewLegend.Frames.Append(frame)
Next
LegendControl1.Legend = NewLegend
Else
LegendControl1.Legend = MapControl1.Map.Legends(0)
End If
End Sub
ScaleBar 修飾
スケール バーは、マップの単位 (キロメートルやフィートなど) を使ってマップ上の距離を測るた
めに使用される直線状のオブジェクトです。ScaleBarAdornment クラスを使用して
ScaleBarAdornmentControl を作成し、マップにコントロールを追加します。マップ自体に
ScaleBarAdornment を追加する場合、表示はされますが、ScaleBarAdornmentControl がないの
で、スケール バーはマップ自体にリンクされません。
VB の例:
Public Shared Sub MapInfo_Mapping_ScaleBarAdornment(ByVal mapControl1 As _
MapControl)
' Create a scalebar
Dim sba As ScaleBarAdornment = New ScaleBarAdornment(mapControl1.Map)
' Position the scalebar at the lower right corner of map
Dim x As Integer = mapControl1.Map.Size.Width - sba.Size.Width
Dim y As Integer = mapControl1.Map.Size.Height - sba.Size.Height
sba.Location = New System.Drawing.Point(x, y)
' Add the control to the map
Dim sbac As ScaleBarAdornmentControl = New
ScaleBarAdornmentControl(sba, _
MapXtreme v7.2
272
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
フィーチャ スタイル修飾子
mapControl1.Map)
mapControl1.AddAdornment(sba, sbac)
End Sub
Title 修飾
Title 修飾は、マップのタイトルを表示するためや、マップ上にその他の情報を示すテキストを追加
するために、マップに描画されるテキスト オブジェクトです。MapXtreme では、TitleAdornment
クラスを使用してタイトルを作成し、そのタイトルをマップに追加します。
VB の例:
Public Shared Sub MapInfo_Mapping_TitleAdornment(ByVal mapControl1 As
MapControl)
' Create a Titlebar
Dim ta As New MapInfo.Mapping.TitleAdornment(New
System.Drawing.Size(100, 50), mapControl1.Map)
ta.Title = "This is a watermark"
mapControl1.Map.Adornments.Append(ta)
End Sub
フィーチャ スタイル修飾子
フィーチャ スタイル修飾子では、Feature を描画する前に、そのスタイルを変更または修正するこ
とができます。これらのクラスは、CompositeStyle オブジェクトの限定的な属性項目を使用し
て、スタイルの一部を変更できます。レンジ、個別値、ドット密度の各主題図は、スタイル修飾
子です。主題図の詳細については、「第 14 章 : 主題図と凡例の使用」で説明します。Modifier 主
題図階層を UML で表したものを、次の図に示します。
MapXtreme v7.2
273
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
フィーチャ スタイル修飾子
FeatureStyleModifier
これは、すべての修飾子が派生する抽象ベース クラスです。IndividualValue、Ranged、および
DotDensity 主題図は、すべて FeatureStyleModifier オブジェクトです。FeatureStyleModifier から
派生する独自のクラスを作成し、Modify() メソッドをオーバーライドすることができます。
FeatureStyleModifiers
FeatureStyleModifiers クラスは、各 FeatureLayer に含まれる FeatureStyleModifier オブジェクト
の順序型集合です。コレクション内の各修飾子は、フィーチャのジオメトリを描画する前に順に
呼び出されます。
FeatureOverrideStyleModifier
FeatureOverrideStyleModifier は、単純な種類の FeatureStyleModifier です。このクラスは、Layer レ
ベルでのスタイル オーバーライド機能を提供します。FeatureOverrideStyleModifier は複合スタイル
を持ち、IVisibilityConstraint をインプリメントします。これは、MapX および MapInfo Professional
の機能と類似しています。
MapXtreme v7.2
274
開発者ガイド
第 12 章 : アプリケーションへのマッピング機能の追加
マップの印刷
マップの印刷
アプリケーションを作成した後で、ユーザが生成したマップを印刷できるようにする場合があり
ます。MapInfo.Printing 名前空間を利用することで、印刷機能を任意のアプリケーションに組み込
むことができます。この名前空間のクラスは印刷用の .NET Framework クラスを基に構築されて
いるため、必要な作成手順は他の Windows アプリケーションと同じです。通常の印刷機能だけで
なく、作成したマップを印刷用に最適化するためのさまざまな機能が用意されています。
MapXtreme アプリケーションからの印刷の詳細については、「付録 E : MapXtreme アプリケー
ションからの印刷」を参照してください。
MapXtreme v7.2
275
開発者ガイド
場所の検索
MapInfo.Data.Find 名前空間には、住所、道路の交差点または名前によって
マップ フィーチャを検索するための各種クラスがあります。
この章の構成
Š
Š
Š
Find の機能の概要 . . . . . . . . . . . . . . . . . . . . 277
Data.Find 名前空間の概要 . . . . . . . . . . . . . . . . . 280
Find 処理の調整 . . . . . . . . . . . . . . . . . . . . . 286
13
第 13 章 : 場所の検索
Find の機能の概要
Find の機能の概要
住所、道路の交差点または名前によってマップ フィーチャを検索するには Find を使用します。選
択ツールまたはクエリを使用して、特定の場所にあるフィーチャを検索するには、Data 名前空間
(「Feature の検索」を参照) の Search クラスを使用します。
Find 操作が正常に行われた結果、完全に一致するものが見つかることもあれば、近いものが 1 つ
以上見つかることもあれば、一致するものが見つからない、つまり検索が失敗することもありま
す。Find 操作は、さまざまなプロパティや各種フォールバック オプションによって調整できま
す。これについては、「Data.Find 名前空間の概要」で説明しています。次のセクションでは、
MapXtreme がどのように照合を行っているかを説明します。Find 処理に対する理解が深まれば、
検索対象が見つかる確率が高くなります。
Find の処理
MapXtreme は、住所、交差点、またはプレースの名前と、フィーチャ テーブルにある情報と照合
することによってマップ フィーチャを探します。たとえば、ユーザがワシントン D.C. の道路の
テーブルを開いていれば、 ワシントン D.C. の 1600 Pennsylvania Avenue を見つけることができ
ます。
マップ フィーチャの検索もこれと似ています。たとえば、目標物のマップ作成可能テーブルがあ
り、そのテーブルに "ホワイト ハウス" という名前と、その地理参照場所 (マップ作成可能な場所)
が格納されていれば、ホワイト ハウスを見つけることができます。プレース名によって検索する
のに、ホワイト ハウスの住所を指定する必要がありません。
道路の交差点を検索するには、その交差点を構成している 2 本の道路名を指定する必要があります。
MapXtreme は、完全一致を見つけようとします。完全一致とは、指定した住所、プレース、また
は 交 差 点 の 名 前 と、す べ て の 文 字 が 一 致 す る も の で す。完 全 一 致 が 見 つ か ら な い 場 合、
MapXtreme は一致規則と開発者の設定に基づいて、近い一致項目を検索します。近い一致が見つ
からない場合は、検索が失敗したことを示すメッセージを返します。照合では大文字と小文字が
区別されません。大文字も小文字も同じものとして見なされます。
通常、住所は、番地、道路名のほか、略語から構成されます。略語には、North など道路の接頭辞
や、Road など道路の接尾辞などがあります。住所の表記はさまざまで、マンション番号やルート
など、他の情報を含むこともあります。さらに、指定した住所に、道路の種類などの重要な構成
要素の一部が含まれていないこともあります。MapXtreme は、住所の各構成要素を調べ、構成要
素に特別なルールを適用して一致を見つけます。
以降の各セクションでは、MapXtreme が、道路名、道路略語、住所番号、調整テーブル、結果な
どの特定の情報や条件をどのように処理するかを説明します。
道路名の照合
道路名の照合では、住所と、検索テーブルにある情報とを 1 文字ずつ比較するという単純な処理
が行われます。たとえば、道路名 LaSalle を検索する場合を考えます。MapXtreme は、テーブル
に LaSalle という住所があれば完全一致を返し、住所が La Salle か LaSal であれば近い一致しか返
しません。
MapXtreme v7.2
277
開発者ガイド
第 13 章 : 場所の検索
Find の機能の概要
道路略語の照合
住所レコードに用いられている道路略語はさまざまです。ときには、道路略語が一切ないことも
あります。しかし、MapXtreme は多くの場合、検索対象の住所と検索テーブルとがわずかに異
なっていても、完全一致を見つけることができます。MapXtreme は、標準的に用いられる住所の
省略形と置き換え語のリストを参照し、適切な比較を行います。このリストのファイル名は
MapInfow.abb です。このリストは、Street の ST、Avenue の Av など、道路の接頭辞および接尾
辞の標準的な省略形をまとめたものです。MapXtreme でこの省略形ファイルを使用するにはプロ
パティの設定が必要になりますが、このファイルを使用すると、使用しない場合と比べて完全一
致が見つかりやすくなると共に、近い一致の個数も増えます。
以下の表に、住所表記と、省略形ファイルを使用した場合に、その住所が完全一致となるかどう
かを示します。最初の列は、検索する道路名です。2 番目の列は、ソース テーブルにある道路名
です。3 番目の列は、2 つの道路名が一致しない理由です。4 番目の列は、略語ファイルを使って
不一致の問題を解消できるかどうかを示します。この表は、テーブル内の 1 つの列に住所が格納
されていることを前提としています。住所の列には、通常は番地も含まれていますが、道路名と
番地では処理方法が異なるためここでは取り上げません。
検索する住所
検索テーブル内
の住所
LaSalle Street
LaSalle St
"Street" と "St" が一致しません。
○
LaSalle Ave
LaSalle Av
"Ave" と "Av" が一致しません。
○
LaSalle Ave
LaSalle St
"Ave" と "St" が一致しません。
×
LaSalle
LaSalle St
"St" がターゲットにありません。 × (道路略語がない場合、
MapXtremeでは推測が行わ
れます)
LaSalle St
North
LaSalle St
"North" が検索テーブルにありま ×
せん。
LaSalle St
North
LaSalle St N
"North" と N が一致しません。
LaSalle St Apt
3
LaSalle St
マンション番号がソースにある ○ (マンション番号は無視
ものと一致しません。
されます)
Tenth St
10th St
"Tenth" と "10th" が一致しません。 ○
10th Av
Tenth Av
"10th" と "Tenth" が一致しません。 ○
Saint John's
Lane
St John's Lane
"Saint" と "St" が一致しません。 ○
コメント
略語ファイルを使用して完
全一致となるどうか
○
省略形が原因となり、一致する住所が見つからないことが多い場合の対処方法を以下に示します。
MapXtreme v7.2
278
開発者ガイド
第 13 章 : 場所の検索
Find の機能の概要
•
•
省略形ファイルにある省略形に合わせて住所を変更する。
住所にある省略形に合わせて、テキスト エディタで省略形ファイルを編集する。
MapInfow.abb は C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x にあります。省略
形ファイルの編集に関する詳細については、「Find 処理の調整」を参照してください。
番地の照合
MapXtreme は、住所の表記が、住所番号、道路名の順であっても、道路名、住所番号の順であっ
ても住所を照合できます。前者の表記は北米等で用いられており、後者はヨーロッパで一般的で
す。MapXtreme は、デフォルトで、住所の表記が、住所番号、道路名の順であると仮定します。
住所表記が道路名、住所番号の順である場合は、プロパティの設定が必要となります。
MapXtreme は、指定した住所番号を、住所番号の範囲と比較します。通常、テーブルには住所番
号の範囲が含まれ、この範囲は、範囲が網羅する道路の一部に対応しています。道路を挟んだ一
方の側の番地は奇数で、もう一方の側は偶数となっていることが多いため、住所範囲が道路のど
ちら側にあるかを正確に照合することができます。
MapXtreme が住所範囲の完全一致を見つけることができない場合は、近い一致を見つけようとし
ます。近い一致では、最も近い範囲が一致と見なされます。厳密な完全一致条件は、非常に正確
な検索を行うときにのみ指定するようにします。高い検索精度が必要ではないことが往々にして
あります。通常は近い一致でも差し支えありません。
調整領域テーブルの照合
MapXtreme は、一致するレコードが複数存在すると考えられる 1 つのテーブルから 1 つの住所を
探し出すこともできます。検索が外れることを防ぐには、調整テーブルとフィールドを指定し
て、照合対象の範囲を絞り込みます。
絞り込みは、全国の道路が登録されているテーブルから Main St. を探す場合などに役立ちます。
Main St. がある町は多数存在すると考えられます。市街区域の調整テーブルを使用すれば、A とい
う町の Main St. のみを検索するように 指定できます。
調整領域テーブルには、どのような種類のものでも使用できます。たとえば、郵便番号の境界や
国勢調査の領域を使用できます。さらに、Find を実行する調整領域を追加することも可能です。
Find の結果
MapXtreme は、完全に一致するものを返すこともあれば、近いものを 1 つ以上返すこともあれば、
検索に失敗することもあります。結果はさまざまな要因によって決まります。この要因には、指定
するデータの精度や、Find 操作に指定する条件などがあります。このほか、検索に成功した場合は
住所の各部分の一致の程度を示す情報、失敗した場合は不一致を示す情報も返します。
MapXtreme v7.2
279
開発者ガイド
第 13 章 : 場所の検索
Data.Find 名前空間の概要
Data.Find 名前空間の概要
MapInfo.Data.Find 名前空間には、マップ作成可能テーブル内でマップ フィーチャ、番地または道路
の交差点を検索するための各種クラスが含まれます。Find を設定するには、Find クラスの各種プロ
パティおよびメソッドを使用します。Find の結果は、FindAddressRange クラス、FindCloseMatch
クラスおよび FindResult クラスによって返されます。
以下に、Find 名前空間の UML 図を示します。
Find
Find オブジェクトは、指定したマップ作成可能なテーブル内でオブジェクト、番地、または交差
点を検索するために使用されます。Find は、一致するものがテーブル内に存在するかどうか検索
し、その結果を FindResult オブジェクトに格納して返します。
MapXtreme で Find を使用するために必要なものは以下のとおりです。
•
マップ作成可能テーブル (ジオメトリ オブジェクトを格納しているテーブル)。
•
•
•
インデックスが設定されているフィールド。検索の対象となります。
検索項目。プレース名、番地、道路の交差点などです。
検索対象の場所を絞り込むための調整テーブル (オプション)。
Find クラスには、検索操作を調整するためのプロパティが数多くあります。たとえば、
CloseMatchesMax プロパティは、返す近い一致の数の設定に使用します。また、UseAbbreviations
プロパティにより、一致の確率を上げるために略語ファイルを使用するように指定します。
MapXtreme v7.2
280
開発者ガイド
第 13 章 : 場所の検索
Data.Find 名前空間の概要
プロパティ
説明
AddressNumberAfterStreet
"Smith Street 107" のように、道路名の後に住所番号が付くかど
うかを指定します。
ChooseAlternateBoundary
指定した調整地域以外の調整地域内で見つかったレコードを比
較するかどうかを指定します。
ChooseClosestAddressRange
住所番号が一致しない場合に、最も近い住所番号を使用するか
どうかを指定します。
ChooseClosestObject
完全に一致するオブジェクトが見つからない場合に、最も近い
オブジェクトを検索するかどうかを指定します。
CloseMatchesMax
完全に一致するものが見つからない場合に返す、近いオブジェ
クトの数を指定します。
InsetDistance
住所の配置を調整するための、ラインの端からの距離を表す正
数の値。
InsetPercentage
住所の配置先を、ラインの長さに対する百分率で表します。
InsetUnit
Inset に使用する距離の単位を表します。
OffsetDistance
道路から住所の位置を戻すオフセットに対する距離を表します。
OffsetUnit
Offset に使用する距離の単位を表します。
UseAbbreviations
検索時に、略語ファイルにある置き換え用の略語 (たとえば
"Smith Street" の略語の "Smith St") を使用するかどうかを指定
します。
UseCloseMatches
完全に一致するものが見つからない場合に、近い N 個のオブ
ジェクトを返すかどうかを指定します。
UseInsetAsPercentage
Inset が百分率として使用されているかどうかを指定します。
Inset は距離として使用されることもあります。
Find クラスによる検索方法には 4 種類あります。このうちの 2 つは、住所またはフィーチャを検
索する方法で、残りの 2 つは、領域道路の交差点を検索する方法です。いずれの方法でも、調整
領域を用いるかどうかは任意です。
MapXtreme v7.2
281
開発者ガイド
第 13 章 : 場所の検索
Data.Find 名前空間の概要
メソッド
説明
Search
マップ作成可能なテーブルで指定の場所を検索し、FindResult オ
ブジェクトを返します。
SearchIntersection
マップ作成可能な道路情報テーブルで指定の交差点を検索し、
FindResult オブジェクトを返します。
Dispose
Find オブジェクトによって保持されるアンマネージド リソースを
解放します。Find オブジェクトを使い終えたら、このメソッドを
必ず呼び出します。
FindAddressRange
FindAddressRange オブジェクトは、Find.Search メソッドから返される住所範囲の項目を表しま
す。検索対象の番地が見つからない場合、指定した道路の番地の範囲内に検索対象の番地がない
場合、または住所番号が指定されなかった場合は、FindAddressRange オブジェクトが FindResult
オブジェクトの一部として返されます。
コード サンプル
public void GetAddressRangesOnStreetTable()
{
Table_table;
_table =
Session.Current.Catalog.OpenTable("North_Greenbush.tab");
Find _find = new Find(_table,_table.TableInfo.Columns[1]);
FindResult _findResult= _find.Search("Meadow Dr");
If ((!_findResult.ExactMatch) && (_findResult.NameResultCode ==
FindNameCode.ExactMatch)&& (findResult.AddressResultCode ==
FindAddressCode.AddressNumNotSpecified))
{
FindAddressRangeEnumerator _enum =
_findResult.GetAddressRangeEnumerator();
FindAddressRange _findAddressRange;
int _iIndex = 0;
while (_enum.MoveNext())
{
_findAddressRange = _enum.Current;
Console.WriteLine("_findAddressRange.BeginRange");
Console.WriteLine("_findAddressRange.EndRange");
_iIndex++;
}
if(_table != null)
MapXtreme v7.2
282
開発者ガイド
第 13 章 : 場所の検索
Data.Find 名前空間の概要
{
_table.Close();
_table = null;
}
}
}
find.Dispose();
}
FindCloseMatch
FindCloseMatch オブジェクトは、Find の Search メソッドから返された近い一致項目を表しま
す。このオブジェクトは、FindResult オブジェクトの一部として返されます。近い一致項目と
は、検索対象に指定した名前に近いものとして返された項目のことです。
近い一致を使用するには、Find オブジェクトの UseCloseMatches プロパティと CloseMatchesMax
プロパティを設定しておく必要があります。たとえば、UseCloseMatches を true に設定して、
"Washington Street" を検索すると、近い一致は "Washington Ave" となります。
コード サンプル
public void CloseMatchesOnStreetTable()
{
Table _table;
_table = Session.Current.Catalog.OpenTable("Rensselaer.tab");
Find _find = new Find(_table,_table.TableInfo.Columns[1]);
_find.UseCloseMatches = true;
_find.CloseMatchesMax = 5;
FindResult _findResult= _find.Search("70 Washington");
if ((!_findResult.ExactMatch) && (_findResult.NameResultCode ==
FindNameCode.ExactMatchNotFound))
{
FindCloseMatchEnumerator _enum =
_findResult.GetCloseMatchEnumerator();
FindCloseMatch _findCloseMatch;
int _iIndex = 0;
while (_enum.MoveNext())
{
_findCloseMatch = _enum.Current;
Console.WriteLine(_findCloseMatch.Name);
_iIndex++;
}
}
if(_table != null)
{
MapXtreme v7.2
283
開発者ガイド
第 13 章 : 場所の検索
Data.Find 名前空間の概要
_table.Close();
_table = null;
}
find.Dispose();
}
FindResult
FindResult クラスは、Find.Search メソッドから返される一致の状態を示す情報を各種プロパティ
として返します。このプロパティを以下の表に示します。検索に成功した場合、FoundKey プロパ
ティには、見つかったオブジェクトのキーが格納されます。また、FoundPoint プロパティには、
オブジェクトが見つかったポイントが格納されます。
プロパティ
説明
AddressOutOfRange
渡された住所が範囲外かどうかを指定します。
AddressResultCode
検索対象の住所部分に対する結果コードを示し、FindAddressCode 列
挙体を返します。
BoundaryResultCode
検索対象の調整境界部分に対する結果コードを示し、
FindBoundaryCode 列挙体を返します。
ExactMatch
完全に一致するものが見つかったかどうかを指定します。
FoundKey
見つかったオブジェクトの Key を指定します。
FoundPoint
見つかったオブジェクトの Point を指定します。
IntersectionNotFound
交差点が見つからなかったかどうかを指定します。
MultipleMatches
一致するものが複数見つかったかどうかを指定します。
NameResultCode
検索対象の名前に対する結果コードを示し、FindNameCode 列挙体を
返します。
ResultCode
Find の結果、完全に一致するものが見つかった場合、結果コードは 1
になります。近いものが見つかった場合、1 より大きい値になります。
一致する住所が見つからなかった場合は、結果コードは負の値になり
ます。
UseSubstitution
略語ファイルにある置き換えが使用されたかどうかを指定します。
MapXtreme v7.2
284
開発者ガイド
第 13 章 : 場所の検索
Data.Find 名前空間の概要
FindAddressCode 列挙体
検索対象の住所部分に対する結果コードを示し、FindResult.AddressResultCode プロパティに
よって返されます。
L
この結果コードは、道路または交差点の検索でのみ使用します。
メンバ名
説明
ExactMatch
完全一致が見つかりました。
SideOfStreetUndetermined
道路のどちら側であるかが不明です。
WithinMinMax
住所番号が最小/最大範囲内でした。
NotWithinMinMax
住所番号が最小/最大範囲外です。
AddressNumNotSpecified
住所番号が指定されませんでした。
StreetsDoNotIntersect
道路は交差しません。
NoMapObjectForRowMatched
一致した行にマップ オブジェクトがありません。
FindBoundaryCode 列挙体
検索対象の調整境界部分に対する結果コードを示し、FindResult.BoundaryResultCode プロパティ
によって返されます。同じ名前のフィーチャどうしを識別するには調整領域を使用します。
L
この結果コードは、領域を使用して検索対象を調整している場合にのみ使用します。
説明
メンバ名
ExactMatch
完全一致が見つかりました。
FoundInOneOtherRegion
その名前は、指定した地域以外の 1 つの地域だけで見つか
りました。
FoundInMoreThanOneRegion
その名前は、指定した地域以外の複数の地域で見つかりま
した。
NoRegionSpecifiedOneMatch
調整地域が指定されませんでした。1 件の一致が見つかり
ました。
MapXtreme v7.2
285
開発者ガイド
第 13 章 : 場所の検索
Find 処理の調整
メンバ名
説明
NoRegionSpecifiedMultipleMatches
地域が指定されませんでした。複数の一致が見つかりまし
た。
MultipleMatchesFound
その名前は、指定した地域で複数回見つかりました。
FindNameCode 列挙体
検索対象の名前に対する結果コードを示し、FindResult.NameResultCode プロパティによって返
されます。
メンバ名
説明
ExactMatch
完全一致が見つかりました。
SubstitutionUsed
略語ファイルからの置き換えが使用されまし
た。
ExactMatchNotFound
完全一致が見つかりませんでした。
NoObjectNameSpecified
オブジェクト名が指定されていません。一致
は見つかりませんでした。
CloseMatch
近い一致が見つかりました。
Find 処理の調整
この章の冒頭で述べたように、Find オブジェクトの動作を深く理解できれば、そのプロパティを
使いこなせるようになるほか、入力する情報の精度が上がります。この結果、検索に成功する確
率が高くなります。このセクションでは、Find を使用する際に、期待どおりの結果を得るための
開発上のヒントを紹介します。
MapInfow.abb ファイルの編集
MapInfow.abb ファイルは、省略形と置き換え語を記述しているファイルで、MapXtreme に付属し
ています。このファイルを使用すると、指定した住所中の省略形がこのファイルに存在する場合
に、Find で検索対象が見つかる確率を上げることができます。これについては、「道路略語の照
合」のセクションで取り挙げています。このセクションでは、省略形ファイルの他の項目につい
て説明します。
MapInfow.abb は、テキスト エディタまたはワード プロセッサで編集することができます。この
ファイルを開き、必要に応じてキーワードを追加して内容を追加します。以下に、標準的な省略
形ファイルの内容を示します。
MapXtreme v7.2
286
開発者ガイド
第 13 章 : 場所の検索
Find 処理の調整
!Version 3.0
FIRST
1ST
SECOND
2ND
THIRD
3RD
FOURTH
4TH
FIFTH
5TH
SIXTH
6TH
SEVENTH
7TH
EIGHTH
8TH
NINTH
9TH
TENTH
10TH
NORTH
N
SOUTH
S
EAST
E
WEST
W
ALLEY
AL
AVENUE
AV
AVE
AV
BOULEVARD BLVD
BRIDGE
BR
CIRCLE
CIR
COURT
CT
DRIVE
DR
EXTENSION EXT
HIGHWAY
HWY
INTERSTATE I
LANE
LN
MOUNT
MT
PARK
PK
PARKWAY
PKWY
PLACE
PL
PLAZA
PLZ
POINT
PT
RAILROAD
RR
ROAD
RD
ROUTE
RT
SAINT
ST
SQUARE
SQ
STREET
ST
STR
ST
TERRACE
TER
!EOLNOSPACE
,
;
#
!EOLSPACE
FLOOR
SUITE
"P.O. BOX"
!NOSPACE
.
\"
MapXtreme v7.2
287
開発者ガイド
第 13 章 : 場所の検索
Find 処理の調整
\!
\\
!SPACE
"STATE HIGHWAY"STHWY"
"N ST"NORTH ST"
"S ST"SOUTH ST"
"E ST"EAST ST"
"W ST"WEST ST"
"N AV"NORTH AV"
"S AV"SOUTH AV"
"E AV"EAST AV"
"W AV"WEST AV"
さまざまな問題を解決するために、このファイルに項目を追加することができます。追加できる
項目には数種類あるという点が最も重要です。MapXtreme は 4 組の置き換え項目を認識でき、そ
れぞれ解釈が異なります。略語ファイル内では、組を識別するために、各組の前に以下のキー
ワードが置かれます。
スペース区切りの単純な置き換え
!SPACE
単純な切り捨て
!EOLNOSPACE
スペース区切りの切り捨て
!EOLSPACE
単純な置き換え
!NOSPACE
MapXtreme に対して、語ファイル内で行または行の組の解釈方法を指定するには、その行の前
に、解釈方法を指定するキーワードを置きます。
略語ファイル内のすべてのエントリにデフォルトの解釈を適用する場合は、エントリの前にキー
ワードを付ける必要はありません。略語ファイルの先頭にキーワードがない場合、MapXtreme は
最初のほうのエントリをデフォルトの方法によって解釈します。しかし、デフォルト以外の解釈
方法を適用する置き換えペアを追加したら、キーワードの追加が必要です。
スペース区切りの置き換え
デフォルトでは、スペース区切りの単純な置き換えが採用されています。つまり、MapXtreme
は、検索対象の住所に含まれるスペースで区切られたトークンと、住所ファイル内の行とを比較
します。スペースで区切られたトークンとは、スペース文字によって区切られた文字列のことで
す。たとえば、MapXtreme は、"Park Ave" の "Ave" と "Av" とを照合しますが、"Avery Blvd" と
"Avry Blvd" は照合しません。"Park Ave" と "Avery Blvd" にはいずれも文字列 "Ave" が含まれていま
す。しかし、この文字列がスペースによって区切られているのは "Park Ave" だけで、"Avery Blvd"
の "Ave" はスペースによって区切られていません。"Avery Blvd" では、"Ave" の次に来る文字はス
ペースではなく "r" です。
略語ファイル内のすべてのエントリには、このデフォルトの解釈が適用されます。項目を追加す
る と、追 加 し た 項 目 も 同 様 に 扱 わ れます。たとえば、"WK WALK" というペアを追加して、
MapXtreme で検索対象の住所内の "WK" が "WALK" として処理されるようにします。同様に、
"WAY WY" などのペアを追加することも可能です。
MapXtreme v7.2
288
開発者ガイド
第 13 章 : 場所の検索
Find 処理の調整
ス ペ ー ス 区 切 り の 単 純 な 置 き 換 えを指定するには、キーワード "!SPACE" を使用します。
"!SPACE" の後に続くエントリには、デフォルトの解釈が適用されます。このため、.abb ファイル
内の項目の順序を工夫できます。別のキーワードが見つかると、MapXtreme での解釈方法が変更
されます。
単純な切り捨て
単純な切り捨てでは、ある項目が住所内に見つかると、その項目とその後の住所が MapXtreme で
無視されます。単純な切り捨てに用いる項目は、スペースで区切られていなくても構いません。
この方法は、次のような住所を処理する場合に便利です。
123 Appian Way, Mail Stop 829
7305 Van Zandt # 23
最初の例では、コンマ (,) とその後に続く文字列を MapXtreme ですべて無視するとします。2 番目
の例では、番号記号 (#) とその後に続く文字列を MapXtreme すべて無視するとします。このよう
な例を処理するには、次の略語を略語ファイルに追加します。
!EOLNOSPACE
,
#
単純な切り捨てに用いる項目を指定するには、キーワード "!EOLNOSPACE" をその項目の前に置
きます。この行の後に、コンマの行と番号記号の行が記述されています。このようにすれば、
MapXtreme は、住所にコンマか番号記号が見つかると、コンマまたは番号記号とその後の文字列
を無視するようになります。上の住所は次のように解釈されます。
123 Appian Way
7305 Van Zandt
スペース区切りの切り捨て
スペース区切りの切り捨てでは、MapXtreme によってスペースで区切られた項目が検索され、そ
の項目とその後の文字列がすべて切り捨てられます。以下に例を示します。
73 Appian Way Suite 829
3033 Van Zandt Room 202
このような例を処理するには、次の略語を略語ファイルに追加します。
!EOLSPACE
SUITE
ROOM
単純な切り捨てに用いる項目を指定するには、キーワード "!EOLNOSPACE" をその項目の前に置
きます。その後に、"Suite" の行と "ROOM" の行を記述します。このようにすれば、MapXtreme で
住所内にこれらのトークンが見つかると、住所が切り捨てられます。上の住所は次のように解釈
されます。
73 Appian Way
3033 Van Zandt
MapXtreme v7.2
289
開発者ガイド
第 13 章 : 場所の検索
Find 処理の調整
単純な置き換え
MapXtreme の単純な置き換えでは、ある項目が住所内にあればその項目を削除し、なければ住所
を変更しません。次の例を考えます。
433 Van-Rensselaer
91 St Albans'
ハイフン (-) およびアポストロフィ (') を削除したいとします。略語ファイルに次の項目を追加します。
!NOSPACE
–
'
単純な置き換えを示すキーワードは "NOSPACE" であり、この行の後に記述されているハイフン
とアポストロフィが、削除されるトークンとなります。上の住所は次のように解釈されます。
369 VanRensselaer
91 St Albans
通常のスペースの指定
置き換え語を定義する際に、検索文字列にスペースが含まれることがあります。このような場合
は二重引用符を使用します。二重引用符は次の位置に置きます。
•
•
•
行の先頭
検索文字列と置き換え文字列との間
行の終わり
たとえば、"State Highway" を "STHWY" に置き換える例を考えます。これには、次の行を追加し
ます。
"State Highway"STHWY"
これにより、道路名中に、略語ファイル内の項目と一致する文字列が複数含まれるという問題を
解決できます。この問題は見つけるのが困難です。たとえば、"North St" と "Park Av" はいずれも
先頭の文字列が略語ファイルに既に登録されています。このため、MapXtreme では "North" が "N"
に置き換えられて "N St" となり、"Park" が "Pk" に置き換えられて "Pk Av" となってしまいます。
この置き換えを元に戻すには、次の行を略語ファイルに追加します。
"N ST"North ST"
"PK AV"PARK AV"
上の行は、"North" を "N" に、"Park" を "PK" に置き換えるように指定するエントリの後に追加する
必要があるという点に注意してください。前に追加しても意味がありません。つまり、次のよう
に記述します。
...
...
NORTH
...
...
PARK
..
MapXtreme v7.2
N
PK
290
開発者ガイド
第 13 章 : 場所の検索
Find 処理の調整
....
"N ST"NORTH ST"
"PK AV"PARK AV"
...
...
MapXtreme では、NORTH N の指定が検出されると、NORTH ST が N ST に変換されます。次
に、"N ST"NORTH ST" の指定によって、N ST が NORTH ST に変換されます。"PARK AV" も同様
に処理されます。
特殊文字
MapXtreme は、感嘆符 (!)、二重引用符 (") および円記号 (\) を特殊文字として扱います。これらの
特殊文字は、特殊文字の次に来る文字列の MapXtreme での処理方法を定義しています。特殊文字
自体は、置き換え文字列中で通常の文字として処理されません。感嘆符は、次に来る文字列を省
略形として解釈しないことを MapXtreme 指定します。二重引用符は、文字列内のスペースが、区
切り記号ではなく、通常のスペースであることを MapXtreme に指定します。円記号は、特殊文字
を通常の文字として処理するように MapXtreme に指定します。
行内で、特殊文字が通常の文字として処理されるように指定するには、特殊文字の前に円記号を
付けます。つまり、次のように記述します。
\!
\"
\\
略語ファイルへの行の追加
略語ファイルに、新しい行を追加することによって、新しい項目を追加できます。置き換えペア
に記述した項目が互いに置き換えられて、置き換えの指定が無効になる場合を除き、行の順序に
特に決まりはありません。また、1 番目の項目と 2 番目の項目の間に入れるスペースの個数にも特
に決まりはありません。
正しくない住所範囲
ソース テーブルに存在しない住所範囲が住所に含まれていると、MapXtreme ではその住所を照合
できません。このような住所は、住所範囲と住所範囲の間にあるか、住所範囲の外にあると考え
られます。この問題に対処するには、次の操作を行います。
1. Find.ChooseClosestAddressRange プロパティを true に設定し、検索を実行します。
2. FindResult.AddressOutOfRange プロパティから返される FindAddressCode 列挙体の内容を確
認し、検索の失敗を解決します。
このような住所は、ソース テーブル作成より後に追加された道路セグメントに関連している可能
性があります。その場合は、その道路の住所範囲をすべて反映するようにソース テーブルを編集
してください。
MapXtreme v7.2
291
開発者ガイド
第 13 章 : 場所の検索
Find 処理の調整
不正確な住所表記
MapXtreme では、検索操作の最後の手順として、照合する住所をどの地域で検索するかを判別し
ます。検索処理の設定時にこれを指定しない限り、 MapXtreme でこの処理は行われません。一般
に、調整地域としては市や町の名前を使用します。この場合、国勢調査局で定められた地名を使
用しない場合も多いという問題があります。米国の電子地図のほとんどは国勢調査局の地図に基
づいて作成されているため、問題が発生します。
たとえば、"50 Wolf Rd., Albany, NY" という住所では、この番地が属する Colonie という地名が抜
けています。そのため、この住所を対象に検索しても、ソース ファイルの該当する地名と一致し
ません。
この問題に対処する方法の 1 つは、ChooseAlternateBoundary プロパティを使用することです。
このオプションを有効にすると、MapXtreme ではどの境界に含まれているかに関係なく住所の照
合が試みられ、1 つの境界のみにその住所が含まれていれば正しい住所と一致します。複数の境界
に住所が含まれていると、検索は失敗します。
この問題に対処する別の方法として、調整地域として市や町の名前ではなく ZIP コードを使用す
る方法もあります。
MapXtreme v7.2
292
開発者ガイド
主題図と凡例の使用
MapXtreme には、主題図と凡例をマップに追加するための数多くのオプショ
ンが用意されています。この章では、利用できるさまざまな種類の主題図と凡
例、およびその使用方法について説明します。
この章の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
主題図の概要. . . . . . . . . . . . . . . . . . . . . . . 294
GraduatedSymbolTheme ( サイズ可変シンボル主題図 ) . . . . . . .295
PieTheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
BarTheme ( 棒グラフ主題図 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
RangedTheme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299
RangedLabelTheme ( レンジラベル主題図 ) . . . . . . . . . . . . . . . . .301
レンジ主題図とシリアライゼーション. . . . . . . . . . . . 302
IndividualValueTheme ( 個別値主題図 ). . . . . . . . . . . . . . . . . . . . .302
カスタム ビットマップ シンボルを使用する IndividualValueTheme
の作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .303
IndividualValueLabelTheme ( 個別値ラベル主題図 ). . . . . . . . . . .304
個別値主題図とシリアライゼーション. . . . . . . . . . . . 304
DotDensityTheme ( ドット密度主題図 ). . . . . . . . . . . . . . . . . . . . .305
凡例の概要. . . . . . . . . . . . . . . . . . . . . . . . 307
14
第 14 章 : 主題図と凡例の使用
主題図の概要
主題図の概要
主題図を使用すると、表形式のデータからは読み取ることが難しい、データの傾向を表すことが
できます。主題図は通常、データ セットから取り出されるデータです。MapInfo ネイティブ テー
ブルなどのデータ ソースからのデータを使用して、マップを主題に従って色分けします。たとえ
ば、米国の各州の平均気温に基づいてマップを色分けできます。ある州が赤い色で示されている
とき、その州は暑い (気温が高い) ことがわかり、青い色で示されているときは寒い (気温が低い)
ことがわかります。
主題図ではデータを、色分け、塗りつぶしパターン、またはシンボルを使用して表示します。主
題図マップを使用してデータを表示する方法は多数あります。データの特定の値に従って、これ
らの色、パターン、またはシンボルをマップに割り当てることで、さまざまな主題図マップを作
成できます。
Mapping.Thematics 名前空間
MapInfo.Mapping.Thematics 名前空間には、主題図を、フィーチャ レイヤに対するスタイル オー
バーライドとしてインプリメントするクラス、およびオブジェクト主題図としてインプリメント
するクラスが含まれています。修飾子主題図ではスタイルを変更し、オブジェクト主題図では新
しいレイヤを追加します。すべての主題図は ITheme インターフェイスをインプリメントします。
修飾子主題図
フィーチャ修飾子主題図の例として、レンジ主題図、個別値主題図、ドット密度主題図などの
マップがあります。これらの主題図では、レイヤ内の既存のフィーチャを変更します。修飾子主
題図の階層を次の UML 図に示します。
MapXtreme v7.2
294
開発者ガイド
第 14 章 : 主題図と凡例の使用
GraduatedSymbolTheme ( サイズ可変シンボル主題図 )
オブジェクト主題図
オブジェクト主題図の例として、サイズ可変シンボル主題図、円グラフ主題図、棒グラフ主題図
などがあります。これらの主題図では、データの値を表すオブジェクトを作成します。オブジェ
クト主題図の階層を次の UML 図に示します。
GraduatedSymbolTheme (サイズ可変シンボル主題図)
サイズ可変シンボル主題図は、ポイント フィーチャを含むオブジェクト主題図であり、シンボル
サイズは、主題図の式の数値によって決まります。
たとえば、サイズ可変シンボルを使用すれば、ある地域の特定の人口セグメントの所得を表示す
ることができます。
MapXtreme v7.2
295
開発者ガイド
第 14 章 : 主題図と凡例の使用
GraduatedSymbolTheme ( サイズ可変シンボル主題図 )
サイズ可変シンボル主題図マップの例
サイズ可変シンボル主題図の用途
サイズ可変シンボル主題図で扱うことができるのは数値データのみです。各レストランが出す料
理の種類を使ってサイズ可変シンボルを作成しても、意味がありません。ただし、都市別の所得
分布を表すとき、サイズ可変シンボルは最適です。
VB の例
Public Shared Sub MapInfo_Mapping_Thematics_GraduatedSymbolTheme(ByVal
map As Map)
' Load a map based on one table
map.Load(New MapTableLoader("world.tab"))
Dim lyr As FeatureLayer = CType(map.Layers("world"), FeatureLayer)
' Create a new graduated symbol theme
Dim gradTheme As GraduatedSymbolTheme = New _
GraduatedSymbolTheme(lyr.Table, "Pop_Native")
' Create an object theme layer based on that graduated symbol theme
Dim thmLayer As ObjectThemeLayer = New ObjectThemeLayer("World Pop _
Growth Rate", Nothing, gradTheme)
' Add object theme to the map’s layer collection.
map.Layers.Add(thmLayer)
' Adjust how we graduate the size.
gradTheme.GraduateSizeBy = GraduateSizeBy.Constant
thmLayer.RebuildTheme()
End Sub
MapXtreme v7.2
296
開発者ガイド
第 14 章 : 主題図と凡例の使用
PieTheme
PieTheme
円グラフ主題図は、扇形で各データ値を示す円グラフを含むオブジェクト主題図です。円グラフ
では、1 つの円グラフ内の扇形を比較したり、すべての円グラフの間で特定の扇形を分析したりし
ます。円グラフでは、全体に対する各要素の割合も比較できます。
円グラフ主題図の用途
円グラフは、人口統計データの分析に便利です。たとえば、米国の人口統計情報を示すデータ
セットがあるとします。このデータセットは、人口統計の主要グループの人口を示しています。
円グラフを使用すると、各人口統計グループの人口を表示し、各円グラフでそのグループが占め
る割合を確認できます。これにより、人口統計グループの州ごとの分布や米国全体での分布を確
認できます。また、1 つの人口統計グループに注目し、各州での相対的な変化を確認することもで
きます。
VB の例
Public Shared Sub MapInfoMappingThematicsPieTheme(ByVal map As Map)
' Load a map based on one table
map.Load(New MapTableLoader("mexico.tab"))
Dim lyr As FeatureLayer = CType(map.Layers("mexico"), FeatureLayer)
' Create a new pie theme
Dim pieTheme As MapInfo.Mapping.Thematics.PieTheme = New _
MapInfo.Mapping.Thematics.PieTheme(map, lyr.Table, "Cars_91", _
"Buses_91", "Trucks_91")
' Create an object theme layer based on that pie theme
Dim thmLayer As ObjectThemeLayer = New ObjectThemeLayer("Count by _
Vehicle Type", Nothing, pieTheme)
'Add object theme to the map's layer collection.
map.Layers.Add(thmLayer)
'
'
'
'
'
DataValueAtSize is calculated automatically if not specified in the
pie's constructor.But, you can adjust it.If you do so here, you
have to rebuild the theme.You can adjust it before creating the
object theme layer, and that way the pies won't need to be built
twice.
pieTheme.DataValueAtSize /= 2
pieTheme.GraduateSizeBy = GraduateSizeBy.Constant
thmLayer.RebuildTheme()
End Sub
MapXtreme v7.2
297
開発者ガイド
第 14 章 : 主題図と凡例の使用
BarTheme ( 棒グラフ主題図 )
円グラフ主題図/棒グラフ主題図を含むマップの印刷
円グラフ主題図または棒グラフ主題図を含むマップを印刷用に複製する場合、予想される結果を
得るためには用紙のサイズを考慮する必要があります。用紙サイズを使用して、印刷出力内の円
グラフ/棒グラフのサイズが計算されます。100 パーセントの用紙サイズを使用すると、印刷プレ
ビューと MapControl におけるグラフ/主題図の相対サイズが同じになります。
BarTheme (棒グラフ主題図)
棒グラフ主題図は、棒で各データ値を示す棒グラフを含むオブジェクト主題図です。棒グラフは
マップ オブジェクト (フィーチャ) ごとにオブジェクトの中心点に作成されるので、棒の高さを比
較することで主題図を分析できます。
棒グラフ主題図の用途
棒グラフ主題図は、マップ上のすべてのフィーチャで同じ変数を分析したいときに便利です。た
とえば、 男女の人口を含む米国の州域テーブルがあるとします。棒グラフを使用すれば、女性の
人口と男性の人口を示す 2 つの棒グラフを表示する主題図マップを作成できます。州ごとに人口
の差を比較したり、複数の州を分析して人口の差を比較したりできます。
VB の例
Public Shared Sub MapInfo_Mapping_Thematics_BarTheme(ByVal map As Map)
' Load a map based on one table.
map.Load(New MapTableLoader("world.tab"))
Dim lyr As FeatureLayer = CType(map.Layers("world"), FeatureLayer)
' Create a new bar theme.
Dim barTheme As MapInfo.Mapping.Thematics.BarTheme = New _
MapInfo.Mapping.Thematics.BarTheme(map, lyr.Table, "Pop_Native", _
"Pop_Asian", "Pop_Other")
' Create an object theme layer based on that bar theme.
Dim thmLayer As ObjectThemeLayer = New ObjectThemeLayer("World _
Pop", Nothing, barTheme)
' Add object theme to the map’s layer collection.
map.Layers.Add(thmLayer)
' Stack the bars and graduate by a constant amount.
barTheme.Stacked = True
barTheme.GraduateSizeBy = GraduateSizeBy.Constant
thmLayer.RebuildTheme()
End Sub
MapXtreme v7.2
298
開発者ガイド
第 14 章 : 主題図と凡例の使用
RangedTheme
円グラフ主題図および棒グラフ主題図の表示サイズの制御
MapXtreme には、円グラフと棒グラフのオブジェクト主題図を作成できる、MultiVariableTheme
抽象ベース クラスがあります。ObjectTheme クラスから派生したこのクラスには、特定の値にお
けるオブジェクト主題図のジオメトリの表示サイズを制御する、DataValueAtSize および Size と
いう 2 つのプロパティがあります。DataValueAtSize のデフォルト値は、マップされたフィーチャ
の最大データ値に設定されます。Size 値は円グラフの幅および棒グラフの高さを用紙の単位で制
御します。
RangedTheme
レンジ主題図は、指定の条件に従って、データをレンジ (Bin) にグループ分けして表示します。
MapXtreme のレンジ主題図は、指定の条件を反映させるために、既存のレイヤを変更します。前
のバージョンの MapX や MapXtreme とは異なり、新しいレイヤは作成しません。レンジ主題図を
作成する場合、MapXtreme はすべてのデータセット行をレンジにグループ分けし、各行のオブ
ジェクトに色、シンボル、ラインを割り当てます。
レンジ主題図マップの例
レンジ主題図の用途
レンジ主題図は、ある地域の人口統計データの表示などに便利です。たとえば、アジアの農村部
の男性の人口を Bin にグループ分けして色分けし、その地域に存在する人口レンジを表示します。
データセットに含まれるレコードは、すべてレンジに割り当て、レンジをベースとするスタイル
で描画します。たとえば、黄-緑のレンジを使う場合、一番人口の多い国は黄色、少ない国は
緑、その間の国は中間の色で表示します。マップを表示すると、人口が最も多い国と少ない国が
色で明確にわかります。レンジ主題図マップに透明効果を適用する方法については、「主題図に
半透明効果を適用する方法」を参照してください。
レンジは、リージョンのサイズがデータ値の大きさに関係していない場合にも便利です。
MapXtreme v7.2
299
開発者ガイド
第 14 章 : 主題図と凡例の使用
RangedTheme
レンジ値の種類
MapXtreme では、5 つの配分方法を使って自動的にレンジを作成できます。
•
•
•
•
•
•
レコード数均等
レンジ幅均等
標準偏差
自然分布
クウォンタイル
カスタム
レコード数均等
[レコード数均等] では、各レンジのレコード数が同じになります。[レコード数均等] を使用して、
100 個のレコードを 4 つのレンジにグループ化する場合は、設定した丸めの方法に従って、各レン
ジに約 25 個のレコードが入るようにレンジが計算されます。
[レコード数均等] またはその他のレンジ設定方法を使用するときは、主題図マップに影響する可能
性のある、極端に異なる値に注意することが重要です (統計学では、このような値を外れ値といい
ます)。
レンジ幅均等
[レンジ幅均等] では、同じサイズのレンジにレコードが振り分けられます。たとえば、テーブルの
フィールド値が 1 ~ 100 で、 同じサイズの 4 つのレンジで構成された主題図マップを作成すると
します。MapX では、1 ~ 25、26 ~ 50、51 ~ 75、および 76 ~ 100 のレンジが作成されます。
データの分布によっては、レコードを含まないレンジが作成される場合があります。
標準偏差
[標準偏差] を使用してレンジを作成すると、値の中間値をはさんで中間のレンジが配置され、その
前後のレンジは中間値から 1 標準偏差上または下になります。
自然分布
均等に分布していないデータを表示するには、[自然分布] を使用します。[自然分布] では、各レン
ジの平均値を使用してデータをより均等にレンジ間に振り分けるアルゴリズムに従ってレンジが
作成されます。値は、各レンジの平均値が、そのレンジ内のレンジ値になるべく近くなるように
振り分けられます。したがって、平均値がそのレンジを的確に表し、各レンジ内のデータ値は密
集します。
クウォンタイル
均等に分布していないデータを表示するためのもう 1 つの方法が [クウォンタイル] です。[クウォ
ンタイル] では、2 つの変数式を使用します。たとえば、人口と識字率を示す場合に [クウォンタイ
ル] 配分方法を使用します。
MapXtreme v7.2
300
開発者ガイド
第 14 章 : 主題図と凡例の使用
RangedLabelTheme ( レンジラベル主題図 )
カスタム レンジ
上記の配分方法ではニーズが満たされない場合は、DistributionMethod.CustomRanges メソッドを
使用してカスタム レンジを作成できます。『MapXtreme 開発者リファレンス ヘルプ』にある
MapInfo.Thematics.RangedTheme.Recompute メソッドのコード例を参照してください。
VB の例
Public Shared Sub MapInfo_Mapping_Thematics_RangedTheme(ByVal map As Map)
' Create a ranged theme.
Dim lyr As FeatureLayer = CType(map.Layers(0), FeatureLayer)
Dim theme As MapInfo.Mapping.Thematics.RangedTheme = New _
MapInfo.Mapping.Thematics.RangedTheme(lyr, "Pop_1990/Area(obj,_
'sq mi')", "PopDensity", 5,DistributionMethod.EqualCountPerRange)
' Add the ranged theme to the layer.
lyr.Modifiers.Append(theme)
End Sub
RangedLabelTheme (レンジラベル主題図)
このクラスは、レンジ スタイルでラベルを描画するレンジ主題図を作成します。レンジ主題図の
詳細については、「RangedTheme」を参照してください。
RangedLabelTheme クラスの用途
レンジ ラベル主題図は、ラベル付けの対象に関する情報を、ラベルを使って表示したいときに便
利です。たとえば、市や町の人口にラベルを付ける場合に、レンジ ラベル主題図を使用できま
す。人口の多い市のラベルは大きなフォントで表示し、人口の少ない市のラベルは小さいフォン
トで表示します。
VB の例
Public Shared Sub MapInfo_Mapping_Thematics_RangedLabelTheme(ByVal
labelSource As MapInfo.Mapping.LabelSource, ByVal columnExpr As _
String, ByVal themealias As String)
' Create new ranged label theme based on the label source of a
' LabelLayer already in the map.It will use 5 bins of equal range.
Dim rangedLabelTheme As RangedLabelTheme = New _
RangedLabelTheme(labelSource.Table, columnExpr, themealias, 5, _
DistributionMethod.EqualCountPerRange)
' Add the label modifier to the label layer.
Dim labelModifier As MapInfo.Mapping.LabelModifier = _
CType(rangedLabelTheme, MapInfo.Mapping.LabelModifier)
labelSource.Modifiers.Insert(0, labelModifier)
End Sub
MapXtreme v7.2
301
開発者ガイド
第 14 章 : 主題図と凡例の使用
レンジ主題図とシリアライゼーション
レンジ主題図とシリアライゼーション
v7.0.0 以 降、パ フ ォ ー マ ン ス を 向上する目的で、RangedTheme ( レンジ主題図) および
RangeLabelTheme (レンジ ラベル主題図) のシリアライゼーションとデシリアライゼーションが変
更されました。
変更により、主題図のシリアライゼーションの中で、主題図の Bin またはカテゴリのレコード カ
ウントがシリアライズされます。デシリアライゼーションの際は、レコード カウントは再計算さ
れなくなり、シリアライズされたレコード カウントが主題図に適用されます。この変更は、シリ
アライゼーション/デシリアライゼーションのパフォーマンスを向上するために行われました。
デシリアライゼーション時に主題図のレコード カウントを更新することが期待されるアプリケー
ションの場合、デシリアライゼーション後に主題図の Bin またはカテゴリのレコード カウントを
更新するためのロジックを追加する必要があることに注意してください。RangeTheme および
RangeLabelTheme の場合、MapInfo.Mapping.Thematic.IRangedTheme.Recompute メソッドの呼
び出しがこれに当たります。
IndividualValueTheme (個別値主題図)
個別値主題図は、データセットの特定のフィールドに含まれる個別値でポイント、ライン、境界
を色分けする修飾子主題図です。個別値主題図では、数値と名目値の両方を使用できます。
MapXtreme では、各スタイルに一意の値が与えられています。
たとえば、個別値主題図を使用して、区画の地区分類を示します。地区 (商業地区、住居地区、工
業地区) ごとに別々の色を使用します。区画は、対応する地区分類の色になります。
IndividualValueTheme クラスの用途
名目データを使ってポイント、ライン、領域を色分けする場合は、個別値を使う必要がありま
す。名目データは、数値以外のデータ (名前、料理の種類、販売されている車のブランドなど)
か、数値が計測を表していない数値データのどちらかです。たとえば、ID 番号を含むフィールド
は名目データです。
日付は数値データと見なされ、レンジ主題図と個別値主題図のいずれでも使用できます。
VB の例
Public Shared Sub MapInfo_Mapping_Thematics_IndividualValueTheme(ByVal_
map As Map)
' Load a map based on one table
map.Load(New MapTableLoader("world.tab"))
Dim fLyr As FeatureLayer = CType(map.Layers("world"), FeatureLayer)
' Create an individual value theme
Dim thm As IndividualValueTheme = New _
IndividualValueTheme(fLyr, "Country", "World Pop")
MapXtreme v7.2
302
開発者ガイド
第 14 章 : 主題図と凡例の使用
カスタム ビットマップ シンボルを使用する IndividualValueTheme の作成
' Add the theme to the FeatureStyleModifiers list
fLyr.Modifiers.Append(thm)
End Sub
カスタム ビットマップ シンボルを使用する IndividualValueTheme
の作成
次の C# の例は、カスタム ビットマップ シンボルを使用する IndividualValueTheme の作成方法を
示しています。使用可能なビットマップ シンボルのテーブルは、「カスタム シンボル」にありま
す。
// Open a connection to the Catalog
MapInfo.Data.MIConnection conn = new MapInfo.Data.MIConnection();
conn.Open();
// Retrieve a table from the Catalog
MapInfo.Data.Table ti=conn.Catalog.GetTable("usa_caps");
// Add it as a layer to MapControl
MapInfo.Mapping.FeatureLayer fl=mapControl1.Map.Layers["usa_caps"] _
as FeatureLayer ;
// Create a new IndividualValueTheme
MapInfo.Mapping.Thematics.IndividualValueTheme iv=new _
MapInfo.Mapping.Thematics.IndividualValueTheme(fl,"state","state");
// Add a custom bitmap symbol
MapInfo.Styles.BitmapPointStyle bitmappointstyle = new _
MapInfo.Styles.BitmapPointStyle("AMBU1-32.BMP", _
MapInfo.Styles.BitmapStyles.All ,System.Drawing.Color.Red , 30);
// Set the style
MapInfo.Styles.CompositeStyle cs = new _
MapInfo.Styles.CompositeStyle(null, null, null, bitmappointstyle);
// Apply the style to the first bin
MapInfo.Mapping.Thematics.ModifierThemeBin mtb= iv.Bins[0];
mtb.Style.ApplyStyle(cs);
// Add another bitmap symbol
bitmappointstyle = new _MapInfo.Styles.BitmapPointStyle("BADG1-32.BMP", _
MapInfo.Styles.BitmapStyles.All ,System.Drawing.Color.Red , 30);
// Set the style
cs=new MapInfo.Styles.CompositeStyle(null, null, null, _
bitmappointstyle);
// Apply the symbol to the second bin
mtb= iv.Bins[1];
mtb.Style.ApplyStyle(cs);
MapXtreme v7.2
303
開発者ガイド
第 14 章 : 主題図と凡例の使用
IndividualValueLabelTheme ( 個別値ラベル主題図 )
// Append the style modifiers
fl.Modifiers.Append (iv);
to the feature layer
//Close the connection
conn.Close();
IndividualValueLabelTheme (個別値ラベル主題図)
このクラスは、レイヤのラベルに対して適用される個別値主題図を作成します。個別値主題図の
詳細については、「IndividualValueTheme (個別値主題図)」を参照してください。
IndividualValueLabelTheme クラスの用途
レンジ ラベル主題図と同様、個別値ラベル主題図もラベル付けの対象に関する情報を、ラベルを
使用して表示したいときに便利です。たとえば、道路のデータを操作するとき、個別値ラベル主
題図を使用して種類の異なる道路を別々のフォントでラベル付けできます。その場合、高速道路
は、一般道路とは異なるスタイルのラベルで表されます。
VB の例
Public Shared Sub
MapInfo_Mapping_Thematics_IndividualValueLabelTheme(ByVal labelSource As
MapInfo.Mapping.LabelSource, ByVal columnExpr As String, ByVal _
themeAlias As String)
' Create new individual value label theme
Dim theme As IndividualValueLabelTheme = New _
IndividualValueLabelTheme(labelSource.Table, columnExpr, themeAlias)
' Add the label modifier to the label layer.
Dim labelModifier As MapInfo.Mapping.LabelModifier = CType(theme, _
MapInfo.Mapping.LabelModifier)
labelSource.Modifiers.Insert(0, labelModifier)
End Sub
個別値主題図とシリアライゼーション
v7.0.0 以降、パフォーマンスを向上する目的で、IndividualValueTheme (個別値主題図) および
IndividualValueLabelTheme (個別値ラベル主題図) のシリアライゼーションとデシリアライゼー
ションが変更されました。
変更により、主題図のシリアライゼーションの中で、主題図の Bin またはカテゴリのレコード カ
ウントがシリアライズされます。デシリアライゼーションの際は、レコード カウントは再計算さ
れなくなり、シリアライズされたレコード カウントが主題図に適用されます。この変更は、シリ
アライゼーション/デシリアライゼーションのパフォーマンスを向上するために行われました。
MapXtreme v7.2
304
開発者ガイド
第 14 章 : 主題図と凡例の使用
DotDensityTheme ( ドット密度主題図 )
デシリアライゼーション時に主題図のレコード カウントを更新することが期待されるアプリケー
ションの場合、デシリアライゼーション後に主題図の Bin またはカテゴリのレコード カウントを
更新するためのロジックを追加する必要があることに注意してください。IndividualValueTheme
および IndividualValueLabelTheme の場合、
MapInfo.Mapping.Thematics.IModifierTheme.RecomputeBins メソッドの呼び出しがこれに当たり
ます。
DotDensityTheme (ドット密度主題図)
ドット密度主題図は、主題図の式の数値に基づいてドットを作り、リージョンの塗りつぶしパ
ターンを描画するスタイル修飾子です。
ドット密度主題図は、ドットを使用して、領域やリージョンに関連するデータ値を示します。
リージョンに含まれるドットの総数は、リージョンのデータ値を表します。ある郡に 10,000 人の
高齢者がいて、1 つのドットが 100 人の高齢者を表す場合、その郡域には 100 個のドットが表示
されます。
DotDensityTheme クラスの用途
ドット密度主題図は、人口、ファースト フードの店舗数、あるブランドの炭酸飲料の販売店の数
など、大きな値のデータを 1 つのドットで表す場合に便利です。
たとえば、郡域ごとの人口を示すテーブルがある場合、ドット密度主題図を使用すれば、各郡域
での人口集中の度合いを表示できます。ドット密度主題図を制御するプロパティには、2 つの種類
があります。1 つのドットで示す値を指定できます。たとえば、ニューヨーク州レンセリア郡在住
の 20,000 人の高校生をドット密度主題図で表示する場合、1 つのドットで表す生徒数を 200 人と
指定できます。この郡を色分けすると、マップには 100 個のドットが描画されます。
VB の例
Public Shared Sub MapInfo_Mapping_Thematics_DotDensityTheme(ByVal map As
Map)
' Load a map based on one table
map.Load(New MapTableLoader("mexico.tab"))
' Create a dot density theme.
' Add it as a modifier.
Dim lyr As FeatureLayer = map.Layers("mexico")
Dim thm As MapInfo.Mapping.Thematics.DotDensityTheme = New
MapInfo.Mapping.Thematics.DotDensityTheme(lyr, "Pop_90", "mexico Pop",
System.Drawing.Color.Red, DotDensitySize.Large)
' thm.DotColor is System.Drawing.Color.Red
' thm.DotSize is DotDensitySize.Large
' Set each dot to represent 20,000 people
MapXtreme v7.2
305
開発者ガイド
第 14 章 : 主題図と凡例の使用
DotDensityTheme ( ドット密度主題図 )
thm.ValuePerDot = 20000
End Sub
二変数主題図マップ
二変数主題図では、ポイント オブジェクトまたはライン オブジェクトを使用して 2 つの主題変数
を表します。たとえば、星はティーンエージャーの数など 1 つの変数を表し、星に適用する青色
の塗りつぶしはティーンエージャーが 1 年間で買い物に費やす金額を表します。
MapX で二変数主題図マップを作成するには、2 つの主題図を作成し、それらのオブジェクトを重
ね合わせることによって、2 つの変数が表示されるようにします。
マップと変数の種類
二変数主題図に適した主題図マップは、レンジ主題図と個別値主題図のマップのみです。データ
の内容に基づいて、以下の二変数主題図の組み合わせのいずれかを選択できます。
•
レンジ主題図が 2 つ
•
レンジ主題図と個別値主題図が 1 つずつ
1 つの変数が数値以外の場合、いずれか 1 つを個別値主題図にする必要があります。2 つの変数が
どちらも数値以外の場合、二変数主題図を作成することはできません。
属性の表示
1 つのシンボル内で 2 つの変数を表示するには、変数ごとに別々のシンボル属性を選択することが
大切です。たとえば、両方の変数に色を選択することはできません。片方の色がもう片方の色に
よって上書きされてしまうからです。以下の組み合わせの中から選択します。
•
•
•
色とシンボルの種類
色とサイズ
サイズとシンボルの種類
シンボルの種類と数量との間には関連性がないので、シンボルの種類は名目データまたは数値以
外のデータでのみ使用してください。
VB の例
Public Shared Sub MapInfo_Mapping_Thematics_RangedThemeConstructor(ByVal
lyr As FeatureLayer)
Dim thm As MapInfo.Mapping.Thematics.RangedTheme = New _
MapInfo.Mapping.Thematics.RangedTheme(lyr, "Literacy", "Pop_1994", _
"Literacy Quantile by Pop", 4)
lyr.Modifiers.Append(thm)
End Sub
MapXtreme v7.2
306
開発者ガイド
第 14 章 : 主題図と凡例の使用
凡例の概要
凡例の概要
MapInfo.Mapping.Legends 名前空間には、主題図凡例とシンボル凡例を作成および表示するため
の、クラス、インターフェイス、列挙体が含まれています。凡例は、主題図またはシンボルの
LegendFrame の コ レ ク シ ョ ン で す。各フレームは LegendRow のコレクションを含み、各
LegendRow にはテキストおよびスタイル プロパティがあります。
主題図凡例
主題図凡例は、主題図で使用する色、シンボル、スタイルのキーを提供します。このキーは、
色、シンボル、スタイルに関する説明を提供します。
主題図凡例の用途
主題図凡例は、マップに主題図が含まれている場合に便利です。天気図で降水量を表示する場
合、濃さの異なる緑で色分けして降水量を示すことができます。主題図凡例は、一番濃い緑は降
雨量が最高であり、一番薄い緑は降雨量が最低であることを視覚的に説明するという点で、重要
な役割を果たします。
\Samples\Desktop\Features\ThemeLegend フォルダには、テーブルに基づいてレンジ主題図を作
成する方法、その凡例および凡例フレームを作成する方法、およびそれを修飾としてマップに追
加する方法を示すサンプル アプリケーションがあります。
シンボル凡例
シンボル凡例クラスを使用すると、シンボル凡例メタデータの読み取りや書き込みを実行できま
す。凡例は、テキストやメタデータのスタイルを使って、マップ上の各地図フィーチャを識別し
ます。
MapXtreme v7.2
307
開発者ガイド
第 14 章 : 主題図と凡例の使用
凡例の概要
シンボル凡例の用途
シンボル凡例は、マップ上の項目を示すオブジェクトを含んだマップを操作する場合に、非常に
便利です。たとえば、マップにランドマークがある場合、シンボル凡例が必要になります。病
院、学校、教会、空港は、それぞれ異なるシンボルで示されます。シンボル凡例は、マップ上に
あるさまざまなランドマークを視覚的に説明します。
シンボル凡例の作成方法を示すコード例については、『開発者リファレンス』の
MapInfo.Mapping.Legends.Legend クラスを参照してください。
凡例の書式設定
MapInfo.Mapping.Legends.LegendFormat クラスには、凡例内でのフレームの描画方法を制御する
プロパティが含まれています。配置、1 つの行や列で表示する凡例フレームの数、フレーム間のス
ペース、凡例のサイズやフレーム位置の自動調整など、表示プロパティを制御できます。
LegendFormat.FrameAlignment プロパティは、FramesPerRow (横方向の配置用) や
FramesPerColumn (縦方向の配置用) と一緒に使用します。
た と え ば、凡 例 に 含 ま れ て い る フ レームが 10 個あるとします。ここで、FrameAlignment を
Horizontal、FramesPerRow を 5 に設定した場合、それぞれ 5 つのフレームを含む 2 つの行が凡例
に表示されます。1 行につき 10 フレームを指定した場合は、10 フレーム分の幅を持つ 1 行に 10
個のフレームが表示されます。
縦方向の配置に関しても同じような指定を行うことができます。たとえば、フレームが 10 個ある
とします。ここで、FrameAlignment を Vertical、FramesPerColumn を 5 に設定した場合、それぞ
れ 2 つのフレームを含む 5 つの行 (2 列、5 行) が凡例に表示されます。フレームは、1 列あたり最
大 5 フレームまで整列されます。FramesPerColumn を 10 に設定した場合は、それぞれ 1 つのフ
レームを含む 10 の行が凡例に表示されます (1 列あたり 10 フレーム)。
MapXtreme v7.2
308
開発者ガイド
第 14 章 : 主題図と凡例の使用
凡例の概要
FramesPerRow および FramesPerColumn のデフォルト設定は 0 です。使用される値は、
LegendFrameRows.Count プロパティまたは LegendFrameColumns.Count プロパティで示された
行または列の現在のフレーム数です。
MapXtreme v7.2
309
開発者ガイド
15
マップのスタイル設定
MapXtreme に含まれるスタイルは、マップ フィーチャの外観だけでなく、
マッピング アプリケーションの数多くのコンポーネントに影響します。スタ
イルは、ラベル、テキスト、主題図、凡例、選択範囲、およびプレゼンテー
ションで使用されます。数多くの属性があり、これらを設定することにより、
希望のスタイルを自由にデザインできます。
この章では、MapXtreme フレームワーク、特に MapInfo.Styles 名前空間の観
点からスタイルについて説明します。
この章の構成
Š
Š
Š
Š
Š
MapInfo.Styles 名前空間の概要 . . . . . . .
スタイルの説明. . . . . . . . . . . . . . .
定義済みのスタイルと StyleRepository クラス
スタイルの使用. . . . . . . . . . . . . . .
スタイルのオーバーライド. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
311
312
316
317
318
第 15 章 : マップのスタイル設定
MapInfo.Styles 名前空間の概要
MapInfo.Styles 名前空間の概要
MapInfo.Styles 名前空間は、MapXtreme の新しい Styles オブジェクト モデルを強調表示します。
Style クラスは、すべてのスタイルのベース クラスです。Style の派生クラスには、AreaStyle、
BaseLineStyle、BaseInterior、BasePointStyle、CompositeStyle、Font、RasterStyle、TextStyle な
どがあります。BaseLineStyle の派生クラスには SimpleLineStyle があります。BaseInterior の派生
クラスに は SimpleInterior があ りま す。BasePointStyle の派生クラスには、BitmapPointStyle、
FontPointStyle、および SimpleVectorPointStyle があります。また、GridStyle は RasterStyle から
派生してグリッド固有のスタイル設定を含みます。StockStyles クラスは一般的な種類のスタイル
を作成するために用意されています。
抽象スタイル クラスの Style、BaseLineStyle、BaseInterior、または BasePointStyle をインスタン
ス化することはできません。SimpleLineStyle などの特定の種類を作成するか、CompositeStyle と
して作成する必要があります。
Style は、独立したオブジェクトであり、オブジェクト内には格納されません。テーブルにジオメトリ
フィールドが含まれる場合は、データ型である Style を含む Style フィールド (エイリアス MI_Style) も
含まれます。スタイル オーバーライドについては、Feature クラスは、FeatureStyleModifier および
FeatureOverrideStyleModifiers を提供します。この Style オブジェクト モデルは、スタイル ダイアログ
コントロールがいくつかのコレクション クラス (スタイル リポジトリ) を使ってスタイルを保持でき
るようにします。
すべてのスタイル クラスで、限定的に修飾する機能がサポートされています。
FeatureOverrideStyleModifiers に関するセクションを参照してください。
スタイルは、ライン、内部の塗りつぶし、ポイント スタイルなど、MapXtreme のさまざまな場面
で地理フィーチャを表すために使用されます。また、ラベル、テキスト、レイアウト、主題図、
オーバーライド、凡例、選択範囲などに欠かせないパーツでもあります。スタイル プロパティの
範囲は、標準的な色の塗りつぶし、ラインの幅およびポイント サイズから、背景色の効果、ポイ
ント スタイルとしてのビットマップ、および回転角度まで、多岐に渡ります。事実上、考えうる
MapXtreme v7.2
311
開発者ガイド
第 15 章 : マップのスタイル設定
スタイルの説明
すべてのスタイル プロパティを作成したアプリケーションに盛り込んで使用することができま
す。スタイルは、全体的にも、フィーチャごとでも変更可能です。現在の表示方法のオーバーラ
イドとして、または完全な変更として行います。
MapXtreme には、すぐに使用できる多数のサンプル スタイルが同梱されています。170 種類を超
える内部塗りつぶしパターン、約 120 種類のライン スタイル パターン、および約 70 種類のビッ
トマップ ポイント スタイル イメージがあります。ビットマップ イメージは、MS Paint や Paint
Shop Pro などのビットマップを作成できるアプリケーションで作成できます。イメージのサイズ
には事実上制限はありません。ただし、MapXtreme で表示できるかどうかは、利用可能なメモリ
量によります。イメージは四角形である必要はなく、最大 24 ビットの色深度を設定できます。イ
メージが希望の高さと幅で表示されるようにするには、BitmapPointStyles の [実寸で表示] オプ
ションを選択します。イメージを作成したら、CustSymb ディレクトリに配置します。カスタム
シンボルは C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x\CustSymb フォルダに格納
されます。
MapXtreme には、フォームや Web アプリケーションに簡単に追加できるスタイル コントロール
とスタイル ダイアログも付属しています。この章で説明するすべてのスタイル クラスをまとめた
Sample フォルダ内にある ChangeStyles と FeatureStyles のサンプル アプリケーションを参照し
てください。フォームのスタイル コントロールとスタイル ダイアログの詳細については、「第 7
章 : デスクトップ アプリケーション、コントロール、 ダイアログ、ツール」を参照してくださ
い。Web コントロールの詳細については、「第 5 章 : Web アプリケーション、コントロール、 お
よびツール」を参照してください。
サポートされているスタイル要素の表示については、「付録 F : スタイルのルックアップ」を参照
してください。
StyleFactory
StyleFactory クラスは、各種のスタイル パラメータから MapInfo Style オブジェクトを生成するた
めのメソッドを含む MapInfo.Styles から利用できます。たとえば、
MapInfo.Styles.StyleFactory.FromMBstring は、MapBasic スタイル句を入力文字列として受け取
り、CompositeStyle として返します。詳細およびコード例については、オンライン版『開発者リ
ファレンス』を参照してください。
スタイルの説明
AreaStyle
AreaStyle クラスには、リージョンの描画で使用するスタイル プロパティが含まれています。リー
ジョンは、BaseLineStyle および BaseInterior を使用して描画されます。
MapXtreme v7.2
312
開発者ガイド
第 15 章 : マップのスタイル設定
スタイルの説明
BitmapPointStyle
MapInfo BitmapPointStyle クラスには、カスタム ビットマップを使用してポイントを描画するため
のスタイル プロパティが含まれています。このクラスは、ポイントの位置をマークするために使
用します。BitmapPointStyle は、サポートされている 3 つのポイント スタイルの種類の 1 つで
す。残りの 2 つは FontPointStyle および SimpleVectorPointStyle です。
BitmapPointStyle には、ShowWhiteBackground プロパティがあります。false に設定すると、ビッ
トマップ内の白いピクセルはすべて透明になります。デフォルトでは、ShowWhiteBackground は
false に設定されています。たとえば、世界中のオフィスの場所を表すとき自社のロゴを使用した
いが、近隣の他のマップ フィーチャを覆いたくない場合があります。BitmapPointStyles の表示方
法を制御するには、他にも設定があります。詳細については、オンライン ヘルプで BitmapStyles
列挙体を参照してください。
MapXtreme には、すぐに使用できる多数のビットマップ ポイント スタイルが同梱されています。
これらのスタイルは、CustSymb ディレクトリにあります。このディレクトリには、独自のビット
マップを追加することもできます。イメージの許容最大数は 32,767 個です。
CompositeStyle
CompositeStyle クラスには、デフォルトのスタイル、修飾子のスタイル、およびレイヤ オーバーラ
イド スタイルで使用されるすべての種類のスタイルのコレクションが含まれています。また
CompositeStyle は、Collection オブジェクト タイプのスタイルを説明する場合にも使用できます。
CompositeStyle に含まれるスタイルの種類として、AreaStyle、BaseLineStyle 派生クラス、
TextStyle、BasePointStyle 派生クラス、RasterStyle、および GridStyle があります。CompositeStyle
はこれらの種類の一部またはすべてを使用して作成できますが、上記のスタイルを 1 つ以上含んで
いる必要があります。
たとえば、スタイルのオーバーライドを作成して (FeatureOverrideStyleModifier)、レイヤ内にあるすべ
てのフィーチャの外観を変更できます。1 つのレイヤにはポイント、ライン、リージョンを格納できる
ので、スタイルのオーバーライドを作成するときはポイント、ライン、エリアのどのスタイルかを指
定しなければならない場合があります。必要なスタイルのタイプはすべて、1 つの CompositeStyle オ
ブジェクト内で指定できます。指定後、このオブジェクトは FeatureOverrideStyleModifier コンストラク
タに渡されます。
SimpleInterior
MapInfo SimpleInterior クラスには、リージョン内部の塗りつぶしで使用するスタイル プロパティ
が含まれています。SimpleInterior 属性には、パターン、前景色と背景色、背景の透過などがあり
ます。デフォルトの SimpleInterior は、白の塗りつぶしです。
MapXtreme v7.2
313
開発者ガイド
第 15 章 : マップのスタイル設定
スタイルの説明
Font
MapInfo Font クラスには、テキストの描画で使用するスタイル プロパティが含まれています。
フォントの属性には、太字、斜字、下線、打ち消し線、陰影、蛍光色、すべて大文字、ダブル ス
ペース、サイズ、前景色、背景色などがあります。フォントの種類 (Arial、Times、New Roman な
ど) およびフォント サイズも変更できます。白抜きのフォント プロパティは削除されました。白
抜きを作成するには、黒の背景色で蛍光色を使用します。
FontPointStyle
FontPointStyle クラスには、主に MapInfo.Styles.Font クラスを使用したポイントの描画で使用す
るスタイル プロパティが含まれています。ポイント サイズ、フォント カラー、回転角度、および
その他のフォント プロパティをカスタマイズできます。許容される最大ポイント サイズは 240 ポ
イントです。
GridStyle
GridStyle は、色の屈折、null セルの色、透明設定など、グリッドに関する表示スタイル情報が含
まれるヘルパ クラスです。グリッドは、連続して色調が変化するマップです。この色調の変化
は、データ値が補間されていることを表します。グリッドの詳細については、「第 17 章 : ラスタ
とグリッドの操作」を参照してください。
RasterStyle
RasterStyle は、明るさ、コントラスト、グレー スケール (色、オン/オフ)、透明性、透過性など、
ラスタ イメージの表示スタイル情報が含まれるヘルパ クラスです。ラスタ イメージの詳細につい
ては、「第 17 章 : ラスタとグリッドの操作」を参照してください。
Hillshade
Hillshade は、グリッドに対する陰影処理のパラメータの保存で使用するヘルパ クラスです。陰影
処理は、レリーフ色分けともいい、グリッド マップに追加してマップ上で光源の効果を表示できま
す。これにより、グリッド マップにより多くの定義が加わるため、標高マップでは特に便利です。
陰影処理のプロパティには、光源の水平方向と垂直方向の角度、垂直方向の比率因数などがありま
す。グリッドの詳細については、「第 17 章 : ラスタとグリッドの操作」を参照してください。
Inflection
Inflection は、単一の屈折点を保持する場合に使用します。この屈折点が色と値を関連付けていま
す。グリッドには屈折の配列が含まれており、その色を表しています。グリッド マップとは、領域
に渡って色調の変化を表示するマップのことです。1 つの色から隣の色への遷移は、屈折によるもの
です。グリッドの詳細については、「第 17 章 : ラスタとグリッドの操作」を参照してください。
MapXtreme v7.2
314
開発者ガイド
第 15 章 : マップのスタイル設定
スタイルの説明
SimpleLineStyle
SimpleLineStyle クラスには、折れ線の描画で使用する MapBasic Pen 句に基づいたスタイル プロ
パティが含まれています。道路、ケーブル路線、リージョンの境界線などのマップ フィーチャで
使用されます。SimpleLineStyles を定義する属性には、パターン、幅 (ピクセルまたはポイント)、
色 な ど が あ り ま す。デ フ ォ ル ト の SimpleLineStyle は、幅が 1 ピクセルの黒の実線です。
SimpleLineStyle の単位は、ピクセル (デフォルト) またはポイントです。
MapInfo.Styles 名前空間の LineWidth クラスは、ライン スタイルの幅と単位の定義で使用するヘル
パ クラスです。
BasePointStyle
BasePointStyle は、すべての MapInfo ポイント スタイルの抽象ベース クラスです。インスタンス
化することはできません。SimpleVectorPointStyle、BitmapPointStyle、および FontPointStyle は、
このクラスから派生しています。
BaseLineStyle
BaseLineStyle は、すべての MapInfo ライン スタイルの抽象ベース クラスです。インスタンス化
することはできません。SimpleLineStyle は、このクラスから派生しています。
BaseInterior
BaseInterior は、すべての MapInfo 内部スタイルの抽象ベース クラスです。インスタンス化するこ
とはできません。SimpleInterior は、このクラスから派生しています。
StockStyles
このクラスには、さまざななスタイル オブジェクトを作成するための静的メソッドが含まれていま
す。たとえば、黒、青、赤、白の内部、黒、青、赤のライン、中抜きの内部とライン、デフォルト
のフォントとポイント スタイルなどのスタイル オブジェクトを作成できます。
SimpleLineStyle redLine = StockStyles.RedLineStyle( );
TextStyle
TextStyle ク ラ ス に は、テ キ ス ト の 描画で使用するスタイル プロパティが含まれています。
MapInfo.Styles.Font ク ラ ス と、引 出し線用の BaseLineStyle 派生クラスが含まれています。
BaseLineStyle はオプションです (TextStyle に含まれていない場合があります)。
MapXtreme v7.2
315
開発者ガイド
第 15 章 : マップのスタイル設定
定義済みのスタイルと StyleRepository クラス
SimpleVectorPointStyle
このクラスには、MapInfo 3.0 互換の専用フォント (MapInfow.fnt は MapXtreme に付属) を使用し
てポイントを描画するためのスタイル プロパティが含まれています。SimpleVectorPointStyle プロ
パティには、ポイントについて描画する実際のシンボルの色、ポイント サイズ、形状コードなど
があります。標準のシンボル セットには 31 ~ 67 種類のシンボルが含まれています。
L
MapInfo Symbol と呼ばれる別のシンボル フォント セットは、FontPointStyle クラスを使用
して表示される TrueType フォント セットです。
定義済みのスタイルと StyleRepository クラス
MapXtreme には、ビットマップ ポイント スタイルとして使用できる、数多くの主題図をカバーす
るさまざまなビットマップ イメージが付属しています。170 種類を超える塗りつぶしパターンや
ライン スタイルも利用できます。これらのスタイルはすべてアプリケーションによってインス
トールされ、スタイル ダイアログ (LineStyleDlg など) またはさまざまな StyleRepository クラスか
らアクセスできます。
サポートされているスタイル要素の表示については、「付録 F : スタイルのルックアップ」を参照
してください。
StyleRepository クラス
StyleRepository クラスには、スタイル コレクション クラス (VectorSymbolRepository、
BitmapSymbolRepository、LineStyleRepository、InteriorStyleRepository) が含まれています。これ
らのクラスを使用すると、特定のファイル (複数可) またはディレクトリから新しいスタイルを持
つコレクションを再読み込みできるほか、現在のすべてのスタイルをループ処理することができ
ます。また、このクラスには、システムにインストールされた TrueType フォントに関する情報を
表すリポジトリ (TrueTypeFontInfoRepository) も含まれています。
VectorSymbolRepository は、MapInfo 3.0 互換シンボル セットからのシンボル セットを表しま
す。BitmapSymbolRepository は、現在 CustSymb ディレクトリにあるイメージ セットを表しま
す。LineStyleRepository は、ライン スタイルで利用できる現在のパターン セットを表します。
InteriorStyleRepository は、利用できる内部パターン セットを表します。
MapXtreme v7.2
316
開発者ガイド
第 15 章 : マップのスタイル設定
スタイルの使用
スタイルの使用
スタイルとレイヤ管理
スタイルを変更およびオーバライドするには、設計時または実行時に LayerControl を使用します。
MapInfo.Windows.Controls.LayerControl オブジェクト モデルの概要については、LayerControl サン
プル アプリケーションを参照してください。このコード サンプルでは、LayerControl オブジェクト
を直接フォーム上で使用します。LayerControlDlg の使用方法は示していません。このクラスは、関
連はありますが、別のクラスです。LayerControlDlg クラスは LayerControl プロパティを公開して
いるので、このコード サンプルで示すすべての操作は、LayerControlDlg オブジェクトにも適用で
きます。
LayerControl については、「第 7 章 : デスクトップ アプリケーション、コントロール、 ダイアロ
グ、ツール」および「第 23 章 : ワークスペース マネージャ」で詳しく説明しています。
カスタム ビットマップ スタイルの作成
ビットマップ イメージは、MS Paint や Paint Shop Pro などのビットマップを作成できるアプリ
ケ ー シ ョ ン で 作 成 で き ま す。イ メ ー ジ の サ イ ズ に は 事 実 上 制 限 は あ り ま せ ん。た だ し、
MapXtreme で表示できるかどうかは、利用可能なメモリ量によります。イメージは四角形である
必要はなく、最大 24 ビットの色深度を設定できます。イメージが希望の高さと幅で表示されるよ
うにするには、BitmapPointStyles の [実寸で表示] オプションを選択します。イメージを作成した
ら、CustSymb ディレクトリに配置します。
MapXtreme v7.2
317
開発者ガイド
第 15 章 : マップのスタイル設定
スタイルのオーバーライド
スタイルのオーバーライド
フィーチャのスタイルは、新しいスタイルをテーブルに保存することにより、永久に変更できま
す。また、フィーチャの現在のスタイルをオーバーライドすることによって、現在の表示 (永続的
な表示ではない) を変更することもできます。たとえば、レンジ主題図ではリージョン オブジェク
トのスタイルをオーバーライドして、そのオブジェクトを色分けします。詳細については、
「第 14 章 : 主題図と凡例の使用」を参照してください。
ラベル スタイルもオーバーライドできます。ここでは、フィーチャの主なスタイル オーバーライ
ド クラ ス に つ い て 説 明 し ま す。フィーチャとラベルの詳細については、Mapping 名前空間
「Layers」 および 「Labels」 に関する章を参照してください。
FeatureOverrideStyleModifiers
このクラスは FeatureStyleModifier をインプリメントして、フィーチャーのスタイルをオーバーラ
イドします。その Style プロパティは複合スタイル オブジェクトであり、オーバーライドする
フィーチャの部分を指定します。
Modify() メソッドに渡されるスタイル オブジェクトのコンテンツが、描画するフィーチャごとに
動的に変化するようになりました。その結果、スタイル修飾子を含むレイヤがすばやく描画され
るようになりました。したがって、アプリケーションの別の場所でスタイル オブジェクトを使用
する必要がある場合は、必ずそのコピーを作成する必要があります。また、
FeatureStyleModifier.Modify() メソッドに渡される、スタイル スタック内の CompositeStyles に対
して、Changed イベントは発生しなくなりました。
コード サンプル: FeatureOverrideStyleModifier
次の例では、FeatureOverrideStyleModifier とレイヤの FeatureStyleModifiers を使用して、マップ
内のさまざまなフィーチャのスタイルを変更する方法を示します。
このコードは ChangeStyles サンプル アプリケーションからの抜粋です。各国の首都のレイヤ
(worldcap) を 1 つの赤色のシンボルでオーバーライドします。ただし、ポイント サイズはそのま
まです。
VB の例
'Get the layer we want
Dim _lyr As FeatureLayer = Me.mapControl1.Map.Layers("worldcap")
'Create a sparse point style
Dim vs As MapInfo.Styles.SimpleVectorPointStyle = New _
SimpleVectorPointStyle
'Just change the color and code and attributes flag to indicate that
vs.Code = 55
vs.PointSize = 25
vs.Color = System.Drawing.Color.Red
' And apply to the layer
MapXtreme v7.2
318
開発者ガイド
第 15 章 : マップのスタイル設定
スタイルのオーバーライド
Dim fsm As FeatureOverrideStyleModifier = New _
FeatureOverrideStyleModifier(Nothing, New _
MapInfo.Styles.CompositeStyle(vs))
_lyr.Modifiers.Append(fsm)
Me.mapControl1.Map.Zoom = New MapInfo.Geometry.Distance(6250, _
MapInfo.Geometry.DistanceUnit.Mile)
End Sub
MapXtreme v7.2
319
開発者ガイド
16
空間オブジェクトと座標系
こ の 章 で は、MapInfo.Geometry 名 前 空 間 について説明し、Geometry オブ
ジェクトの作成と操作を行うアプリケーションの作成に関する解説と例を示し
ます。
この章の構成
Š
Š
Š
Š
Š
MapInfo.Geometry 名前空間とは . .
ジオメトリ. . . . . . . . . . . . .
マップへの FeatureGeometry の追加 .
ポリゴン内のポイントの確認. . . . .
座標系. . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
321
321
328
330
331
第 16 章 : 空間オブジェクトと座標系
MapInfo.Geometry 名前空間とは
MapInfo.Geometry 名前空間とは
MapInfo.Geometry 名前空間は、ジオメトリ オブジェクトおよびそれを使用する座標系の作成と操
作に使用されます。Geometry オブジェクトは、マップ内で、都市などの 1 つのポイント (Point オ
ブジェクトで表示)、国境などの境界線 (MultiCurve オブジェクトで表示)、および国や郵便番号領
域などのリージョン (MultiPolygon オブジェクトで表示) を表示するのに使用されます。
MapInfo.Geometry 名前空間内のクラス、インターフェイス、および列挙体は、マップ上でジオメト
リ フィーチャの表示に使用されるジオメトリと座標系を表す型を定義します。Geometry モデルで
は、FeatureGeometry オブジェクト上の Z 値と M 値がサポートされます。インターフェイスでは、
ジオメトリ オブジェクトの作成と編集を行うことができます。Buffer、Combine、Difference、
Intersection などのメソッドでは、1 つのオブジェクトまたはオブジェクトのペアに対するオブジェ
クト処理を行います。
ジオメトリ
Geometry クラスでは、Geometry オブジェクトの作成、編集、およびその他の操作を行うことがで
きます。Geometry クラスから継承する各クラス、および Geometry オブジェクトの表示型には、
Point、MultiPoint、Polygon、MultiPolygon、Curve、CurveSegment、LineString、および Ring が含
まれます。Rectangle、RoundedRectangle、Ellipse、LegacyArc、および LegacyText などのレガ
シー クラスも、Geometry から継承されます。
Geometry クラスは MapInfo Geometry オブジェクト モデルの最上層を表します。これは抽象クラ
スであり、インスタンス化することはできません。このクラスから派生しているすべてのクラス
に、それぞれの座標系に関する情報が含まれています。また、どのクラスも自身をコピーし、他
の Geometry オブジェクトと自身が等しいかどうかを比較することができます。
次の図は、Geometry モデルを表しています。
MapXtreme v7.2
321
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
ジオメトリ
Geometry オブジェクト
MapXtreme のすべての Geometry オブジェクトは特定の座標系で作成され、作成後の座標系は変
更できません。オブジェクトの座標系を変更する必要がある場合には、新しい座標系でそのオブ
ジェクトのコピーを作成します。
Geometry オブジェクトの編集
すべての Geometry オブジェクトには、そのオブジェクトを編集モードにするエディタへのイン
ターフェイスを取得するメソッドが含まれています。編集の終了後、EditingComplete() メソッド
を呼び出して、オブジェクトの編集が完了したことを宣言する必要があります。EditingComplete()
を呼び出すと、Geometry に含まれるオブジェクトの順序が変更され、すべての参照が削除される
ため、オブジェクトにもう一度アクセスするためには再整理が必要になります。
たとえば、MultiPolygon を作成した後、それを編集するとします。この Polygon の内部にある Ring
のノードを、Polygon の外部に誤って移動すると、Polygon が無効になります。EditComplete を呼
び出すと、MultiPolygon に含まれるすべてのオブジェクトが再整理され、問題が解決されます。
MapXtreme オブジェクト モデルの各 Geometry オブジェクトについては、以降の各セクションで
説明します。
MapXtreme v7.2
322
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
ジオメトリ
FeatureGeometry オブジェクト
FeatureGeometry クラスは、テーブル内に配置して Feature および FeatureCollection に含めること
ができるクラスを含むように特別に設計されています。マップに何かを表示するためには、それを
テーブルに入れる必要があります。したがって、FeatureGeometry オブジェクトは定義に従ってこ
のテーブルに含まれています。Geometry のサブクラスであり、FeatureGeometry のサブクラスで
はないオブジェクトは、テーブルに保存することも、また Feature あるいは FeatureCollection の一
部にすることもできません。このような操作を行うと、例外が発生するか、プログラムがコンパイ
ルされません。FeatureGeometry クラスは、Geometry クラスと同様に抽象クラスであり、インス
タンス化することはできません。
M 値と Z 値のサポート
フィーチャ ジオメトリでは、オブジェクトの各ノードで M 値と Z 値の読み取りおよび書き込みが
サポートされています。
線形オブジェクトに対する M 値と Z 値の読み取りおよび書き込みのサポートは、MapXtreme
Geometry モ デ ルの 拡張 によ って 実現されました。FeatureGeometry オブジェクト (Point、
MultiPoint、MultiPolygon、MultiCurve、FeatureGeometryCollection) は、各ノードに対して X、
Y、Z、M の各値を保持できるようになっています。
IsMeasured and Is3D プロパティによって、オブジェクトが M 値または Z 値を持つかどうかを確
認できます。各ノードの M 値または Z 値を読み取ったり変更したりするために、追加のプロパ
ティおよびメソッドが用意されています。M 値と Z 値の最小および最大範囲も取得できます。
MapXtreme には、FeatureGeometry 作成および編集機能が用意されています。詳細については、
『開発者リファレンス』で MapInfo.Geometry.FeatureGeometry クラスの説明を参照してください。
MultiCurve の M 値は、線形ネットワーク アプリケーションで資産、イベント、条件を追跡および
管理するための貴重な情報を提供します。「第 21 章 : 線形参照」を参照してください。
Point
Point は FeatureGeometry クラスから派生し、マップ上の一点を表します。Point は MultiPoint コ
レクションに含まれ、集合的に操作を行うことができます。
次のコード例を使用すると、Point の作成をモデル化することができます。
using MapInfo.Geometry;
using Mapinfo.Design.Windows;
CoordSys longLatNad83;
CoordSysFactory coordSysFactory = new CoordSysFactory();
longLatNad83 = coordSysFactory.CreateLongLat
(MapInfo.Geometry.DatumID.NAD83);
DPoint point = new DPoint(0.0, 0.0);
Point pointGeometry = new Point(LongLatNad83, point);
MapXtreme v7.2
323
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
ジオメトリ
MultiPoint
MultiPoint には、順序付けされておらず接続されていない Point のセットが含まれており、複数の
ポイントに対して複数の操作を行うのに便利です。
次のコード例を使用すると、MultiPoint オブジェクトの作成をモデル化することができます。
using MapInfo.Geometry;
CoordSys longLatNad83;
CoordSysFactory coordSysFactory = new CoordSysFactory();
longLatNad83=coordSysFactory.CreateLongLat
(MapInfo.Geometry.DatumID.NAD83);
MultiPoint multiPointGeometry = new MultiPoint
(longLatNad83, pointArray);
ここで、pointArray は DPoints の配列です。
MultiCurve
MultiCurve クラスは FeatureGeometry の派生クラスです。このクラスには、Curve のセットが格
納されています。Curve どうしは接続されていない場合もあります。これらの Curve は、接続す
ることも離すこともできます。また、互いに交差または重なり合うこともできるなど、さまざま
な方法で相互作用します。
Geometry オブジェクト モデルは、1 つの Curve に対して複数の CurveSegment をサポートして
います。ただし、現在のバージョンの MapInfo エンジンでは、FeatureGeometry に属する Curve (
つまり、MultiCurve) に格納できる CurveSegment が 1 つに制限されています。この制限は現在の
TAB ファイル形式から派生しており、このバージョンの MapInfo では大部分がそのまま残されて
います。したがって、制限は FeatureGeometry オブジェクトのみに関係します。
こ の コ ン ス ト ラ ク タ を 使 用 し て MultiCurve を作成するとき、いずれかの Curve に複数の
CurveSegment が含まれる場合は、Curve ごとに常に 1 つの CurveSegment しか含まれないよう
に、作成された MultiCurve 内の実際の Curve が変更されます。現在、存在する CurveSegment の
唯 一 の 型 は LineString で す。複 数 の LineString CurveSegment が含まれる Curve は、複数の
LineString を接続して大きな 1 つの LineString を形成します。
MultiCurve に追加され、複数の CurveSegment を含む Curve はすべて、編集完了 (EditingComplete()
を呼び出して宣言) 時に上記と同様の方法で変更され、1 つの CurveSegment を持つ Curve が生成さ
れます。MultiCurve の Curve には常に 1 つの CurveSegment しか格納できないという制限は、
EllipticalArc、CircularArc、Spline などの新しい種類の CurveSegment の導入や TAB ファイル形式の
変更に伴い、MapInfo の将来のバージョンでは削除される予定です。また、空の Curve は、生成中お
よび編集完了時に MultiCurve から自動的に削除されます。
MapInfo TAB ファイル内の 2 つのポイントで構成される Line オブジェクトは、MultiCurve
FeatureGeometry オブジェクトになります。これらのオブジェクトは、MultiCurve の IsLegacyLine
プロパティを使用することにより、2 ポイントの Line として検出できます。
MultiCurve オブジェクトを作成したり編集したりするためのコード例については、『開発者リ
ファレンス』を参照してください。
MapXtreme v7.2
324
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
ジオメトリ
MultiCurve の指標値
Geometry オブジェクト モデルでは、FeatureGeometry オブジェクトの M 値と Z 値がサポートさ
れています。M 値 (指標値) は、MultiCurve オブジェクトのノード上でマッピングや分析の対象と
なるもの (物理的資産、条件、イベントなど) を記述するデータを保持します。M 値は、線形リ
ファレンスおよび動的セグメンテーションで重要な役割を持ちます。詳細については、「第 21 章
: 線形参照」を参照してください。
Curve の並べ替え順序
MultiCurve 内の Curve の順番は、Curve の生成中、コンストラクタに渡された Curve の配列との
比較時、および編集完了時に変更される可能性があります。これらの理由 (Curve の順番の変更、
空の Curve の削除、現在のバージョンの制限など) により、編集前および編集中の MultiCurve 内
に含まれる Curve への参照は、編集完了後、つまり、EditingComplete() が実行されると無効にな
ります。これらのオブジェクトが参照されると、ObjectDisposedException がスローされます。編
集後に有効な参照を取得するには、FeatureGeometry の各部分を再取得します。
Curve の並べ替え順序は、MultiCurve に対して何らかの線形リファレンス操作を呼び出すときに、
重 要 な 要 素 と な り ま す。MapXtreme には、個々の Curve の並べ替え順序を処理するための
MapInfo.LinearReferencing.ICurveSorter インターフェイスが用意されています。並べ替え順序を
指定しないと、MapXtreme では、最も長い Curve が最初に返され、残りの Curve は順不同で返さ
れます。たとえば、順序が指定されていない MultiCurve に対して CalculateMissingMeasures を使
用した場合、MapXtreme では、MultiCurve 内での位置に基づいて、ノードに対して誤った M 値を
計算する可能性があります。正しい並べ替え順序を指定することで、このような問題を避けるこ
とができます。
詳細については、「曲線の順序」を参照してください。
LineString
LineString は、線形に接続された連続するポイントの指向性を持つ集まりを表します。LineString
内の連続する 2 つのポイントはいずれも直線で接続されます。LineString は Curve または Ring の
一部になることができます。また、スタンドアロン Geometry として存在することも可能です。
Curve または Ring の一部である LineString は、そのコンテナの座標系の LineString を継承してい
ます。スタンドアロンの LineStrings は空でもかまいません。編集モード以外の Curve または Ring
に含まれる LineString は空にできません。また、1 つのポイントだけを含むことができません。
コード例については、『開発者リファレンス』を参照してください。
Rectangle
Rectangle Geometry には、Rectangle の左下隅と右上隅の角を表す 2 つのポイントが含まれま
す。残りの 2 つのポイントは暗黙的に設定されます。Rectangle は常に軸整列され、座標系に関係
なく形状は常に長方形として表示され、投影されません。座標系によって生じる可能性のある歪
みは含まれません。
コード例については、『開発者リファレンス』を参照してください。
MapXtreme v7.2
325
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
ジオメトリ
RoundedRectangle
Rounded Rectangle は Rectangle と同様に動作しますが、角に表示時のみ丸みが適用されます。
角の丸みは四半円として表示されます。この四半円の半径は CornerRadius パラメータによって制
御されます。
RoundedRectangle オブジェクトは Rectangle オブジェクトと同様に 2 つのポイントにより定義
し、常に平面的に、かつ軸整列して表示されるため、一般的には見た目をよくする目的で使用しま
す。Rectangle オブジェクトではさまざまな操作 (たとえば Combine) が可能ですが、内部的には
Rectangle オブジェクトの MultiPolygon のコピーが使用されます。生成される MultiPolygon は 5 つ
のポイントを持ち (最初のポイントと最後のポイントは同一)、座標系に影響されます。場合によっ
ては、変換された Rectangle は長方形として表示されないことがあります。RoundedRectangle を
FeatureGeometry オブジェクトに変換するには、CreateMultiPolygon メソッドを使用します。
コード例については、『開発者リファレンス』を参照してください。
Ellipse
Ellipse は、軸整列した長方形内に描画されます。この長方形は DRect で定義されます。DRect は
長方形の対角となる 2 つのポイントにより定義され、残りの 2 角のポイントは暗黙的に適用され
ます。Ellipse は、座標系 (および座標系による歪み) に関係なく平面的に表示されます。
Ellipse オブジェクトは 2 つのポイントにより定義し、常に平面的に、かつ軸整列して表示される
ため、一般的には見た目をよくする目的で使用します。Ellipse オブジェクトではさまざまな操作
が可能ですが、内部的には Ellipse オブジェクトの MultiPolygon のコピーが使用されます。生成さ
れる MultiPolygon は座標系の影響を受けるので、場合によっては、完全な楕円として表示されな
いことがあります。
コード例については、『開発者リファレンス』を参照してください。
LegacyArc
LegacyArc オブジェクトは Ellipse の一部であり、DRect、開始角度、および終了角度を使用して
定義されます。Ellipse は、DRect を使用して定義された長方形の中に描画されます。内部に
Ellipse が描画された長方形は軸整列されており、使用する座標系に関係なく形状は必ず長方形と
なります。角度は正の X 軸上を 0 度とし、反時計回りの方向を正の角度として計測されます。最
小計測単位は 10 分の 1 度で、0.0 ~ 360.0 度の値が保存されます。
LegacyArc オブジェクトは 2 つのポイント (DRect 用) と角度を使用して定義され、常に軸整列し
て表示されるため、一般的には見た目をよくする目的で使用します。LegacyArc オブジェクトでは
さまざまな操作が可能ですが、内部的には LegacyArc の MultiCurve のコピーが使用されます。こ
のため、予期しない結果につながることがあります。
コード例については、『開発者リファレンス』を参照してください。
MapXtreme v7.2
326
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
ジオメトリ
LegacyText
LegacyText オブジェクトは、テキスト オブジェクトと同等の MapInfo Professional オブジェクト
です。データベースが Text をサポートしない場合には、その形式を使用すると LegacyText オブ
ジェクトが失われる可能性があります。LegacyText オブジェクトは、左下のアンカーポイントを
指定することにより、地理的にサイズが設定された長方形内に配置されます。テキストのポイン
ト サイズは、長方形の中に収まる最適なサイズに基づきます。
LegacyText オブジェクトは、Geometry モデルにうまく適合しません。Combineなど、Geometry
FeatureGeometry クラスに使用できるメソッドのいくつかは、LegacyText に対しては意味を持た
ず、NotSupportedException を ス ロ ーします。Text オブジェクトは、MapInfo ネイティブ TAB
ファイル内の Geometry フィールドに存在します。LegacyText クラスは、これらのオブジェクト
にアクセスする方法を提供します。LegacyText オブジェクトの特定の動作については、オンライ
ン リファレンスを参照してください。
Geometry オブジェクト
FeatureGeometry オブジェクト以外の Geometry オブジェクトは、マップ上に表示される適切な
FeatureGeometry オブジェクトに変換する必要があります。大部分の FeatureGeometry クラス
は、適切な Geometry オブジェクトを取り、新しい FeatureGeometry オブジェクトを作成するコ
ンストラクタを持っています。
using MapInfo.Geometry;
Curve curve = new Curve(csys, lineString);
MultiCurve multiCurve = new MultiCurve(curve.CoordSys, curve);
上記のコードでは、コード内の別の場所で定義されている 2 つのパラメータ CoordSys (csys) お
よび LineString (lineString) を使用して Curve を作成しています。次に、Curve と Curve の
CoordSys プロパティを使用して、新しい MultiCurve が作成されます。
上記の例では、参照を共有できないため、オブジェクトから作成された FeatureGeometries 内と
同様に、元のオブジェクトのコピーが作成されます。
Curve
Curve クラスは、CurveSegmentList の継承クラスで、連続した線形の Geometry を表します。
Curve には CurveSegment のコレクションが含まれます。これらは必ず連続していなければなり
ません。このクラスは、将来の拡張と OGC 標準への参加を可能にするため、モデルに含まれてい
ます。
次のコード例を使用すると、Curve の作成をモデル化することができます。
using MapInfo.Geometry;
DPoint[] points = new DPoint[4];
points[0]= new DPoint(-88.135215,43.998892);
points[1]= new DPoint(-104.875119,43.998892);
points[2]= new DPoint(-120.242895,47.048364);
MapXtreme v7.2
327
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
マップへの FeatureGeometry の追加
points[3]= new DPoint(-89.135215 46.998892);
LineString lineString = new LineString(csys, points);
Curve curve = new Curve(csys, lineString);
CurveSegment
現 在、CurveSegment は LineString としてのみ使用できます。将来のバージョンで Spline、
CircularArc、および EllipticalArc CurveSegments をサポートできるよう設計されています。Curve
および Ring は CurveSegment から構成されます。
Ring
Ring は CurveSegment のコレクションです。これらは必ず連続しており、かつ閉じていなければ
なりません。
次のコード例を使用すると、Ring の作成をモデル化することができます。
using MapInfo.Geometry;
dPoints = new DPoint[102];
dPoints[0] = new DPoint(-109.171279,49.214879);
dPoints[1] = new DPoint(-109.169283,49.241794);
...
dPoints[101] = new DPoint(-109.171279,49.214879);
Ring newRing = new Ring(longLatNad83, CurveSegmentType.Linear, dPoints);
Polygon
Polygon は Ring で構成されるオブジェクトです。Polygon は、少なくとも 1 つ Ring を持っていな
け れ ば な り ま せ ん。そ の Ring は、Polygon の外部境界を定義するものです。これ以外に、
Polygon の内部にあり、Polygon の穴を定義する Ring が含まれる場合があります。Ring を他の
Ring の内部に配置すると、そのオブジェクトは MultiPolygon となります。
次のコード例を使用すると、Polygon の作成をモデル化することができます。
using MapInfo.Geometry;
DPoint[][] points = new DPoint[1][];
points[0] = polyPointArrays[0];
Polygon polygon = new Polygon
(longLatNad83, CurveSegmentType.Linear, polyPointArrays[0]);
マップへの FeatureGeometry の追加
ジオメトリを作成したら、表示、選択、ラベル付けなどのマップ関連の操作を行えるよう、その
ジオメトリをマップに追加する必要があります。
Public Shared Sub MapInfo_Mapping_HowDoICreateFeatureAddToMap(ByVal
mapControl1 As MapControl, ByVal connection As MIConnection, ByVal x As _
MapXtreme v7.2
328
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
マップへの FeatureGeometry の追加
Double, ByVal y As Double)
Dim map As Map = mapControl1.Map
'uses wldcty25 as a template
Dim table As Table = _
MapInfo.Engine.Session.Current.Catalog.GetTable("wldcty25")
' create a temp table and add a featurelayer for it
Dim coordSys As CoordSys = map.GetDisplayCoordSys()
Dim tableInfo As TableInfoMemTable = New TableInfoMemTable("temp")
tableInfo.Temporary = True
' add Geometry column
Dim column As Column
' specify coordsys for object column
column = New GeometryColumn(coordSys)
column.Alias = "MI_Geometry"
column.DataType = MIDbType.FeatureGeometry
tableInfo.Columns.Add(column)
' add style column
column = New Column
column.Alias = "MI_Style"
column.DataType = MIDbType.Style
tableInfo.Columns.Add(column)
Dim pointTable As Table = _
Session.Current.Catalog.CreateTable(tableInfo)
' Set the location and display style of the point
Dim Geometry As FeatureGeometry = _
New MapInfo.Geometry.Point(coordSys, x, y)
Dim vStyle As SimpleVectorPointStyle = _
New SimpleVectorPointStyle(37, Color.Red, 14)
Dim cStyle As CompositeStyle = _
New MapInfo.Styles.CompositeStyle(vStyle)
'Update the table with the location and style of the new feature
Dim cmd As MICommand = connection.CreateCommand()
cmd.Parameters.Add("Geometry", MIDbType.FeatureGeometry)
cmd.Parameters.Add("style", MIDbType.Style)
cmd.CommandText = "Insert Into temp (MI_Geometry,MI_Style) values _
(Geometry,style)"
cmd.Prepare()
cmd.Parameters(0).Value = Geometry
cmd.Parameters(1).Value = cStyle
Dim nchanged As Integer = cmd.ExecuteNonQuery()
cmd.Dispose()
'add the table to the map
map.Layers.Add(New MapInfo.Mapping.FeatureLayer(pointTable))
MapXtreme v7.2
329
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
ポリゴン内のポイントの確認
End Sub
ポリゴン内のポイントの確認
次のコード例は、ポイントが FeatureGeometry (Multipolygon) の境界内に存在するか、境界線上に
存在するか、境界の範囲外に存在するかを確認する方法を示しています。
Public Shared Sub MapInfoGeometryContainsPoint()
Dim coordSysFactory As CoordSysFactory = Session.Current.CoordSysFactory
Dim coordSys As CoordSys = _
coordSysFactory.CreateLongLat(MapInfo.Geometry.DatumID.NAD83)
Dim points(6) As DPoint
points(0) = New DPoint(-0.705036, -0.122302)
points(1) = New DPoint(-0.446043, 0.486811)
points(2) = New DPoint(0.235012, 0.36211)
points(3) = New DPoint(0.422062, -0.304556)
points(4) = New DPoint(-0.244604, -0.71223)
points(5) = New DPoint(-0.705036, -0.122302)
Dim multiCurve As MultiCurve = New _
MultiCurve(coordSys,CurveSegmentType.Linear,points)
Dim multiPolygon As MultiPolygon = New _
MultiPolygon(coordSys,CurveSegmentType.Linear,points)
Dim insidePoint As DPoint = New DPoint(-0.115108,0.160671)
Dim boundaryPoint As DPoint = New DPoint(-0.446043,0.486811)
Dim outsidePoint As DPoint = New DPoint(-1.103118,0.021583)
If multiPolygon.ContainsPoint(insidePoint) Then _
Console.WriteLine("Points inside area inclosed by closed _
(GeometryDimension 2) objects are contained")
End If
If Not multiCurve.ContainsPoint(insidePoint) Then _
Console.WriteLine("But this is not true for linear _
(GeometryDimension 1) objects")
End If
If multiPolygon.ContainsPoint(boundaryPoint) Then _
Console.WriteLine("Points on the boundary of closed objects _
are contained")
End If
If multiCurve.ContainsPoint(boundaryPoint) Then _
Console.WriteLine("Points lying on linear objects are contained")
End If
If Not multiPolygon.ContainsPoint(outsidePoint) Then _
Console.WriteLine("Point completely outside closed objects _
are not contained")
End If
If Not multiCurve.ContainsPoint(outsidePoint) Then _
Console.WriteLine("Point completely outside linear objects _
are not contained")
MapXtreme v7.2
330
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
座標系
End If
End Sub
座標系
座標系は、特定のオブジェクトまたはオブジェクトの集合が存在するドメインを記述します。座
標系を使用すると、記述しているオブジェクトまたはオブジェクト群を具体的に描画することが
できます。CoordSys クラスには、座標系の作成、操作、および編集を行うためのメソッド、プロ
パティ、およびインターフェイスが含まれます。
ジオメトリは、そのオブジェクトの作成用に指定された座標系で作成されます。オブジェクトの
座標系を変更することはできません。ただし、オブジェクトを他の座標系にコピーすることは可
能です。
CoordSys クラスを使用すると、座標系の作成と操作が容易になります。Coordsys クラスは、
XML バージョンの投影法ファイル (C:\Program Files\Common
Files\MapInfo\MapXtreme\7.x.x\MapInfoCoordinateSystemSet.xml) を使用します。
CoordSysFactory オブジェクトには、登録済みの座標系が含まれています。CoordSys の定義は、
XML 投影法ファイルを読み込むか、RegisterCoordSys メソッドまたは RegisterCoordSysInfo メ
ソッドを使用することによって登録できます。ファクトリ、コードスペース (EPSG、SRID)、PRJ
文字列、MapBasic 文字列、およびその他のファクトリ作成メソッドから CoordSys オブジェクト
を作成できます。また、CoordSys クラスには、対するミリタリー グリッド参照形式変換メソッド
もあります。
CoordSys オブジェクトの作成
CoordSys オブジェクトを作成するいくつかの方法を、以下のコード例に示します。MapInfo コー
ドスペースを使用する方法、EPSG による方法、PRJ 文字列からの経度と緯度で生成する方法、
MapBasic 文字列から生成する方法、および SRID による方法があります。
VB の例:
Public Shared Sub MapInfoGeometryCreateCoordSys()
Dim factory As CoordSysFactory = Session.Current.CoordSysFactory
' create CoordSys objects from srsName
Dim csysWGS84 As CoordSys = factory.CreateCoordSys("EPSG:4326")
Dim csysNAD83 As CoordSys = factory.CreateCoordSys_
("mapinfo:coordsys 1,74")
Dim csysNAD27 As CoordSys = factory.CreateCoordSys("SRID:8260")
' create CoordSys objects from code/codeSpace
csysWGS84 = factory.CreateCoordSys("4326", CodeSpace.Epsg)
csysNAD83 = factory.CreateCoordSys("coordsys 1,74", CodeSpace.MapInfo)
csysNAD27 = factory.CreateCoordSys("8260", CodeSpace.Srid)
' create CoordSys objects from user-defined parameters
MapXtreme v7.2
331
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
座標系
Dim dat As Datum = factory.CreateDatum(DatumID.WGS84)
csysWGS84 = factory.CreateCoordSys(CoordSysType.LongLat, _
dat, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nothing)
dat = factory.CreateDatum(DatumID.NAD83)
csysNAD83 = factory.CreateCoordSys(CoordSysType.LongLat, _
dat, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nothing)
dat = factory.CreateDatum(DatumID.NAD27ContinentalUS)
csysNAD27 = factory.CreateCoordSys(CoordSysType.LongLat, _
dat, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nothing)
' create Long/Lat coordinate system
csysWGS84 = factory.CreateLongLat(DatumID.WGS84)
csysNAD83 = factory.CreateLongLat(DatumID.NAD83)
csysNAD27 = factory.CreateLongLat(DatumID.NAD27ContinentalUS)
' create from MapBasic string
Dim csysRGF93 As CoordSys = _
factory.CreateFromMapBasicString("CoordSys Earth Projection 3, _
33, ""m"", 3, 46.5, 44, 49, 700000, 6600000")
' create from PRJ string
csysNAD83 = factory.CreateFromPrjString("1, 74")
Sub
Geometry オブジェクトの座標系の変更
次の例では、Geometry オブジェクトをある座標系から別の座標系に変換しています。
VB の例:
Public Shared Sub MapInfoGeomeTryCoordSys(ByRef coordSys As _
CoordSys, ByRef points() As DPoint, ByRef alternateCoordSys _
as CoordSys
' All Geometry constructors require a CoordSys parameter
' Note that the points array is assumed to be in coordSys
Dim lineString As LineString = New _
LineString(coordSys,points)
' The Geometry has a reference to the CoordSys used during
' construction.Unlike the coordinate data represented by the
' points array, the CoordSys' is not copied
If ReferenceEquals(coordSys, lineString.CoordSys) Then
Console.WriteLine("Geometry objects hold a reference to _
the CoordSys used during construction")
End If
' if you want to convert the object to another coordinate
' system, you need to make a new copy using one of the copy methods
If Not coordSys.Equals(alternateCoordSys) Then
Dim newGeometry as MapInfo.Geometry.Geometry = _
lineString.Copy(alternateCoordSys)
End If
End Sub
MapXtreme v7.2
332
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
座標系
MapControl 内のマップの座標系を調べる方法
次のコード例は、Map オブジェクトの座標系を調査する方法を示しています。
VB の例:
Public Shared Sub _
MapInfo_Mapping_FeatureViewerGetDisplayCoordSys(ByVal map As Map)
'Load the Default Projection File so that we can get the name.
MapInfo.Engine.Session.Current.CoordSysFactory.LoadDefault_
ProjectionFile()
'Get the Coordinate System object for current map in the MapControl
Dim mapCoordSys As MapInfo.Geometry.CoordSys = _
map.GetDisplayCoordSys()
'Assign the name of the Coordinate System to a string variable.
'note: the CoordSysName function will return a blank string if the
'Coordinate System is not found in the current CoordinateSystemSet
'(loaded by the LoadDefaultProjectionFile above).
Dim mapCoordSysName As String = _
MapInfo.Engine.Session.Current.CoordSysFactory.CoordSys_
Name(mapCoordSys)
End Sub
MapXtreme への座標系の追加
必要な座標系が MapInfoCoordinateSystemSet.xml ファイルに存在しない場合は、目的に合った座
標系を MapXtreme に追加することができます。EPSG コードや SRID コードを追加することに
よって MapXtreme の機能を拡張することが可能です。
EPSG コ ー ド は、OPG (International Association of Oil & Gas Producers) の主導の下で、EPSG
Geodetic Parameter Dataset として管理されている座標系の集まり (コードスペース) です。この作
業は、2005 年、European Petroleum Survey Group から OPG Survey and Positioning Committee に移
管されました。
SRID コードは、Oracle Spatial テーブルのコードスペースを参照する一意の空間リファレンス番
号です。
(MapXtreme は、MapInfo と呼ばれる第 3 のコードスペースをサポートしています。)
MapXtreme には、代表的な EPSG マッピングおよび SRID マッピングが数多く用意されています
が、 特定の座標系に対し、異なる EPSG コードまたは SRID コードを登録しなければならない場
合もあるでしょう。これには、2 とおりの方法があります。
MapXtreme の機能を拡張して EPSG または SRID のコードスペースを使用するための 1 つ目の方
法として、必要な情報をプログラムから追加する方法があります。この場合、座標系情報は
MapXtreme セッションが終了すると破棄されます。もう 1 つの方法は、Web.config ファイル
MapXtreme v7.2
333
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
座標系
(Web アプリケーションの場合) または app.config ファイル (デスクトップ アプリケーションの場
合) に情報を追加する方法です。この場合は、セッションが終了しても情報が維持されます。以
下、それぞれの方法について説明します。
EPSG コードと SRID コードをプログラムから登録する方法
MapInfo.Geometry.CoordSysFactory クラスには、EPSG コードと SRID コードを、指定した座標
系に登録するためのメソッドがあります。
RegisterEPSGCode() および RegisterSRIDCode() は、それぞれ 2 つのパラメータを受け取りま
す。1 つは、コードスペースを表す EPSG コードまたは SRID コードです。もう 1 つは、1 つ目の
パラメータと対応付ける座標系情報です。
次の例では、Long/Lat NAD83 座標系に架空のコードを登録しています。
VB の例:
Public Shared Sub MapInfo_Geometry_RegisterEPSGCode()
Dim factory As CoordSysFactory = Session.Current.CoordSysFactory
' create CoordSys objects from srsName
Dim csysNAD83 As CoordSys = _
factory.CreateCoordSys("mapinfo:coordsys 1,74")
' 9998 is a fictional code for demonstration purposes
Try
factory.RegisterEPSGCode(9998, csysNAD83)
Catch ae As ApplicationException
'code already exists.Codes cannot be duplicated
End Try
End Sub
L
EPSG コードまたは SRID コードが既に存在する場合は、そのことを示す例外がスローさ
れます。
MapInfo、EPSG、または SRID のコードスペースに対し、座標系が既に登録されているかどうか
を調べるには、次のメソッドを呼び出します。
•
MapInfo.Geometry.CoordSys.Code(codespace).
このメソッドでは、対応するコードスペースの最初のエントリが返されます。存在しなかった場
合は、null が返されます。
同様に、入力したコードスペースに対応する最初の SRSName を取得するには、次のメソッドを
呼び出します。
•
MapInfo.Geometry.CoordSys.SRSName(codespace).
SRSName (空間リファレンス システム) は、GML (Geography Markup Language) で記述されたリ
ファレンス座標系を表します。通常は、パラメータ値のリストではなく、座標系のフレンドリ名
です。
MapXtreme v7.2
334
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
座標系
特定の座標系にマッピングされたすべてのコードおよび座標系のリストを取得するには、次のメ
ソッドを使用します。
•
•
MapInfo.Geometry.CoordSys.Codes(codeSpace)
MapInfo.Geometry.CoordSys.SrsNames(codeSpace)
プログラムから追加した座標系情報は、MapXtreme セッションの有効期間中しか維持されません。
EPSG コードと SRID コードを Web またはデスクトップの構成ファイルに登録する方法
MapXtreme に対し、EPSG コードまたは SRID コードを永続的に追加する方法もあります。Web
アプリケーションの web.config ファイルまたはデスクトップ アプリケーションの app.config1
ファイルに情報を登録します。以下のコードでは、構成ファイルにコピーする情報を太字で示し
てあります。詳細については、コード例の後の解説を参照してください。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MapInfo.CoreEngine"
type="MapInfo.Engine.ConfigSectionHandler, MapInfo.CoreEngine,
Version=6.8.0.536, Culture=neutral, PublicKeyToken=93e298a0f6b95eb1" />
</configSections>
<appSettings>
<add key="MapInfo.Engine.Session.UseCallContext" value="false"
/>
</appSettings>
<MapInfo.CoreEngine>
<EPSG_Code_Mappings>
<EPSG_Code_Mapping>
<srsName>My Custom CRS</srsName>
<srsID>
<code>coordsys 8,74,8,110.0833333333,47.5,0.9999375,2624666.667,328083.3333</code>
<codeSpace>mapinfo</codeSpace>
<remarks>My Custom CRS</remarks>
</srsID>
<EPSG_Codes>
<EPSG_Code>9987</EPSG_Code>
<EPSG_Code>9988</EPSG_Code>
<EPSG_Code>9989</EPSG_Code>
</EPSG_Codes>
</EPSG_Code_Mapping>
</EPSG_Code_Mappings>
<SRID_Code_Mappings>
<SRID_Code_Mapping>
<srsName>My Custom CRS</srsName>
<srsID>
1.
デスクトップ アプリケーションに app.config ファイルが使用されていない場合は、Visual Studio のアプ
リケーション構成ファイル テンプレートをプロジェクトに追加することによって作成できます。
MapXtreme v7.2
335
開発者ガイド
第 16 章 : 空間オブジェクトと座標系
座標系
<code>coordsys 8,74,8,114.0833333333,47.5,0.9999375,2624666.667,328083.3333</code>
<codeSpace>mapinfo</codeSpace>
<remarks>My Custom CRS</remarks>
</srsID>
<SRID_Codes>
<SRID_Code>9990</SRID_Code>
<SRID_Code>9991</SRID_Code>
<SRID_Code>9992</SRID_Code>
</SRID_Codes>
</SRID_Code_Mapping>
</SRID_Code_Mappings>
</MapInfo.CoreEngine>
</configuration>
このコードでは、追加する情報が 2 つのセクションに分けて記述されています。1 つ目のセクショ
ンでは、正しい CoreEngine dll およびバージョン番号1を識別しています。2 つ目のセクションで
は、EPSG コードおよび SRID コードをマッピングするための要素を追加しています。
EPSG コード マッピングは、SRSName、SRS ID、および EPSG コードで構成されます。SRSID
はさらに、座標系のパラメータおよびコードスペースによって定義されます。
SRID コード マッピングも EPSG コード マッピングと似ていますが、SRID コード マッピングの
場合は Oracle Spatial ID 番号が参照されます。
座標系の詳細については、「付録 H : 座標系の要素」を参照してください。MapInfo コードスペー
スの詳細については、「付録 G : MapInfo コードスペースの定義」を参照してください。
1.
MapInfo.CoreEngine アセンブリの正しいバージョン番号を調べるには、[スタート] メニューの [ファイル
名 を指 定 して 実 行] をク リ ック し て [ ファ イ ル名 を 指定 し て実 行] ダ イア ロ グ ボッ ク スを 表 示し、
「Assembly」と入力します。グローバル アセンブリ キャッシュに登録されているすべての MapXtreme
アセンブリが一覧表示されます。
MapXtreme v7.2
336
開発者ガイド
17
ラスタとグリッドの操作
MapInfo.Raster 名前空間には、MapXtreme でのラスタ イメージとグリッド イ
メージの使用および表示を制御するすべてのクラスが含まれています。ラスタ
イメージとは、イメージ全体がピクセルによってレンダリングされるコン
ピュータ グラフィックです。多くの衛星画像はラスタ イメージとしてレンダ
リングされます。グリッド イメージとは、連続する色調の変化によって補間
された情報を示す主題図です。
この章の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
MapInfo.Raster 名前空間の概要
ラスタ イメージ . . . . . . .
ラスタ ハンドラ . . . . . . .
ラスタ ハンドラのプロパティ .
カスタム ラスタ ハンドラの構成
グリッド イメージ . . . . . .
グリッド作成. . . . . . . . .
グリッド補間クラス. . . . . .
グリッド スタイル . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
338
338
341
343
343
345
347
348
349
第 17 章 : ラスタとグリッドの操作
MapInfo.Raster 名前空間の概要
MapInfo.Raster 名前空間の概要
MapInfo.Raster 名前空間は、Pitney Bowes Software の C/C++ Raster API と Grid Engine API の全
機能を提供します。ラスタ イメージは、マップに便利な背景レイヤや参照レイヤを提供するビッ
トマップです。グリッド イメージは、イメージ全体にわたって連続する色調の変化を表示する主
題図の一種です。色調の変化は基本データの補間を表します。グリッド イメージは、データが関
連付けられているラスタです。一般的な例として標高マップがあります。ラスタには基本データ
がありません。
ラスタ イメージ
ラスタ イメージはマップの背景に最適です。たとえば、建物、製油所、植生などの現実世界の詳
細を表示する航空写真は、マップのベース レイヤとして最適です。スキャンされた紙の地図もラ
スタ イメージの一例です。ラスタ イメージをベース レイヤとして使用し、街路網、顧客を表すポ
イント、郵便番号の境界などのベクトル データを重ね合わせて、便利で、視覚効果の高いマップ
を作成します。
ベクトル データと共に使用するラスタ イメージは登録する必要があります。イメージ上の既知の
地 理 ポイ ン ト を ベ ク ト ル
デ ー タ上の対応するフィーチャと一致させるためです。また、
MapXtreme で表示する会社のロゴやその他のアートは、地理参照データではありませんが、地球
上の特定の位置に登録する必要があります。今日入手できる多くのラスタ イメージには、登録
ファイルが付属しています。その例として、GeoTIFF、ADRG、ASRP、CADRG、CIB などがあ
ります。ラスタ イメージを登録するには、MapInfo Professional に読み込み、そこで登録します。
登録ファイル情報は .TAB ファイルに格納されます。
MapXtreme v7.2
338
開発者ガイド
第 17 章 : ラスタとグリッドの操作
ラスタ イメージ
MapXtreme でサポートされているラスタ イメージの形式を以下に示します。
•
TIFF および GeoTIFF (*.tif)
•
MrSID (*.sid)
•
ECW (*.ecw)
•
Spot (*.bil)
•
JPEG (*.jpg)
•
JPEG2000 (*.jp2, *.j2K)
•
PCX (*.pcx)
•
GIF (*.gif)
•
Windows ビットマップ (*.bmp)
•
PNG (*.png)
•
Photoshop (*.psd)
•
Targa (*.tga)
•
Windows メタファイル (*.wmf)
•
Windows 拡張メタファイル (*.emf)
•
Wireless BMP (.WBMP)
•
Vertical Mapper Continuous Grid (*.grd)
•
Vertical Mapper Classified Grid (*.grc)
•
ADRG - ARC Digitized Raster Graphics (*.gen)
•
ASRP - ARC Standard Raster Product (さまざまなファイル拡張子)
•
CADRG - Compressed ARC Digitized Raster Graphics (*.gen)
•
CIB - Controlled Image Base (さまざまなファイル拡張子)
•
NITF - National Imagery Transmission Format (*.ntf)
カスタム ラスタ ハンドラがインストールされている場合は、その他のラスタ形式もサポートされ
る場合があります。
ラスタ クラス
ラスタ イメージのメインのクラスは、MapInfo.Raster.RasterInfo と RasterRead です。スタイル情
報は MapInfo.Style.RasterStyle によって処理されます。
RasterInfo は、イメージの高さと幅 (ピクセル単位)、ラスタの形式、色深度、および登録情報を提
供します。.\MapInfo\MapXtreme\7.x.x\Samples\Desktop\Features\RasterInfo にある RasterInfo サ
ンプル アプリケーションを参照してください。
RasterRead は、イメージをレンダリングするためにラスタ イメージとスタイル情報を読み込むク
ラスです。
RasterStyle はラスタの外観を制御します。明るさとコントラストを制御したり、カラー イメージ
をグレー スケールで表示したりできます。また、透明性と透過性を設定することも可能です。
MapXtreme は、イメージごとに 1 つの色の透明性をサポートしています。つまり、イメージ内で
MapXtreme v7.2
339
開発者ガイド
第 17 章 : ラスタとグリッドの操作
ラスタ イメージ
その色のある部分は非表示になります。これにより、イメージの下のレイヤが透けて表示されま
す。透過性はイメージ全体の透明度です。ラスタ イメージの下のレイヤが透けて表示されるよう
にする必要がある場合は、透過性に高い値を設定します (100% で透明)。
ラスタ フィールドは読み取り専用なので、そのスタイルを永久に変更することはできません。た
だし、明るさ、グレー スケール、および透過性などのイメージの属性をプログラムによって設定
および取得できます。オンライン版『開発者リファレンス』の RasterStyle クラスの説明を参照し
てください。
ラスタ イメージと座標系
MapXtreme でラスタ、グリッド、または WMS のイメージをマップ レイヤとして表示するとき、
ラスタ イメージの回転および投影法と一致するように、すべてのベクトル マップ レイヤの回転お
よび投影法が自動的に設定されます。
マップに複数のラスタ、グリッド、または WMS のイメージ レイヤが含まれる場合、MapXtreme
では、最も顕著なラスタ イメージによって指定される投影法を自動的に使用してマップが表示さ
れます。異なる投影法を使用する別のイメージが最も顕著になった場合は、マップ ビューが変更
されるのに合わせて (ズームや移動などによって)、座標系も変わる場合があります。その場合、
マップの表示座標系を変更することはできません。
ラスタ再投影
ラスタ再投影では、マップ内のラスタ レイヤの投影法を変更できます。さまざまな種類のラスタ
イメージを再投影できます。そのようなラスタ イメージには、たとえば、衛星画像、航空写真、
スキャンされた地図、グリッド、シームレス ラスタ テーブルがあります。
ラスタ レイヤとベクトル レイヤの両方の再投影を制御できます。ラスタ レイヤまたはベクトル
レイヤをマップに追加すると、新しいレイヤが現在のマップ ウィンドウの投影法を使って再投影
されます。
ベクトル レイヤとラスタ レイヤの組み合わせを含むマップ ウィンドウの統計法を変更するとき、
すべてのレイヤ (ベクトル レイヤとラスタ レイヤ) を、新しいマップ ウィンドウの投影法に変更で
きます。
ラスタ再投影の設定には、MapXtreme API またはワークスペース マネージャのレイヤの管理の
ユーザ インターフェイスからアクセスできます。API のラスタ再投影を使用する方法について
は、『MapXtreme 開発者リファレンス』の MapInfo.Mapping.RasterReprojectionMethod を参照し
てください。ラスタ再投影のユーザ インターフェイスの詳細については、「ラスタ再投影」を参
照してください。
ワークスペースの再投影されたイメージ
ラスタ再投影プロパティは、ワークスペースに読み込んだり、ワークスペースから読み出したり
することができます。
MapXtreme v7.2
340
開発者ガイド
第 17 章 : ラスタとグリッドの操作
ラスタ ハンドラ
さらに、MapXtreme では、MapInfo Professional から .mws ワークスペースにラスタ再投影情報を
書き込むことができます。この機能を使用すると、MapInfo Professional でワークスペースを作成
した後、それを MapXtreme に読み込むことができます。
ワークスペースを MapXtreme に読み込んだ後は、API 経由で、またはワークスペース マネージャ
のレイヤの管理のユーザ インターフェイスを使用して、ラスタ再投影を変更できます。
ラスタ イメージの制限
•
フィーチャをラスタ レイヤとして選択することはできません。
•
フィーチャをラスタ レイヤとして検索することはできません。
コード サンプル: マップへのラスタ イメージの追加
次に示すとおり、マップにラスタ イメージを追加する方法は、その他のレイヤを追加する方法と
同じです。
C# の例:
Table MyTable = Session.Current.Catalog.OpenTable("MyRaster.tab");
FeatureLayer MyLayer = new FeatureLayer(MyTable);
MyMap.Layers.Add(MyLayer);
VB の例
Dim MyTable As Table = _ Session.Current.Catalog.OpenTable("MyRaster.tab")
Dim MyLayer As FeatureLayer = New FeatureLayer(MyTable)
MyMap.Layers.Add(MyLayer)
ラスタ ハンドラ
MapXtreme では、数多くのライブラリのいずれか 1 つを使用してラスタ イメージを読み込むこと
ができます。MapXtreme によってラスタ イメージが読み込まれるとき、そのファイルを読み込む
ことのできる DLL が検索されます。DLL/ラスタ形式が一致すると、その DLL はイメージ ファイ
ル の 形 式 処 理 を 行 う こ と が で き る と MapXtreme によって判断されます。形式ハンドラは、
"xxxxxxxx.RHx" という名前の DLL です。名前の基本部分は形式に基づきます。拡張子は常に RH
で始まりますが、最後は任意の文字 (A ~ Z) でもかまいません。MapXtreme では、形式ハンドラ
を検索するとき、RHA から RHZ まで、形式をアルファベット順に検索します。MapXtreme で
は、このプロセスにより、使用するハンドラに優先順位を付けることができます。たとえば、
SPOT ファイルは他の形式に優先して確認されます。SPOT ファイルは他の形式と混同される可能
性のある生データであるためです。SPOT ハンドラの拡張子は RHD です。HALO 形式ハンドラに
は RHV が付きます。LEADTOOLS 形式ハンドラには RHX が付きます。
ラスタ ハンドラは、デフォルトで \Program
Files\Common\MapInfo\MapXtreme\7.x.x\RasterGridHandlers フォルダにあります。
MapXtreme v7.2
341
開発者ガイド
第 17 章 : ラスタとグリッドの操作
ラスタ ハンドラ
LEAD Technologies, Inc. が提供する LEADTOOLS Win32 Pro および Media Cybernetics が提供す
る HALO Imaging ライブラリは、MapXtreme に付属しています。LEADTOOLS ラスタ ハンドラ
は、MapXtreme でラスタ イメージが参照されるとき、イメージ全体をメモリに読み込みます。こ
れは、極端なメモリ要件によってイメージが非常に大きい場合には、イメージの読み込みに時間
がかかり、失敗する可能性があることを意味しますが、移動とズームは高速になります。
HALO ラスタ ハンドラは、表示する必要のある内容だけをメモリに読み込みます。そのため、イ
メージの読み込みは高速ですが、移動とズームには時間がかかります。HALO.RHV はアルファ
ベット順で LEADTOOL.RHX よりも先であるため、HALO ハンドラがイメージを先に読み込もう
とします。この順番を変更する方法については、「カスタム ラスタ ハンドラの構成」を参照して
ください。
次の表は、用意されているラスタ ハンドラと、それらがサポートする形式を示しています。
ラスタ ハンドラ
ラスタ形式
SPOT.RHD
Spot (.bil)
ECW4.RHD
ECW (.ecw、.ers)
MRSID.RHE
MrSID (.sid)
ADRGASRP.RHL
ADRG, ASRP, USRP
CADRGCIB.RHL
CADRG、CIB、NITF
TIFF.RHL
TIF (.tif) *
VMGRID.RHL
Vertical Mapper (.grd、.grc) †
HALO.RHV
BMP、TIF、GIF、TGA、JPEG、PCX
LEADTOOL.RHX
BMP、GIF、JPEG、JPEG2000、PNG、TIF、
PSD、WMF、EMF
*
†
MapXtreme v7.2
TIF の地理参照をサポートするハンドラのみです。TIFF ファイルをサポートする別のハ
ンドラがこの TIFF ハンドラより前に試された場合、地理参照 TIFF ファイルのサポート
を失うことがあります。このため、地理参照 TIFF ファイルをサポートするには、TIFF を
サポートする他のハンドラよりも前にこの TIFF ハンドラが試されるようにする必要があ
ります。
グリッドまたはラスタとして表示できます。.TAB ファイルは、イメージがグリッド ハン
ドラまたはラスタ ハンドラのどちらを使用して描画する必要があるかを決定します。
342
開発者ガイド
第 17 章 : ラスタとグリッドの操作
ラスタ ハンドラのプロパティ
マルチスレッド アプリケーション (ASP.NET アプリケーションなど) ではサポートされないラスタ
形式がいくつかあります。それらの形式を次の表に示します。
読み込み
Vertical Mapper GRD、GRC
HALO の JPEG (LeadTools の JPEG ハンドラはス
レッドセーフです)
HALO の TIFF (JPEG 圧縮を含む) (LeadTools の
TIFF ハンドラはスレッドセーフです)
エクスポート
LeadTools の JPEG 2000 (Win2000 のみ)
LeadTools の TIFF CMYK
ラスタ ハンドラのプロパティ
MapXtreme は、ラスタ ハンドラのファイル拡張子の末尾の文字に基づいて、ハンドラをアルファ
ベット順に呼び出します。MapInfo.Data.TableRaster クラスの 2 つのプロパティを使用して、この
順序をプログラムによって制御できるようになりました。
TableInfoRaster.PreferredHandler プロパティは、どのラスタ ハンドラを使用してラスタ イメー
ジを開くかを指定します。ラスタ エンジンは、指定されたハンドラを使用してラスタ イメージを
開こうとします。イメージを開けない場合は、通常の処理に従ってハンドラをアルファベット順
に 呼 び 出 し ま す。イ メ ー ジ が 正 常 に 開 い た 場 合 は、使 用 さ れ た 実 際 の ハ ン ド ラ が
TableInfoRaster.ActualHandlerUsed という新しいプロパティで報告されます。
この値はテーブルの ClientMetadata に格納され、そこから読み取られます。値が .TAB ファイルの
メタデータに存在する場合は、その値が読み取られ、認識されます。WriteTabFile が呼び出される
と、値は .TAB フ ァイル の begin_metadata セクションに永続化されます。このプロパティは
TableInfo.ClientMetadata["\\PreferredRasterHandler"] に相当します。
カスタム ラスタ ハンドラの構成
MapXtreme のディストリビューションに含まれているラスタ ハンドラとは異なるラスタ ハンドラ
を使用したり、まったく新しい種類のラスタをサポートしたりするように、MapXtreme アプリ
ケーションを構成することができます。ラスタ ハンドラを使用する場合の優先度を変更すること
もできます。
MapXtreme v7.2
343
開発者ガイド
第 17 章 : ラスタとグリッドの操作
カスタム ラスタ ハンドラの構成
MapXtreme のデフォルトのインストールでは、すべてのラスタ ハンドラが <program
files>\Common Files\MapInfo\MapXtreme\7.x.x\RasterGridHandlers 内に配置されます。
mirasteru.dll ファイルもここに配置されます。ここは、アプリケーションで使用するラスタ ハンド
ラに推奨されるインストール場所です。デフォルトの場所を使用する場合は、その他の構成手順
は必要ありません。
カスタム ラスタ ハンドラをデフォルト以外の場所に配置する場合は、デスクトップ アプリケーショ
ンのアプリケーション構成ファイル (Web アプリケーションの場合は web.config ファイル) に、カス
タム ラスタ ハンドラの格納位置を指定する必要があります。そのためには、<ApplicationDataPaths>
の下に <Path> 要素または <SpecialPath> 要素を定義し、選択したラスタ ハンドラをそのフォルダに
コピーします。
たとえば、デスクトップ アプリケーションのカスタム ラスタ ハンドラをデフォルト以外の
MyAppData ディレクトリに構成する場合は、次のような .config ファイルを使用します。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MapInfo.CoreEngine"
type="MapInfo.Engine.ConfigSectionHandler, MapInfo.CoreEngine,
Version=6.8.0.536, Culture=neutral,
PublicKeyToken=93e298a0f6b95eb1" />
</configSections>
<MapInfo.CoreEngine>
<ApplicationDataPaths>
<SpecialPath>
<Personal>MyAppData</Personal>
</SpecialPath>
<Path>c:\MyAppData</Path>
</ApplicationDataPaths>
</MapInfo.CoreEngine>
</configuration>
この例の Personal タグは、ユーザの My Documents に定義されている特殊な場所を示します。こ
の指定により、My Documents 内の MyAppData フォルダが参照されます。<ApplicationDataPaths>
タグ内で、<SpecialPath> タグまたは <Path> タグを使用します。両方のタグを使用するということ
は、ラスタ ハンドラをどちらかの "MyAppData" フォルダに格納できることを意味します。これは
エラーではありませんが、希望の設定ではありません。これはデフォルト以外の構成なので、
mirasteru.dll も同じディレクトリに配置する必要があります。
アプリケーション データが .NET Framework の特別なシステム フォルダからの相対パスにある場合
は、<SpecialPath> 構文を使用します。たとえば、"My Documents" ディレクトリの下の MyAppData
というディレクトリにアプリケーション データがある場合、構成ファイルのエントリは次のように
なります。
<Personal>MyAppData</Personal>
ここで "Personal" は、My Documents ディレクトリを表す、.NET Framework の
Environment.SpecialFolder 列挙体の値です。
MapXtreme v7.2
344
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド イメージ
この構成方法を使用すると、複数のラスタ ハンドラで管理可能なファイルの種類に対して優先的に
使用するラスタ ハンドラを変更できます。たとえば、JPEG ファイルは Halo または LEADTOOLS
で処理できます (これらはどちらも MapXtreme に付属しています)。通常は Halo が優先されます。
これは、その *.rhv ファイル拡張子が LEADTOOLS の *.rhx 拡張子よりもアルファベット順が早い
からです。しかし、MapXtreme では、構成ファイルに定義されている <ApplicationDataPaths> が
最初に検索されるので、デフォルトの [CommonFiles] フォルダ内のハンドラよりも "先に"、指定さ
れたラスタ ハンドラが検索されます。したがって、たとえば、LEADTOOLS *.RHX ハンドラを定義
済みのフォルダにコピーした後、そのハンドラを最初に検索および使用するように MapXtreme を
構成することができます。
または、[CommonFiles] フォルダ内のファイルの拡張子を変更して、目的のラスタ ハンドラがア
ルファベット順リストで先に表示されるようにすることもできます。ただし、この方法は、
MapXtreme で開発されたすべてのアプリケーションに影響するので、予期しない結果を招く可能
性があります。さらに、このようにファイル拡張子を変更した場合、名前が変更されたラスタ ハ
ンドラは、MapXtreme をアンインストールするときに削除されません。このような理由から、構
成方式を使用して、ラスタ ハンドラの場所および優先度を変更することが推奨されます。
グリッド イメージ
グリッド イメージは領域全体にわたるデータ値の補間を表します。グリッド イメージは、データ
が均等間隔のポイントで計測されているデータ ファイルから作成されます。マップ領域全体がグ
リッドに変換され、各グリッド セルは値を表します。グリッドを生成するためにグリッド値が補
間される必要はありません。ただし、データ収集ポイントは均等に間隔が空いている必要があり
ます。MapXtreme および MapInfo Professional では、グリッド ハンドラを使用して値を補間する
ことによってグリッドを作成します。
グリッド イメージは、色調の変化だけでなく、陰影処理 (レリーフ色分け) も表示できます。レ
リーフ色分けを使用すると、グリッド面が仮想的な光源に従って色分けされます。各グリッド セ
ルの明るさは面に当たる光に対応し、光源に対する方向に基づいて調整されます。この機能は、
面の傾斜と方向を光の方向に対して相対的に考慮できる標高グリッド マップに最適です。最大の
明るさは、太陽光線が面に対して垂直に当たるポイントに割り当てられます。傾斜面が光源から
離れるにつれて、明るさの値は低くなります。
サポートされているグリッド形式を以下に示します。
•
MapInfo Grid (*.mig)
•
USGS DEM (*.dem)
•
GTOPO30 (*.dem)
•
DTED (*.dt0、*.dt1、*.dt2)
•
Vertical Mapper Continuous Grid1 2(*.grd、.*grc)
カスタム グリッド ハンドラがインストールされている場合は、その他のグリッド形式もサ
ポートされる場合があります。
MapXtreme v7.2
345
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド イメージ
グリッド クラス
グリッド イメージのメインのクラスは、MapInfo.Raster.GridInfo、GridRead、
GridCreatorFromFeatures、GridInflectionCalculator、および HillShadeWrite です。GridInfo と
GridRead は RasterInfo と RasterRead に似ており、グリッド ファイルに関する情報を取得する機
能を提供します。グリッドは GridCreatorFromFeatures を使用してデータ ポイントのレイヤにつ
いて作成されます。GridInflectionCalculator は、色調変化値および色の設定に使用されます。
HillShadeWrite を使用すると、グリッドにレリーフ色分けを追加したり、グリッドのレリーフ色分
けを変更したりできます。グリッドのプロパティは、イメージ クラス、座標系、ラスタ基準点、
MBR (最小外接四角形) など、その多くが RasterInfo から継承されます。
コード サンプル: マップへのグリッド イメージの追加
次に示すとおり、マップにグリッド イメージを追加する方法は、その他のレイヤを追加する方法
と同じです。
C# の例:
Table MyTable = Session.Current.Catalog.OpenTable("MyGrid.tab");
FeatureLayer MyLayer = new FeatureLayer(MyTable);
MyMap.Layers.Add(MyLayer);
VB の例
Dim MyTable As Table = _ Session.Current.Catalog.OpenTable("MyGrid.tab")
Dim MyLayer As FeatureLayer = New FeatureLayer(MyTable)
MyMap.Layers.Add(MyLayer)
コード サンプル: グリッド マップからのデータの取得
次の例では、グリッド ファイルを開いて情報を読み取っています。
VB の例 :
Public Shared Sub MapInfo_Raster_GridRead(ByVal strGridFilename _
As String)
Dim strHillshadeFilename As String = _
MapInfo.Raster.GridRead.DefaultHillshadeFilename(strGridFilename)
Dim session As ISession
session = MapInfo.Engine.Session.Current
Dim gridread As GridRead = New GridRead(strGridFilename,_
strHillshadeFilename)
Console.WriteLine(gridread)
End Sub
1.
グリッドまたはラスタとして表示できます。.TAB ファイルは、イメージがグリッド ハンドラまたはラス
タ ハンドラのどちらを使用して描画する必要があるかを決定します。
2.
マルチスレッド セーフではありません。
MapXtreme v7.2
346
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド作成
次の例では、グリッド ファイルを開いてセル値を読み取っています。
VB の例
Public Shared Sub MapInfo_Raster_GridReadStartRead(ByVal _
gridread As GridRead, ByVal strGridFilename As String)
Dim strHillshadeFilename As String = _
gridread.DefaultHillshadeFilename(strGridFilename)
If gridread.StartRead() Then
Dim x As Integer = 0
' TODO - set to a pixel column value
Dim y As Integer = 0
' TODO - set to a pixel row value
Dim bIsNull As Boolean
Dim dValue As Double
If gridread.GetValue(x, y, bIsNull, dValue) Then
If bIsNull Then
' read a null cell
Console.Write("{0,20}", "NULL")
Else
' read a non-null cell, with value == dValue
Console.Write("{0,20}", dValue)
End If
End If
gridread.EndRead()
End If
End Sub
グリッド作成
MapXtreme には、書き込み可能なグリッド ハンドラおよび補間クラスを使用して連続グリッドを
作成する機能があります。これらのグリッドは、MapInfo.Raster.GridCreatorFromFeatures クラ
ス、Mig.ghl グリッド ハンドラ、および用意されている 2 つの補間クラスの 1 つを使用して、プロ
グラムによって作成されます。グリッドは、データ ポイントのテーブル、または選択内容から作
成できます。
MapXtreme で作成されるグリッドは、MapInfo Professional v 10.0 と互換性があります。
連続グリッドは、いくつかのセルからなる長方形のグリッドにマップを分割したものであり、各
セルには、計測されたデータ ポイント、または周囲のデータ ポイントに基づく補間値を表す、
データ値が含まれています。連続グリッドは、マップ上で連続的な色調の変化を使用して、変化
するデータ値を表示します。
以前の MapXtreme は、グリッドの読み取りと、そのグリッド セル値の再取得だけに制限されてい
ました。また、陰影処理やスタイルなど、グリッドに関する情報を読み取ることもできました。
ContinuousGridWrite クラスは用意されていましたが、補間クラスを利用してデータ ポイントをよ
り適切に反映するようなグリッドを作成する機能はありませんでした。
MapInfo.Raster.GridCreatorFromFeatures は、連続グリッドを作成するときに呼び出されるメイン
クラスです。このクラスは、MapInfo の書き込み可能なグリッド ハンドラおよび補間クラスを使
用して、連続グリッド マップを作成します。
MapXtreme v7.2
347
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド補間クラス
補間法 IDW および TIN は、それぞれに固有の計算に従ってグリッドのセル値を決定するアルゴリ
ズムを提供します。IDW は人口データに適しており、TIN は地形データに使用されます。「逆距
離加重 (IDW) 補間クラス」および「不定形三角網 (TIN) 補間クラス」を参照してください。
用意されている補間クラスのいずれかでニーズが満たされない場合は、新しい IInterpolator イン
ターフェイスから派生して独自の補間クラスを作成できます。「IInterpolator インターフェイ
ス」、および『開発者リファレンス』で MapInfo.Raster.Interpolators 名前空間の説明を参照してく
ださい。
データ内の同じセル位置に一致する (重複した) データ ポイントが含まれる場合、グリッド API に
は、ポイントを加算または平均する集約クラスが用意されています。他に利用できる集約メソッ
ドには、count、min、および max があります。また、IGridCellAggregator をインプリメントする
集約クラスを作成または使用することもできます。
グリッド API に対する他の強化点としては、マップ境界の輪郭に合わせてマップをクリップする
機能があります。グリッドは、ソース データの最小外接四角形に基づいて作成されます。グリッ
ド境界がマップ境界の輪郭に沿うようにするには、GridCreatorFromFeatures.ClippingGeometry
プロパティを、グリッド セルのクリップ対象とする Geometry に設定します。
データ ポイントからグリッドを作成したら、新しい [グリッド スタイル] ダイアログおよびワーク
スペース マネージャを使用して、陰影処理、スタイル、色調変化点などの特性を変更できます。
詳細については、「グリッド スタイル」を参照してください。
グリッド補間クラス
MapXtreme には、連続グリッドを作成するための 2 つのグリッド補間クラス IDW および TIN が
あります。IDW および TIN 補間クラスは、MapInfo.Raster.Interpolators という固有の名前空間に
含まれています。
また、MapXtreme には、独自の補間クラスを作成するためのインターフェイスも用意されてい
ます。
逆距離加重 (IDW) 補間クラス
MapInfo.Raster.Interpolators.InverseDistanceWeighted 補間クラスは、MapXtreme に用意されてい
る 2 つのグリッド補間クラスの 1 つです。IDW 補間クラスは、隣接した値に関連したり影響を受
けたりするデータではなく、人口などのデータ値や、グリッド上で任意の値を生成するデータに
最も適しています。この補間法は疎なデータに対しても使用できます。
IDW 補間法は、グリッドを示すセルに含まれる値を計算します。計算に含まれる各データ ポイン
ト値は、セルの中心からの距離によって重み付けされます。補間は逆距離加重による計算である
ため、セルからポイントまでの距離が長いほど、結果として生成されるセル値に対するそのポイ
ントの値の影響は小さくなります。
IDW では、各ポイントが結果にどれだけ影響するかは指数によって決まります。指数が大きいほ
ど、近接するポイントがセル値に対して与える影響は大きくなります。指数の範囲は 1 ~ 10 です。
MapXtreme v7.2
348
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド スタイル
同じグリッド セル内にあるソース データ ポイントの値に対する集約メソッドを選択することもで
きます。average、count、sum、min、max の中から選択します。
IDW 補間クラスを使用してグリッドを作成するコード例については、『開発者リファレンス』で
MapInfo.Raster.GridCreatorFromFeatures クラスの説明を参照してください。
不定形三角網 (TIN) 補間クラス
用意されている 2 番目の補間クラスは、不定形三角網または TIN と呼ばれます。TIN は、地形
データに最適であり、グリッド上で線形に進むデータ ポイントや互いに線形の関係を持つデータ
ポイント (温度など) に向いています。
TIN 補間法では、IDW 補間法よりも元のマップの地形をより厳密に再現する三角形を、ポイント
のネットワークから生成します。ポイント間にラインを描画することで、ポイントを三角形に分
割すると共に可能なすべてのポイントを接続します。接続によるメッシュを作成することで、グ
リッド ポイントを補間できるようになります。補間は、隣接する元のデータ値による影響を受け
ません。そのため、IDW 補間法で発生する可能性があるデータの "エラー突出" は発生しません。
TIN パラメータ (オブジェクトのプロパティ) を変更して、マップ地形に対してより詳細な情報を
指定したり、指定する情報を少なくしたりできます。このようなプロパティとしては、Tolerance
(間隔が近いポイントを破棄するかどうかを制御)、Distance (出力を制御)、および FeatureAngle
(グリッドの端の鋭さを制御します) があります。
詳細については、『開発者リファレンス』で
MapInfo.Raster.Interpolators.TriangulatedIrregularNetwork クラスの説明を参照してください。
IInterpolator インターフェイス
IInterpolator インターフェイスを使用した独自の補間クラスの作成もサポートされています。この
インターフェイスから独自の補間クラスを派生することにより、独自のアルゴリズムに基づいて
グリッド セル値を作成します。『開発者リファレンス』で MapInfo.Raster.IInterpolator インター
フェイスの説明を参照してください。
グリッド スタイル
MapXtreme には、連続したグリッド イメージの色調変化値および色を変更する機能があります。
以前の MapXtreme では、グリッドから情報を読み取ることだけができました。
グリッド スタイルのサポートは、MapInfo.Styles.GridStyle クラスを使用し、GridStyleControl を介
し て、プ ロ グ ラ ム に よ っ て 提 供 さ れ、ワークスペース マネージャに組み込まれています。
GridForm というサンプル アプリケーションもこの機能を提供します。色調変化値および色に対す
る変更は、ワークスペースに保存して後で読み込むことができます。
MapXtreme v7.2
349
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド スタイル
グリッド イメージと色調変化点
連続したグリッド イメージには、領域全体にわたるデータ値の補間が表示されます。グリッドは
グリッド セルから構成され、各セルが値を表します。これらの値は、データ値の範囲内で連続し
た色調の変化としてマップ上に表されます。
グリッド値またはパーセンテージの変化によって色が変化するポイントを、色調変化点と呼びま
す。MapXtreme では、サポートされているモデルのいずれかに基づいて色調変化値を計算する、
GridInflectionCalculator オブジェクトが作成されます。データ値の最小および最大範囲と組み合わ
されたグリッドの色調変化点の数を使用して、マップ上の色調の変化が決定されます。色調変化
点を表す色は、FeatureOverrideStyleModifier としてグリッドに適用されます。
色調変化点の計算方法
MapXtreme では、次の計算方法をサポートしています。
•
パーセント等間隔 – 計算された各パーセント範囲内に等しい数のセル値が存在するように色調
•
変化値を計算します。
値等間隔 – 各色調変化値範囲が同じサイズになるように色調変化値を計算します。
•
•
パーセントを指定 – [パーセント等間隔] と同じですが、パーセント範囲を指定できます。
値を指定 – [値等間隔] と同じですが、色調変化値を指定できます。
色調変化値および色は、MapInfo.Raster.GridInflectionCalculator クラスを使用してプログラムで変更
できます。GridStyleControl は、Visual Studio の MapXtreme ツールボックスから使用できます。
MapXtreme v7.2
350
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド スタイル
このプロセスは、ワークスペース マネージャの [グリッド スタイル] ダイアログにも組み込まれて
います。「グリッド スタイル」を参照してください。
L
色調変化点の計算方法が [値等間隔] または [パーセント等間隔] に設定されているときに値
またはパーセントを変更した場合、方法はそれぞれ [値を指定] および [パーセントを指定]
に変更されます。
色調変化値および色に対する変更は、ワークスペースに保存して後で読み込むことができます。
グリッド レイヤの色調変化値および色の計算
色調変化値および色は、プログラムを使用して、またはワークスペース マネージャの [グリッド
スタイル] ダイアログで計算できます。GridForm サンプル アプリケーションもこの機能を提供し
ます。
GridInflectionCalculator クラス
次のコード例は、値および色の最初のセットを作成してから、それらを変更する方法を示してい
ます。このコード例は、開発者リファレンス API ドキュメントの
MapInfo.Raster.GridInflectionCalculator クラスに示されています。
public static void MapInfo_Raster_GridInflectionCalculator(TableInfoGrid
tableInfoGrid)
{
// Create 10 grid inflection values, by using the EqualRangeValues
method, using colors from orange to red.
GridInflectionCalculator gridInflectionCalculator = new
GridInflectionCalculator(tableInfoGrid,
InflectionMethod.EqualRangeValues, 10, Color.Orange, Color.Red);
// Modify the colors to go from green to brown.
gridInflectionCalculator.CalculateStyles(Color.Green, Color.Brown);
// Calculate 5 grid inflection values, by using the EqualRangeValues
method.
gridInflectionCalculator.CalculateValues(InflectionMethod.EqualRangeValue
s, 5);
}
レリーフ色分け
グリッド イメージは、色調の変化だけでなく、陰影処理 (レリーフ色分け) も表示できます。レ
リーフ色分けを使用すると、グリッド面が仮想的な光源に従って色分けされます。各グリッド セ
ルの明るさは面に当たる光に対応し、光源に対する方向に基づいて調整されます。この機能は、
MapXtreme v7.2
351
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド スタイル
面の傾斜と方向を光の方向に対して相対的に考慮できる標高グリッド マップに最適です。最大の
明るさは、太陽光線が面に対して垂直に当たるポイントに割り当てられます。傾斜面が光源から
離れるにつれて、明るさの値は低くなります。
陰影処理は、[グリッド スタイル] ダイアログにあるチェック ボックスで有効にできます。水平およ
び垂直の光源の角度およびスケールは、LayerControl で設定します。MapInfo.Raster.HillshadeWrite
クラスを使用すると、プログラムによってグリッドに陰影処理を追加できます。
[グリッド スタイル] ダイアログ
[グリッド スタイル] ダイアログでは、色、色調変化値、コントラスト、明るさ、透過性といった
グリッドのスタイル設定を、グラフィカル ユーザ インターフェイス (GUI) を使用して変更できま
す。スタイルは、FeatureOverrideStyleModifier としてグリッド レイヤに適用されます。
[グリッド スタイル] ダイアログを使用するには、グリッド イメージをワークスペース マネージャ
で開きます。グリッド レイヤを選択して右クリックし、[スタイル オーバーライドの追加] メ
ニュー項目を表示します。[表示/非表示] タブで、[グリッド イメージ スタイル] ボタンをクリック
してダイアログを表示します。[グリッド スタイル] ダイアログの各コンポーネントについて、以
下で説明します。
色/値/% (パーセント)
色/値/% (パーセント) グリッド ボックスには、色調変化点の色、値、およびパーセントの現在の設
定が表示されます。
色を変更するには、色見本をダブルクリックし、[色] ダイアログ パレットから新しい色を選択し
ます。
MapXtreme v7.2
352
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド スタイル
値および % の設定は、グリッド内のデータから得られます。これらの値は、このダイアログの [色
調変化点の設定] グループの設定を変更したときに、変化する場合があります。その場合、色調変
化点が再計算され、新しい値が表示されます。たとえば、[値を指定] を選択したときに値を直接編
集したり、[パーセントを指定] を選択したときにパーセントを編集したりできます。
L
色調変化点の計算方法が [値等間隔] または [パーセント等間隔] に設定されているときに値
またはパーセントを編集した場合、方法はそれぞれ [値を指定] および [パーセントを指定]
に変更されます。
色調の調整
グリッド イメージの色に影響を与えるような調整を行うことができます。これらの変更は、レイ
ヤ全体に等しく適用されます。
コントラスト
[コントラスト] スクロール バーを使用して、イメージのコントラストを調整します。バーを 0 ~
100% の範囲でスライドさせ、グリッドのコントラスト レベルを設定します。微調整にはカーソ
ル キーを使用できます。
明るさ
[明るさ] スクロール バーを使用して、イメージの明るさを調整します。バーを 0 ~ 100% の範囲で
スライドさせ、グリッドの明るさレベルを設定します。微調整にはカーソル キーを使用できます。
透過性
[透過性] スクロール バーを使用して、イメージの透過性を調整します。透過性は、0 ~ 100% の範
囲で設定できます。透過性が 0% のイメージは、完全に不透明となります (下が透けて見えません)。
透過性が 100% のイメージは、完全に透明となります (完全に見えなくなります)。
グレー スケール
オンにすると、グリッド内にグレー スケールの色だけが表示されます。
[色調の反転] ボタン
このボタンをクリックすると、色調変化色が反転します。これは、この時点の開始色と終了色に
だけ影響します。
色調変化点の設定
[色調変化点の設定] では、データが領域内でどのように分布しているかを示す色調変化点の計算方
法を設定できます。[パーセント等間隔] および [パーセントを指定] は、パーセントに基づいていま
す。[値等間隔] および [値を指定] は、値に基づいています。
パーセント等間隔
計算された各パーセント範囲内に、ほぼ等しい数のグリッド セルが収まるように、色調変化点を
設定します。
値等間隔
各色調変化値範囲が同じサイズになるように、ソース データ範囲の最小値と最大値の間に色調変
化点を配置します。
MapXtreme v7.2
353
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド スタイル
パーセントを指定
この方法は、等間隔ではなく独自のパーセントを指定する場合に選択します。
値を指定
この方法は、等間隔ではなく独自の値を指定する場合に選択します。
色調変化点数:
リストから 2 ~ 16 の値を選択するか、または 2 ~ 255 の値を入力します。
丸め:
色調変化値に適用される丸め係数をリストから選択します。計算方法がパーセントに基づいてい
るときは、色調変化値が実際に計算されるまでの間、この丸めの効果が確認できない場合があり
ます。
レリーフ色分け
レリーフ色分けを使用すると、仮想的な光源の向きに従ってグリッド面マップに陰影を付けるこ
とができます。これにより、面の傾斜と方向を光の方向に対して相対的に考慮できます。[グリッ
ド スタイル] ダイアログには、レリーフ色分けを有効または無効にするための設定があります。
レリーフ色分けの設定を調整するには、最初にレイヤ管理でグリッド レイヤを強調表示し、[陰影
処理情報] タブを選択します。レリーフ色分けは、色調変化点の設定のようにスタイル オーバーラ
イドとしては適用されません。
光源位置
光源の水平角度、垂直角度、および垂直方向のスケールは、[レイヤ管理] ダイアログの [陰影処理
情報] タブで設定します。このタブは、グリッド レイヤが選択され、陰影処理が有効になっている
場合にのみ表示されます。
水平角度
光源を水平面上で回転させます。0 度は、真東から照らす光源に対応します。角度が正の場合、光
源は時計回りに回転します。したがって、たとえば 90 度の場合、光源は真北に位置します。
垂直角度
光源を垂直面上で回転させます。0 度の場合、光源は水平線上に位置し、90 度の場合、光源は真
上に位置します。光源が面よりも下にあるように設定する場合は、180 ~ 360 度の角度を指定し
ます。
垂直方向スケール
0 ~ 100 のスケールを指定します。このスケールを大きくすると、面が垂直方向に強調され、陰影
効果が強まります。これは、比較的平坦な面で詳細を強調する場合に役立ちます。
陰影処理情報の再計算
光源の設定に調整を加えた後、このボタンをクリックすると、陰影処理情報が再計算されます。
色調変化値
これらの値は、グリッド テーブル内の最小値と最大値を示します。これらの値は編集できません。
最小値:
ソース テーブル内の最小のデータ ポイント値を示します。
MapXtreme v7.2
354
開発者ガイド
第 17 章 : ラスタとグリッドの操作
グリッド スタイル
最大値:
ソース テーブル内の最大のデータ ポイント値を示します。
GridInfoForm サンプル アプリケーション
MapXtreme には、GridInflectionCalculator を含む C# サンプル アプリケーションが用意されてい
ます。これらのサンプルは、\Samples\VisualStudio20xx フォルダの
\Desktop\Features\GridinfoForm にあります。
MapXtreme v7.2
355
開発者ガイド
18
ジオコード
この章では、ジオコードに関連した MapXtreme の名前空間について説明しま
す。ジオコード サーバやジオコード サービスにアクセスするアプリケーショ
ンの作成方法や作成例についても取り上げます。
この章の構成
Š
Š
Š
Š
Š
Š
MapInfo.Geocoding 名前空間の概要 .
ジオコード化に関連した主要なクラス.
ジオコード モデルについて . . . . .
場所のジオコード化. . . . . . . . .
制約を使った正確なジオコード化. . .
近い一致の正確さについて. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
357
357
359
362
365
368
第 18 章 : ジオコード
MapInfo.Geocoding 名前空間の概要
MapInfo.Geocoding 名前空間の概要
MapInfo.Geocoding 名前空間には、住所レコードをジオコード化するためのインターフェイスやク
ラスが用意されています。ジオコード化は、マップ上の位置を正確に特定するために、番地、交差
点、地名、郵便番号の地理的位置を調査するプロセスです。ジオコード クライアントは、Pitney
Bowes Software のジオコード サーバまたはジオコード Web サービス製品に対し、HTTP 経由でリ
クエストを送信します。MapXtreme の購入時には、サーバと Web サービスは付属しません。
たとえば、ユーザが自分のいる地理的位置を住所で入力すると、最寄りの ATM を基準に、対応す
る位置を示すマップが返されるような位置検索アプリケーションを作成するとします。マップ上
に位置を表示する関係上、住所だけでこれを実現することはできません。これらの地理的位置 (住
所、建物、関心地点) を地表上の座標に変換することになります。位置を正確に特定し、マップ上
に示すためには、緯度/経度 (座標) の値が必要です。MapXtreme のジオコード クライアントは、
プレース名、番地、郵便番号から、あるいは、2 本の道路の交差点から、こうした値を調査 (ジオ
コード化) します。
ジオコード クライアントからは、座標値だけでなく、そのプレースの詳細な説明が返されるた
め、限られた情報を有効に活用することができます。ジオコード クライアントからは、リクエス
トの設定、使用した方法、指定された設定、一致条件などに応じて 0 個、1 個、またはそれ以上の
レスポンスが返されます。
また、MapXtreme のジオコード クライアントは、住所の一部分をジオコード化するガゼッティア
型の機能 (世界/国/都市レベルのジオコーダ) を備えています。住所の一部分とは、たとえば、都
市、州、プレース名、ランドマーク、空港などです。
ジオコード化機能を使用して目的の座標を得る過程には、入力された住所と、既に座標が割り当
てられている住所とを照合するプロセスが伴います。1 つのリクエスト ドキュメントに複数の住
所を指定することもできます。指定する住所が不完全でも構いません。サーバからは完全な住所
が返されるので、入力された住所を訂正することも可能です。サービス リクエストを受け取った
サーバは、データの質とリクエストの設定に応じて、0 個、1 個、またはそれ以上のレスポンスを
返します。通常、レスポンスには、潜在的な一致 (一致候補と呼ばれる) のリストと、一致候補の
位置的な正確さを示す結果コードが含まれます。座標を取得するには、アプリケーション側で適
切な住所候補を選択してレスポンスを解決する必要があります。
ジオコード化に関連した主要なクラス
MapInfo ジオコード サーバまたは Envinsa Location Utility サービスを使用するジオコードがサポー
トされています。どちらかのリソースを URL に配置して、提供する必要があります。適切なジオ
コード クライアントを作成するには、GeocodeClientFactory クラスを使用します。両者のクライ
アントのインターフェイスは似ています。ジオコード リクエスト、ジオコード設定、およびジオ
コード レスポンスについて同じクラスを使用するためです。
ジオコード クライアントを使用するための主なインターフェイスは、
MapInfo.Geocoding.IGeocodeClient です。このインターフェイスでは、ジオコード クライアント
オブジェクトが定義されます。このインターフェイスは、Geocode というメソッドを 1 つだけ持
MapXtreme v7.2
357
開発者ガイド
第 18 章 : ジオコード
ジオコード化に関連した主要なクラス
ちます。入力としてリクエストを受け取り、住所候補 (入力された住所と一致する可能性のある一
連 の 住 所) を 含 ん だ レ ス ポ ン ス を 返します。他にも、GeocodeRequest、GeocodeResponse、
GeocodeClientFactory、GeocodingConstraints、AddressCandidates、GeocodeMatchCode、
CandidateAddress などのクラスがあります。
次の図は、Geocoding 名前空間を構成するインターフェイスとクラスを示しています。
GeocodeRequest
GeocodeRequest は、ジオコード サーバまたはジオコード サービスに対してリクエストを送信す
るクラスです。ジオコードの対象となる一連の住所を保持する AddressList プロパティと、住所リ
ストの項目数を表す Length プロパティを持ちます。番地、交差点、一次郵便番号、二次郵便番
号、国コードなど、さまざまな情報を含んだ住所を入力として使用できます。
GeocodeResponse
GeocodeResponse クラスは、GeocodeRequest の各住所に対するレスポンスを保持します。レス
ポンスには、住所候補、つまり、入力された住所と一致する可能性のある住所が格納されます。
複数の住所を含んだ GeocodeRequest からは、入力された 1 件の住所ごとに一連の住所候補を保
持する GeocodeResponse オブジェクトが得られる点に注意してください。
MapXtreme v7.2
358
開発者ガイド
第 18 章 : ジオコード
ジオコード モデルについて
GeocodeClientFactory
このクラスは、GeocodeRequest を送信したり、GeocodeResponse を受信したりする際に使用す
る IGeocodeClient を返します。MapMarker Java サーブレットのインスタンスと対話するジオ
コ ー ド ク ラ イ ア ン ト は、GetMmjHttpClient メソッドで取得できます。リクエストを MapInfo
Envinsa 4.0 の Location Utility Service に送信するには、GetEnvinsaGeocodeClient メソッドを使
用します。
GeocodingConstraints
このクラスには、ジオコードの設定が格納されます。すべての設定は、true または false (デフォル
ト) を返す、set/get メソッドを持ったプロパティとしてインプリメントされています。
AddressCandidates
GeocodeResponse で一致候補として返される住所のリストを保持するクラスです。
BaseGeocodeMatchCode と GeocodeMatchCode
これらのクラスには、IGeocodeMatchCode インターフェイスがインプリメントされています。
ResultCode プロパティ (一致の精度を表す文字列) は、このインターフェイスによって公開されま
す。BaseGeocodeMatchCode は、リクエストが Envinsa Location Utility Service に送信された場
合に返されます。GeocodeMatchCode は、BaseGeocodeMatchCode を拡張したクラスです。ジ
オコード リクエストが MapMarker サーバに送信された場合に返されます。GeocodeMatchCode
に は、住 所 の ど の 部 分 が 一 致 し た か を 示 す プ ロ パ テ ィ が 追 加 さ れ て い ま す。そ の 中 の
StreetAddressMatch と MunicipalityMatch は、それぞれ番地と地方自治体が一致している場合に
true 値を返します。結果コードの詳細については、「近い一致の正確さについて」を参照してくだ
さい。
CandidateAddress
このクラスは、ジオコード化された住所を定義します。プロパティとしては、Address (ジオコー
ド化された住所)、GeocodeMatchCode (ジオコード化された住所の精度)、Point (住所候補を表す
ジオメトリ) などがあります。
ジオコード モデルについて
ジオコード クライアントには、一連の重みによって制御される相対一致モデルが採用されていま
す。住所の各要素をデータ内の候補レコード (一致候補) と照らし合わせてスコアが割り出されま
す。結果として得られたスコアは加算され、候補の合計スコアをもとに最も高い一致が決定され
ます。他の候補よりも高いスコアを持つ候補が "近い一致" として検出されます。さらに、検索処
理では、特定の一致条件を必須とするか、ある程度緩和して適用するかを判断するために、一連
MapXtreme v7.2
359
開発者ガイド
第 18 章 : ジオコード
ジオコード モデルについて
のジオコード設定が使用されます。たとえば、デフォルトでは、郵便番号の一致は緩く、家番号
や道路名の一致は必須として設定されています。これにより、高いパフォーマンスを維持し、不
適切な検索結果 (誤検出) を少なくして、最適なヒット率を実現することができます。
ジオコード化のトレードオフ
ジオコード クライアントなど、相対一致が採用されたシステムでは、必ずトレードオフが存在し
ます。ジオコード化されたデータの用途を踏まえて、トレードオフを考慮しなければなりませ
ん。たとえば、次のような質問に対する答えを明らかにしておく必要があります。
•
住所の検索にどの程度の正確さを期待するか (完全一致か近い一致か)?
•
ジオコード化されたポイントに対し、どの程度の地理的正確さを期待するか
便番号中心点など)?
•
最終的な目的はできるだけ多くのレコードをジオコード化することか?
(道路レベル、郵
以上の質問に対する答えは、ジオコード化されたレコードの用途によってまったく異なってきま
す。たとえば、新たにオープンする店舗の場所を決めるために、現在の顧客と潜在的な顧客の分
布を把握しなければならないとします。この場合は、できるだけ多くの顧客をジオコード化する
ことが大切で、顧客一人一人についての番地レベルでの一致精度は不要です。こうした分析で
は、郵便番号中心点レベルのジオコード化で十分です。
一方、ガスなどの公共サービス事業者が、近隣のガス管線との関係で顧客の所在地を調べる場
合、顧客一人一人について正確な位置を割り出す必要があります。このような場合は、厳密な一
致設定で道路レベルのジオコード化を行うのが最適な選択肢となります。
住所について
ジオコード化で最も重要なことは住所データの質です。ロケールの標準的な規則に従って適切に
住所を入力すれば、不完全な住所や形式に不備のある住所よりも、的確な結果を得ることができ
ます。
このセクションでは、入力用の住所と、比較に使用される参照住所の両方の観点から、住所の質
について概説しています。ジオコード化で最適な結果を得るために大切なことは、ジオコード化
の対象となるデータと、比較対象となるデータの住所の構成を理解することです。
入力住所
入力住所とは、ジオコード化の対象となる住所のことです。そのままでは地理的座標は関連付け
られていないため、マップ上で位置を特定することはできません。
入力住所は複数の要素で構成され、ジオコード サーバは、それらの要素を調べることによって一
致を検出します。入力住所の構成要素としては、住所番号、道路名、道路の接頭辞や接尾辞など
があります。接頭辞は、「北」や「南」など方向性を示す情報を持つ傾向があり、特定の住所に
のみ存在します。接尾辞としては、道路の種類 (Street、Road、Avenue など) が一般的です。入力
住所には、マンション番号やルート番号などの情報が含まれる場合もあります。
MapXtreme v7.2
360
開発者ガイド
第 18 章 : ジオコード
ジオコード モデルについて
入力住所では、住所全体だけでなく、住所の一部分や綴りの揺れも許容されます。たとえば、
「LaSalle Street」と入力して、「LaSalle St」を検索することができます。ただし、道路の接尾辞
を付けずに「LaSalle」と入力した場合は、実際には LaSalle Ave である可能性もあるため、同じ
結果が得られるとは限りません。
MapXtreme のジオコード クライアントでは、いわゆる "ダーティ" データや不完全な住所を使用す
ることができます。このクライアントは、サーバに適切な参照住所が格納されていれば、 米国式
と 非米国式の両方の住所をサポートします。
参照住所
参照住所は、サーバ側で入力住所と突き合わせるための住所です。これらのレコードには、マップ
上で住所を特定するために必要な地理的座標が含まれています。参照住所はサーバ側で管理され、
最新の状態に保つように保守プログラムによって定期的に更新されます。参照住所は、ロケールの
規則に従って標準化されています。たとえば、北米の住所の場合、番地が道路名よりも先に来る形
式で入力されています。北米以外では、番地が道路名よりも後に来る場合もあります。
一般に、参照住所の主要な構成要素は、住所番号、道路名、道路の接頭辞 (存在する場合)、道路の
接尾辞です。米国以外の ロケールでは、参照住所にマンション番号などの補足的な情報が含まれな
い場合もあります。したがって、こうした情報が入力住所に含まれていた場合は無視されます。
カスタム ユーザ ディクショナリとは
サーバやサービスに用意されている MapInfo の住所ディクショナリが、目的の地域をカバーして
いないこともあります。また、ユーザが独自のデータ (国内で展開しているすべての店舗のデータ
など) を所有しているのであれば、そのカスタム データを使用したいと考えるのが普通です。も
し、このようなニーズがある場合、ユーザは、必要に応じて、こうしたデータが格納された独自
のディクショナリを使用できます。
ジオコード クライアントは、カスタム ディクショナリをサポートしています。カスタム ディク
ショナリは、ジオコード化されていないレコードと突き合わせるための道路や番地の範囲を格納
したテーブルです。ジオコード化を行う際は、必要なカスタム ディクショナリをいくつでも使用
できます。カスタム ユーザ ディクショナリを作成する方法の詳細については、サーバまたはサー
ビスのマニュアルを参照してください。
Geocoding World とは
ジオコード クライアントでは、入力住所に国コードを指定することで、さまざまな国のジオコー
ド化を行うことができます。Geocoding World コンポーネントは、1 コンポーネントあたり 1 つの
国や地域を提供する MapMarker ベースのコンポーネントとは異なります。Geocoding World コン
ポーネントは、238 の国や地域について市町村/郵便番号データをカバーし、9 つの国については
道路レベルのデータをカバーしています。どちらの場合も、データへのアクセスはライセンスで
保護されており、有効なデータ ライセンス ファイルが必要となります。Geocoding World の詳細
については、Pitney Bowes Software 販売代理店までお問い合わせください。
MapXtreme v7.2
361
開発者ガイド
第 18 章 : ジオコード
場所のジオコード化
場所のジオコード化
場所をジオコード化すると、データの関係を視覚化することができます。たとえば、住所レコー
ドがジオコード化されていれば、それをルート クライアントに渡すことにより、2 地点 (場所) 間
の運転用指示として表示させることができます。データに地理参照情報が与えられていれば、空
間検索を実行することで、"特定の場所から 10 マイル圏内のすべての顧客" を検索することも可能
です。以下は、すべてのジオコード リクエストに共通の機能です。
•
不完全な住所をジオコード化して、完全な住所情報 (標準化された住所) を返す。
•
•
ジオコード リクエストに指定された特定の住所に対し、そのレスポンスとして完全一致または
近い一致を表示する。
単一のジオコード リクエストに含まれる 1 つまたは複数の住所を処理する。
•
結果の質についての情報を一致コードを使って提供する。
GeocodeRequest クラスを使用すると、ジオコード サーバまたはジオコード サービスに対してリ
ク エ ス ト を 送 信 で き ま す。こ の ク ラ ス は、ジ オ コ ー ド の 対 象 と な る 一 連 の 住 所 を 保 持 す る
AddressList プロパティと、住所リストの項目数を表す Length プロパティを持ちます (詳細につい
ては、「制約を使った正確なジオコード化」を参照)。入力住所には、その一部として、番地、交
差点、一次郵便番号と二次郵便番号、プレース名、国コードなど、さまざまな情報を含めること
ができます。ジオコードの結果として得られる候補のレベルや正確さは、入力住所に含まれる情
報のレベルに左右されます。
以降、ジオコード クライアントで実行できる、さまざまなレベルのジオコード化について説明し
ます。
番地のジオコード化
ジオコード化された番地情報を使用すると、対応する位置をマップ上に表示したり、空間検索や
空間クエリを実行したりできます。たとえば、これを利用して、店舗の所在地や、販促の対象と
なる顧客の住所をマップ上に表示し、市場範囲を調査することもできます。番地のジオコード化
では、Address クラスを使用して、入力住所の情報を指定します。
住所をジオコード化する方法
次の C# コードは、ジオコード クライアントを使用して番地をジオコード化する例を示していま
す。ジオコード リクエストは、1) パラメータの定義、2) Street オブジェクトと Address オブジェ
クトの作成、3) ジオコード リクエストの作成、という 3 つの部分に分けられます。
Geocode サンプル アプリケーション
(..MapInfo\MapXtreme\7.x.x\Samples\Desktop\Features\Geocode\cs) も参照してください。
パラメータの定義
Address オブジェクトに必要な情報を与えるためには、住所のパラメータを定義する必要があり
ます。また、住所のパラメータのほかにも、サーバまたはサービスの URL を定義する必要があり
ます。
//Define the server URL
String MMJUrl = "";
MapXtreme v7.2
362
開発者ガイド
第 18 章 : ジオコード
場所のジオコード化
//Define the address parameters
String streetName = "One Global View";
String cityName = "Troy";
String stateName = "NY";
String zipCode = "12180";
String countryCode = "USA";
//The following are optional address parameters
String directionalPrefix = "";
String typePrefix = "";
String typeSuffix = "";
String directionalSuffix = "";
Address の作成
Street、StreetAddress、Address の各オブジェクトを作成することによって住所情報を構築します。
//Create a Street object
MapInfo.Geocoding.Street street =
new MapInfo.Geocoding.Street(
directionalPrefix,
typePrefix,
streetName,
typeSuffix,
directionalSuffix);
//Create a StreetAddress object
MapInfo.Geocoding.StreetAddress streetAddress =
new MapInfo.Geocoding.StreetAddress(street);
//Create an Address object
MapInfo.Geocoding.Address address =
new MapInfo.Geocoding.Address(streetAddress, countryCode);
address.PrimaryPostalCode = zipCode;
address.PlaceList =
new MapInfo.Geocoding.Place[]
{new MapInfo.Geocoding.Place(
cityName,
MapInfo.Geocoding.NamedPlaceClassification.Municipality),
new MapInfo.Geocoding.Place(
stateName,
MapInfo.Geocoding.NamedPlaceClassification.CountrySubdivision)};
ジオコード リクエストの作成
Address オブジェクトを作成したら、住所をリストに追加し、そのリストを使ってジオコード リ
クエストを作成します。リクエストをジオコード サーバに送信するか、ジオコード サービスに送
信するかは、GeocodeClientFactory を使用して定義します。リクエストをジオコード サーバに送
信する場合は GetMmjHttpClient メソッドを、リクエストをジオコード サービスに送信する場合は
GetEnvinsaLocationUtilityService メソッドを使用します。
//Add the address to a list of addresses
MapXtreme v7.2
363
開発者ガイド
第 18 章 : ジオコード
場所のジオコード化
MapInfo.Geocoding.Address[] addressList = {address};
//Create the geocode request
MapInfo.Geocoding.GeocodeRequest geoRequest =
new MapInfo.Geocoding.GeocodeRequest(addressList);
//Create the geocoding client
MapInfo.Geocoding.IGeocodeClient geoClient =
MapInfo.Geocoding.GeocodeClientFactory.GetMmjHttpClient(MMJUrl);
//Send the request and get the response
MapInfo.Geocoding.GeocodeResponse geoResponse =
geoClient.Geocode(geoRequest);
交差点のジオコード化
交差点は、さまざまな住所タイプまたは住所要素で構成されています。したがって、リクエスト
の設定や精度のレベルもそれに応じて変わってきます。たとえば、モバイル契約者の利用形態を
例に挙げれば、交差点のジオコード化を使用して最寄りの交差点を入力し、現在位置のマップを
モバイル
デ バ イ ス 上 に 表 示 す る といった使い方があります。交差点のジオコード化は、
StreetIntersection クラスを使用し、Street プロパティと IntersectingStreet プロパティを指定する
ことによって行います。
郵便番号のジオコード化
郵便番号中心点とは、郵便番号の該当範囲の中心位置を表します。マップ上でこれらの中心点を
特定することにより、販促活動やダイレクト メールの対象となる市場区域を見極めるための人口
統計分析を実施することができます。郵便番号レベルのジオコード化では、Address クラスを使用
し、PrimaryPostalCode の情報のみを指定することになります。
ガゼッティア型のジオコード化
ジオコード クライアントでは、都市名、州名、プレース名など、住所の一部分から、特定の位置
を検索するジオコード操作 (世界、国、または都市レベルのジオコード化) を実行できます。次の
ような操作がサポートされています。
•
•
国、国の細分区域、都市、都市の細分区域、ランドマーク、空港などを検索条件として対応す
る位置を得る。
パターン検索機能により、1 つまたは複数のフィールドに検索値としてワイルドカード文字 (*)
を指定し、その特定のフィールドで該当したすべての値を得る。
バッチ ジオコード処理
バッチ ジオコード処理は、IGeocodeClient.BatchRequests プロパティでサポートされています。
このプロパティには、サーバに一括して送信する住所の数を設定します。デフォルトの住所数は
25 件です。BatchRequest プロパティは、0 より大きく 500 未満の数値を指定する必要がありま
す。IGeocodeClient.Geocode() メソッドに対して送信する住所の数が、BatchRequest プロパティ
MapXtreme v7.2
364
開発者ガイド
第 18 章 : ジオコード
制約を使った正確なジオコード化
に指定した数を上回っていても構いません。その場合、指定数以上の住所を含んだジオコード操
作は、1 回の操作が BatchRequest プロパティに指定された数を超えないように、複数の操作に分
割されます。
L
BatchRequst の値が小さすぎると (2 など)、パフォーマンスが低下します。逆に BatchRequest
の値が大きすぎると (500 など)、メモリ不足になる可能性があります。バッチ ジオコード処理
のパフォーマンスはシステム構成に依存します。
制約を使った正確なジオコード化
ジオコード クライアントでは、GeocodeConstraints クラスを使用して入力住所をジオコード化す
る場合、一致制約、フォールバック、複数一致などの設定を指定できます。必要に応じて、これ
らの設定を厳密に適用するか、緩めに適用するかを指定することもできます。一致率、正確さ、
パフォーマンスのバランスを最優先するのであれば、次のように設定します。
•
•
•
家番号および道路名については完全一致を必須とする。
郵便番号中心点にフォールバックしない。
近い一致のみを返す。
最も厳密に一致条件を適用する場合は、家番号、道路名、郵便番号の完全一致を必須とし、郵便
番号中心点にフォールバックしない設定にします。この場合、原則的に入力住所に指定された郵
便番号の範囲内で、番地が完全に一致する住所がサーバまたはサービスによって検索されます。
一致制約とは
一致制約は、入力された住所の照合方法、それぞれの住所に対して返される候補の数、および返
される補足情報を制御します。情報が不足していたり不正確であるために、入力された住所が現
実の住所と正確に一致しない場合があります。GeocodeConstraints クラスには、住所のどの部分
が最も重要であると考えられるか、および正確に一致する情報が見つからなかった場合にどのよ
うな処理を行うかを決定する一連のプロパティがあります。
サーバまたはサービスからデフォルト設定を取得できる場合は、
IGeocodeClient.DefaultGeocodeConstraints プロパティを使用することもできます。
GeocodeConstraints を指定しなかった場合、サーバまたはサービスから取得したデフォルト設定
がジオコード クライアントによって使用されます。
ジオコード サーバまたはジオコード サービスによるレコードの比較方法に影響する設定として
は、次のようなものがあります。
•
CloseMatchesOnly – ジオコードの結果、近い一致として検出された候補のみを返します。入
力住所と MustMatchXXX 設定の類似度に基づき、住所候補がランク付けされます。true の場
合、近い一致として検出された候補だけが返されます。デフォルトは false です。
•
MustMatchAddressNumber – 住所番号の一致した候補だけが近い一致と見なされます。デフォ
ルトは true です。
MapXtreme v7.2
365
開発者ガイド
第 18 章 : ジオコード
制約を使った正確なジオコード化
•
MustMatchMainAddress – 道路名の一致した候補だけが近い一致と見なされます。発音の近い
語句を同一と見なす処理 (Soundex) は依然として有効になります。たとえば、"Muller Strasse"
と "Mueller Strasse" は近い一致と見なされます。ただし、入力された道路から近い一致が検出
されなかった場合の道路名の展開処理は抑制されます。つまり、"Mueller Strasse" を "Muleler
Strasse" と入力しても、綴りのミスは修正されません。デフォルトは true です。
•
MustMatchCountry – 国の一致した候補だけが近い一致と見なされます。デフォルトは true で
す。この設定はできるだけ変更しないでください。
MustMatchCountrySubdivision – 国の細分区域の一致した候補だけが近い一致と見なされます。
デフォルトは true です。CountrySubdivision は国によって異なる場合があります。たとえば、
米国の場合は州 (State) ですが、カナダの場合は省 (Province) になります。
•
•
MustMatchCountrySecondarySubdivision – 国の二次細分区域の一致した候補だけが近い一致と
見なされます。デフォルトは false です。CountrySecondarySubdivision は国によって異なる場
合があります。たとえば、米国の場合は郡 (County) ですが、カナダの場合は国勢調査区分
(Census Division) になります。
•
MustMatchMunicipality – 地方自治体の一致した候補だけが近い一致と見なされます。デフォル
トは true です。地方自治体には市や町などが該当します。
•
MustMatchMunicipalitySubdivision – 地方自治体細分区域の一致した候補だけが近い一致と見な
されます。デフォルトは false です。MunicipalitySubdivision には、MSA (Metropolitan Statistical
Area) や市の行政区 (ニューヨーク市のブロンクスやブルックリン) などが該当します。
•
MustMatchPostalCode – 郵便番号の一致した候補だけが近い一致と見なされます。デフォルト
は false です。
•
MustMatchInput – 特定の設定内容に関係なく、入力したすべての設定と一致する候補だけが近
い一致と見なされます。デフォルトは false です。
•
FallbackToGeographic – 道路のジオコード リクエストで候補が 1 つも検出されなかった場合
に、地理領域の中心点でのジオコードを実行するかどうかを示します。結果のポイントは、最
高レベルの精度が得られる領域の地理的中心点に配置されます。デフォルト値は false です。
•
FallbackToPostal – 道路のジオコード リクエストで近い候補が 1 つも検出されなかった場合に、
郵便番号中心点でのジオコードを実行するかどうかを示します。デフォルト値は false です。
•
OffsetFromStreet – 住所の表示位置を調整する際の、道路セグメントからの距離を指定します。
この値は、道路を挟んで相対する住所のそれぞれに同じポイントが与えられるのを回避するた
めに使用します。たとえば、40 から 60 までの範囲のセグメント上の番号が 50 の家は、その
セグメントの中間点に配置されます。該当するポイントは、道路に対して直角方向に距離を持
たせて配置されるため、道路の左側の家は左側に、道路の右側の家は右側に正しく表示されま
す。OffsetFromStreet のデフォルト値は 25 メートルです。OffsetFromStreet は、Distance ク
ラスを使用して計測単位とその値を定義することによって指定します。
OffsetFromCorner – 住所の表示位置を調整する際の、道路セグメントの端 (角) からの距離を指
定します。この値は、道路の角に位置する住所に対して交差点と同じポイントが与えられるの
を回避するために使用します。OffsetFromCorner は、(番地に基づく) 道路に平行し、セグメン
トに沿った距離にある位置にポイントを配置します。たとえば、40 から 60 までの範囲のセグ
メント上の番号が 40 の家は、そのポイントが道路の交差点とならないように配置されます。
OffsetFromCorner のデフォルト値は 25 メートルです。OffsetFromCorner は、Distance クラス
を使用して計測単位とその値を定義することによって指定します。
MaxCandidates – レスポンスとして返される候補の最大数を定義します。実際に返される候補
の数は、この上限値よりも少ない場合があります。値 -1 は、他の制約を満たすすべての候補を
返すことを示します。MapInfo ジオコード サーバを使用した場合、デフォルト値は 3 です。
Envinsa Location Utility Service を使用した場合、デフォルト値は -1 (すべて) です。
•
•
MapXtreme v7.2
366
開発者ガイド
第 18 章 : ジオコード
制約を使った正確なジオコード化
•
•
•
•
•
•
MaxRanges – ジオコード操作で完全に一致した番地だけを返すか、番地の範囲を返すかを制御
します。MaxRanges を 0 に設定した場合、範囲は返されず、完全に一致した番地だけが返さ
れます。MaxRanges に 0 より大きい値を設定した場合、その値と同じ数の番地が返されま
す。MaxRanges のデフォルト値は 0 です。たとえば、MaxRanges を 5 に設定した場合、該当
する住所範囲内の最大 5 件の一致がサービスによって返されます。-1 に設定した場合、対応す
るすべての一致が返されます。
MaxRangeUnits – 候補の範囲あたりに返される最大単位数を定義します。MaxRangeUnits の
デフォルト値はゼロ (0) です。
GeocodeType – サーバから利用できるジオコードの種類を指定します。サポートされるジオコー
ドの種類については、ご利用のサーバまたはサービスのマニュアルを参照してください。
LocalGeocodeConstraints – 国やそのジオコーダに固有の制約を設定できます。これらの値は
常に Key/Value ペアです。使用可能なローカル制約については、ご利用のサーバまたはサービ
スのマニュアルを参照してください。
DictionaryUsage – サーバの住所ディクショナリだけを使用するか、設定されているユーザ ディ
クショナリだけを使用するか、両方を使用するかを指定します。両方を使用する場合は、どち
らを優先するかを指定できます。デフォルトでは、AD_AND_UD オプションが使用されます。
このオプションは、サーバの住所ディクショナリおよび設定されているユーザ ディクショナリ
を使用することを示します。ユーザ ディクショナリの作成とアクセスについては、ご使用の
サーバまたはサービスのマニュアルを参照してください。
UseCASSRules – サーバで CASS レベルのジオコード化を使用するかどうかを指定します (米
国のみ)。CASS 認証は、U.S. Postal Service® (USPS) の大口郵便割引要件に従って 住所の表
を標準化するプロセスです。ジオコード クライアントは、レコードをジオコード化する間、
U.S. Postal Service が規定する厳密な照合条件の下で、 住所の標準化を実行します。CASS ジ
オコード化を使用する場合は、CASS をサポートする米国版のジオコード データ コンポーネ
ントを展開する必要があります。CASS の住所標準化に対応した最新バージョンの入手につい
ては、MapInfo の販売代理店に問い合わせてください。デフォルトは false です。
一致制約を緩和した場合の影響
条件を緩和した場合、検索対象エリアが拡大されます。たとえば、郵便番号の条件を緩和する
と、入力された住所の市内であれば、その郵便番号に該当しない候補も検索対象となります。ジ
オコード化に適用する設定を決める際は、次の点を考慮してください。
郵便番号の条件緩和
郵便番号の条件を緩和した場合、より広いエリアを対象に検索が実行されます。その結果、パ
フォーマンスは低下しますが、一致候補との比較時、リクエストの内容と完全に一致することが
要求されないため一致率は高くなります。
細分区域と地方自治体の条件緩和
これらの条件を緩和した場合、特定の郵便番号と一致した番地を対象として検索が実行されます。
また、郵便番号が一致していれば、名前の異なる他の都市や細分区域も検索対象となります。
MapXtreme v7.2
367
開発者ガイド
第 18 章 : ジオコード
近い一致の正確さについて
道路名の条件緩和
入力住所と発音の似た (または綴りに誤りのある) すべての候補が検索対象になります。パフォー
マンスは低下します。メリットは、より多くの候補が調査の対象となるため一致率が向上する点
です。テーブルのインデックスを作成することにより、さほどパフォーマンスを犠牲にすること
なく、一致率を上げることができます。
家番号の条件緩和
家番号の設定を緩和しても、著しいパフォーマンス低下は生じません。ただし、住所候補が、範
囲を一切含まないセグメントに該当した場合、照合のタイプに影響します。特定の候補の家番号
範囲に、入力された家番号が含まれなかった場合も、照合のタイプに影響が生じます。家番号の
条件を緩和した場合は、返される最大範囲を 0 より大きく設定することをお勧めします。
近い一致の正確さについて
結果のランクは、リクエストに対する一致の精度に基づいて決まります。GeocodeMatchCode ク
ラスでは、リクエストに含まれるジオコード化の制約と、サーバ/サービスの構成の組み合わせに
基づき、照合の対象となったすべてのレコードについて、ジオコード サーバまたはジオコード
サービスから結果コードが返されます。このコードは、ジオコード処理の成否と、一致の質に関
する情報を表しています。結果コードのカテゴリは、大きく次の 5 つに分けられます。
•
「近い一致が 1 件存在 (S カテゴリ)」
•
「複数の候補からの最適一致 (M カテゴリ)」
•
「郵便番号中心点の一致 (Z カテゴリ)」
•
「地理的中心点での一致 (G カテゴリ)」
•
「一致が存在しない」
S カテゴリまたは M カテゴリの結果コードでは、コードの各文字が、住所の各要素の一致精度を
表します。
カテゴリ
説明
例
H
家番号
115
P
道路の接頭辞の方位
North
N
道路名
Main
T
道路の種類
Place
S
道路の接尾辞の方位
SE
C
都市名
New York
MapXtreme v7.2
368
開発者ガイド
第 18 章 : ジオコード
近い一致の正確さについて
カテゴリ
説明
例
Z
郵便番号
80302
A
住所ディクショナリ
A
近い一致候補の場合は、次のようなコードになります。
S5HPNTSCZA
一致の精度が低い場合は、次のようなコードになります。
S5-PNTSC-A
結果コードのダッシュ (-) は、不一致を示しています。リクエストに指定された郵便番号が、検出
されたデータの郵便番号と異なる場合 (入力された値が 28031 のとき、検出された値が 28013 で
あるなど)、結果コードには、Z の代わりにダッシュが表示されます (例: S5HPNTSC-A)。
近い一致が 1 件存在 (S カテゴリ)
S カテゴリの一致は、対象のレコードが単一の住所候補と一致したことを示します。1 文字目 (S)
は、対象のレコードと一致する番地が、ジオコード サーバによって発見されたという意味です。
コードの 2 文字目は、ジオコード化されたレコードの、結果として得られたポイントの位置的な
精度を表しています。
•
S1 – 近い一致が 1 件存在。ポイントは郵便番号中心点に配置。
•
S2 – 近い一致が 1 件存在。ポイントは ZIP+2 中心点に配置 (主に米国)。
•
S3 – 近い一致が 1 件存在。ポイントは ZIP+4 中心点に配置 (主に米国)。
•
S4 - ポイントは、道路の折れ線の形状を定義する図形ポイント パスの中心に配置。
•
S5 – ポイントは番地位置に配置。
•
•
S6 – ポイントはジオメトリ上の郵便番号の中心点に配置。たとえば、大きな建物には独自の
コードが割り当てられます。これは利用可能な最高の精度です。
SX – ポイントは交差点に配置。
•
SO – 座標を利用できない (非常にまれ)。
複数の候補からの最適一致 (M カテゴリ)
M カテゴリの一致は、対象のレコードに近い一致候補が複数存在し、その中から最も適している
と思われる候補がサーバまたはサービスによって選択されたことを意味します。S カテゴリと同
様、M カテゴリ コードの 2 文字目は、結果として得られたポイント オブジェクトの位置的な精度
を表わします。
•
M1 – 近い一致が複数存在。ポイントは郵便番号中心点に配置。
•
M2 – 近い一致が複数存在。ポイントは ZIP+2 中心点に配置 (主に米国)。
•
M3 – 近い一致が複数存在。ポイントは ZIP+4 中心点に配置 (主に米国)。
•
M4 – 近い一致が複数存在。ポイントは、道路の折れ線の形状を定義する図形ポイント パスの
中心に配置。
MapXtreme v7.2
369
開発者ガイド
第 18 章 : ジオコード
近い一致の正確さについて
•
M5 – 近い一致が複数存在。ポイントは番地位置に配置 (利用可能な最高の精度)。
•
M6 – 近い一致が複数存在。ポイントは郵便番号位置に配置。
•
MX – 近い一致が複数存在。ポイントは交差点に配置。
•
M0 – 近い一致が複数存在。座標を利用できない。
郵便番号中心点の一致 (Z カテゴリ)
Z カテゴリでの一致は、道路の照合が行われなかったことを示します。たとえば、1) 近い一致が
存在せず、かつ、サーバまたはサービスが郵便番号中心点にフォールバックする設定になってい
る、2) 住所が私書箱か 僻地に該当する、3) サーバまたはサービスが郵便番号中心点で照合するよ
うに設定されている、などが考えられます。結果のポイントは、次の 4 つの精度レベルで郵便番
号中心点に配置されます。
•
Z1 – 郵便番号中心点での一致
•
Z2 – ZIP+2 中心点での一致 (主に米国)
•
Z3 – ZIP+4 中心点での一致 (利用可能な最高の精度、主に米国)
•
Z6 – 郵便番号中心点での一致 (Point ZIP の場合)
•
Z0 – 郵便番号での一致。座標は利用できない (非常にまれ)
L
Point ZIP とは、エリアを伴わない郵便番号のことです。P.O. Box ZIP や Unique ZIP (単一
の敷地、建物、または組織) などがこれに該当します。米国以外の住所ディクショナリを使
用している場合でも、このカテゴリの結果は Z になります。
地理的中心点での一致 (G カテゴリ)
G カテゴリでの一致は、道路の照合が行われなかったことを示します。たとえば、近い一致が見
つからず、かつ、サーバまたはサービスが地理的中心点にフォールバックする設定になっている
場合は、このカテゴリが該当します。結果のポイントは、次の精度レベルで地理的中心点に配置
されます。
•
G0 – areaName0 の中心点 (国)
•
G1 – areaName1 の中心点 (国の細分区域)
•
G2 – areaName2 の中心点 (国の二次細分区域)
•
G3 – areaName3 の中心点 (地方自治体)
•
G4 – areaName4 の中心点 (地方自治体の細分区域)
MapXtreme v7.2
370
開発者ガイド
第 18 章 : ジオコード
近い一致の正確さについて
一致が存在しない
次の結果コードは、一致が存在しないことを示します。
N – 近い一致が存在しない。こうしたレコードは、MapInfo のジオコード製品を使用してイ
ンタラクティブにジオコード化し直すか、自動的に処理したい場合は、別の一致条件を使用し
て再度ジオコード化することになります。
NX – 交差点に対して近い一致が存在しない。
ND – 指定された郵便番号または地方自治体/国の細分区域に対応する住所ディクショナリが
見つからない。こうしたレコードは、住所ディクショナリを用意した後で再度ジオコード化す
ることができます。
NG – ジオコード処理中、ユーザによってジオコード不可能として指定されたレコード。コー
ドが削除されない限り、これらのレコードは照合されません。
MapXtreme v7.2
371
開発者ガイド
19
Web Map Service
MapXtreme では、Web Map Services (WMS) を展開およびアクセスして、各
種ソースから WMS マップを取得したり、他のユーザにマップを提供したりす
ることができます。
この章の構成
Š
Š
Š
Š
Š
Š
Š
MapXtreme の Web Map Service の概要
WMS の処理について . . . . . . . . .
コード例 : WMS レイヤのリクエスト . .
WMS と座標系 . . . . . . . . . . . .
MapXtreme WMS と認証 . . . . . . .
MapXtreme WMS サーバの設定 . . . .
WMS サーバのレイヤ情報の構成 . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
373
373
376
376
378
378
387
第 19 章 : Web Map Service
MapXtreme の Web Map Service の概要
MapXtreme の Web Map Service の概要
MapXtreme の WMS (Web Map Service) を使用すると、クライアント側からは、空間的に参照される
マップ イメージをインターネットまたは私設のイントラネットを介してリクエストし、サーバ側か
らはこれらのイメージを配信できます。MapXtreme には、他からクエリできる WMS サーバを展開
し、WMS クライアントの機能をアプリケーションに統合して WMS サーバにイメージをリクエスト
できるツールがあります。WMS サーバとクライアントのインプリメントは、『1.3.0 OpenGIS®
Web Map Service Implementation Specification』に基づきます。この文書は、www.opengis.org に
あります。MapXtreme WMS サーバは、1.3.0 および 1.1.1 Web Map Service の準拠要件を満たして
います。
L
WMS 1.3.0 サポートの詳細については、「MapXtreme v7.1.0 リリース ノート」を参照して
ください。
基本的な WMS は地理参照情報をレイヤに分類し、これらのレイヤを表示するための事前定義スタ
イルを提供します。OGC 仕様に準拠する WMS は、一部のイメージ フォーマットの透過ピクセル
定義も同様にサポートしている場合があります。透過ピクセルによって、取得した WMS イメージ
を、マップの背景レイヤとしてだけでなくラスタ オーバーレイとしても使用できます。データの
量と質は、個々の WMS サーバによって決まります。
政府、企業、およびその他の団体などが提供する地理空間情報が増えています。ユーザはこれら
の情報を取得し、マップの精度と完全性を向上できます。土地と水路の利用に関するデータを
持っている企業は、 国勢調査局やローカルのデータ プロバイダから入手した標高や人口の情報を
追加できます。店舗の所在地情報に交通量のパターンのデータを組み合わせると、新店舗オープ
ン時の調査や、マーケティングや製品展開の最適化が可能です。開発者は、WMS コードを拡張し
て、特定のホテル、名所、または観光地を含めるようにルーティングのリクエストをカスタマイ
ズできます。可能性を制限するのは、ニーズと想像力だけです。
WMS の処理について
MapXtreme WMS は、基本的な WMS サービスに関して 1.3.0 および 1.1.1 OGC 仕様に準拠して
います。WMS には、次の 3 種類の処理があります。
•
GetCapabilities
•
GetMap
•
GetFeatureInfo
GetCapabilities
WMS マップをリクエストする前に、使用可能なレイヤの名前、使用中のスタイル、使用中の空間
情報、および WMS サーバが提供する他の情報を見つける必要があります。GetCapabilities は、イ
ンターネットまたはイントラネットを介してサービス レベルのメタデータを取得する HTTP リク
エストです。データには、サーバ名、レイヤ名、データに関する要約、有効なリクエスト パラ
メータなどがあります。
MapXtreme v7.2
373
開発者ガイド
第 19 章 : Web Map Service
WMS の処理について
MapXtreme では、WMS サーバから情報を収集する最初の手順として、GetCapabilities を使用し
ます。取得した機能は、後でマップ イメージをリクエストする際に使用します。
GetMap
WMS サーバの機能を把握できたら、GetMap リクエストを発行して、WMS サーバの 1 つまたは
複数のマップ レイヤのマップ イメージをリクエストします。WMS サーバの機能に基づいて、
GetMap リクエストには以下のものが含まれます。
•
バージョン - リクエストのバージョン。
•
レイヤ - マップ データの 1 つまたは複数のレイヤ。
•
スタイル – レイヤのレンダリング用の表示スタイル。指定しない場合は、デフォルトのスタイ
ルが使用されます。
境界ボックス – マップ イメージに含まれる領域。
•
•
•
CRS - WMS 1.3.0、または SRS (WMS 1.1.1) では、マップの "名前空間:識別子" 形式のリファ
レンス座標系。
出力フォーマット – GIF や PNG など、出力マップ イメージの MIME タイプ。
•
出力サイズ – マップ イメージの高さおよび幅 (ピクセル単位)。
•
背景色 – 0xFFFFFF など、赤、緑、青の値を示す 16 進値 (透過性が true に設定されている場
合に必要)。
•
透過性 – レイヤを他のレイヤの透過オーバーレイとして使用できるかどうかを true/false で指
定します。
GetFeatureInfo
GetMap リクエストが正常に完了すると、マップに含まれるフィーチャについてさらに詳細な情報
をユーザが希望する場合があります。GetFeatureInfo 処理は、マップ内のレイヤおよび各レイヤの
問い合わせ可能な属性に関する情報を返します。この処理は WMS サーバ側で制御されますが、
サーバがこの機能を必ずしも提供するとは限りません。
WMS クライアントとしての MapXtreme の使用
MapInfo.Data.TableInfoWMS を介して MapXtreme WMS クライアントを使用すると、WMS マッ
プ イメージをプログラムによってリクエストすることができます。ここではコード例を示しなが
ら、MapXtreme を WMS クライアントとして使用する方法を説明します。また、インストール後
の Desktop samples フォルダには WMSPreview サンプル アプリケーションがあります。
GetCapabilities
MapXtreme では、GetCapabilities を直接呼び出しません。マップのリクエストは、機能インスタ
ンスを入力として受け取る WMSClient を使用した呼び出しの中で行います。
// build the capabilities
ICapabilities capabilities = WmsClientUtilities.GetCapabilities
(url, "1.3.0");
// create the WMS client
MapXtreme v7.2
374
開発者ガイド
第 19 章 : Web Map Service
WMS の処理について
WmsClient wmsClient = new WmsClient(capabilities);
wmsClient.AddLayer("WORLD");
wmsClient.Srs = "EPSG:4326";
wmsClient.BGColor = Color.Blue;
wmsClient.MimeType = "image/gif";
接続先のサーバの URL を指定する必要があります。バージョンは省略可能です。MapXtreme クラ
イアントは HTTP リクエストの ? の後ろに必要な情報を追加して、 サーバの機能の完全なリクエ
ストを作成します。次に例を示します。
http://www.mapsanddata.xyz/gis/services/maps/hydrography/MapServer/WMSSer
ver?request=GetCapabilities&service=WMS&version=1.3.0
バージョンを指定せずに、両方のバージョンをサポートする MapXtreme WMS サーバにアクセス
すると、1.3.0 に対するレスポンスが返されます。
バージョン番号の文字列の配列を受け取るオーバーロードされたメソッドがあります。バージョ
ンの順序は、探している対象に依存します。最初に一致したものが返されます。
GetCapabilities では、リクエスト 内でユーザ定義のパラメータを使用することもできます。
NameValueCollection を受け取るメソッドを使用します。詳細については、『開発者リファレン
ス』を参照してください。
GetCapabilities レスポンスは XML ドキュメントで返されます。MapXtreme はこのドキュメントを
読み取り、それを基に機能オブジェクトを作成します。
GetMap
リクエストを表すテーブル オブジェクトをユーザが MapXtreme マップのレイヤとし て配置する
と、MapXtreme に よ っ て GetMap の呼び出しが自動的に行われます。以下のコード例は、
「GetCapabilities」 セクションの例に基づいています。
// create the table info
TableInfoWms wmsTableInfo= new TableInfoWms
("MyWmsTable", wmsClient);
// create the table
Table wmsTable = Session.Current.Catalog.OpenTable(wmsTableInfo);
// creates a FeatureLayer from the table entry
FeatureLayer featLyr = new FeatureLayer(wmsTable);
TableInfoWms の詳細については、「サポートされているテーブルの種類 (173 ページ)」の WMS
の説明を参照してください。また、『開発者リファレンス』の TableInfoWms クラスの説明も参照
してください。
GetFeatureInfo
GetFeatureInfo リクエストへの入力は、マップの境界と、ユーザが Info ツールを使用してマップ
上でクリックしたピクセル座標です。
// Get the feature info
MapXtreme v7.2
375
開発者ガイド
第 19 章 : Web Map Service
コード例 : WMS レイヤのリクエスト
Byte[] info = WmsClientUtilities.GetFeatureInfo(new DRect(45.0, 45.0, 90,
90), 640, 480, new String[] {"WORLD"}, new Point(300,200), "text/xml"));
MemoryStream memoryStream = new MemoryStream(byteArray);
memoryStream.Seek(0, SeekOrigin.Begin);
XmlDocument doc = new XmlDocument();
doc.Load(memoryStream);
//parse the xml doc as desired.
コード例: WMS レイヤのリクエスト
WMS レイヤを MapXtreme でプログラムからリクエストするには、以下のコード例に従います。
L
MapXtreme での WMS のインプリメントでは、返されるイメージの幅と高さがそれぞれ
4000 ピクセルに制限されています。
// build the capabilities
ICapabilities capabilities = WmsClientUtilities.GetCapabilities
(url, "1.1.1");
// create the WMS client
WmsClient wmsClient = new WmsClient(capabilities);
wmsClient.AddLayer("WORLD");
wmsClient.Srs = "EPSG:4326";
wmsClient.BGColor = Color.Blue;
wmsClient.MimeType = "image/gif";
// create the table info
TableInfoWms wmsTableInfo= new TableInfoWms
("MyWmsTable", wmsClient);
// create the table
Table wmsTable = Session.Current.Catalog.OpenTable(wmsTableInfo);
// creates a FeatureLayer from the table entry
FeatureLayer featLyr = new FeatureLayer(wmsTable);
WMS と座標系
MapXtreme は、GetCapabilities リクエストで返すことのできる 3 種類の CRS 典拠の座標系をサ
ポートしています。
•
CRS:84 - 経度/緯度 WGS 84。これは WMS 1.1.1 の EPSG:4236 に相当します。
•
CRS:83 - 経度/緯度 NAD 83。これは WMS 1.1.1 の EPSG:4269 に相当します。
•
CRS:27 - 経度/緯度 NAD 27。これは WMS 1.1.1 の EPSG:4267 に相当します。
MapXtreme v7.2
376
開発者ガイド
第 19 章 : Web Map Service
WMS と座標系
さらに、MapXtreme API は CRS コードスペースの他の経度/緯度投影法を登録するためのパブ
リック メソッド RegisterCRSCode() を提供しています。
マップとイメージの境界
EX_GeographicBoundingBox
EX_GeographicBoundingBox は、レイヤの最小外接四角形を小数度で定義する WMS 1.3.0 対応の
新しいパラメータです。このパラメータを使用すると、検索エンジンによる座標変換式を必要と
せずに地理的検索を簡単に実行できます。
EX_GeographicBoundingBox には、westBoundLongitude、eastBoundLongitude、
southBoundLatitude、northBoundLatitude という属性があります。EX_GeographicBoundingBox
は、WMS サーバがサポートする CRS の種類にかかわらず指定されます。データがもともと地理
的座標でない場合は、近似値になることがあります。
WMS 1.1.1 の同等のパラメータは、EPSG:4326 経度/緯度の minx、miny、maxx、maxy 属性を持
つ LatLongBoundingBox です。
境界ボックス
WMS 1.3 サーバによって配信される各レイヤには、少なくとも 1 つの境界ボックスが含まれてい
る必要があります。座標は、座標系の典拠で規定されている順序で示されます。EPSG と CRS の
コードの例では、境界ボックスの座標の順序が互いに逆になっています。
<BoundingBox CRS="EPSG:4326" minx="-59.100605" miny="-86.389389"
maxx="16.755765" maxy="-32.336389"/>
<BoundingBox CRS="CRS:84" minx="-86.389389" miny="-59.100605" maxx="32.336389" maxy="16.755765"/>
つまり、EPSG:4326 では minx は最南端の緯度、miny は最西端の経度を表します。CRS:84 では
minx は最西端の経度、miny は最南端の緯度を表します。
MapXtreme では、空間分解能を表す resx resy に対応するオプションの BoundingBox 属性もサ
ポートされています。
イメージの拡大
WMS で は、GetMap リ ク エ ス ト によって返されるイメージが、BBOX とイメージ サイズ
(WIDTH、HEIGHT) の両方のパラメータに対応している必要があります。これは、返されるイメー
ジが境界ボックスに合わせて無理に拡大されないようにするためです。
MapXtreme v7.2
377
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS と認証
MapXtreme WMS と認証
基本認証
MapXtreme の WMS クライアントは、セキュリティで保護される WMS サーバにサービス リクエ
ストを発行するときに基本認証プロトコルを管理する機能をインプリメントしています。サービ
ス リクエストを開始する前に、認証資格情報を WmsRequest オブジェクトに定義すると、API を
介した認証をプログラミングで制御できます。WmsRequest が適切な資格情報を持たない場合、
クライアントはサーバから認証エラーを受け取ります。資格情報の入力を要求する Windows ダイ
アログが表示されます。資格情報の入力ダイアログを使用しない設定も可能です。その場合は、
認証例外が呼び出し側アプリケーションに直接返されます。
WMS サーバとの認証に成功すると、サーバに対する資格情報はクライアント セッションの有効期
間中、キャッシュされます。それ以降、クライアントは認証の有無にかかわらず、再認証を行う
ことなくサーバに WMS リクエストを発行し、また他のサーバにリクエストを発行することができ
ます。
認証を既存の MapXtreme WMS クライアント インプリメントに統合するために、WmsRequest
UserDefinedParameters のセマンティクスが拡張され、一連の標準認証パラメータのサポートが組
み込まれています。これらのパラメータは、WmsRequest オブジェクト モデルの各認証プロパ
ティに直接マッピングされます。オブジェクト モデルを介して認証プロパティを直接設定する方
法と、UserDefinedParameters を介して間接的に設定する方法は同じ効果を持ちます。
詳細については、『開発者リファレンス』で WmsRequest クラスの説明を参照してください。
MapXtreme WMS サーバの設定
MapXtreme は、OGC WMS 1.3.0 および 1.1.1 仕様に準拠する WMS サーバを提供します。
独自に WMS サーバを設定するには、IIS へのサーバ接続を設定し、Web Map Service のホスト用
のデータ接続に必要な XML ファイルを作成する必要があります。WMS の操作に関する知識と、
MapXtreme ワークスペース スキーマに関する知識があることが前提です。
WMS サ ー バ は、Microsoft IIS (Internet Information Service) 内部で稼動します。以下に、WMS
サーバをセットアップするための構成手順を示します。
手順 1: Web.config ファイルを作成または変更して、MapXtreme 固有の WMS 情報と、IIS のクラ
シック モードまたは統合パイプライン モード用の適切なハンドラを指定します。
手順 2: ホスティング対象となるデータに関する情報を含む有効な WMS 構成ファイルを作成しま
す。このファイルは、WMS サーバの実行時にエラーが発生しないように、WMS スキーマ ファイ
ル (MXP_WMS_Configuration_1_2.xsd) と比較検証する必要があります。
手順 3: WMS サーバのセットアップを構成およびテストします。IIS7 および IIS6 の構成手順を示
します。
MapXtreme v7.2
378
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
MapXtreme の製品メディアには Web.config ファイルおよび WMS 構成ファイルのサンプルが収録
されています。これらのファイルは内容を確認し、必要に応じて変更できます。Web.config ファ
イルには、ASP.NET プロセスの処理方法と、WMS サーバと MapXtreme との関係が定義されてい
ます。WMSSample.xml には、WMS サーバをインプリメントする際に手本として使用できるデー
タ ソースとレイヤの定義が記述されています。
手順 1: Web.config ファイルの作成
Web.config は、Web アプリケーション用の標準的な構成ファイルです。ここでは、このファイルを
変更して MapXtreme 固有の WMS 情報を指定し、ASP.NET プロセスの処理方法を定義します。
MapXtreme では、IIS 7.x のクラシック モードと統合パイプライン モード、および IIS 6 を使用で
きます。
1. Web.config および構成ファイル WMSSample.xml を含むフォルダを作成します。この例では、
c:\wms に 作 成 し ま す。MapXtreme 製品メディアに収録されている Web.config および
WMSSample.xml をこのフォルダにコピーします。
2. Web.config をテキスト エディタで開き、<appSettings"> 行を WMS 構成ファイルを参照する
ように変更します。
<configuration>
<appSettings>
<add key="configFile" value="C:\wms\WMSSample.xml" />
3. IIS 7 のクラシック モードまたは IIS 6 では、システムにインストールされている
MapInfo.Wms.Server アセンブリおよび MapInfo.CoreEngine アセンブリのバージョン番号を更
新し、必要に応じて PublicKeyToken も更新します (下の太字部分)。
アセンブリは C:\Windows\Microsoft.NET\assembly\GAC_32 または GAC_64 にあり
ます。
<system.web>
<httpHandlers>
<add verb="GET,POST" path="*.ashx"
type="MapInfo.Wms.WmsHttpHandler, MapInfo.Wms.Server, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=4ac3224575145b20"/>
</httpHandlers>
<httpModules>
<add type="MapInfo.Engine.WebSessionActivator,
WMSMapInfo.CoreEngine, Version=7.2.0.64, Culture=neutral,
PublicKeyToken=93e298a0f6b95eb1" name="WebSessionActivator" />
</httpModules>
4. IIS 7 の統合パイプライン モードでは、次のセクションを web.config にコピーします。統合パ
イプライン モードで実行する場合は、<system.web> セクションをコメント アウトする必要は
あ り ま せ ん。一 方、IIS 7 の クラシック モードまたは IIS 6 で実行する場合は、この
<system.webServer> セクションをコメント アウトする必要があります。
ステップ 3 の手順に従って、MapInfo.CoreEngine および MapInfo.Wms.Server のアセ
ンブリ バージョンを更新します。
<system.webServer>
MapXtreme v7.2
379
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
<validation validateIntegratedModeConfiguration="false"/>
<directoryBrowse enabled="true" />
<modules>
<add type="MapInfo.Engine.WebSessionActivator,
MapInfo.CoreEngine, Version=7.2.0.64, Culture=neutral,
PublicKeyToken=93e298a0f6b95eb1" name="WebSessionActivator"/>
</modules>
<handlers>
<add name="WMSHandler" verb="GET,POST" path="*.ashx"
type="MapInfo.Wms.WmsHttpHandler, MapInfo.Wms.Server, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=4ac3224575145b20"/>
</handlers>
</system.webServer>
5. web.config ファイルを保存し、ステップ 1 で作成した場所にコピーします。
手順 2: ホストするデータ用の有効な WMS 構成ファイルの作成
WMSSample.xml は、MapXtreme に付属する WMS 構成ファイルです。このファイルには、WMS
サーバに関する情報として、サーバの名前、タイトル、概要、WMS サーバの URL、ホストする
データなどが定義されています。
1. WMSSample.xml をテキスト エディタで開き、<mxp-wms:OnlineResource> 行を WMS
サーバを参照するように変更します。
必要に応じて、サーバ名、タイトル、概要、キーワード リストとボキャブラリ、連絡先情
報、料金、アクセス制約などの要素も変更できます。
<mxp-wms:Service>
<mxp-wms:Name>Sample WMS Server</mxp-wms:Name>
<mxp-wms:Title>Sample WMS Server</mxp-wms:Title>
<mxp-wms:Abstract>This is a sample WMS server</mxp-wms:Abstract>
<mxp-wms:KeywordList>
<mxp-wms:Keyword vocabulary="ISO 19115:2003">biota</mxpwms:Keyword>
<mxp-wms:Keyword vocabulary="ISO 19115:2010">biota</mxpwms:Keyword>
<mxp-wms:Keyword>rivers</mxp-wms:Keyword>
</mxp-wms:KeywordList>
<!-- The following is the URL of your WMS server, here assume it is
localhost -->
<mxp-wms:OnlineResource>http://localhost:port/WMS/GetMap.ashx</mxpwms:OnlineResource>
<mxp-wms:Fees>$10</mxp-wms:Fees>
<mxp-wms:AccessConstraints>none</mxp-wms:AccessConstraints>
</mxp-wms:Service>
2. <DataSourceDefinitionSet> のパスを変更して、データ レイヤを登録します。WMS で処
理する各レイヤを 1 つずつ入力する必要があります。以下は、WMSSample.xml の一部で、サ
ンプル WMS サーバの TAB ファイルを識別します。
MapXtreme v7.2
380
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
<!-- The following data sources reference local TAB files, you need
to replace MYPATH with the real path to those tab files.-->
<TABFileDataSourceDefinition id="id1" readOnly="false"
xmlns="http://www.mapinfo.com/mxp">
<DataSourceName>STATES</DataSourceName>
<FileName>MYPATH\USA.TAB</FileName>
</TABFileDataSourceDefinition>
<TABFileDataSourceDefinition id="id2" readOnly="false"
xmlns="http://www.mapinfo.com/mxp">
<DataSourceName>US_HIWAY</DataSourceName>
<FileName>MYPATH\US_HIWAY.TAB</FileName>
</TABFileDataSourceDefinition>
<TABFileDataSourceDefinition id="id5" readOnly="false"
xmlns="http://www.mapinfo.com/mxp">
<DataSourceName>OCEAN</DataSourceName>
<FileName>MYPATH\OCEAN.TAB</FileName>
</TABFileDataSourceDefinition>
3. WMS サーバでホストするレイヤを <mxp-wms:WMSLayer> セクションに記述します。WMS
サーバで提供する各レイヤを 1 つずつ入力する必要があります。また、レイヤをネストするこ
とで、親レイヤを呼び出すだけですべての子レイヤを呼び出すことができます。
以 下 の 例 は、States と い う 単一のレイヤの項目を示しています。太字の部分は、WMS
1.3.0 をサポートするために追加された要素を呼び出しています。
これらの項目の作成方法の詳細については、「WMS サーバのレイヤ情報の構成」を参照して
ください。
<mxp-wms:WmsLayer>
<mxp-wms:Name>States</mxp-wms:Name>
<mxp-wms:Title>States</mxp-wms:Title>
<mxp:SRSName>EPSG:4326</mxp:SRSName>
<mxp-wms:Attribution type="FGDC:1998">
<mxp-wms:Title>Attribution</mxp-wms:Title>
<mxp-wms:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="http://localhost/metadata/roads.txt">
</mxp-wms:OnlineResource>
<mxp-wms:LogoURL width="500" height="600">
<mxp-wms:Format>text/plain</mxp-wms:Format>
<mxp-wms:OnlineResource
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:href="http://localhost/metadata/roads.txt">
</mxp-wms:OnlineResource>
</mxp-wms:LogoURL>
</mxp-wms:Attribution>
<mxp-wms:MetadataURL type="FGDC:1998">
<mxp-wms:Format>text/plain</mxp-wms:Format>
<mxp-wms:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="http://localhost/metadata/roads.txt" />
</mxp-wms:MetadataURL>
<mxp-wms:MetadataURL type="ISO19115:2003">
<mxp-wms:Format>text/xml</mxp-wms:Format>
<mxp-wms:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="http://localhost/metadata/roads.xml" />
MapXtreme v7.2
381
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
</mxp-wms:MetadataURL>
<mxp-wms:FeatureListURL>
<mxp-wms:Format>text/xml</mxp-wms:Format>
<mxp-wms:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="http://localhost/featurelist/feature1.xml" />
</mxp-wms:FeatureListURL>
<mxp-wms:FeatureListURL>
<mxp-wms:Format>text/plain</mxp-wms:Format>
<mxp-wms:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="http://localhost/featurelist/feature2.xml" />
</mxp-wms:FeatureListURL>
<mxp-wms:WmsStyleSet>
<mxp-wms:WmsStyle>
<mxp-wms:Name>BlueFill</mxp-wms:Name>
<mxp-wms:Title>Blue Fill</mxp-wms:Title>
<mxp-wms:Abstract>This is a blue area fill with a red
border.</mxp-wms:Abstract>
<mxp-wms:LegendURL width="100" height="100">
<mxp-wms:Format>image/gif</mxp-wms:Format>
<mxp-wms:OnlineResource
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:href="http://localhost/WMS/legends/1.gif" />
</mxp-wms:LegendURL>
<mxp-wms:LegendURL width="200" height="200">
<mxp-wms:Format>image/gif</mxp-wms:Format>
<mxp-wms:OnlineResource
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:href="http://localhost/WMS/legends/2.gif" />
</mxp-wms:LegendURL>
<AreaStyle xmlns="http://www.mapinfo.com/mxp">
<!-- The following defines the red border -->
<LineStyle stroke="red" width="1" width-unit="mapinfo:imagesize
pixel">
<Pen>mapinfo:pen 2</Pen>
</LineStyle>
<!-- The following defines the blue fill -->
<Interior fill-opacity="0" fill="(#id7)">
<Defs>
<Pattern id="id7">
<Bitmap uri="mapinfo:brush 2">
<ColorAdjustmentSet>
<ColorAdjustment color-1="nonWhite" color-2="blue"
opacity="1"/>
<ColorAdjustment color-1="white" opacity="1"/>
</ColorAdjustmentSet>
</Bitmap>
</Pattern>
</Defs>
</Interior>
</AreaStyle>
MapXtreme v7.2
382
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
</mxp-wms:WmsStyle>
</mxp-wms:WmsStyleSet>
<mxp-wms:MinScaleDenominator>10</mxp-wms:MinScaleDenominator>
<mxp-wms:MaxScaleDenominator>20</mxp-wms:MaxScaleDenominator>
<FeatureLayer id="id8" name="STATES" alias="STATES" volatile="unknown"
xmlns="http://www.mapinfo.com/mxp">
<DataSourceRef ref="id1"/>
</FeatureLayer>
</mxp-wms:WmsLayer>
4. フィーチャ レイヤ情報を追加できたら、WMSSample.xml を保存します。
WMS サーバをインターネット インフォメーション サービス (IIS) に登録し、セットアップをテス
トします。IIS7 または IIS 6 に対応する手順を実行してください。
手順 3a: IIS7 を使用した WMS サーバの構成とテスト
1. WMS フォルダ (c:\wms など) を右クリックし、[プロパティ] を選択します。[共有] タブを選択
し、[共有] ボタンをクリックします。ユーザ リストに IUSR アカウントを追加します。[共有]
をクリックし、[完了] をクリックして [プロパティ] ダイアログ ボックスに戻ります。[セキュリ
ティ] タブをクリックします。セキュリティ リストに IUSR アカウントを追加します。
IUSR ア カ ウ ン ト の 権 限 の 設 定については、「Understanding Built-In User and Group
Accounts in IIS 7」を参照してください。
2. IIS7 マネージャを開きます。[サイト] を右クリックし、メニューから [Web サイトの追加] を選
択します。表示されるダイアログ ボックスで、サイト名を指定し ("WMS" など)、WMS フォル
ダの物理パスを入力します。[接続] ボタンをクリックし、アプリケーションの使用がチェック
されていることを確認します Web サイトに空きポート番号を割り当てるか、デフォルトの 80
を使用します。[OK] をクリックします。
MapXtreme v7.2
383
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
3. 左側のペインで [アプリケーション プール] をクリックします。IIS7 が WMS Web サイト
("WMS") 用に作成した新しいアプリケーション プールを右クリックし、[詳細設定] を選択しま
す。.Net Framework のバージョンを "v4.0" に変更し、[OK] をクリックします。
手順 3b: IIS6 を使用した WMS サーバの構成とテスト
1. WMS フォルダ (c:\wms など) を右クリックし、[共有とセキュリティ] を選択します。[Web 共
有] タブで、[このフォルダを共有する] を選択します。Web サーバのエイリアスを設定する場
合は、[追加] ボタンをクリックし、ダイアログ ボックスに名前を指定します。
MapXtreme v7.2
384
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
2. IIS を開きます ([スタート] メニュー、[コントロール パネル]、[管理ツール]、[インターネット
インフォメーション サービス])。[既定の Web サイト] を展開し、WMS サーバを見つけます (フォ
ルダ名、またはエイリアスを設定している場合はエイリアスで探します)。
3. Web サイトを右クリックし、[プロパティ] を選択します。[ASP.NET] タブで、[ASP.NET バー
ジョン] に [4.0.30319] を選択します (MapXtreme アセンブリは 4.0 Framework でコンパイルさ
れています)。
4. 同じプロパティ ダイアログ ボックスの [ディレクトリ セキュリティ] タブで、右上にある [編集]
ボタンをクリックします。[認証方法] ダイアログ ボックスで、[匿名アクセス] チェック ボック
スをオンにします。これにより、WMS サービスのユーザはユーザ名とパスワードを指定する
必要がなくなります。[OK] を 2 回クリックして、IIS ウィンドウを閉じます。
MapXtreme v7.2
385
開発者ガイド
第 19 章 : Web Map Service
MapXtreme WMS サーバの設定
5. Web ブラウザから 「GetCapabilities」 リクエストを送信して、セットアップをテストしま
す。アドレス ボックスに、以下のように入力します。
http://localhost/wms/GetMap.ashx?REQUEST=GetCapabilities&SERVICE=WMS&V
ERSION=1.3.0
localhost は、使用する Web サーバで置き換えます。Web サーバにエイリアスを設定して
いる場合は、URL にエイリアスを指定します。たとえば、次のようになります。
http://localhost/My_WMS/GetMap.ashx?REQUEST=GetCapabilities&SERVICE=WM
S&VERSION=1.3.0
テストが成功した場合、下図のような Web ページが表示されます。機能が返されない場合は、
構成ファイルにすべての入力事項が正しく入力されていることを確認します。構成ファイルは手
作業で作成しているため、入力ミスが起きやすく、タグが消えてしまうこともあります。
6. WMS サーバにアクセスした後、WMSSample.xml に何らかの変更を加えた場合は、IIS を再起
動して変更内容を反映する必要があります。IIS を再起動するには、コマンド プロンプトで以
下のように入力します。
c:\>IISreset
7. テスト用のマップ イメージをリクエストするには、以下の例のように、「GetMap」 リクエス
トを送信します。
http://My_Wms/GetMap.ashx?service=WMS&VERSION=1.3.0&SRS=epsg:4267&REQU
EST=GetMap&LAYERS=States&STYLES=&BBOX=180,0,0,90&WIDTH=800&HEIGHT=600&FORMAT=image/gif
WMS サーバから、States レイヤのマップ イメージが返ります。
MapXtreme v7.2
386
開発者ガイド
第 19 章 : Web Map Service
WMS サーバのレイヤ情報の構成
WMS サーバのレイヤ情報の構成
レイヤは、MXP_WMSConfiguration_1_2.xsd スキーマにレイアウトされる要素に応じて、WMS
サーバ構成ファイルに定義されます。WMS 1.3 の新しい要素は太字で示しています。以下のよう
な要素があります。
•
Name – レイヤ名。リクエスト内でレイヤを参照する際に使用します。
•
Title – ユーザが判読可能なレイヤ名。
•
Abstract – レイヤに関する詳細な説明。
•
KeywordLIst と Vocabulary 属性 - カタログ検索を実行できるようにするキーワードのリスト。
ボキャブラリは、キーワードの典拠を示します。
SRSNameSet – このレイヤに適用する空間リファレンス システム。レイヤで複数の SRS を使
用できる場合は、SRS を 1 つずつリストできます。このリストは順不同で、親レイヤおよび子
レイヤに適用されます。
Attribution - 地理的情報のソースを示します。
•
•
•
•
•
•
MetadataURL - 特定のレイヤに対応するデータに関する詳細で標準化されたメタデータへのリ
ンク。
FeatureListURL - レイヤで表されているフィーチャのリストを参照します。
MinScaleDenominator と MaxScaleDenominator - WMS マップの適切な縮尺の範囲を定義し
ます。
WmsStyleSet – このレイヤおよびすべての子レイヤでサポートする、順不同の定義済みのスタ
イル セット。WmsStyleSet は WmsStyles のコレクションで、スタイルごとにスタイル定義と
して名前、タイトル、概要、および参照があります。各スタイルには、そのスタイルの凡例の
イメージを参照する LegendURL を設定できます。
MapXtreme v7.2
387
開発者ガイド
第 19 章 : Web Map Service
WMS サーバのレイヤ情報の構成
WMS レイヤは、データの単一のレイヤで構成することも、レイヤの階層コレクションで構成する
こともできます。WMS の基本インプリメントにより、クライアントは必要なレイヤを指定した
り、マップ イメージとしてレンダリングするレイヤの座標系やスタイルを指定したりできます。
WMS サーバの開発者として、データを WMS レイヤとして作成する方法を決める必要がありま
す。たとえば、地理データを境界ファイル、ポイント ファイル、折れ線ファイルなど、10 個の
.TAB ファイルに分割するとします。WMS 構成ファイルでは、これらの 10 個のレイヤを 1 つの
WMS レイヤとして表すことも、個々のレイヤとして保持することもできます。データを WMS ク
ライアントに 1 つのレイヤとして提供すると、クライアントは 10 個すべてのレイヤから 1 つの
WMS イメージを表します。この場合、クライアントは不要な情報を切り離すことはできません。
一方、10 個のレイヤを個別のレイヤとして提供した場合、WMS クライアントは必要に応じて、1
つのイメージ (通常は複数のイメージ) として返すレイヤを 1 つ選択することも、複数選択するこ
とも、すべて選択することもできます。開発者は、WMS サーバの構成時に、ユーザにどの程度の
柔軟性を与えるかを決める必要があります。
また、レイヤをネストすることで、親レイヤを呼び出すだけですべての子レイヤをマップ イメー
ジに呼び出すこともできます。
MapXtreme ワークスペースを使用した WMS 構成ファイルの作成
WMS 構成ファイルにレイヤ情報を作成するには、以前に保存した MapXtreme ワークスペース
(.MWS) から各レイヤに関する情報を抽出します。
以下は、MapXtreme ワークスペース マネージャで作成した .MWS の一部で、"World Countries" と
いうレイヤを定義しています。.MWS のレイアウトは、MXP_Workspace_1_5.xsd に記述されたス
キーマに準拠する XML ファイルです。
<FeatureLayer id="id10" name="World Countries" alias="world"
volatile="unknown">
<Visibility visible="true">
<VisibleRange enabled="false">
<ZoomRange uom="mapinfo:length mi" minInclusive="true"
maxInclusive="false">0 0</ZoomRange>
</VisibleRange>
</Visibility>
<DataSourceRef ref="id4" />
</FeatureLayer>
また、これと同じレイヤ情報が WMS 構成ファイルに含まれています。内容はほとんど同じです
が、各 タ グ に 含 ま れ る "mxp:" は、これらの要素が MapXtreme ワークスペース スキーマ
(MXP_Workspace_1_5.xsd) に属することを示しています。
<mxp:FeatureLayer id="id10" name="World Countries" alias="world"
volatile="unknown">
<mxp:Visibility visible="true">
<mxp:VisibleRange enabled="false">
<mxp:ZoomRange uom="mapinfo:length mi" minInclusive="true"
maxInclusive="false">0 0</mxp:ZoomRange>
</mxp:VisibleRange>
</mxp:Visibility>
MapXtreme v7.2
388
開発者ガイド
第 19 章 : Web Map Service
WMS サーバのレイヤ情報の構成
<mxp:DataSourceRef ref="id4" />
</mxp:FeatureLayer>
レイヤは、ワークスペース マネージャで設計し、情報を WMS 構成ファイルにコピーして作成で
きます。「第 23 章 : ワークスペース マネージャ」を参照してください。
フィーチャ レイヤおよびその他の要素
フィーチャ レイヤ情報を WMS レイヤに取り込む以外の操作も行うことができます。たとえば、
ワークスペース マネージャでラベル、主題図、およびスタイル オーバーライドを取得して、WMS
構成ファイルに貼り付けることもできます。
以下は、.MWS の一部で、人口レイヤのサイズ可変シンボル主題図を定義しています。主題図を定
義する要素はすべて、ここで取得されます。取得した要素を WMS 構成ファイルに貼り付けるとき
は、必ず各要素に mxp: を指定してください。
<ObjectThemeLayer id="id8" name="Graduated Symbol Theme on World Capitals
by Cap_Pop" alias="GraduatedSymbolThemeLayer1" volatile="unknown">
<Visibility visible="true">
<VisibleRange enabled="false">
<ZoomRange uom="mapinfo:length mi" minInclusive="true"
maxInclusive="false">0 0</ZoomRange>
</VisibleRange>
</Visibility>
<DataSourceRef ref="id4" />
<FeatureGraduatedSymbolTheme id="id9">
<Alignment>
<HorizontalAlignment>center</HorizontalAlignment>
<VerticalAlignment>center</VerticalAlignment>
</Alignment>
<SymbolBaseSize useScale="false">
<MapScale>1.0</MapScale>
<DataValueAtSize>20000000</DataValueAtSize>
<PositiveSymbol>
<PointStyle>
<FontSymbol size="18" size-unit="mapinfo:length pt"
stroke="red" stroke-opacity="1" text="&quot;" family="MapInfo 3.0
Compatible" />
</PointStyle>
</PositiveSymbol>
<NegativeSymbol visible="false">
<PointStyle>
<FontSymbol size="18" size-unit="mapinfo:length pt"
stroke="blue" stroke-opacity="1" text="&quot;" family="MapInfo 3.0
Compatible" />
</PointStyle>
</NegativeSymbol>
<SymbolGraduation>sqrt</SymbolGraduation>
</SymbolBaseSize>
<SymbolLayout />
<NumericValueExpression>
<AttributeName>Cap_Pop</AttributeName>
MapXtreme v7.2
389
開発者ガイド
第 19 章 : Web Map Service
WMS サーバのレイヤ情報の構成
</NumericValueExpression>
<SymbolLegendRowOverrideSet>
<SymbolLegendRowOverride visible="false" row="4" />
<SymbolLegendRowOverride visible="false" row="5" />
<SymbolLegendRowOverride visible="false" row="6" />
</SymbolLegendRowOverrideSet>
</FeatureGraduatedSymbolTheme>
</ObjectThemeLayer>
MapXtreme v7.2
390
開発者ガイド
ルーティング
この章では、ルーティングに使用される MapXtreme 名前空間について説明
し、ルーティング サーバまたはルーティング サービスにアクセスするアプリ
ケーションの作成方法とその例を示します。
この章の構成
Š
Š
Š
Š
Š
MapInfo.Routing 名前空間の概要 . . . . . . . . . . . . . 392
ルートの計算. . . . . . . . . . . . . . . . . . . . . . . 393
高度なルート オプション . . . . . . . . . . . . . . . . . 396
等値ルーティング ( 運転時間と運転距離 ) . . . . . . . . . . . . . . . . . . . .400
ルーティング データを使用したリクエストの更新 . . . . . . 405
20
第 20 章 : ルーティング
MapInfo.Routing 名前空間の概要
MapInfo.Routing 名前空間の概要
MapInfo.Routing 名前空間には、ジオコード クライアントと似た方法で MapXtreme ルーティング
クライアントをアプリケーションに組み込むためのインターフェイスとクラスが用意されていま
す。ルーティング クライアントから HTTP を使用して、Pitney Bowes Software ルーティング
サーバまたはルーティング Web サービス製品にリクエストを送信します。MapXtreme の購入時に
は、サーバと Web サービスは付属しません。
ルーティング機能を使用することで、2 つのポイント間の最短距離または最短時間の経路 (ルート)
を判別できます。また、さまざまな詳細ルーティング オプションを追加できます。ルート ジオメ
トリ (マップ表示でのルートのレイアウト)、運転用指示、合計距離と合計時間を示すルート概要を
返すことができます。また、中間点を含むルートを作成することや、高速道路や特定地域など特
定の道路フィーチャを避けるように設定されたルートを作成することができます。
ルーティング機能には、運転時間と運転距離の計算 (isoChrone および isoDistance) を可能にする
重要な分析ツールや、特定の道路タイプの回避やルート再計算のための一時的更新を使用する機
能があります。ルート クライアントの機能は、次の 4 つの論理グループに分類されます。
•
•
ルートの計算
高度なルート オプション
•
等値ルーティング (運転時間と運転距離)
•
ルーティング データを使用したリクエストの更新
主なルーティング クラス
MapInfo ルーティング サーバまたは Envinsa ルート サービスを使用するルーティングがサポート
されています。どちらかのリソースを URL に配置して、提供する必要があります。適切なルート
クライアントを作成するには、RouteClientFactory クラスを使用します。この 2 つのクライアント
のインターフェイスは似ています。ルート リクエスト、ルート設定、およびルート レスポンスに
ついて同じクラスを使用するためです。
ルート クライアントを使用すると、2 つの位置間の最短距離または最短時間の経路 (ルート) の判
別、中 間 点 の 追 加 (ViaPoint ク ラ ス)、特定の位置と道路タイプの回避 (AvoidList クラス、
PointExclude クラス、SegmentExclude クラス)、運転用指示の取得 (RouteInstructionsRequest ク
ラス)、ルート ジオメトリの取得 (RouteGeometryRequest クラス)、より有効な分析結果を得るた
めの多数の設定によるルートのカスタマイズができます。ルート クライアントには、運転時間と
運転距離の計算 (等時線と等距離線) を可能にする重要な分析ツールと、特定の道路タイプの回避
やルート再計算のための一時的更新を使用する機能が備えられています。ルート クライアントの
機能は、次の 3 つの論理グループに分類されます。
1. ルートの計算では、ポイントツーポイント ルートおよびマルチポイント ルートには RouteRequest
クラスを、マトリックス ルートには MatrixRouteRequest クラスを使用します。
2. 運転時間と運転距離の計算では、運転時間の計算に IsoChroneRequest クラスを、運転距離の
計算に IsoDistanceRequest クラスを使用します。
MapXtreme v7.2
392
開発者ガイド
第 20 章 : ルーティング
ルートの計算
3. より正確で有効なルートを得るための一時的更新によるルートの計算では、TransientUpdate
クラスを使用します。
次の図に、Routing 名前空間を構成するインターフェイスとクラスを示します。
ルートの計算
実行できるルート計算 (最短距離または最短時間のルートの決定) は、単純ルート (ポイントツーポ
イント)、マルチポイント ルート、マトリックス ルート リクエストの 3 種類です。
ポイントツーポイント ルーティング
最も一般的に使用されるルーティングの 1 つが、2 つの住所、2 つのポイント、またはその組み合
わせを入力してルートを取得するという単純な運転用指示です。指定された始点から指定された
終点までのルートが計算されます。
最も単純なポイントツーポイント ルーティングでは、応答にルート概要が含まれます。この概要
に含まれるのは、ルートの距離と所要時間です。応答でその他の情報も返されるように、ポイン
トツーポイント ルート リクエストにさまざまな設定を追加することができます。次の設定を追加
できます。
•
•
ルート設定
運転用指示
MapXtreme v7.2
393
開発者ガイド
第 20 章 : ルーティング
ルートの計算
•
ルート ジオメトリ
•
•
回避するポイント、フィーチャ、セグメント
時間ベース ルーティング
•
ルーティング データを使用したリクエストの更新
ポイントツーポイント ルートは、RouteRequest クラスを使用して作成します。API レベルでの構
文と説明については、開発者リファレンスを参照してください。
次のコード例は、単純なポイントツーポイント ルートの例です。
Public Shared Sub New_RouteRequest()
' Create the start point and end point
Dim coordSys As MapInfo.Geometry.CoordSys = _
Session.Current.CoordSysFactory.CreateFromPrjString("1, 104")
Dim dpt1 As MapInfo.Geometry.DPoint = _
New MapInfo.Geometry.DPoint(-74, 42)
Dim dpt2 As MapInfo.Geometry.DPoint = _
New MapInfo.Geometry.DPoint(-74, 41)
Dim startPoint As MapInfo.Geometry.Point = _
New MapInfo.Geometry.Point(coordSys, dpt1)
Dim endPoint As MapInfo.Geometry.Point = _
New MapInfo.Geometry.Point(coordSys, dpt2)
' Create the point list
Dim pointList As WayPointList = _
New WayPointList(startPoint, endPoint)
' Create the route plan object
Dim plan As RoutePlan = _
New RoutePlan(pointList)
' Create the request object
Dim request As RouteRequest = _
New RouteRequest(plan, DistanceUnit.Mile)
End Sub
マルチポイント ルーティング
マルチポイント ルーティングは、ポイントを経由するルーティング機能です。ルーティング サー
バでは、すべてのポイントを経由したときの最短距離または最短時間のルートを計算します。こ
の機能は複雑な運転用指示に使用できます。このような指示は、日常的な車での立ち寄りや、流
通会社や修理会社などの顧客訪問、一般的な出張営業などを計画するユーザに必要なものです。
通常、始点と終点に加え、一連の経由先も計算に加えられます。始点と終点の間に経由ポイント
が存在すること以外は、マルチポイント ルーティングとポイントツーポイント ルーティングに違
いはありません。
ポイントツーポイント ルーティングと同様に、応答でその他の情報も返されるように、マルチポ
イント ルート リクエストにさまざまな設定を追加することができます。次の設定を追加できま
す。
•
「ルート設定」
•
「運転用指示」
•
「ルート ジオメトリ」
MapXtreme v7.2
394
開発者ガイド
第 20 章 : ルーティング
ルートの計算
•
「回避するポイント、フィーチャ、セグメント」
•
「時間ベース ルーティング」
マルチポイント ルートは、RouteRequest クラスを使用して作成します。ルートに中間点を追加す
るには、WayPointList に 1 つ以上の ViaPoint を含める必要があります。API レベルでの構文と説
明については、開発者リファレンスを参照してください。
次のコード例で、startPoint、endPoint、ViaPoint で構成される WayPointList の作成方法を示し
ます。
Public Shared Sub New_WayPointList()
' Create a start point and end point
Dim coordSys As MapInfo.Geometry.CoordSys =_
Session.Current.CoordSysFactory.CreateFromPrjString("1, 104")
Dim dpt1 As MapInfo.Geometry.DPoint = _
New MapInfo.Geometry.DPoint(-74, 42)
Dim dpt2 As MapInfo.Geometry.DPoint = _
New MapInfo.Geometry.DPoint(-73, 42)
Dim dpt3 As MapInfo.Geometry.DPoint = _
New MapInfo.Geometry.DPoint(-73.562, 42)
Dim startPoint As MapInfo.Geometry.Point = _
New MapInfo.Geometry.Point(coordSys, dpt1)
Dim endPoint As MapInfo.Geometry.Point = _
New MapInfo.Geometry.Point(coordSys, dpt2)
Dim intermediatePoint As MapInfo.Geometry.Point = _
New MapInfo.Geometry.Point(coordSys, dpt3)
' Create the intermediate point object
Dim point As ViaPoint = New ViaPoint(intermediatePoint)
' Create the collection
Dim pointList As ViaPointList = New ViaPointList
' Append the object to the collection.
pointList.Append(point)
' Create the WayPointList object
Dim list As WayPointList = _
New WayPointList(startPoint, endPoint, pointList)
End Sub
マトリックス ルーティング
マトリックス ルーティングでは、多数の始点と多数の終点との間で最短距離または最短時間の経
路を検索し、ルート コストを返すことができます。コストとは、個々のルートの合計時間と距離
です。たとえば、始点が 3 個、終点が 50 個あるような状況では、マトリックス ルーティングが非
常に有効です。すべての始点とすべての終点の間の最短経路を計算し、ルートのコストを返すこ
とができます。
応答でのポイントの順序と経路の数は、リクエストに含まれる始点と終点の数により決まりま
す。たとえば、リクエストで 2 つの始点と 2 つの終点が指定されている場合、S を始点、E を終点
とすると、経路の順序は S1 ~ E1、S1 ~ E2、S2 ~ E1、S2 ~ E2 という順序になります。
MapXtreme v7.2
395
開発者ガイド
第 20 章 : ルーティング
高度なルート オプション
一般的に、この計算を使用して、消防署や警察署などの特定のサービスのサービス応答時間と対
応範囲を調べることができます。最初の通知から 20 分以内に対応できるスタッフを 1 人以上用意
するなどのサービス レベル契約に対応できるように、適切な体制を整えるためにこのような計算
が必要になる場合があります。最も単純なマトリックス ルーティングでは、応答に経路のリスト
が含まれます。各経路には、始点と終点に加え、距離と時間が含まれます。応答でその他の情報
も返されるように、マトリックス ルート リクエストにさまざまな設定を追加することができま
す。次の設定を追加できます。
•
「ルート設定」
•
「回避するポイント、フィーチャ、セグメント」
•
「ルーティング データを使用したリクエストの更新」
マトリックス ルートは、MatrixRouteRequest クラスを使用して作成します。マトリックス ルート
リクエストには MatrixRouteCost が常に含まれ、MatrixRoutingPreferences も含まれる場合があり
ます。API レベルでの構文と説明については、開発者リファレンスを参照してください。
高度なルート オプション
ルーティング アプリケーションには、さまざまな高度な機能を追加できます。ここでは、ポイン
トツーポイント、マルチポイント、マトリックスの各種ルート リクエストのカスタマイズに使用
される重要な機能について説明します。
ルート設定
計算する各種のルートに、さまざまな設定を指定できます。このような設定はすべてオプション
ですが、ルート精度の決定に非常に大きく関係し、より有効なルートを作成するために役立つ場
合があります。始点から終点までの間で、最短時間のルートや最短距離のルートを返すことがで
きます。このような設定を指定した場合、サーバ構成やサービス構成で定義されていたルート最
適化設定がオーバーライドされます。サーバ設定の拘束力が強い場合は、設定がサーバ設定に
オーバーライドされることもあります。
ルート計算の種類 (ポイントツーポイント、マルチポイント、マトリックス) によって、使用可能
なルート設定が決まります。次に、使用可能なルート設定の概要を説明します。
•
DistanceUnit - すべてのルート計算の距離単位を指定できます。一般的な単位は、キロメート
ル、メートル、マイル、ヤード、フィートです。値が指定されていない場合は、デフォルト設
定 (マイル) が使用されます。
•
RouteMethod - 実行するルート設定の一般タイプを指定します。ルート クライアントは、最
短時間ルートまたは最短距離ルートの計算を実行できます。値が指定されていない場合は、デ
フォルト設定 (最短時間) が使用されます。
•
OptimizeIntermediatPoints (マルチポイント ルートのみで使用されます) - リクエストに指定
された順に経由ポイントを通過するか、または経由ポイントを使用する最適ルートをルート ク
ライアントで検索するかを決定します。デフォルト (false) では、ルート クライアントは、リ
クエストに指定された順に経由ポイントを通過します。true に設定した場合、経由ポイントを
使用する最適ルートが計算されます。
MapXtreme v7.2
396
開発者ガイド
第 20 章 : ルーティング
高度なルート オプション
•
StopThreshold (マルチポイント ルートのみで使用されます) - ルート計算アルゴリズムの停止
しきい値を設定します。ルート アルゴリズムは、アルゴリズムで残されているルート候補間の
時間または距離の相違が停止しきい値に到達すると、計算を中止し、現在の "最善の" ルートを
返します。有効な値は、任意の正の数値です。パフォーマンスを高めるために、1 未満の正の
数値を推奨します。停止しきい値の設定は、精度と速度の釣り合いを決定する要因です。一般
的に、しきい値を小さくすると、結果の精度が向上しますが、ルート計算にかかる時間は長く
なります。停止しきい値は、経由ポイントが少ない (10 個未満) のルートにはほとんど影響し
ません。デフォルトは 0.01 (1%) です。
•
TimeOut - ルート計算アルゴリズムのタイム アウト値を設定します。タイム アウト値は秒単位
で指定します。デフォルトのタイム アウトは 600 秒です。タイム アウト値に指定された時間
が経過すると、ルート アルゴリズムは計算を中止します。
•
TimeUnit - すべてのルート時間の測定単位を設定します。デフォルトの時間単位は分です。
•
TavelPreferences - 独自のルーティング機能を指定して、通過する道路タイプの優先度を変更
で き ま す。道 路 タ イ プ と 道 路 タ イ プ 設 定 を 指 定 し て、移 動 設 定 を 追 加 で き ま す。
RoadTypePreference を High、Medium、Low、または Avoid に設定することで、優先度に基づ
くルーティングを実行できます。ルートの計算時に、優先度の低い道路タイプよりも優先度の
高い道路タイプが選択されます。RoadTypePreference を Avoid に設定して、特定の道路タイ
プを回避することもできます。よく使用される移動設定の 1 つが、道路タイプ FERRY を Low
にする設定です。これにより、目的地への移動手段がフェリーに限られる場合にのみ、フェ
リーのルートが使用されるようになります。
TravelTime (ポイントツーポイントおよびマルチポイント) - ルート リクエストの移動開始時間
または移動終了時間を設定します。移動時間など、時間ベースのルーティング オプションを設
定する方法については、「時間ベース ルーティング」を参照してください。
•
•
Updates - ルート リクエストに一時的な更新を追加し、道路の速度やセグメントの速度、道路
タイプを一時的に変更することができます。更新の詳細については、「一時更新」を参照して
ください。
RoutingPreferences クラスと MatrixRoutingPreferences クラスは、ルート設定の定義で最初に使
用するクラスです。構文と説明については、開発者リファレンスを参照してください。
運転用指示
運転用指示は、ポイントツーポイント ルートまたはマルチポイント ルートの場合に使用できま
す。運転用指示により、ルートの道順が段階的に示されます。ルートの各セグメントで、実行す
る手順 (開始、右折など)、道路の名前、方向、距離、時間が返されます。運転指示にはさまざまな
オプションがあり、指示をルートの特定のセクションに絞ったり、指示の表現や形式を変更した
り、指示の言語を変更したりできます。
運転指示を設定または要求する方法は 2 つあります。1 つは、サーバ設定またはサービス設定を使
用する方法です。もう 1 つは、RouteInstructionsRequest クラスを使用して ReturnDirections プロ
パティを true に設定する方法です。
指示設定の変更
以下に説明する環境設定を使用して、運転指示を変更します。
MapXtreme v7.2
397
開発者ガイド
第 20 章 : ルーティング
高度なルート オプション
•
DirectionBreakTurnAngle - 道路が新しい指示文字列に現れるときの方向転換の角度値を設定
します。ルートに沿って進んでいくと、道路が同じ名前を維持しながら大きく折れ曲がること
があります。この値を使用すると、新しい指示を開始する方向転換角度を指定することができ
ます。有効な値は 0 ~ 180 度です。デフォルトは 45 度です。
•
•
DirectionsGeneratorName - ルート指示の作成に使用するサーバサイド指示ジェネレータを独
自に指定します。サーバまたはサービスに 1 つ以上の指示ジェネレータを設定している場合、
この環境設定を使用して、指示の生成を特定のジェネレータで実行するように指定できます。
たとえば、"myGenerator" と設定すると、"myGenerator" という名前が設定されたジェネレータ
をサーバまたはサービスで使用するように指定されます。この設定は、サーバまたはサービス
がカスタム指示ジェネレータで構成されている場合にだけ使用します。指示ジェネレータの作
成方法および使用方法については、サーバまたはサービスのマニュアルを参照してください。
Focus - ルートのフォーカスを指定します。フォーカス対象ルートとは、ルートの始点または
終点に的を絞った、ルートのサブセットです。始点のフォーカス対象ルートでは、起点から最
初の主要高速道路まで (およびこの高速道路上) のルートをユーザに指示します。終点のフォー
カス対象ルートでは、ルートの最後の主要高速道路から、この主要高速道路を含めて目的地ま
でのルートをユーザに指示します。ルートに主要高速道路が含まれない場合、フォーカス対象
ルートは非フォーカス対象ルートと同じになります。NONE を指定した場合、ルート全体が返
されます。START を指定した場合、ルートの始点が返されます。END を指定した場合、ルー
トの終点が返されます。デフォルトは NONE です。
•
ShowDistance - 運転指示で指示の距離を返すかどうかを指定します。デフォルトは true です。
•
ShowPrimaryNameOnly - 道路の一次名のみを表示するかどうかを指定します。道路に複数の
名前が含まれていることはよくあります。これは、指示内に道路のすべての名前を表示する
か、または一次名だけを表示するかを指定するために使用します。true に設定した場合、道路
の一次名のみが運転指示で使用されます。false に設定した場合、一次名に加えて他の名前もす
べて使用されます。デフォルトは false です。
•
ShowTime - 運転指示で指示の所要時間を返すかどうかを指定します。デフォルトは true です。
•
Style - 返される指示の種類を指定します。クライアントでは、通常型と簡略型の 2 種類の指示
を返すことができます。通常型の指示は、標準的なルート指示です。たとえば、"Turn left on
Yonge Blvd and travel Southeast (1 s)" などです。簡略型の指示は、ワイヤレス デバイスによ
り適した、省略化された指示です。たとえば、"L on Yonge Blvd" などです。NORMAL または
TERSE に設定できます。デフォルト設定は NORMAL です。
指示言語の設定
UserLocale プロパティを変更することで、ルート指示の出力言語を操作できます。ルート クライ
アントでは、ISO 標準ロケール コード <language>_<country> (たとえば、フランス語は fr_FR、
ドイツ語は de_DE など) を使用しています。現在、EN、FR、DA、DE、FI、NL、NO、ES、PT、
IT、SV がサポートされています。デフォルトの言語は英語 (en_US) です。
ルート ジオメトリ
ルート ジオメトリを作成する機能は、マップの作成やルートの分析に欠かせません。ルート ジオ
メトリとは、ルートのグラフィック表示です。デフォルトでは、ルート ジオメトリは返されませ
ん。ただし、ReturnGeometry プロパティを true に設定することで、ルート ジオメトリをレスポ
ンス内で返すことができます。
MapXtreme v7.2
398
開発者ガイド
第 20 章 : ルーティング
高度なルート オプション
回避するポイント、フィーチャ、セグメント
特定の道路タイプ、ポイント、ルート セグメントを回避したり、除外したりできます。ルートを
決定する前に、渋滞情報、事故、祝祭日、ラッシュ アワーなどの既知の要因に基づいて、回避す
るべき道路や場所があらかじめ判っている場合があるでしょう。
回避または除外できるのは、ポイント、フィーチャ、セグメントの 3 種類です。
ポイントの回避
ルート上のポイントを回避する方法は、現状で 2 つあります。AvoidList クラスの Points プロパ
ティを使用する方法と、PointExclude クラスを使用する方法です。PointExclude クラスを使用し
た場合、ルート リクエスト内の任意の数のポイントを除外できます。
L
ポイントを回避する場合は、PointExclude クラスを使用することをお勧めします。
フィーチャの回避
ルート上のフィーチャ (道路タイプ) を回避する方法は、現状で 2 つあります。RoutingPreferences
クラスの TravelPreferences プロパティを使用すると、任意の道路タイプを回避できます。
TravelPreference プロパティの使用方法の詳細については、「ルート設定」を参照してください。
ルート クライアントでルートを計算する際には、他にも高速道路を回避する方法があります。こ
の方法は、ルートをローカル道路に限定する場合に便利です。AvoidList クラスの Features プロパ
ティを使用し、回避するフィーチャとして Highway を定義します。
セグメントの回避
SegmentExclude クラスを使用して、ルート リクエストから任意の数のルート セグメント (ID) を
除外できます。セグメント ID とは、ルート データの各ライン、道路、セクションに割り当てられ
ている固有の識別子です。ルートの特定のセクションのセグメント ID は、前回のルート レスポン
スで返された ID により判断できます。ルート レスポンスで ID が返される方法については、「セ
グメント情報の取得」を参照してください。
L
ルートを計算できない場合や、回避または除外を使用すると目的地に到達できない場合
は、ルート指示が返されません。
時間ベース ルーティング
時間ベース ルーティングは、配送システム、モバイル作業、正確な運転時間およびルートの算出
に欠かせない機能です。ルートの開始時間と終了時間、さらにマルチポイント ルートにおける各
中間点の停止時間を指定できます。たとえば、A 地点から出発して、B、C、D の各地点で顧客へ
の営業やトラックの荷積みに 5 分ずつ時間を使い、 最後に E 地点に到着すると指定できます。
MapXtreme v7.2
399
開発者ガイド
第 20 章 : ルーティング
等値ルーティング ( 運転時間と運転距離 )
開始時間と終了時間
時間ベース ルーティングでは、ルートの開始時間と終了時間も指定できます。ルートの開始時間
と終了時間は、他の時刻設定を使用する場合に重要です。たとえば、サーバにラッシュ アワーの
交通パターンが設定されている場合、ルートの開始時間と終了時間が分析に重要となることがあ
ります。開始時間と終了時間は、TravelTime クラスを使用して設定できます。移動時間は、次の
プロパティを使用して制御します。
•
DateTime - ルート計算を開始または終了する日時を指定します。
•
TimeZone - 移動時間に使用するタイム ゾーンを指定します。タイム ゾーンは、グリニッジ標
準時 (GMT) からの時刻オフセット値を使用して定義します。
•
TravelTimePreference - 定義される移動時間が開始時間か終了時間かを指定します。StartTravel
または EndTravel を使用して定義します。
次のコード例では、ルートの移動時間を設定する方法を示します。この例では、StartTravel 設定を
使用して、開始時間 (年、月、日、時 (24 時間表記)、分、秒) とタイム ゾーンを定義しています。
Public Shared Sub New_TravelTime()
Dim startTime As DateTime = New DateTime(2005, 5, 1, 14, 0, 0)
Dim timeZone As MapInfo.Routing.TimeZone = _
New MapInfo.Routing.TimeZone(-4)
Dim travelTime As MapInfo.Routing.TravelTime = _
New MapInfo.Routing.TravelTime(startTime, _
TravelTimePreference.StartTravel, timeZone)
End Sub
停止時間
ルート内の任意の中間点に、停止時間を指定できます。この時間はルート全体の所要時間に加算
されます。停止時間は、ユーザがマルチポイント ルートでルート上の特定の場所で費やす時間 (た
とえば、配送トラックの荷積み時間や荷下ろし時間など) を定義する場合に役立ちます。ViaPoint
クラスで停止時間を加算するには、Stop プロパティと StopTime プロパティを指定します。
•
Stop - 経由ポイントで停止するかどうかを指定できます。デフォルトでは、経由ポイントに停
止時間は追加されません (false)。経由ポイントで停止する場合、Stop を true に設定します。
•
StopTime - ルート沿いの任意の経由ポイントに停止時間を追加します。停止時間は TimeSpan
によって定義され、ルートの合計時間に加算されます。デフォルトの停止時間は 0 です。
TimeSpan は、"[-]d.hh:mm:ss.ff" という形式の文字列で指定できます。ここで、"-" は負の
TimeSpan 値を指定する場合の記号、"d" は日、"hh" は分、"mm" は秒、"ff" は少数点以下の秒
数です。たとえば、"11.13:46:40" と指定された TimeSpan は、11 日 13 時間 46 分 40 秒を表し
ます。
等値ルーティング (運転時間と運転距離)
等時線と等距離線は、ルート決定で非常に有効な情報となります。等時線は、始点から特定の時
間内で移動できるネットワーク内の領域を表すポリゴン (一連のポイント) です。等距離線は、始
点から特定の距離内にある領域を表すポリゴン (一連のポイント) です。この 2 つを利用して、あ
る場所からの運転時間境界または運転距離境界を判断できます。小売業、銀行業、保険業のユー
MapXtreme v7.2
400
開発者ガイド
第 20 章 : ルーティング
等値ルーティング ( 運転時間と運転距離 )
ザは、このサービスを使用して、潜在的市場を調べたり、特定の資産のリスクを判断したりでき
ます。さらに、新サービスの提供開始や新しい店の開店などを見込み顧客に通知するために、住
所名簿の中から境界の中に住む顧客を判別するなど、さらに詳細な分析に使用できます。
等時線の作成 (運転時間)
等時線を作成する際には、特定の時間 (移動時間コスト) 内に開始位置から移動できる領域を表す 1
つ以上のポリゴン (ノードのセット) を算出します。
等時線の計算に使用する時間は、コストにより指定されます。コストは、始点から道路ネット
ワーク上の計算対象ポイントまでの所要時間です。複数のコストを指定して、同心円状の等時線 (
複数の等時線) を作成し、道路ネットワークを経由して到達できるさまざまな距離をグラフィック
で表示できます。複数のコストにはタグが関連付けられます。リクエストの各コストにタグ、つ
まり ID を指定することで、レスポンスから適切な等値線結果 (ジオメトリ) を判別できます。
IsoChronePreferences クラスと IsogramPreferences クラスでは、さまざまな環境設定を指定でき
ます。環境設定によって、分析に必要な出力が得られます、
IsoChronePreferences
IsoChronePreferences クラスでは、次の環境設定を使用できます。
•
DefaultAmbientSpeed - 道路ネットワーク外の道路の、未指定の速度を指定します。ネット
ワークで識別されない道路としては、私道や連絡道路などがあります。たとえば、道路ネット
ワーク外で残り時間 5 分の等時線のポイントにいる場合、アンビエント速度と残り時間に基づ
いた距離に境界ポイントが置かれます。そのため、この場合でアンビエント速度が毎時 15 マ
イルの場合、境界ポイントは 1.25 マイル離れた場所に置かれます。
•
AmbientSpeedOverride - 特定の道路タイプについてアンビエント速度をオーバーライドしま
す。アンビエント速度は、すべての道路タイプでオーバーライドできます。たとえば、週末は
交通量が多いため、主要な市街地道路の速度を 30Mph に設定することなどが考えられます。
IsogramPreferences
IsogramPreferences クラスでは、次の環境設定を使用できます。
•
BandingStyle - 結果で使用するバンディング スタイルを指定します。バンディング スタイル
とは、複数のコストに基づいて表示できる複数の時間バンドまたは距離バンドの種類です。ス
タイルには、(各領域が次の最小領域を差し引くことで決定される) Donut と (各領域が他の領
域と無関係に決定される) Encompassing があります。複数の等時線バンドは、複数のコスト要
因を指定することでリクエストします。たとえば、同じ始点から 5 分離れた等時線と 15 分離
れた等時線をリクエストできます。このような指定により、近似同心円バンドが作成されま
す。ユーザは、5 分離れた等時線と 15 分離れた等時線の間にある情報について、両方のデー
タをすべて示すか (すべてを表示する Encompassing スタイル)、2 つの等時線の間のバンドだ
けを示すか (Donut スタイル) を選択できます。
Donut バンディングを使用すると、2 つの境界 (時間) が非常に近い場合、ルーティング
サーバに問題が発生する可能性があります。その状況を避けるために、次の 3 つのリクエス
ト設定を行います。
a. Donut バンディングで、道路からの最大逸脱距離を設定しない (可能な場合)。この設定を
使用する必要がある場合、できるだけ大きな値に設定します。
MapXtreme v7.2
401
開発者ガイド
第 20 章 : ルーティング
等値ルーティング ( 運転時間と運転距離 )
b. Donut バンディングでは、アンビエント速度を低く設定しない。
c. リクエストで、コストの増分がコストと比較して小さくならないようにする。たとえば、
4、5、6 分というコストをリクエストする (4 分から開始して 1 分ずつインクリメント) こ
とは問題にならないと思われますが、120、121、122 分というコストをリクエストすると
問題が発生する場合があります。コストを大きくする場合、コストの増分も大きくする必
要があります。
上の例は、始点から 5 分、10 分、15 分の Encompassing スタイルのバインディング
で返されるジオメトリを示したものです。各ジオメトリに、前の等時線領域が包含
されていることに注目してください。
上の例は、始点から 5 分、10 分、15 分の Donut スタイルのバインディングで返され
るジオメトリを示したものです。各ジオメトリが前のジオメトリの末端から開始さ
れており、前の等時線領域が除外されていることに注目してください。
•
MajorRoadsOnly - 計算で使用する道路ネットワークを指定します。ネットワークには、主要
道路のみ含めるか、すべての道路を含めることができます。主要道路とは、メインの道路また
は高速道路です。主要道路を使用することを選択した場合は、パフォーマンスが向上します
が、精度が低下します。下の図は、主要道路オプションの動作を示しています。左側の図は
MajorRoadsOnly を true に設定したもの、右側の図は MajorRoadsOnly を false に設定したも
のです。MajorRoadsOnly を false に設定した場合、等値レスポンスの計算時に脇道などの補助
道路が使用されます。
MapXtreme v7.2
402
開発者ガイド
第 20 章 : ルーティング
等値ルーティング ( 運転時間と運転距離 )
•
•
•
•
MaxOffRoadDistance - アンビエント速度を使用する際の、道路ネットワークからの逸脱距離
の最大値を指定します。このプロパティのデフォルト設定は無制限です。等時線内で可能な限
りの逸脱が許可されます。最大逸脱距離を非常に小さな値に設定すると、サーバでレスポンス
を生成できなくなる場合があります。
ReturnAccesibleNodes - 等時線リクエストから返される等値線またはフィーチャの種類が一
連のノードとなるようにします (MultiPoint)。デフォルトで、ReturnAccesibleNodes は false で
す。このプロパティが true の場合、等時線計算の際に、道路ネットワーク上で到達可能なすべ
てのポイントが返されます。
ReturnGeometry - 等時線リクエストから返される等値線またはフィーチャの種類がジオメト
リとなるようにします (MultiPolygon)。デフォルトで、ReturnGeometry は true です。このプ
ロパティが false の場合、等時線計算の際に、道路ネットワーク上で到達可能なすべてのポイ
ントが返されます。
ReturnHoles - レスポンスで穴を返すかどうかを指定します。穴とは、より大きな領域に含ま
れる、道路ネットワークに基づいて希望の時間内または距離内で到達できない領域です。この
ような孤立した区域は、通過が面倒なローカル道路の近くでよく発生します。穴は、そのまま
返すか、完全に削除するかを選択できます。この設定が適用されるのは、ReturnGeometry が
true (デフォルト) に設定されている場合だけです。このプロパティを設定しない場合、デフォ
ルト設定 (false) が使用されます。
•
ReturnIslands - レスポンスで島を返すかどうかを指定します。島とは、メインの領域の外部に
あり、希望の時間内または距離内で到達できる小さな領域です。このような領域は、主要な高
速道路の出口ランプの近くによく発生します。島は、そのまま返すか、完全に削除するかを選
択できます。この設定が適用されるのは、ReturnGeometry が true (デフォルト) に設定されてい
る場合だけです。このプロパティを設定しない場合、デフォルト設定 (false) が使用されます。
•
SimplificationFactor - ポリゴンの複雑さを軽減する係数を指定します。単純化係数は、元のポ
イントのうちの何パーセントを返すか、つまり元のポイントのうちの何パーセントに基づいて
結果のポリゴンを生成するかを示します。一連のポイントで構成されるポリゴン には、多数の
ポイントが含まれる場合があります。単純化係数は、は、0 ~ 1.0 の範囲の 10 進数値で指定し
ます (1 は 100% を示し、0.01 は 1%) を示します。値を小さくするほど容量が小さくなり、転
送時間も短縮されます。この設定は、結果の種類がジオメトリの場合にのみ適用されます。こ
のプロパティを設定しない場合、デフォルト設定 0.05 (5%) が使用されます。下の図は、単純
化係数オプションの動作を示しています。左側の図は単純化係数 0.01、右側の図は単純化係数
1 です。
MapXtreme v7.2
403
開発者ガイド
第 20 章 : ルーティング
等値ルーティング ( 運転時間と運転距離 )
•
TimeOut - サーバに許可する等値線作成の所要時間を指定します。このプロパティのデフォル
ト値は 600 秒 (10 分) です。
等距離線の作成 (運転距離)
等距離線を作成する際には、特定の距離 (移動距離コスト) 内で道路ネットワークを移動できる領
域を表す 1 つ以上のポリゴン (ノードのセット) を算出します。
等距離線リクエストに指定されるコストは、等値線の計算に使用されるコスト値が距離である点
を除いて、等時線と同じです。コストは、始点から道路ネットワーク上の計算対象ポイントまで
移動するために必要な距離です。複数のコストを指定して、同心円状の等時線 (複数の等距離線)
を作成し、道路ネットワークを経由して到達できるさまざまな距離をグラフィックで表示できま
す。複数のコストには、タグが関連付けられます。リクエストの各コストにタグ、つまり ID を指
定することで、レスポンスから適切な等値線結果 (ジオメトリ) を判別できます。
次のコード例では、IsoDistanceDefinition の定義方法を示します。レスポンスでは、ポイントを中
心として、コストをマイル単位 (pt, DistanceUnit.Mile) として境界を定義し、等値線 (ジオ
メトリ) が作成されます。
Public Shared Sub New_IsoDistanceDefinition()
' Create a point
Dim coordSys As MapInfo.Geometry.CoordSys = _
Session.Current.CoordSysFactory.CreateFromPrjString("1, 104")
Dim dpt As MapInfo.Geometry.DPoint = _
New MapInfo.Geometry.DPoint(-74, 42)
Dim pt As MapInfo.Geometry.Point = _
New MapInfo.Geometry.Point(coordSys, dpt)
' Create a definition
Dim def As IsoDistanceDefinition = _
New IsoDistanceDefinition(pt, DistanceUnit.Mile)
End Sub
MapXtreme v7.2
404
開発者ガイド
第 20 章 : ルーティング
ルーティング データを使用したリクエストの更新
IsoDistancePreferences クラスと IsogramPreferences クラスでは、さまざまな環境設定を指定で
きます。環境設定によって、分析に必要な出力が得られます、 IsogramPreferences クラスで指定
される環境設定は、等距離線リクエストでも等時線リクエストでも同じです。IsogramPreferences
の詳細については、「IsogramPreferences」を参照してください。
IsoDistancePreferences
IsoDistancePreferences クラスでは、次の環境設定を使用できます。
•
•
DefaultPropagationFactor - 等距離線境界を算出するときに、ネットワーク外への逸脱が許可
される残りのコスト (距離) の、道路ネットワーク外部の割合を指定します。ネットワークで識
別されない道路としては、私道や連絡道路などがあります。この伝搬係数は、始点と等距離線
との間の距離を計算するために使用されるコストの割合です。たとえば、道路ネットワーク外
で残り距離 5 マイルの等距離線上のポイントにいる場合、伝搬係数と残り距離に基づいた距離
に境界ポイントが置かれます。そのため、伝搬係数が 0.16 であれば、境界ポイントは 0.8 マイ
ルの位置に置かれます。
PropagationFactorOverrides - 特定の道路タイプの伝搬係数をオーバーライドします。伝搬係
数は、すべての道路タイプでオーバーライドできます。たとえば、市街地の主要道路の場合は
0.24 に設定できます。
ルーティング データを使用したリクエストの更新
ルート データにアクセスし、その情報を使用してより正確で情報量の多いルートを作成する機能
は、非常に有用です。ルートを作成してルート レスポンスを取得すると、渡すべきでない場所や
セグメントが結果に含まれている場合や、道路タイプやセグメントにおける速度を増加または減
少する必要がある場合があるでしょう。MapXtreme には、ルート データのセグメント情報を返
し、ルート データの情報を使用してルート リクエストを修正または更新する機能が備えられてい
ます (一時的更新)。つまり、基本データを再処理することなくルーティング ネットワークを更新
できます。
一時的更新処理は、2 つの手順で実行されます。
1. ルート レスポンスでルート データ セグメント情報を返します。この情報は、道路タイプまた
は速度の更新に使用されるセグメントの決定に必要です。詳細については、「セグメント情報
の取得」を参照してください。
2. レスポンスで返された情報に基づいて、ルート データに一時的な更新を加えます。これを一時
的更新と呼びます。このような変更はルート リクエストの中で送信され、サーバまたはサービ
スでこのリクエストが処理される際にのみ有効となります。この機能を使用して、動的な渋滞
データや事故データを反映したり、特定の道路タイプに環境設定を加えたりできます。詳細に
ついては、「一時更新」を参照してください。
MapXtreme v7.2
405
開発者ガイド
第 20 章 : ルーティング
ルーティング データを使用したリクエストの更新
セグメント情報の取得
道路セグメントの道路タイプや速度データの回避または更新を行うには、セグメント ID などの道路
情報を知る必要があります。MapXtreme には、セグメント ID、名前、距離、道路タイプ、速度、移
動時間、ジオメトリなどの重要データを含む道路セグメント データを返す機能があります。
デフォルトで、ルート リクエストではセグメント情報は返されません。クラスを使用して、
ReturnSegmentData を true に設定します。また、返された情報に適用する速度と角度の尺度単位を
定義することもできます。デフォルトの VelocityUnit (速度単位) は Mph (マイル/時)、AngleUnit (角
度単位) は Degree です。セグメント データは、運転指示の作成に必要なデータであり、ルート内
の各セグメントの詳細情報が含まれます。次のようなセグメント情報が返されます。
•
道路名 (代替名を含む)
•
•
•
道路名の言語
方位
セグメント ID
•
•
•
•
•
•
•
•
一方通行のブール値
ラウンドアバウトのブール値
有料道路のブール値
道路タイプ
制限速度
方向転換角度
セグメントの通過所要時間
セグメント全体の距離
一時更新
より正確で情報量の多いルートを作成するために、ルート データに一時的な変更を加えることが
できます。このような変更は各ルート リクエストの中で送信され、サーバまたはサービスでその
リクエストが処理される際にのみ有効となります。この機能を利用して、ラッシュ アワー中に特
定の高速道路を回避したり、リクエストでその道路セグメントの速度を遅くしたりすることで、
現実の交通パターンを反映し、より正確な時間ベース ルーティングを生成できます。一時更新
は、任意の種類のルート リクエスト (ポイントツーポイント ルート、マルチポイント ルート、マ
トリックス ルート) に含めることができます。このような変更を行うことで、次の操作を実行でき
ます。
•
•
ポイント、セグメント、道路タイプの速度を設定する。
ポイント、セグメント、道路タイプの速度を特定の値だけ変更 (増加または減少) する。
•
ポイント、セグメント、道路タイプの速度を特定の割合で変更 (増加または減少) する。
•
セグメントの道路タイプを設定する。
一時更新で速度を設定する場合、速度の設定方法は基本的に 3 種類あります。
•
速度 - セグメントに新しい速度を指定します。
•
相対値 - 相対値によって、速度の増加分または減少分を指定します。この値が速度の変更を表
します。たとえば、値 10 を指定すると、デフォルトの速度が 10 だけ増加します。値 -10 MPH
を指定すると、デフォルトの速度が 10 MPH だけ減少します。
MapXtreme v7.2
406
開発者ガイド
第 20 章 : ルーティング
ルーティング データを使用したリクエストの更新
•
パーセント - パーセントによって、速度の増加分または減少分を指定します。値の範囲は -100
~ 100 です。たとえば、50 を指定すると、デフォルトの速度が 50% 増加します (速度が 30
MPH であれば 45 MPH に増加します)。-50 を指定すると、デフォルトの速度が 50% 減少しま
す (速度が 30 MPH であれば 15 MPH に減少します)。
一時更新を使用したセグメントの変更
ルート レスポンスを取得した後で、特定のルート セグメントまたはセグメント グループ (道路) の
実際の交通状況がもっと遅い、またはもっと速いことがわかっている場合や、リクエストの道路
タイプを更新したい場合があるでしょう。一時更新を利用して道路セグメントまたは道路タイプ
の速度を設定し、ルートを再計算することで、より正確な結果が得られます。次のクラスを使用
して、さまざまなセグメント一時更新を実行できます。
•
•
SegmentRoadTypeUpdate - セグメントの道路タイプを更新します。次のコード例では、設定
済みのセグメント ID "S1256", RoadType.MAJOR_ROAD_URBAN に新しい道路タイプを指定
します。
SegmentSpeedUpdate - セグメントの速度を新しい速度に更新します。
次のコード例では、指定されたルート セグメント (S1256) に新しい速度として毎時 50 マイル
(Velocity(50, VelocityUnit.Mph)) を設定します。
Public Shared Sub New_SegmentSpeedUpdate()
' Create the velocity object
Dim velocity As Velocity = New Velocity(50, VelocityUnit.Mph)
' Create the update object
Dim update As SegmentSpeedUpdate = New SegmentSpeedUpdate("S1256",
velocity)
End Sub
•
SegmentRelativeSpeedUpdate - 速度の差分を指定して、セグメントの速度を更新します。
次のコード例では、指定されたルート セグメント (T1256) の速度を毎時 5 マイル (Velocity(5,
VelocityUnit.Mph)) 増加します。
Public Shared Sub New_SegmentRelativeSpeedUpdate()
' Create the velocity object
Dim velocity As Velocity = New Velocity(5, VelocityUnit.Mph)
' Increase the speed by 5 mph.
Dim update As SegmentRelativeSpeedUpdate = New
SegmentRelativeSpeedUpdate("T1256", velocity)
End Sub
•
SegmentPercentageSpeedUpdate - デフォルトの速度に対するパーセントを指定して、セグ
メントの速度を更新します。
次のコード例では、指定されたルート セグメントの速度を 20% 増加します ("S1256", 20)。
Public Shared Sub New_SegmentPercentageSpeedUpdate()
' Increase the speed by 20 percent.
MapXtreme v7.2
407
開発者ガイド
第 20 章 : ルーティング
ルーティング データを使用したリクエストの更新
Dim update As SegmentPercentageSpeedUpdate = New
SegmentPercentageSpeedUpdate("S1256", 20)
End Sub
一時更新を使用したポイントの変更
ルート レスポンスを取得した後で、実際の交通状況がもっと遅い、またはもっと速いことがわ
かっている場所 (ポイント) が結果に含まれていることに気付く場合があります。一時更新を利用
して、そのポイントに最も近いロード セグメントの速度を設定し、ルートを再計算することで、
より正確な結果が得られます。次のクラスを使用して、さまざまなポイント一時更新を実行でき
ます。
•
PointSpeedUpdate - ポイントに最も近いセグメントの速度を新しい速度に更新します。
次のコード例では、指定されたポイント (pt) に最も近い道路に新しい速度として毎時 50 マイル
(Velocity(50, VelocityUnit.Mph)) を設定します。
Public Shared Sub New_PointSpeedUpdate()
' Create a point
Dim coordSys As MapInfo.Geometry.CoordSys =
Session.Current.CoordSysFactory.CreateFromPrjString("1, 104")
Dim dpt As MapInfo.Geometry.DPoint = New MapInfo.Geometry.DPoint(-74,
42)
Dim pt As MapInfo.Geometry.Point = New
MapInfo.Geometry.Point(coordSys, dpt)
' Create the velocity object
Dim velocity As Velocity = New Velocity(50, VelocityUnit.Mph)
' Create the update object
Dim update As PointSpeedUpdate = New PointSpeedUpdate(pt, velocity)
End Sub
•
PointRelativeSpeedUpdate - 速度の差分を指定して、ポイントに最も近いセグメントの速度
を更新します。
次のコード例では、指定されたポイント (pt) に最も近い道路の速度を毎時 5 マイル
(Velocity(5, VelocityUnit.Mph)) 増加します。
Public Shared Sub New_PointRelativeSpeedUpdate()
' Create a point
Dim coordSys As MapInfo.Geometry.CoordSys =
Session.Current.CoordSysFactory.CreateFromPrjString("1, 104")
Dim dpt As MapInfo.Geometry.DPoint = New MapInfo.Geometry.DPoint(-74,
42)
Dim pt As MapInfo.Geometry.Point = New
MapInfo.Geometry.Point(coordSys, dpt)
' Create the velocity object
Dim velocity As Velocity = New Velocity(5, VelocityUnit.Mph)
' Increase the speed by 5 mph.
MapXtreme v7.2
408
開発者ガイド
第 20 章 : ルーティング
ルーティング データを使用したリクエストの更新
Dim update As PointRelativeSpeedUpdate = New
PointRelativeSpeedUpdate(pt, velocity)
End Sub
•
PointPersentageSpeedUpdate - デフォルトの速度に対するパーセントを指定して、その場所
に最も近いポイントの速度を更新します。
次のコード例では、指定されたポイントに最も近い道路の速度を 20% 増加します (pt, 20)。
Public Shared Sub New_PointPercentageSpeedUpdate()
' Create a point
Dim coordSys As MapInfo.Geometry.CoordSys =
Session.Current.CoordSysFactory.CreateFromPrjString("1, 104")
Dim dpt As MapInfo.Geometry.DPoint = New MapInfo.Geometry.DPoint(-74,
42)
Dim pt As MapInfo.Geometry.Point = New
MapInfo.Geometry.Point(coordSys, dpt)
' Increase the speed by 20 percent.
Dim update As PointPercentageSpeedUpdate = New
PointPercentageSpeedUpdate(pt, 20)
End Sub
一時更新を使用した道路タイプ速度の変更
ルートを決定する前に、一部の交通情報 ( 工事、事故、ラッシュ アワーなど) がわかっていれば、
特定の道路タイプの速度を増加または減少したい場合があるでしょう。たとえば、祝祭日や週末
の道路状況を考慮して、 すべての高速道路の速度を下げることができます。また、特定の道路タ
イプがルート計算に使用される可能性を低くすることもできます。最速のルートを決定する際に
は、特定の道路タイプの移動速度を下げることで、その道路タイプの優先度が下がり、計算に使
用される可能性が低くなります。次のクラスを使用して、さまざまな道路タイプ一時更新を実行
できます。
•
RoadTypeSpeedUpdate - 特定の道路タイプの速度を新しい速度に更新します。
次のコード例では、市街地のすべての主要道路 (RoadType.MAJOR_ROAD_URBAN) に新しい速度
として毎時 50 マイル (Velocity(50, VelocityUnit.Mph)) を設定します。
Public Shared Sub New_RoadTypeSpeedUpdate()
' Create the velocity object
Dim velocity As Velocity = New Velocity(50, VelocityUnit.Mph)
' Create the update object
Dim update As RoadTypeSpeedUpdate = New
RoadTypeSpeedUpdate(RoadType.MAJOR_ROAD_URBAN, velocity)
End Sub
•
RoadTypeRelativeSpeedUpdate - 速度の差分を指定して、特定の道路タイプの速度を更新し
ます。
MapXtreme v7.2
409
開発者ガイド
第 20 章 : ルーティング
ルーティング データを使用したリクエストの更新
次のコード例では、市街地のすべての主要道路 (RoadType.MAJOR_ROAD_URBAN) の速度を毎時 5
マイル (Velocity(5, VelocityUnit.Mph)) 増加します。
Public Shared Sub New_RoadTypeRelativeSpeedUpdate()
' Create the velocity object
Dim velocity As Velocity = New Velocity(5, VelocityUnit.Mph)
' Increase the speed by 5 mph.
Dim update As RoadTypeRelativeSpeedUpdate = New
RoadTypeRelativeSpeedUpdate(RoadType.MAJOR_ROAD_URBAN, velocity)
End Sub
•
RoadTypePercentageSpeedUpdate - デフォルトの速度に対するパーセントを指定して、道路
タイプの速度を更新します。
次のコード例では、市街地のすべての主要道路の速度を 20% 増加します
(RoadType.MAJOR_ROAD_URBAN, 20)。
Public Shared Sub New_RoadTypePercentageSpeedUpdate()
' Increase the speed by 20 percent.
Dim update As RoadTypePercentageSpeedUpdate = New
RoadTypePercentageSpeedUpdate(RoadType.MAJOR_ROAD_URBAN, 20)
End Sub
MapXtreme v7.2
410
開発者ガイド
21
線形参照
この章では、MultiCurve フィーチャ ジオメトリに関連付けられた M (指標) 値
を使用して線形ネットワークのマッピングと分析を行う MapXtreme の機能に
ついて説明します。
この章の構成
Š
Š
Š
Š
線形リファレンスとは. . . . . . . . . . . .
線形リファレンスでの M 値の使用 . . . . . .
曲線の順序. . . . . . . . . . . . . . . . .
線形リファレンスのサンプル アプリケーション
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
412
412
415
416
第 21 章 : 線形参照
線形リファレンスとは
線形リファレンスとは
線形リファレンスとは、従来のリファレンス座標系に代わって使用されるリファレンス システム
であり、線形フィーチャの位置を地球上のポイントに結び付けます。線形リファレンスは、水資
源管理、輸送、石油やガスの探査など、多くの分野で使用されています。線形ネットワークの一
部としてマッピングできる物理的な資産はすべて、その資産または関連した条件やイベントにつ
いて記述したデータを保持できます。そのデータは、位置の X および Y 座標と共に、MultiCurve
オブジェクト上の M 値 (指標値) として格納されます。それらの M 値をさらにマッピングしたり分
析したりすることで、より適切なリソース管理を行えるようになります。
M 値は、線形リファレンスの基礎となるものです。M 値には、何らかの指標値が保持されます。
線形フィーチャに沿った各ポイントが、何か別のものを基準として確立された既知のポイントか
ら参照されます。古典的な例の 1 つは、高速道路沿いに設けられたマイル マーカー ポストです。
マイル マーカーの ID は、M 値の一種であり、高速道路の合流点や郡境といった既知の場所からの
距離を参照しています。
M 値は、一般に、インフラストラクチャや運輸関連のデータ管理者が、ライン上に存在する資
産、条件、イベントに対して、より適切な視覚化、クエリ、監視、分析を行えるようにする目的
で使用します。たとえば、緊急コール センターのオペレータは、負傷者から知らされたマイル
マーカーから、その負傷者の位置を特定できます。コール センターでは、マイル マーカーの位置
をあらかじめ把握しています。この情報を基に、コール センターでは、正しい場所に適切な人員
を派遣することができます。
MultiCurve と M 値をサポートする Geometry モデルの概要については、「第 16 章 : 空間オブジェ
クトと座標系」を参照してください。
線形リファレンスでの M 値の使用
MapXtreme では、線形リファレンスおよび動的セグメンテーション機能を実現するために、
MultiCurve ジオメトリに対して指標 (M) 値を使用する操作がいくつか用意されています。これら
のメソッドは、インスタンス化可能な MapInfo.Geometry.LinearReferencingOperations クラスの
一部として定義されています。このクラスは、必要に応じてプロパティを追加したり動作を拡張
したりできる柔軟性を提供します。
これらの操作によって、線形ネットワークの複数の属性を同時に表示することができます。これ
は動的セグメンテーションと呼ばれ、同じジオメトリのコピーを複数格納する必要がありませ
ん。たとえば、高速道路は、舗装状態、車線種別、舗装材質などを表す個別の線形フィーチャに
よって表現できます。これらはすべて同じ実世界のジオメトリを表していますが、複数の種類の
情報をより簡単に見ることができます。
MapXtreme v7.2
412
開発者ガイド
第 21 章 : 線形参照
線形リファレンスでの M 値の使用
MapXtreme に用意された線形リファレンスのサンプル アプリケーション
線形リファレンス メソッドは、1 次元の MultiCurve ジオメトリに適用される OGC Simple Feature
Specification に従っています。MultiCurve は、いくつかの接続されていない曲線から構成される場
合もあります。つまり、MultiCurve に 2 つの Curve が含まれていて、一方の Curve の終点がもう
一方の Curve の始点と一致しない場合があります。ただし、操作に対しては、指標が MultiCurve
全体に適用されるという想定で始点と終点の指標を与えることができます。この例やこれに類似
した例では、一方の曲線の終点ともう一方の曲線の始点の間で実際の位置データ (X, Y) が異なっ
ている場合でも、MapXtreme では指標値が同じと仮定されるとします。たとえば、高速道路ネッ
トワークで、いくつかの高速道路が互いに横切っていても交差はしていない (一方が他方を陸橋で
越えているため) 場合を考えます。このような場合、下を通っている高速道路の実際の線形表現
は、上を通っている高速道路の前後で物理的に切れている可能性があります。
LinearReferencingOperations クラスのメソッドは、3 つのカテゴリに分けることができます。
•
•
•
指標値決定メソッド
線形リファレンス操作
動的セグメンテーション操作 (PerpendicularOffset)
以 降 の セ ク シ ョ ン で は、こ れ ら の 操 作 に つ い て 簡 単 に 説 明 し ま す。詳 細 に つ い て は、
MapInfo.LinearReferencing 名前空間の説明も参照してください。
MapXtreme v7.2
413
開発者ガイド
第 21 章 : 線形参照
線形リファレンスでの M 値の使用
指標値決定メソッド
このカテゴリを形成する操作は、MultiCurve 上の指標値の設定および管理を支援するヘルパ メ
ソッドです。これらのメソッドを使用して、少なくとも 2 つの M 値がある場合に、MultiCurve 上
の欠けているノードを埋めることができます。または、M 値がまったくない場合は、相対的な開
始ノードと終了ノードを使用して M 値を設定します。1 つまたは 2 つの特定の場所の値が既知で
あり、残りは距離に基づいて比例計算できることはよくあります。
•
CalculateMissingMeasures(MultiCurve)
•
SetMeasures (MultiCurve, double startMeasure, double endMeasure)
•
SetMeasuresAsDistance(MultiCurve, double startDistance)
•
DropMeasures (MultiCurve)
•
ScaleMeasures(MultiCurve, double scale)
•
TranslateMeasures(MultiCurve, double offset)
•
TranslateMeasures(MultiCurve)
•
Reverse(MultiCurve)
線形リファレンス操作
2 番目のカテゴリの操作は、MultiCurve ジオメトリに沿って線形リファレンス システムを使用
し、特定の指標値のポイントを見つけたり、2 つの指標値間のサブ曲線を抽出したりします。
MapXtreme では、これらのメソッドに入力される MultiCurve の各ノードの指標値を保存できます
が、実際にすべてのユーザ データでジオメトリにリファレンス システムが保存されるわけではあ
りません (または、この情報の保持を簡単には行えない格納テクノロジを使用しています)。した
がって、一般にこれらのメソッドには、2 つのオーバーロードされた形式があります。1 つは、リ
ファレンス システムが入力 MultiCurve 内で管理される形式であり、もう 1 つは、リファレンス シ
ステムが入力 MultiCurve ジオメトリの最初と最後のノードに対応した開始および終了指標として
提供される形式です。
•
LocateAlong(MultiCurve, double Measure)
•
LocateAlong(MultiCurve, double startMeasure, double endMeasure, double Measure)
•
LocateMeasure (MultiCurve, Point)
•
LocateMeasure (MultiCurve, double startMeasure, double endMeasure, Point)
•
LocateBetween(MultiCurve, double subCurveStartMeasure, double subCurveEndMeasure)
•
LocateBetween(MultiCurve, double startMeasure, double endMeasure, double
subCurveStartMeasure, double subCurveEndMeasure)
FeatureGeometry.Distance メソッド
MapInfo.Geometry.FeatureGeometry クラスには、入力されたポイントが曲線上にない場合に
MapXtreme で MultiCurve 上の指標値の特定に使用する、Distance メソッドのオーバーロードが含
まれています。このメソッドは、曲線から離れた入力ポイントと曲線上への投影ポイントとの間
の最短距離または最長距離を表す MultiCurve を返します。最短か最長かを指定するために、
MapXtreme v7.2
414
開発者ガイド
第 21 章 : 線形参照
曲線の順序
minimumDistance を ブ ー ル 値 と し て渡す必要があります。最短距離が true です。返される
MultiCurve は、LocateMeasure メソッドへの入力となり、これは入力ポイントから最も近い (また
は最も遠い) MultiCurve 上のポイントを返します。
MultiCurve と渡された Point が異なる座標系にある場合は、MultiCurve インスタンスの座標系で
Distance 操作が実行されます。生成される FeatureGeometry は常に、MultiCurve インスタンスと
同じ座標系にあります。
動的セグメンテーション操作 (PerpendicularOffset)
PerpendicularOffset は、既存の MultiCurve から新しい MultiCurve を生成する操作です。これは、基
になる同じ x,y 座標でサブ曲線を抽出する前述のメソッドとは異なります。この操作は、元の
MultiCurve から垂直方向に計測された距離である平行オフセット MultiCurve を作成します。この新
しい MultiCurve に対して、属性のクエリや結果の分析など、さらに処理を行うことができます。
PerpendicularOffset は、M 値に基づいて MultiCurve をセグメントに分割することができる、線形
ネットワークの動的セグメンテーションの領域で使用されます。たとえば、道路建設アプリケー
ションでは、建設中または修理中の高速道路のセクションのステータスを記述した、道路ネット
ワークの M 値を使用できます。各セグメントは、マップ上で実際の道路から離れた位置に、独自
の配色やマークでステータスが一目でわかるように表示できます。Perpendicular を使用した動的
セグメンテーション アプリケーションの例については、「線形リファレンスのサンプル アプリ
ケーション」を参照してください。
PerpendicularOffset() メソッドの構文を次に示します。
•
PerpendicularOffset(MultiCurve, double distance)
•
PerpendicularOffset(MultiCurve, double distance, DistanceUnit, int resolution)
正の distance 値は、ノード順 (ノード i からノード i+1 など)に進んだときに線の右側に垂直な方向
として解釈されます。負の distance は、左側となります。ゼロの distance は許可されません。
resolution は、丸みのある角に対して作成される弧に沿ってポイントを補間するために使用されま
す。0 以上の値がサポートされ、最大値は 36 です。デフォルト値は 1 です。
この操作では、元の MultiCurve の指標値 (存在する場合) が保持されます。元の MultiCurve の標高
(Z) 値は保持されません。
曲線の順序
MapInfo.LinearReferencing 名前空間には、MultiCurve を構成する個々の曲線の並べ替え順序を処
理するための ICurveSorter インターフェイスが含まれています。並べ替え順序は、次の線形リ
ファレンス操作を呼び出すときに重要となります。
•
CalculateMissingMeasures
•
SetMeasures
•
SetMeasuresAsDistance
MapXtreme v7.2
415
開発者ガイド
第 21 章 : 線形参照
線形リファレンスのサンプル アプリケーション
•
LocateAlong
•
LocateMeasure
•
LocateBetween
並べ替え順序を指定しないと、MapXtreme では、最も長い曲線が最初に返され、残りの曲線は順不同
で返されます。たとえば、順序が指定されていない MultiCurve に対して CalculateMissingMeasures を
使用した場合、MapXtreme では、MultiCurve 内での位置に基づいて、ノードに対して誤った M 値を
計算する可能性があります。正しい並べ替え順序を指定することで、このような問題を避けることが
できます。
ICurveSorter インターフェイスは、曲線の順序を整数の配列として返す SortCurves メソッドを提
供します。その配列を使用して、曲線のリストを得ることができます。コード例については、
『開発者リファレンス』を参照してください。
L
曲線の順序によってノードの x,y 位置が変化することはありません。
また、このインターフェイスは、DefaultCurveSorter クラスも提供します。このクラスは、インプ
リメントされると、MultiCurve 自体が指定している構成曲線だけを返します。その SortCurve メ
ソッドでは並べ替えが行われません。
線形リファレンスのサンプル アプリケーション
MapXtreme のインストール場所にある Samples フォルダに、線形リファレンスのサンプル アプ
リケーションがあります。このアプリケーションは、道路の各種の特性を表す複数の平行線セグ
メントを生成します。この例では、舗装状態、最高速度ゾーン、および車線数を示す道路データ
が、実際の道路に沿ったオフセット MultiCurve として表示され、特定の道路セクションの状態や
特性を示します。各特性または状態は、それぞれ異なるライン スタイルで表示されます。
一般的な MapXtreme テーブルでは、属性がフィーチャに全体として適用されます。線形ネット
ワークでは、フィーチャに指標値と呼ばれる属性があり、線形ジオメトリ表現の各セグメントに
適用されます。たとえば、道路には一般に、表面状態の良いセクションと悪いセクション、また
は修理中のセクションなどがあります。これらの状態が道路セグメントの全体と一致することは
まれであり、MultiCurve 上の特定のノードと厳密に一致することもまれです。しかし、地球上の
場所に対してではなく、フィーチャを基準とした指標値を使用する線形リファレンス システムに
より、新しい便利な方法でセグメント データの取得、クエリ、表示、分析が可能になります。
線形リファレンス操作を通して、MapXtreme では MultiCurve をこれらの M 値に基づいて動的に
セグメント化できます。サポートされている操作の説明については、「線形リファレンスでの M
値の使用」を参照してください。
MapXtreme v7.2
416
開発者ガイド
Web Feature Service
MapXtreme では、マップ フィーチャのデータのホストおよびアクセスをイン
ターネットや私設イントラネットの Web Feature Services (WFS) から行うこ
とができます。
この章の構成
Š
Š
Š
Š
Š
Web Feature Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418
WFS サーバの処理について . . . . . . . . . . . . . . . . 418
WFS サーバの構成 . . . . . . . . . . . . . . . . . . . . 423
MapXtreme WFS クライアントのプログラムによる使用 . . . 429
WFS レスポンスからのマップ レイヤの作成 . . . . . . . . . 433
22
第 22 章 : Web Feature Service
Web Feature Service
Web Feature Service
MapXtreme は、Web Feature Service (WFS) をインプリメントしており、インターネットや私設
イントラネット経由でリクエストを送信して、Geography Markup Language 形式でエンコードさ
れた地理空間データを取得することができます。「Web Map Service」 は、マップ イメージを生
成しますが、WFS サーバに送信されるリクエストは、地理データを取得可能な XML 形式の GML
を生成します。
基本的な WFS クライアントは、WFS サーバに 3 種類のリクエストを送信できます。1 つ目は機
能を取得するリクエストです。これはサーバに対して、地理データおよびそのデータに適用可能
な処理をリストするように要求します。2 つ目はフィーチャ タイプを記述するリクエストです。
これはサーバに対して、地理フィーチャのために提供できるデータを記述するように要求しま
す。3 つ目のリクエストは、サーバに対して、実際のデータを提供するように要求します。
WFS の地理データは、データに関する記述で構成されています。この段階では、取得したデータ
は MapXtreme のマップ レイヤとして表示できません。ただし、MapXtreme の WfsClient を使用
すると、GML 出力を、MapXtreme で操作可能な MultiFeatureCollections に変換することができま
す。これらのフィーチャ コレクションは、MapXtreme の他の FeatureCollection と同様に扱えるた
め、主題図やラベルを適用し、さまざまな分析処理を実行できます。
MapXtreme WFS サーバのインプリメントは、WFS Basic プロファイルとして『1.0.0 OpenGIS® Web
Feature Service Implementation Specification』に準拠しています。この文書は、www.opengis.org に
あります。現時点で、MapXtreme の WFS インプリメントは、Transaction WFS 仕様には対応してい
ません。
MapXtreme の WFS インプリメントによるフィーチャのリクエストは、HTTP GET または HTTP
POST リクエストによって実行されます。レスポンスは、デフォルトでは GML2 で返されます
が、GML3 で返すようにリクエストすることもできます。
MapXtreme では、WFS を WFS サーバおよび WFS クライアントの 2 点でサポートしています。
この章では、WFS サーバを構成して、ユーザ独自のデータを他のユーザからもアクセスできるよ
うにする方法について説明します。「WFS サーバの構成」を参照してください。
インターネット上の他の WFS サーバまたは私設イントラネットからデータにアクセスする方法に
ついては、「MapXtreme WFS クライアントのプログラムによる使用」を参照してください。
以下のセクションでは、MapXtreme WFS を介して実行できる WFS サーバの処理について説明し
ます。
WFS サーバの処理について
MapXtreme WFS サーバ インプリメントの基礎となる WFS サーバの処理として、GetCapabilities、
DescribeFeatureType、および GetFeature の 3 つがあります。
MapXtreme v7.2
418
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの処理について
GetCapabilities
GetCapabilities リクエストは、WFS サーバへのクエリで、地理データおよびそのデータに対して
実 行 可 能 な 処 理 の 観 点 か ら、こ の サ ー バ が 実 行 す る 処 理 に つ い て 詳 細 情 報 を 取 得 し ま す。
GetCapabilities リクエストに対するレスポンスは XML ドキュメントで返され、WFS がサポート
する処理および WFS で使用可能なフィーチャ タイプのリストが記述されています。WFS サーバ
に初めてアクセスしたときには、サービスの機能をリクエストするのが一般的です。
GetCapabilities は、HTTP GET および HTTP POST に対応しています。
以下に、GetCapabilities リクエストからの XML 出力を示します。サポートされている機能、使用
可能なフィーチャ タイプ、フィーチャ タイプのデータのサブセットをリクエストするためのフィ
ルタリング処理など、重要な機能のいくつかについてはボールド体で示しています。
<?xml version="1.0" encoding="utf-8" ?>
- <WFS_Capabilities xmlns:ogc="http://www.opengis.net/ogc"
xmlns:miwfs="http://www.mapinfo.com/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.opengis.net/wfs/1.0.0/WFScapabilities.xsd" version="1.0.0" updateSequence="0"
xmlns="http://www.opengis.net/wfs">
- <Service>
<Name>Sample WFS Server</Name>
<Title>Sample WFS Server</Title>
<OnlineResource>http://localhost/Wfs/GetFeature.ashx</OnlineResource>
</Service>
- <Capability>
- <Request>
- <GetCapabilities>
- <DCPType>
- <HTTP>
<Get onlineResource="http://localhost/Wfs/GetFeature.ashx" />
<Post onlineResource="http://localhost/Wfs/GetFeature.ashx" />
</HTTP>
</DCPType>
</GetCapabilities>
- <DescribeFeatureType>
- <SchemaDescriptionLanguage>
<XMLSCHEMA />
</SchemaDescriptionLanguage>
- <DCPType>
- <HTTP>
<Get onlineResource="http://localhost/Wfs/GetFeature.ashx" />
<Post onlineResource="http://localhost/Wfs/GetFeature.ashx" />
</HTTP>
</DCPType>
</DescribeFeatureType>
- <GetFeature>
- <ResultFormat>
<GML2 />
</ResultFormat>
- <DCPType>
MapXtreme v7.2
419
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの処理について
- <HTTP>
<Post onlineResource="http://localhost/Wfs/GetFeature.ashx" />
</HTTP>
</DCPType>
</GetFeature>
</Request>
</Capability>
- <FeatureTypeList>
- <Operations>
<Query />
</Operations>
- <FeatureType>
<Name>miwfs:USA</Name>
<Title>Title for usa</Title>
<Abstract>Abstract for USA</Abstract>
<Keywords>Keywords for USA</Keywords>
<SRS>epsg:4326</SRS>
<LatLongBoundingBox minx="-179.62816" miny="18.925255" maxx="66.951403" maxy="71.42856" />
</FeatureType>
</FeatureTypeList>
- <ogc:Filter_Capabilities>
- <ogc:Spatial_Capabilities>
- <ogc:Spatial_Operators>
<ogc:BBOX />
<ogc:Equals />
<ogc:Disjoint />
<ogc:Intersect />
<ogc:Within />
<ogc:Contains />
</ogc:Spatial_Operators>
</ogc:Spatial_Capabilities>
- <ogc:Scalar_Capabilities>
<ogc:Logical_Operators />
- <ogc:Comparison_Operators>
<ogc:Simple_Comparisons />
<ogc:NullCheck />
</ogc:Comparison_Operators>
- <ogc:Arithmetic_Operators>
<ogc:Simple_Arithmetic />
</ogc:Arithmetic_Operators>
</ogc:Scalar_Capabilities>
</ogc:Filter_Capabilities>
</WFS_Capabilities>
DescribeFeatureType
使用可能なフィーチャ タイプを GetCapabilities リクエストで検出したら、次は、
DescribeFeatureType リクエストを使用して、1 つまたは複数のフィーチャ タイプについての詳細
情報を取得します。MapXtreme では、WFS フィーチャ タイプはテーブルで表され、WFS フィー
チャはテーブルの一列の行に相当します。DescribeFeatureType リクエストに対するレスポンスに
MapXtreme v7.2
420
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの処理について
は、フィーチャ タイプの名前 (テーブルの名前)、テーブル内のプロパティの名前およびタイプ (
フィールドの名前およびタイプ) などが含まれています。結果は、GML 形式の XML スキーマ ド
キュメントで返されます。
DescribeFeatureType は、HTTP GET および HTTP POST に対応しています。返されるスキーマ
はフォームを含んでいるため、フィーチャ タイプの各プロパティは要素になります。
MapXtreme は、以下のフィールド タイプをプロパティとして返しません。
•
MIDbType.Binary
•
MIDbType.CoordSys
•
MIDbType.Grid
•
MIDbType.Key
•
MIDbType.Raster
•
MIDbType.Style
以下に、DescribeFeatureType レスポンス ドキュメントの一部を示します。このリクエストは、
USA という名前のフィーチャ タイプについてのものです。この USA フィーチャ タイプには、ジ
オメトリ フィールド OBJ によって表されるいくつかのプロパティと、State および State_Name
というデータ フィールドがあります。
<?xml version="1.0" encoding="utf-8" ?>
- <schema targetNamespace="http://www.mapinfo.com/wfs"
xmlns:miwfs="http://www.mapinfo.com/wfs"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified"
xmlns="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://www.opengis.net/gml"
schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd" />
<xs:import namespace="http://www.opengis.net/wfs"
schemaLocation="http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd" />
<xs:element name="USA" type="miwfs:USA_Type"
substitutionGroup="gml:_Feature" />
- <xs:complexType name="USA_Type">
- <xs:complexContent>
- <xs:extension base="gml:AbstractFeatureType">
- <xs:sequence>
- <xs:element name="Obj" minOccurs="0" maxOccurs="1">
- <xs:complexType>
- <xs:sequence>
<xs:element ref="gml:_Geometry" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="State" nillable="false" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="State_Name" nillable="false" type="xs:string"
minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
MapXtreme v7.2
421
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの処理について
</xs:complexType>
</schema>
GetFeature
使用可能なフィーチャ タイプおよびそのプロパティがわかったら、WFS フィーチャ情報を取得す
る最後の手順として、GetFeature リクエストを送信します。このリクエストは、フェッチする
フィーチャおよびプロパティを指定します。フィーチャのサブセットを取得する場合は、フィル
タリングを使用してクエリを空間的および非空間的、あるいはそのいずれかで制限します。
「コード例: フィルタを使用したフィーチャのリクエスト」を参照してください。
GetFeature は HTTP POST に対応しています。
OGC でサポートされるパラメータのうち、Request と TypeName は必須です。PropertyName、
Filter、FeatureID などのパラメータは省略できます。FeatureID を指定した場合、TypeName は省
略可能です。詳細については、『OGC Web Feature Service Implementation Specification』を参照
してください。
以下の例は、USA というフィーチャ タイプに関する FeatureResponse の一部です。
<?xml version="1.0" encoding="utf-8" ?>
- <wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs"
xmlns:gml="http://www.opengis.net/gml" xmlns="http://www.mapinfo.com/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd
http://www.mapinfo.com/wfs
http://localhost/Wfs/GetFeature.ashx?REQUEST=DescribeFeatureType&SERVICE=
WFS&VERSION=1.0.0&TYPENAME=miwfs:USA">
- <gml:boundedBy>
<gml:null>inapplicable</gml:null>
</gml:boundedBy>
- <gml:featureMember>
- <USA>
<State>AK</State>
</USA>
</gml:featureMember>
- <gml:featureMember>
- <USA>
<State>AL</State>
</USA>
</gml:featureMember>
- <gml:featureMember>
- <USA>
<State>AR</State>
</USA>
</gml:featureMember>
- <gml:featureMember>
- <USA>
<State>AZ</State>
</USA>
</gml:featureMember>
MapXtreme v7.2
422
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの構成
- <gml:featureMember>
- <USA>
<State>CA</State>
</USA>
</gml:featureMember>
- <gml:featureMember>
- <USA>
<State>CO</State>
</USA>
</gml:featureMember>
...
</wfs:FeatureCollection>
WFS サーバの構成
他のユーザに空間データを提供する場合、最初に WFS サーバを構成して、提供するデータおよび
処理を定義する必要があります。この定義を行うのに必要な構成ファイルが 2 つあります。ここ
では、スキーマおよび Web サービスを操作する知識があることを前提として説明します。
他のユーザの WFS サーバにアクセスしてフィーチャを取得するだけであれば、WFS サーバを構
成する必要はありません。「MapXtreme WFS クライアントのプログラムによる使用」を参照し
てください。
このセクションで説明する主要な構成手順は、以下のとおりです。
手順 1: Web.config ファイルを作成または変更して、MapXtreme 固有の WFS 情報と、IIS のクラ
シック モードまたは統合パイプライン モード用の適切なハンドラを指定します。
手順 2: ホスティング対象となるデータに関する情報を含む有効な WFS サーバ構成ファイルを作
成します。このファイルは、WFS サーバの実行時にエラーが発生しないように、WFS スキーマ
ファイル (MXP_WFSConfiguration_1_0.xsd) と比較検証する必要があります。
手順 3: WFS サーバのセットアップを構成およびテストします。IIS7 および IIS6 の構成手順を示
します。
MapXtreme の製品メディアには Web.config ファイルおよび WFS 構成ファイルのサンプルが収録
されています。これらのファイルは、独自のファイルを作成する際に手本として使用できます。
Web.config ファイルには、ASP プロセスの処理方法が定義されています。WFSSample.xml に
は、WFS サーバで提供するデータ ソースおよびフィーチャの定義が記述されています。
製品メディアには、MapXtreme ワークスペースおよび WFS サーバのスキーマも収録されてい
ます。
手順 1: Web.config ファイルの作成
Web.config は、Web アプリケーション用の標準的な構成ファイルです。このファイルを MapXtreme
WFS サーバで使用するには、ファイルを編集して MapXtreme 固有の WFS 情報を指定し、ASP.NET
プロセスの処理方法を定義する必要があります。
MapXtreme v7.2
423
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの構成
1. Web.config および WFSSample.xml を含むフォルダを作成します。この例では、c:\wfs に作成
します。
2. MapXtreme 製品メディアに収録されている Web.config および WFSSample.xml をこのフォル
ダにコピーします。
3. Web.config をテキスト エディタで開き、<appSettings"> 行を WFS 構成ファイルを参照するよ
うに変更します。
<configuration>
<appSettings>
<add key="configFile" value="C:\wfs\WFSSample.xml" />
4. IIS 7 のクラシック モードまたは IIS 6 では、システムにインストールされている
MapInfo.Wfs.Server アセンブリおよび MapInfo.CoreEngine アセンブリのバージョン番号を更
新し、必要に応じて PublicKeyToken も更新します (下の太字部分)。
アセンブリは、C:\Windows\Microsoft.NET\assembly\GAC_32 または GAC_64 にあり
ます。
<system.web>
<httpHandlers>
<add verb="GET,POST" path="*.ashx"
type="MapInfo.Wfs.WfsHttpHandler, MapInfo.Wfs.Server, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=4ac3224575145b20"/>
</httpHandlers>
<httpModules>
<add type="MapInfo.Engine.WebSessionActivator,
WFSMapInfo.CoreEngine, Version=7.2.0.64, Culture=neutral,
PublicKeyToken=93e298a0f6b95eb1" name="WebSessionActivator" />
</httpModules>
5. IIS 7 の統合パイプライン モードでは、次のセクションを web.config にコピーします。統合パイプ
ライン モードで実行する場合は、<system.web> セクションをコメント アウトする必要はありま
せん。一方、IIS 7 のクラシック モードまたは IIS 6 で実行する場合は、この <system.webServer>
セクションをコメント アウトする必要があります。
ステップ 4 の手順に従って、MapInfo.CoreEngine および MapInfo.Wfs.Server のア
センブリ バージョンを更新します。
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<directoryBrowse enabled="true" />
<modules>
<add type="MapInfo.Engine.WebSessionActivator,
MapInfo.CoreEngine, Version=7.2.0.64, Culture=neutral,
PublicKeyToken=93e298a0f6b95eb1" name="WebSessionActivator"/>
</modules>
<handlers>
<add name="WFSHandler" verb="GET,POST" path="*.ashx"
type="MapInfo.Wfs.WfsHttpHandler, MapInfo.Wfs.Server, Version=7.2.0.64,
Culture=neutral, PublicKeyToken=4ac3224575145b20"/>
</handlers>
</system.webServer>
6. このファイルを保存し、ステップ 1 で作成したフォルダにコピーします。
MapXtreme v7.2
424
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの構成
手順 2: ホストするフィーチャ用の有効な WFS 構成ファイルの作成
WFSSample.xml は、MapXtreme に付属する WFS 構成ファイルです。このファイルには、WFS
サーバに関する情報として、サーバの名前、タイトル、概要、WFS サーバの URL、ホストする
データなどが定義されています。
1. WFSSample.xml をテキスト エディタで開き、OnlineResource 行を変更して WFS サーバの
URL を指定します。localhost を、WFS サーバに応じて適切な値に変更します。
<mxp-wfs:Service>
<mxp-wfs:Name>Sample WFS Server</mxp-wfs:Name>
<mxp-wfs:Title>Sample WFS Server</mxp-wfs:Title>
<!-- The following is the URL of the WFS server -->
<mxp-wfs:OnlineResource>http://localhost/wfs/GetFeature.ashx</mxpwfs:OnlineResource>
</mxp-wfs:Service>
必要に応じて、サーバ名、タイトル、概要、料金、アクセス制約などの要素も変更できます。
2. 各テーブルの Table 要素を個別に作成して、WFS で処理するテーブルを登録します。<mxpwfs:DataSourceDefinition> の id の値は <mxp-wfs:Name> の値と一致している必要がありま
す。テーブルは任意の順序で登録できます。
3. <DataSourceDefinitionSet> で、MYPATH 変数を変更してデータへの実際のパスを指定します。
以下は、フィーチャの 2 つのテーブルを識別する WFSSample.xml の一部です。
<mxp-wfs:Table>
<mxp-wfs:Name>USA</mxp-wfs:Name>
<mxp-wfs:Title>Title for usa</mxp-wfs:Title>
<mxp-wfs:Abstract>Abstract for USA</mxp-wfs:Abstract>
<mxp-wfs:Keywords>Keywords for USA</mxp-wfs:Keywords>
<mxp:DataSourceDefinitionSet>
<mxp:TABFileDataSourceDefinition id="USA">
<mxp:DataSourceName>USA</mxp:DataSourceName>
<mxp:FileName>MYPATH\USA.TAB</mxp:FileName>
</mxp:TABFileDataSourceDefinition >
</mxp:DataSourceDefinitionSet>
</mxp-wfs:Table>
<mxp-wfs:Table>
<mxp-wfs:Name>US_HIWAY</mxp-wfs:Name>
<mxp-wfs:Title>Title for US_HIWAY</mxp-wfs:Title>
<mxp-wfs:Abstract>Abstract for US_HIWAY</mxp-wfs:Abstract>
<mxp-wfs:Keywords>Keywords for US_HIWAY</mxp-wfs:Keywords>
<mxp:DataSourceDefinitionSet>
<mxp:TABFileDataSourceDefinition id="US_HIWAY">
<mxp:DataSourceName>US_HIWAY</mxp:DataSourceName>
<mxp:FileName>MYPATH\US_HIWAY.TAB</mxp:FileName>
</mxp:TABFileDataSourceDefinition >
</mxp:DataSourceDefinitionSet>
</mxp-wfs:Table>
MapXtreme v7.2
425
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの構成
4. WFS でホストするデータが RDBMS に格納されている場合は、<ConnectionSet> および
<ConnectionMember> 要素を以下の例のように指定します。
<mxp:ConnectionSet>
<mxp:DBConnection dbType="sqlserver">
<mxp:ConnectionName>sqlserver2k</mxp:ConnectionName>
<mxp:ODBCConnectionString>DRIVER={SQL
Server};DATABASE=YOURDB;Server=YOURSERVER;UID=YOURUSER;PWD=YOURPASSWORD;Q
uotedID=No;Trusted_Connection=No;Network=DBMSSOCN;Address=YOURSERVER,YOUR
SERVERPORT</mxp:ODBCConnectionString>
</mxp:DBConnection
</mxp:ConnectionSet>
...
<mxp-wfs:Table>
<mxp-wfs:Name>MySQLServerTable</mxp-wfs:Name>
<mxp-wfs:Title>Title for MySQLServerTable</mxp-wfs:Title>
<mxp-wfs:Abstract>Abstract for MySQLServerTable</mxpwfs:Abstract>
<mxp-wfs:Keywords>Keywords for MySQLServerTable</mxpwfs:Keywords>
<mxp:DataSourceDefinitionSet>
<mxp:DBDataSourceDefinition id="MySQLServerTable">
<mxp:DataSourceName>MySQLServerTable</mxp:DataSourceName>
<mxp:ConnectionMember>
<mxp:ConnectionName>my_sqlserver2000_advserver</mxp:ConnectionName>
</mxp:ConnectionMember>
<mxp:DBQuery>
<mxp:Query>select * from MySQLServerTable</mxp:Query>
</mxp:DBQuery>
<mxp:DBDataSourceMetadata/>
</mxp:DBDataSourceDefinition>
</mxp:DataSourceDefinitionSet>
</mxp-wfs:Table>
手順 3: WFS サーバの構成およびテスト
Web.config および WFSSample.xml ファイルを編集できたら、WFS サーバを Internet Information
Services に登録し、最後にセットアップをテストする必要があります。
1. WFS フォルダ (c:\wfs など) を右クリックし、[共有とセキュリティ] を選択します。[Web 共有]
タブで、[このフォルダを共有する] を選択します。Web サーバのエイリアスを設定する場合
は、[追加] ボタンをクリックします。
MapXtreme v7.2
426
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの構成
2. IIS を開きます ([スタート] メニュー、[コントロール パネル]、[管理ツール]、[インターネット イ
ンフォメーション サービス])。[既定の Web サイト] を展開し、WFS サーバを見つけます (フォ
ルダ名、またはエイリアスを設定している場合はエイリアスで探します)。
3. Web サイトを右クリックし、[プロパティ] を選択します。[ASP.NET] タブで、[ASP.NET バー
ジョン] ドロップダウン リストから [4.0.30319] を選択します (MapXtreme アセンブリは 4.0
Framework でコンパイルされています)。
4. 同じプロパティ ダイアログ ボックスの [ディレクトリ セキュリティ] タブで、右上にある [編集]
ボタンをクリックします。[認証方法] ダイアログ ボックスで、[匿名アクセス] チェック ボック
スをオンにします。これにより、WFS サービスのユーザはユーザ名とパスワードを指定する
必要がなくなります。[OK] を 2 回クリックして、IIS ウィンドウを閉じます。
MapXtreme v7.2
427
開発者ガイド
第 22 章 : Web Feature Service
WFS サーバの構成
5. Web ブラウザから「GetCapabilities」リクエストを送信して、セットアップをテストします。
アドレス ボックスに、以下のように入力します。
http://localhost/wfs/GetFeature.ashx?REQUEST=GetCapabilities&SERVICE=W
FS&VERSION=1.0.0
localhost は、使用する Web サーバで置き換えます。Web サーバにエイリアスを設定して
いる場合は、URL にエイリアスを指定します。たとえば、次のようになります。
http://localhost/My_WFS/GetFeature.ashx?REQUEST=GetCapabilities&SERVIC
E=WFS&VERSION=1.0.0
テストが成功した場合、下図のような Web ページが表示されます。機能が返されない場合は、
構成ファイルにすべての入力事項が正しく入力されていることを確認します。構成ファイルは手
作業で作成しているため、入力ミスが起きやすく、タグが消えてしまうこともあります。
MapXtreme v7.2
428
開発者ガイド
第 22 章 : Web Feature Service
MapXtreme WFS クライアントのプログラムによる使用
6. 返されるフィーチャ タイプのプロパティを取得するには、「DescribeFeatureType」リクエス
トを送信します。
http://localhost/My_wfs/GetFeature.ashx?REQUEST=DescribeFeatureType&SE
RVICE=WFS&VERSION=1.0.0&Typename=miwfs:USA
このリクエストは、フィーチャ タイプ USA のプロパティの記述を返します。たとえば、
フィールド名として State および State_Name があります。
7. USA テーブルにフィーチャを要求するには、「GetFeature」リクエストを送信します。
http://localhost/My_wfs/GetFeature.ashx?REQUEST=GetFeature&SERVICE=WFS
&VERSION=1.0.0&Typename=miwfs:USA&propertyname=miwfs:State_Name
このリクエストは、USA テーブルからフィーチャを FeatureCollection として返します。
上記の URL では、USA テーブルの 2 つのフィールド プロパティのうち、State_Name の
みをリクエストしていることに注意してください。プロパティ名を何も指定しない場合は、
テーブルのすべてのプロパティが返されます。
MapXtreme WFS クライアントのプログラムによる使用
MapXtreme には、OGC 準拠の Web Feature Service のデータにアクセスするためにプログラムに
より使用できる WFS クライアントが用意されています。MapXtreme の WfsClient は、WFS 1.0.0
準拠の任意のサーバと API レベルで対話できます。WfsClient と関連クラスは MapInfo.Wfs.Client 名
前空間にあり、OGC 仕様の WFS Basic 部分を使用します。WfsClient クラスを使用すると、WFS
1.0.0 準拠の任意のサーバにある 「GetCapabilities」、「DescribeFeatureType」、および
「GetFeature」 の各メソッドを呼び出すことができます。
public void MapInfo_Wfs_Client_GetCapabilities1(string Url) {
MapXtreme v7.2
429
開発者ガイド
第 22 章 : Web Feature Service
MapXtreme WFS クライアントのプログラムによる使用
WfsCapabilities capabilities =
WfsClient.GetCapabilities(RequestMethod.GET, Url);
FeatureTypeList featureTypeList = capabilities.FeatureTypeList;
IList featureTypes = featureTypeList.FeatureTypes;
foreach (FeatureType featureType in featureTypes) {
System.Console.WriteLine("FeatureType: " + featureType.Name);
}
}
WFS クエリでのフィルタの使用
IFilter インターフェイスを使用して GetFeature リクエストにフィルタを適用できます。空間また
は非空間 (スカラー) のフィルタを使用できます。Bbox や Within などの空間フィルタを使用する
と、特定の領域に存在するフィーチャを取得できます。スカラー フィルタを使用すると、フィー
チャ タイプの特定のプロパティに基づいてクエリを実行できます。AND や OR を使用した複合
フィルタも使用できます。
MapXtreme の WFS は、以下のフィルタ処理に対応しています。
•
空間演算子: BBox、Equals、Disjoint、Intersects、Within、Contains
•
非空間比較演算子: 論理演算子: AND、OR、および NOT、PropertyIsEqualTo、
PropertyIsGreaterThan、PropertyIsGreaterThanOrEqualTo、PropertyIsLessThan、
PropertyIsLessThanOrEqualTo、PropertyIsNotEqualTo
•
単純な算術演算子: Add、Div、Mul、Sub
L
HTTP プロトコルの場合、GetFeature リクエストで使用する URL は 2048 文字以下に制限
されています。フィルタ処理ではこの制限をすぐに超えてしまうことがあるので注意して
ください (制限を超えると例外が発生します)。
コード例: フィルタを使用したフィーチャのリクエスト
以下の C# コード例は、WFS データにフィルタを使用して必要なデータのみを取得する方法を示し
ています。この例では、まず、WFS サーバにクエリを実行して使用可能なフィーチャを取得しま
す。次に、WorldCap の人口フィールドが 1,000,000 以上のフィーチャのみを返すようにリクエス
トします。GetCapabilities および GetFeatures メソッドの出力は、コード例の後に示しています。
private void doWFS()
{
string wfsUrl = @"http://localhost/MXTWFS/GetFeatures.ashx";
/// first we need to get the list of capabilities and list out the tables
/// available
MapInfo.Wfs.Client.WfsCapabilities capabilities =
MapInfo.Wfs.Client.WfsClient.GetCapabilities(
MapInfo.Wfs.Client.RequestMethod.GET, wfsUrl);
MapInfo.Wfs.Client.FeatureTypeList featureTypeList =
capabilities.FeatureTypeList;
IList featureTypes = featureTypeList.FeatureTypes;
MapXtreme v7.2
430
開発者ガイド
第 22 章 : Web Feature Service
MapXtreme WFS クライアントのプログラムによる使用
foreach (MapInfo.Wfs.Client.FeatureType featureType in
featureTypes)
{
System.Console.WriteLine("FeatureType: " + featureType.Name);
}
/// Now we can look at a specific table to see its contents
string featureTypeName = "miwfs:WorldCap"; // Name taken from
/// the above output
MapInfo.Data.MultiFeatureCollection mfc =
MapInfo.Wfs.Client.WfsClient.GetFeature(wfsUrl,
new string[] { featureTypeName }, null, "GML3", -1, null);
DisplayFeatureCollection(mfc[0]);
/// Now we can apply a filter
MapInfo.Wfs.Client.IFilter filter = new
MapInfo.Wfs.Client.PropertyIsGreaterThanOrEqualTo(
new MapInfo.Wfs.Client.PropertyName(wfsUrl, "CAP_POP"),
new MapInfo.Wfs.Client.Literal("1000000"));
/// Create the Query container
///
IList queries = new MapInfo.Wfs.Client.Query[] {
new MapInfo.Wfs.Client.Query(new
MapInfo.Wfs.Client.TypeName("http://www.mapinfo.com/wfs",
"WorldCap"), null, filter)};
/// Run the filter and return the subset.
///
mfc = MapInfo.Wfs.Client.WfsClient.GetFeature(wfsUrl,
queries, "GML3", -1);
DisplayFeatureCollection(mfc[0]);
}
上記の GetCapabilities コードの出力は、以下のとおりです。
FeatureType:
FeatureType:
FeatureType:
FeatureType:
miwfs:Ocean
miwfs:WldCty25
miwfs:World
miwfs:WorldCap
最初の GetFeature の呼び出しで、WorldCap のすべてのフィーチャ (行) を取得します (一部を下に
示します)。1 行目は WorldCap データのフィールドで、2 行目以降は各データの行です。
Obj, Capital, Country, Cap_Pop, MI_Style,
Point,Abidjan,IVORY COAST,2700000,MapInfo.Styles.SimpleVectorPointStyle:
12 point,
Point,Abu Dhabi,UNITED ARAB
EMIRATES,722000,MapInfo.Styles.SimpleVectorPointStyle: 12 point,
Point,Accra,GHANA,949000,MapInfo.Styles.SimpleVectorPointStyle: 12 point,
Point,Addis Ababa,ETHIOPIA,1423111,MapInfo.Styles.SimpleVectorPointStyle:
12 point,
Point,Agana,GUAM,132726,MapInfo.Styles.SimpleVectorPointStyle: 12 point,
MapXtreme v7.2
431
開発者ガイド
第 22 章 : Web Feature Service
MapXtreme WFS クライアントのプログラムによる使用
Point,Algiers,ALGERIA,1483000,MapInfo.Styles.SimpleVectorPointStyle: 12
point,
Point,Alma-ata,KAZAKHSTAN,1108000,MapInfo.Styles.SimpleVectorPointStyle:
12 point,
Point,Alofi,NIUE,3300,MapInfo.Styles.SimpleVectorPointStyle: 12 point,
Point,Amman,JORDAN,936000,MapInfo.Styles.SimpleVectorPointStyle: 12
point,
Point,Amsterdam,NETHERLANDS,694656,MapInfo.Styles.SimpleVectorPointStyle:
12 point,
...
フィルタ処理された GetFeature の呼び出しからは、PropertyIsGreaterThanOrEqualTo の条件 (人
口 1,000,000) を満たす行のみが返されます。Abu Dhabi は人口が 722,000 であるため結果に含ま
れていません。
Obj, Capital, Country, Cap_Pop, MI_Style,
Point,Abidjan,IVORY COAST,2700000,MapInfo.Styles.SimpleVectorPointStyle:
12 point,
Point,Addis Ababa,ETHIOPIA,1423111,MapInfo.Styles.SimpleVectorPointStyle:
12 point,
Point,Algiers,ALGERIA,1483000,MapInfo.Styles.SimpleVectorPointStyle: 12
point,
Point,Alma-ata,KAZAKHSTAN,1108000,MapInfo.Styles.SimpleVectorPointStyle:
12 point,
Point,Ankara,TURKEY,2553000,MapInfo.Styles.SimpleVectorPointStyle: 12
point,
Point,Baghdad,IRAQ,3400000,MapInfo.Styles.SimpleVectorPointStyle: 12
point,
Point,Baku,AZERBAIJAN,1115000,MapInfo.Styles.SimpleVectorPointStyle: 12
point,
...
空間演算子によるフィルタリング
以下の例は、GetFeature リクエストで空間クエリを使用する方法を示しています。この例では、
指定した最小外接四角形を満たすすべての行を Europe テーブルから取得します。この処理を適切
に行うために空間演算子 Bbox を使用します。これは、ほとんどの WFS サーバが対応している空
間演算子です。
/// Now lets find rows in an MBR
// WGS84 - Europe
MapInfo.Geometry.DRect bbox = new MapInfo.Geometry.DRect(11.69, 35.36, 48.77, 65.05);
mfc = MapInfo.Wfs.Client.WfsClient.GetFeature(
wfsUrl,
new string[] { featureTypeName },
bbox,
null,
"GML3",
-1);
DisplayFeatureCollection(mfc[0]);
MapXtreme v7.2
432
開発者ガイド
第 22 章 : Web Feature Service
WFS レスポンスからのマップ レイヤの作成
WFS レスポンスからのマップ レイヤの作成
WFS フィーチャ データを MapXtreme にマップ レイヤとして移してさらに分析を行う場合、GML
を解析して MultiFeatureCollection を作成するコードを実行する必要があります。
WFS レスポンスの解析
レスポンスの解析は、WFS 仕様で指定されていません。また、仕様では GetFeature リクエスト
の結果の具体的な形式も定められていません。WFS 仕様では、リクエストが GML2 以上である必
要があると決められているだけです。GML2 には複数のバージョンがあるので、MapXtreme WFS
クライアントで WFS サーバからの GML2 のレスポンスを正しく変換するには、開発者が GML2
の GetFeature のレスポンスを MapXtreme の MapInfo.Data.MultiFeatureCollection に変換するパー
サーを作成する必要があります。そのためには、IWfsReader インターフェイスをインプリメント
し、このインプリメントを MapInfo.Wfs.Client.WfsReaderFactory クラスに登録します。登録は
URL ごとに必要です。つまり、同じ GetFeature レスポンスがある 2 つの WFS サーバと対話した
い場合は、各サーバ URL 用に IWfsReader のインプリメントを 2 回登録する必要があります。イ
ンターフェイス全体をインプリメントする必要はありません。MapInfo.Wfs.Client.WfsReader クラ
スは、ReadGetFeature(XmlReader) メソッドをオーバーライドするように拡張できます。その他
のメソッドは、非準拠の WFS サーバとの対話中にオーバーライドされる可能性があります。
以下のコード例は、フィーチャをリクエストし、マップ レイヤを作成して、フィーチャをマップ
に表示するまでのプロセス全体を示しています。この例で使用しているコードは、MapXtreme を
インストールした場所の \Samples フォルダに展開される WfsClient サンプル アプリケーションに
含まれています。
using
using
using
using
System;
System.Drawing;
System.Windows.Forms;
System.Xml.Schema;
using
using
using
using
MapInfo.Data;
MapInfo.Engine;
MapInfo.Mapping;
MapInfo.Wfs.Client;
namespace MapInfo.Wfs.Client.Samples {
/// <summary>
/// Simple sample to demonstrate how to register a WfsReader to handle
/// requests from a specific Wfs server, get the capabilities of the
server,
/// get the schema for a feature type located on the server and getting
all
/// of the features from the server.
/// </summary>
class SimpleSample {
private const string URL = "http://www.mapinfo.com/miwfs";
private const string defaultExportFileName = "WfsClient.gif";
MapXtreme v7.2
433
開発者ガイド
第 22 章 : Web Feature Service
WFS レスポンスからのマップ レイヤの作成
[STAThread]
static void Main(string[] args) {
string exportFileName = defaultExportFileName;
if (args.Length > 0 && args[0] != null && args[0].Trim().Length
!= 0) exportFileName = args[0];
// register URL with a specific WFS reader
WfsReaderFactory.RegisterHandler(URL, typeof(WfsReader));
// Get the WFS capabilities of the WFS server using the HTTP GET
method.
try
{
// Get the WFS capabilities of the WFS server using the HTTP
GET method.
WfsCapabilities Capabilities =
WfsClient.GetCapabilities(RequestMethod.GET, URL);
}
catch
{
MessageBox.Show("Please check if " + URL + " is a valid WFS
URL");
return;
}
// Do something with the the WfsCapabilities here...
// Get the schema for the USA feature type
string[] TypeNames = new string[] { "miwfs:USA" };
// Do something with the schema here...
XmlSchema usaSchema = WfsClient.DescribeFeatureType(URL,
TypeNames);
// Get all features from the USA feature type
MultiFeatureCollection usa = WfsClient.GetFeature(URL, TypeNames,
null, null, -1, null);
IFeatureCollection fc = usa[0];
// iterate over the Usa MultiFeatureCollection and add each
// IFeatureCollection to a MemTable, etc...
TableInfoMemTable memTableInfo = new
TableInfoMemTable("myMemTable");
foreach (Column c in fc.Columns) {
memTableInfo.Columns.Add(c);
}
Table memTable =
Session.Current.Catalog.CreateTable(memTableInfo);
memTable.InsertFeatures(fc);
MapXtreme v7.2
434
開発者ガイド
第 22 章 : Web Feature Service
WFS レスポンスからのマップ レイヤの作成
// create a layer from the MemTable
FeatureLayer featureLayer = new FeatureLayer(memTable);
// create the map and add the layer
Map map = Session.Current.MapFactory.CreateEmptyMap(new Size(500,
500));
map.Layers.Add(featureLayer);
// export the map to a file
using (MapExport mx = new MapExport(map))
{
mx.Format = ExportFormat.Gif;
mx.Export(exportFileName);
}
// clean up the map
Session.Current.MapFactory.Remove(map);
}
}
}
MapXtreme v7.2
435
開発者ガイド
23
ワークスペース マネー
ジャ
MapXtreme に付属のワークスペース マネージャ ユーティリティを使用する
と、XML ベースのワークスペース ファイル (.MWS 形式) を作成および管理で
きます。ワークスペース マネージャの便利なユーザ インターフェイスを使用
すると、マップを構成するテーブルを簡単に構築したり、数多くの追加設定を
適用したりできます。また、マップをワークスペースとして保存することも可
能です。完成したワークスペースは独自のアプリケーションで使用できます。
印刷したり、ファイルに出力したりすることもできます。
この章の構成
Š
Š
Š
Š
Š
ワークスペース マネージャの機能 . . . . . .
ワークスペースの形式と内容. . . . . . . . .
ワークスペース マネージャのメニュー コマンド
レイヤの管理. . . . . . . . . . . . . . . .
ワークスペース マネージャの機能の使用 . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
437
438
438
449
463
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能
ワークスペース マネージャの機能
ワークスペース マネージャを使用すると、ワークスペース ファイルに格納できる大部分の設定を
制御できます。たとえば、ワークスペースにはシンボル凡例や修飾に関する情報を含めることが
できます。ただし、シンボル凡例や修飾を作成するためのオプションはありません。シンボル凡
例や修飾を作成するには、API を使用します。
ワークスペース マネージャを使用すると、以下の操作を行うことができます。
•
XML ワークスペース、テーブル、Geoset、および MapInfo ワークスペース (.wor ファイルでは
なく .mws ファイル) を読み込む。
•
ワークスペースを .MWS として保存する。
•
•
•
ワークスペースの一部として開くテーブルを制御する。
名前付き接続マネージャを使用して名前付き接続を作成し、読み込む。
マップを追加または削除する、および 1 つ以上のマップを表示する。
•
マップ ウィンドウ上部のタブを使用してマップを切り替える。
•
組み込みのレイヤ管理ウィンドウを使用して、マップとレイヤの表示/非表示、レイヤとラベル
のスタイル、および主題図のプロパティを設定する。
カスタム ラベルを追加、削除、または変更する。
•
•
グループ レイヤを作成する。これにより、レイヤを論理グループにまとめて、グループ全体を
1 回のクリックで表示または非表示できるようになります。
•
前または次の複数のマップ ビューを表示する。
•
マップ ツールを使用して移動および手動ラベル配置を行い、選択ツールを使用してレイヤの選
択可能性の設定が正しいかどうかを確認する。
マップをプレビューおよび印刷する。
最近使用したワークスペースを、最近使用したファイルのリストから簡単に開く。
マップ、ラベル、および主題図レイヤに対する半透明効果を作成する。
折れ線フィーチャに対する湾曲ラベルを作成する。
経緯度線レイヤをマップに追加する。
ラスタ レイヤを現在のマップ ウィンドウの投影法に再投影する。
•
•
•
•
•
•
MapXtreme v7.2
437
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペースの形式と内容
•
•
ラスタ レイヤとベクトル レイヤで構成されるマップ ウィンドウを、異なる投影法に再投影
する。
拡張機能を追加して、ワークスペース マネージャおよびレイヤ管理にカスタム機能を追加する。
ワークスペースの形式と内容
ワークスペース ファイルは、ワークスペースを構成するすべてのマップ、テーブル、レイヤ、お
よび設定の場所、説明、およびメタデータが記述された XML ドキュメント (.MWS) です。XML 形
式なので移動することができます。つまり、別のコンピュータ、別のネットワーク、または別の
サイトで作業している他のユーザとワークスペースを共有できるのです。
この XML ワークスペースの移植性は、MapXtreme では名前付き接続によってインプリメントされ
ています。名前付き接続を使用すると、別のドライブ、パス、およびデータベース接続情報を独
自の環境に基づいて定義できます。これにより、他のユーザが作成したワークスペースを使用で
きるようになります。すべてのパスと接続文字列は、ワークスペースを開くときに解決されま
す。名前付き接続はワークスペース マネージャで直接設定できます ([ファイル]、[名前付き接続の
管理] の順に選択します)。XML ワークスペース構造の詳細については、「付録 C : MapInfo ワー
クスペースについて」を参照してください。
ワークスペース マネージャのメニュー コマンド
ここでは、ワークスペース マネージャで利用できる各メニュー コマンドについて説明します。
[ファイル] メニューのコマンド
[ファイル] メニューのコマンドは、ファイルのオープン、保存、印刷など、一般的なファイル メ
ニュー機能すべてと、ワークスペース マネージャに固有の一部の機能を提供します。各コマンド
について以下に説明します。
MapXtreme v7.2
438
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
新しいワークスペース
新しい空のファイルを作成します。ファイルを作成したら、レイヤ管理ウィンドウの追加ツール
または [ファイル] メニューの [テーブルを開く] を使用してテーブルを追加できます。現在のワー
クスペースに変更を加えた場合は、新しいワークスペースを作成する前に、変更を保存するかど
うかの確認が求められます。
開く
既存のワークスペースまたはテーブルを開きます。現在のワークスペースに変更を加えた場合
は、既存のワークスペースを開く前に、変更を保存するかどうかの確認が求められます。1 つ以上
のテーブルを開き、それらをマップに追加できます。
ワークスペースの挿入
1 つまたは複数のワークスペースのマップおよびテーブルを、現在のワークスペースに追加します。
ワークスペースを閉じる
変更を保存するかどうかの確認が求められ、ワークスペースを閉じます。
ワークスペースを保存する
マップをワークスペースとして保存します。
名前を付けて保存
ワークスペースのコピーを新しいファイル名で保存します。
名前付き接続を使用して保存
名前付き接続の情報をワークスペースに保存します。また、「名前付き接続の管理」も参照して
ください。
MapXtreme v7.2
439
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
すべてのテーブルを閉じる
開いているすべてのテーブルを閉じます。
テーブルの管理
マップを構成しているテーブルがリストされたダイアログ ボックスを表示します。また、マップ
に含める追加のテーブルを開くことができます。テーブルを開くには、[開く] をクリックして [開
く] ダイアログ ボックスを表示します。開いたテーブルは、[テーブルの管理] ダイアログ ボックス
の開いているテーブルのリストに追加されます。次に、追加ツールを使用してテーブルをマップ
に追加できます。追加ツールは、ワークスペース マネージャのレイヤ管理ウィンドウの上に配置
されています。
テーブルを閉じるには、リスト内のテーブルをクリックして強調表示します。[閉じる] ボタンがア
クティブになります。[閉じる] をクリックしてテーブルを閉じます。閉じたテーブルを参照してい
るレイヤはマップから削除されます。
ワークスペースは、まだマップにないテーブルを開くことができます。
名前付き接続の管理
名前付き接続は、エイリアスでデータ ソースへの接続を表します。FilePath、DatabaseSource、
ODBC、または Oracle OCI といった種類の名前付き接続を作成できます。指定した接続文字列ま
たはファイル パスは、後で再利用できるように XML ファイルとして保存できます。ワークスペー
ス マネージャを実行したときにデータ ソースへの接続が利用できるように、デフォルト接続を設
定できます。名前付き接続もワークスペースに保存されます。
MapXtreme v7.2
440
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
ページ設定
印刷するマップの用紙のサイズ、用紙の向き、および余白を指定できます。このオプションを使
用して、プリンタ固有の設定にアクセスすることもできます。
印刷
マップを用紙またはファイルに出力できます。[印刷] ダイアログ ボックスでは、使用するプリン
タ、印刷するページの範囲 (印刷ジョブが複数のページにわたる場合)、および印刷部数を指定しま
す。[プリンタの設定] では、レイアウトを設定したり、使用しているプリンタに固有のその他のオ
プションを設定したりできます。[ファイルへ印刷] チェック ボックスをオンにすると、マップを
ファイルに出力できます。
印刷プレビュー
印刷する前に、出力がどのように表示されるかを確認できます。
最近使用したワークスペース
最近開いたワークスペースのリストを表示します。
[ビュー] メニューのコマンド
このメニューを使用すると、ツールバー、ステータス バー、およびレイヤ管理ウィンドウの表示
と非表示を切り替えることができます。
MapXtreme v7.2
441
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
[マップ] メニューのコマンド
[マップ] メニューのコマンドを使用して、マップの追加と削除、マップのビューの操作、主題図マッ
プの作成などを行います。ビュー関連のコマンドはポップアップ メニューからも利用できます。
ワークスペース マネージャのマップ ウィンドウを右クリックすると、メニューが表示されます。
マップの管理
このメニュー コマンドを選択すると [マップの管理] ダイアログが表示されます。ここでは、マッ
プの追加または削除、デフォルト マップの設定、マップおよびエイリアスの名前変更、および [凡
例] タブの表示/非表示 (マップに凡例がある場合) を行うことができます。[新規作成] コマンドで
は、現在開いているテーブルを使用して新しいマップ ウィンドウを作成できます。[ワークスペー
ス マップの管理] には、マップ内のレイヤと凡例の数も表示されます。
レイヤの管理
このメニュー コマンドを選択すると、[レイヤ管理] ダイアログが表示されます。このメニュー コ
マンドは、[ビュー] メニューの [レイヤ管理] チェック ボックスがオフで、レイヤ管理ウィンドウ
が表示されていない場合に使用できます。レイヤ管理の機能の詳細については、「レイヤ管理
ツール」を参照してください。
ビューの変更
マップの現在のビュー、つまり現在ウィンドウに表示されているマップの領域を変更できます。
マップのズームと縮尺も独自の設定に変更できます。マップ ウィンドウの中心を設定したり、回
転角度を変更したりすることもできます。
[ビューの変更] ダイアログ ボックスでは、ズーム幅の単位 (マイル、キロメートルなど)、および中
心の X/Y 座標の単位 (メートル、度など) を選択できます。このダイアログで選択した単位は、レ
イヤ管理ウィンドウでも使用されます。たとえば、レイヤ管理ウィンドウで使用されるすべての
距離をマイルではなくキロメートルで表示したい場合は、[ビューの変更] ダイアログ ボックスを
表示し、[ズーム] フィールドの横に表示される単位のリストから [キロメートル] を選択します。
MapXtreme v7.2
442
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
レイヤ全体の表示
レイヤ全体またはマップ内のすべてのレイヤを表示できます。[レイヤ全体の表示] ダイアログ
ボックスには、マップを構成するレイヤのリストが表示されます。希望のレイヤをリストから選
択するか、すべてのレイヤを表示する [すべてのレイヤ] を選択して、[OK] をクリックします。
マップが再描画されてレイヤ全体が表示されます。
前のビュー
マップの前のビューに戻ることができます。
次のビュー
このコマンドは、[前のビュー] を使用した後に利用できます。このコマンドを使用すると、[前の
ビュー] コマンドを使用する前に表示されていたマップのビューが再表示されます。
[前のビュー] コマンドと [次のビュー] コマンドを一緒に使用して、マップの 2 つのビューを交互に
切り替えることができます。これらのコマンドは、ツールバーからも利用できます。
縮尺を維持/ズームの維持
マップのサイズと形状を変更するとき、同じ縮尺またはズームを維持したい場合に、これらのコ
マンドを使用します。
再描画
マップを再描画します。
選択の表示
選択したオブジェクトを拡大表示または縮小表示します。
主題図 ウィザード
フィーチャ主題図とラベル主題図を作成するには、[マップ] メニューの [主題図 ウィザード] を選択
します。フィーチャ主題図の種類には、レンジ、個別値、ドット密度、サイズ可変シンボル、円グ
ラフ、および棒グラフがあります。ラベル主題図の種類には、レンジおよび個別値があります。
MapXtreme v7.2
443
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
マップに 1 つ以上のラベル セット (ラベル レイヤに表示される) が含まれる場合は、ラベル主題図
を作成できます。ラベル主題図では、テーブル内のデータに基づいて、各ラベルにさまざまなラ
ベル スタイル (色、フォント サイズなど) を割り当てます。たとえば、ラベル主題図を使用する
と、一部の場所を他の場所より際立たせて表示できます。レンジ ラベル主題図は、人口など、共
通のデータ値に基づいてラベルをグループ化します。特定の人口区分に当てはまる都市にはある
スタイルのラベルを付け、別の区分に当てはまる都市には別のスタイルのラベルを付けます。こ
れは、人口の値を使用することによってラベルを付けずに都市の規模を示すあまり目立たないス
タイルです。
主題図ウィザードでは、3 つのダイアログを使用して主題図を作成します。
主題図を作成するには
1. [マップ] メニューの [主題図 ウィザード] を選択します。
[主題図の作成: 手順 1/3] ダイアログ ボックスが表示されます。
2. フィーチャ主題図またはラベル主題図のいずれかを選択し、作成する主題図の種類を選択し
ます。
3. [次へ] をクリックします。
[主題図の作成: 手順 2/3] ダイアログ ボックスが表示されます。
4. 色分けするテーブルを選択します。
5. 使用するデータを選択します。データが含まれるテーブルのフィールドを選択するか、[式] を
選択して必要なデータをテーブルから抽出する式を使用します。
6. [次へ] をクリックします。
[主題図の作成: 手順 3/3] ダイアログ ボックスが表示されます。ここでは、主題図の種類
の設定、スタイル、および凡例をカスタマイズできます。主題図マップに透明効果を適用する
方法については、「主題図に半透明効果を適用する方法」を参照してください。
7. [適用] をクリックしてカスタマイズ設定を適用します。
8. 終了したら [OK] をクリックします。
フィーチャまたはラベルの円グラフ主題図、棒グラフ主題図、および個別値主題図を作成してい
る場合、手順 2/3 のダイアログ ボックスには [ゼロと空白を無視] オプションが表示されます。こ
のオプションをオンにすると、ワークスペース マネージャの主題図作成処理のパフォーマンスが
低下する可能性があります。
主題図を変更するには、レイヤ ツリー内で目的の主題図を強調表示し、表示される [主題図] タブ
をクリックします。[主題図の変更] ボタンをクリックして、主題図を変更します。
レイヤ リストから主題を削除するには、主題図の名前を右クリックし、[削除] を選択します。主題
図の名前を変更したり、レイヤ ツリーでこのレイヤの表示/非表示を切り替えることもできます。
MapXtreme v7.2
444
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
[ツール] メニューのコマンド
ワークスペース マネージャの [ツール] メニューのコマンドからは、各種のマップ ツールにアクセ
スできます。これらのツールを使用して、マップの拡大表示と縮小表示、マップの位置の変更、
さまざまな方法によるマップ オブジェクトの選択などを行うことができます。これらのツール
は、ワークスペース マネージャ ツールバーからも利用できます。各ツールについて以下に説明し
ます。
矢印
これは基本のポインティング ツールです。マップ フィーチャを選択することはできません。
ズームイン
マップの領域を拡大表示できます。マップを拡大表示するには、以下の手順に従います。
1. [ツール] メニューの [ズームイン] を選択して、ツールをアクティブにします。
ポインタが、プラス記号の付いた虫眼鏡のアイコンに変わります。
2. マップをクリックします。
マップの領域が拡大して再描画され、クリックしたポイントに中心が設定されます。
ズームアウト
マップの領域を縮小表示できます。マップを縮小表示するには、以下の手順に従います。
1. [ツール] メニューの [ズームアウト] を選択して、ツールをアクティブにします。
ポインタが、マイナス記号の付いた虫眼鏡アイコンに変わります。
2. マップをクリックします。
マップの領域が縮小して再描画され、クリックしたポイントに中心が設定されます。
MapXtreme v7.2
445
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
1 つのツールで拡大と縮小
同じズーム ツールを使用して拡大と縮小を行うには、Ctrl キーを押しながら操作を行います。Ctrl
キーを押しながら拡大ツールを使用すると、クリックするたびに段階的に縮小されます。Ctrl キー
を押しながら縮小ツールを使用すると、クリックするたびに段階的に拡大されます。
移動
ズーム レベルを変更せずに、マップを再配置できます。たとえば、特定の国や都市が中心に来る
ように、マップ ビューの位置を変更したい場合があります。マップを移動するには、以下の手順
に従います。
1. [ツール] メニューの [移動] を選択して、ツールをアクティブにします。
ポインタがポインティング ハンドに変わります。
2. マップをクリックし、マウス ボタンを押しながら希望の位置までドラッグします。
マップが新しい位置で再描画されます。
選択
オブジェクトを 1 つずつ選択したり、同じ領域にあるすべてのオブジェクトを選択したりでき
ます。
オブジェクトを選択するには、以下の手順に従います。
1. [ツール] メニューの [選択] を選択して、ツールをアクティブにします。
ポインタが矢印に変わります。
2. 選択するマップ上のオブジェクトをクリックします。
選択したオブジェクトが強調表示されます。
半径選択
特定の半径内にあるすべてのオブジェクトを選択できます。たとえば、献血者のテーブルと献血
場所のテーブルがあるとします。半径選択ツールを使用すれば、各献血場所から半径 0.5 マイル以
内に在住している献血者の一時リストを作成できます。
半径選択ツールでは、中心点が円の中に入っているすべてのオブジェクトが選択されます。オブ
ジェクト全体が円の中に収まっている必要はありません。半径内のオブジェクトを選択するに
は、以下の手順に従います。
1. [ツール] メニューの [半径選択] を選択して、ツールをアクティブにします。
ポインタをマップ上に移動すると、ポインタは、下部に小さい円が付いた選択矢印に変わ
ります。
2. 半径検索の中心点に設定する場所をマップ上でクリックします。たとえば、消防署から半径 2
マイル以内にあるすべての消火栓を選択する場合は、消防署をクリックし、そこを中心点に設
定します。
3. マウス ボタンを押したまま、中心点から外側にドラッグします。
中心点から円が描画され、円の半径距離がステータス バー (画面の左下隅) に表示されます。
MapXtreme v7.2
446
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
4. 希望の半径距離に達したら、マウス ボタンを離します。
その円に含まれるすべてのマップ オブジェクトが強調表示されます。
長方形選択
長方形内のオブジェクトを選択できます。長方形選択ツールを使用してクリックおよびドラッグ
すると、選択するオブジェクトの周囲に点線の四角形 (長方形ボックス) が作成されます。
長方形選択ツールでは、中心点が長方形の中に入っているすべてのオブジェクトが選択されま
す。オブジェクト全体が長方形の中に収まっている必要はありません。長方形内のオブジェクト
を選択するには、以下の手順に従います。
1. [ツール] メニューの [長方形選択] を選択して、ツールをアクティブにします。ポインタをマッ
プ上に移動すると、ポインタは、下部に小さい長方形が付いた選択矢印に変わります。
2. 作成する長方形ボックスの一角となる点をマップ上でクリックします。
3. マウス ボタンを押したままマウスをドラッグして、選択するオブジェクトの周囲に点線の四角
形を描画します。
4. 希望のサイズに達したら、マウス ボタンを離します。
その四角形に含まれるすべてのマップ オブジェクトが強調表示されます。
ポリゴン選択
マップ上に描画するポリゴン内のマップ オブジェクトを選択します。
オブジェクトを選択するには、以下の手順に従います。
1. [ツール] メニューの [ポリゴン選択] を選択して、ツールをアクティブにします。
ポインタをマップ上に移動すると、ポインタは、下部に小さいポリゴンが付いた選択矢印
に変わります。
2. ポリゴンの始点を置く場所をマップ上でクリックします。任意の方向にポインタを移動します。
クリックした点からポインタまでのラインが描画されます。
3. マウスをクリックして別の端点を作成します。希望する数の辺が描画されるまでポインタの移
動とマウスのクリックを続けます。
4. ポリゴンを閉じるには、始点にできるだけ近い場所を最後にクリックするか、最後のポイント
をダブルクリックします。
ポリゴンが閉じられ、その中に含まれるすべてのオブジェクトが選択されます。
ラベル
ラベル ツールを使用すると、ユーザがクリックするマップ上の位置にラベルを手動で追加できま
す。ラベル ツールでは、水平ラベルと湾曲ラベルのどちらも描画できます。デフォルト設定でラ
ベルを描画するのが最も簡単です。しかし、MapXtreme のラベル機能は多機能であり、非常に多
くのスタイル、位置、および表示/非表示のオプションを備えており、これを使用することで多彩
なラベルを作成できます。「ラベル レイヤの設定」および「湾曲ラベル」も参照してください。
MapXtreme v7.2
447
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャのメニュー コマンド
[機能拡張] メニュー コマンド
MapXtreme v7.0.0 以降、カスタムの .NET アセンブリをワークスペース マネージャに読み込み、[機
能拡張] メニューを通じてその機能を拡張できるようになりました。たとえば複数のタブ ウィンドウ
を作成し、それぞれのウィンドウにマップ別の設定を適用するといった場合に利用できます。[機能
拡張] では、[機能拡張] メニューを含めて、ワークスペース マネージャの任意のメニューにメニュー
項目を追加することもできます。
このメニューのコマンドは、[機能拡張の読み込み] と [機能拡張の管理] の 2 つです。
機能拡張の読み込み
[開く] ダイアログが表示され、カスタム拡張機能の位置に移動できます。拡張機能は、
<your_extension>.WorkspaceManager.Extensions.dll というファイルの命名規則に基づいて .DLL
として作成され、保存されます。
機能拡張の管理
[機能拡張マネージャ] ダイアログが表示され、拡張機能のロードやアンロード、および拡張機能の
プロパティの変更を行うことができます。読み込まれた拡張機能は、名前、バージョン、および
アセンブリの場所がリスト ボックスに表示されます。
カスタム拡張機能の作成方法については、 「付録 B : カスタマイズMapXtreme」の「ワークス
ペース マネージャ機能拡張」を参照してください。
MapXtreme v7.2
448
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
レイヤの管理
ワークスペース マネージャのアプリケーション ウィンドウは 2 つのセクションに分かれていま
す。レイヤ管理ウィンドウとそのコマンドが左側、マップ ウィンドウが右側に表示されます。レ
イヤ管理ウィンドウは、レイヤ ツリーと、マップ設定とレイヤ設定が含まれるダイアログ ボック
スのタブから構成されます。レイヤ ツリーには、開いているマップと、それに付随するすべての
レイヤが表示されます。
ワークスペース マネージャのレイヤ管理機能を使用すると、マップのレイヤを構成し、レイヤま
たはマップの表示を制御する設定を個々のレイヤまたはマップ全体に適用できます。
レイヤ管理ツール
レイヤ管理の上部にあるツールを使用すると、レイヤ ツリー ウィンドウからレイヤの追加、移
動、および削除を簡単に行うことができます。
•
•
•
各追加ツールでは、テーブルを開いたり、グループ レイヤとラベル レイヤをマップに挿入し
たりできます。
選択したアイテムの削除ツールでは、選択したレイヤをマップから削除できます。
[上へ] および [下へ] の各ツールバー ボタンを使って、レイヤ リスト内でレイヤを上下に移動で
きます。これによって、レイヤの表示順序を変更します。
レイヤ ツリー
レイヤ管理ウィンドウ内のレイヤ ツリーには、マップと、主題図レイヤ、ラベル レイヤ、経緯度
線レイヤなどのマップ内のすべてのレイヤが表示されます。レイヤ ツリーを使用して、以下の操
作を行うことができます。
MapXtreme v7.2
449
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
マップ エイリアス
マップ ノード (レイヤ リストの最上位のノード) にポインタを合わせると、ツールチップにマップ
エイリアスが表示されます。ツールチップは、開発時にマップのエイリアスを知る必要がある場
合 (Web コントロールのプロパティを設定するときにマップ エイリアスを指定する必要があるな
ど) に便利です。
マップ名を右クリックし、[マップ エイリアスの設定] を選択することによって、マップ エイリア
スを変更できます。
レイヤの表示
レイヤ ツリーに表示される各レイヤの横のチェック ボックスをクリックすると、レイヤの表示/非
表示を切り替えることができます。
レイヤの順序の変更
レイヤの順序を変更するには、レイヤを選択し、[上へ] または [下へ] のツールバー ボタンをク
リックします。レイヤを上下にドラッグして、リスト内での位置を変更することもできます。
ドラッグ アンド ドロップ操作を伴う、以下の特殊なケースがあります。
•
レイヤをグループ レイヤ内に移動するには、レイヤをそのグループにドラッグします。
•
新しいラベル ソースをラベル レイヤに追加するには、レイヤをそのラベル レイヤにドラッグ
します。
レイヤをグループ内に移動せず、グループ レイヤの上に配置する場合は、Shift キーを押しながら
ドラッグ アンド ドロップ操作を行います。同様に、新しいラベル ソースをラベル レイヤに追加
したくない場合は、Shift キーを押しながらドラッグ アンド ドロップ操作を行います。
コンテキスト メニューの表示
レイヤ ツリー内のマップまたはレイヤそれぞれに、コンテキスト メニューが組み込まれていま
す。コンテキスト メニューを表示するには、マップまたはレイヤを右クリックします。また、現
在選択しているレイヤのコンテキスト メニューを表示するには、Shift キーを押しながら F10 キー
を押します。
コンテキスト メニューの項目は、指定されているレイヤの種類によって異なります。特に、以下
の事項に注意してください。
MapXtreme v7.2
450
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
•
レイヤにスタイル オーバーライドを追加するには、コンテキスト メニューを表示し、[スタイ
ル オーバーライドの追加] を選択します。各レイヤにはズーム範囲が異なる複数のスタイル
オーバーライドを追加できます。これにより、マップを拡大表示したときに、ポイントが大き
く表示され、道路の幅が広く表示されるようにマップを設定できます。
スタイル オーバーライドは、シームレス ラスタ レイヤにも追加できます。スタイル オー
バーライドが強調表示されている場合に、[表示/非表示] タブから [ラスタ イメージ スタ
イル] ダイアログを利用することができます。
•
レイヤ ツリー内の項目の名前を変更するには、項目を右クリックし、[名前変更] を選択しま
す。F2 キーを押して、選択した項目の名前を変更することもできます。 これらの方法でレイ
ヤの名前を変更しても、元のテーブルの名前は変更されません。名前変更操作は、レイヤ ツ
リーに表示されるテキストを変更するだけです。ワークスペースを保存すると、必要な情報が
ワークスペース ファイルに格納されます。
•
レイヤ ツリーからレイヤを削除するには、削除する項目を右クリックして [削除] を選択しま
す。Del キーを押して、レイヤを削除することもできます。
•
デフォルトでは、レイヤをマップに追加した時点では、レイヤが選択可能な状態になっていま
す。これは、レイヤ管理ウィンドウの [オプション] タブの [選択可能] チェック ボックスで制御
されます (「オプション」を参照)。特定のレイヤだけを選択可能にし、それ以外のすべてのレ
イヤを選択不可として設定することもできます。多数のレイヤを含んだマップで、特定のレイ
ヤのフィーチャだけを選択可能にしたい場合などに活用できます。特定のレイヤを選択可能と
して指定するには、以下の手順に従います。
a. レイヤ管理ウィンドウで目的のレイヤ名を右クリックし、コンテキスト メニューを表示し
ます。
b. [このレイヤを唯一選択可能なレイヤにする] を選択します。この 1 つのマップ レイヤの
フィーチャだけが選択可能な状態になります。つまり、任意の選択ツールを使ってマップ上
のオブジェクトを選択できます。それ以外のすべてのマップ レイヤは選択不可になります。
レイヤ管理ウィンドウのタブ
レイヤ ツリーの下にあるレイヤ管理ウィンドウのタブは、マップおよびマップ内の各レイヤに適
用できる追加設定とコントロールを提供します。各タブで、マップ設定とレイヤ設定を制御しま
す。表示されるタブは、レイヤ ツリーでマップまたはレイヤのどちらが強調表示されているか、
および強調表示されているレイヤの種類によって異なります。たとえば、レイヤ ツリーでマップ
が強調表示されている場合は、マップのタブが表示され、レイヤが強調表示されている場合は、
レイヤのタブが表示されます。主題図レイヤ、ラベル レイヤ、または経緯度線レイヤが強調表示
されている場合は、それらのレイヤに固有のタブが表示されます。各タブのオプションについて
は、以下で説明します。
マップの設定
レイヤ ツリーでマップを選択すると、[ビュー]、[編集]、[ツール]、[スタイル]、[座標系]、[範囲] の
各タブが利用可能になります。
MapXtreme v7.2
451
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
ビュー
マップの全体的な外観を制御できます。ズーム レベル、縮尺、中心点、および回転角度 (度単位)
を設定できます。[適用] ボタンをクリックすると、設定が適用されます。
L
ラスタ再投影の場合は、このタブで回転角度を設定し、[ラスタ再投影]
ン/オフを切り替えます。「ラスタ再投影」を参照してください。
タブで再投影のオ
編集
[編集] タブのオプションを使用すると、特定のマップ編集タスクを制御できます。たとえば、オブ
ジェクトの描画 (アプリケーションで描画ツールを使用する場合)、オブジェクトのサイズ変更、オ
ブジェクト ノードの移動と削除などで使用するスタイルを制御できます。
各スタイル ボックスでは、アプリケーションで使用する描画ツールのデフォルト スタイルを指定
できます。ボックスをクリックすると、対応するスタイル ダイアログ ボックスが表示されます。
選択した設定はワークスペースに保存されます。描画ツールを使用するアプリケーションでユー
ザがワークスペースを開き、マップ上にオブジェクトを描画するとき、これらのスタイル設定が
使用されます。
重複するノードを削除または移動するかどうかを指定することもできます。目的のチェック ボッ
クスをオンにします。
マップの編集モードを指定します。
•
[なし] - マップで編集を行うことはできません。
•
[移動/サイズ変更可能] - オブジェクトを移動およびサイズ変更できます。
•
[ノード編集可能] - ノードを移動または削除できます。
•
[ノード追加可能] - ノードをオブジェクトに追加できます。
選択した編集モードは、マップ内のすべての編集可能レイヤに適用されます。レイヤが編集可能
かどうかを制御するには、レイヤの [オプション] タブの [編集可能] チェック ボックスをオンにし
ます。
編集モードでは、マップ フィーチャのノードを有効にすることをお勧めします。レイヤ ノード (マッ
プ ノードではない) を強調表示し、[表示/非表示] タブのチェック ボックスをオンにします。
ラベルが編集可能かどうかを制御するには、[ラベルの編集可能] チェック ボックスをオンまたは
オフにします。
MapXtreme v7.2
452
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
編集モードの使用例については、「選択 (Select) ツールを使用した FeatureGeometry の編集」を
参照してください。
ツール
情報チップの表示制御、スナップ モードのアクティブ化、スナップ許容値の設定、および動的選
択ツールのアクティブ化を行うことができます。
[情報チップを表示] チェック ボックスは、選択ツールを特定のフィーチャの上に置いたときに、
そのフィーチャに関する情報をポップアップ表示するかどうかを制御します。「オプション」を
参照してください。
[スナップ モード] チェック ボックスをオンにすると、選択ツールなどのマップ ツールが近くにあ
るノードを自動的に検索します。ノードが近くにある場合は、最も近いノードの位置を示すクロ
スヘアが表示されます。たとえば、半径選択ツールを使用していて、ノード検索の中心をマップ
上のポイント フィーチャとまったく同じ位置にしたい場合は、[スナップ モード] チェック ボック
スをオンにできます。スナップ モード機能は、描画ツールを提供するアプリケーションで特に重
要です。ユーザは既存のフィーチャとまったく同じ位置にフィーチャを描画しなければならない
場合が多いためです。
[スナップ許容値] 設定では、ツールが "スナップ可能な" ノードを検索する距離を指定します。ス
ナップ モード機能を使用するレイヤは選択できます。たとえば、[スナップ モード] チェック ボッ
クスをオンにして、特定のレイヤ内のフィーチャの近くにポインタがあるときだけにスナップ ク
ロスヘアを表示したい場合があります。特定のレイヤについてスナップ モード機能のオン/オフを
切り替えるには、レイヤ ツリーでレイヤを選択し、[オプション] タブの [スナップ モード] チェッ
ク ボックスをオンまたはオフにします。
[動的選択ツール] チェック ボックスは、フィーチャを直ちに選択するか (選択ツールの使用中に)、
マウス ボタンを離して、選択ツールの使用を終えた後に選択するかを制御します。
[動的選択ツール] チェック ボックスをオフにすると、選択ツールの使用を終えるまでマップ上の
フィーチャは実際に選択されません。たとえば、半径選択ツールの場合、半径を指定し、マウス
ボタンを離すまで、フィーチャは選択されません。
[動的選択ツール] チェック ボックスをオンにすると、マウスのドラッグに合わせてフィーチャが
動的に選択または選択解除されます。たとえば、半径選択ツールの場合、マウスをドラッグして
半径を拡大するのに合わせて、より多くのフィーチャが選択されるのがわかります。
スタイル
透過性やアンチエイリアス処理のプロパティを制御するには、[スタイル] タブのオプションを使用
します。
MapXtreme v7.2
453
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
•
[アンチエイリアスを使用] – 高品位の画像を低解像度で表現したときに現れる、直線、曲線、
リージョン境界線のギザギザを滑らかに見せるためのオプションです。 [アンチエイリアスを
使用] をオンにした場合、[透過性を有効化] が自動的に選択されます。[透過性を有効化] をオフ
にした場合は、[アンチエイリアスを使用] も自動的にオフになります。
•
[透過性を有効化] – マップを画面、プリンタ、またはファイル エクスポートに出力する際、ス
タイルの色やレイヤの半透明値を有効にします。 透過性を有効にした場合、透過性を調整す
るためのトラックバーがスタイル ダイアログに表示されます。
このプロパティは、ラスタの透過性には影響しませんが、半透明のラスタ イメージを印刷す
るには [透過性を有効化] をオンにしておく必要があります。
L
透過性やアンチエイリアス処理を有効にして高品位のマップをレンダリングすると、レン
ダリング速度が低下する場合があります。この影響は、3 つ以上の透過レイヤを含んだ
マップで特に顕著に現れます。
アンチエイリアスと透過性の詳細については、「GDI+ による透過性とアンチエイリアスを用いた
レンダリングの拡張」を参照してください。
座標系
マップの座標系が表示され、座標系を変更できます。
座標系を変更するには、以下の手順に従います。
1. [座標系] ボタンをクリックして、[座標系の選択] ダイアログ ボックスを表示します。
2. リストから座標系を選択し、[OK] をクリックします。
範囲
マップの場合、このタブには、現在のマップ ビューの範囲が表示されます。[マップ全体の表示]
ボタンをクリックすると、マップ全体が表示されます。
ラスタ再投影
[ラスタ再投影] タブでは、マップ内のラスタ レイヤおよびベクトル レイヤの再投影の設定を指定
することができます。
MapXtreme v7.2
454
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
ラスタ レイヤとベクトル レイヤ両方の再投影を制御できます。ラスタ レイヤまたはベクトル レ
イヤのいずれかをマップに追加した場合は、その新しいレイヤを現在のマップ ウィンドウの投影
法に再投影することができます。
ベクトル レイヤとラスタ レイヤが混在するマップ ウィンドウの投影法を変更した場合は、ラスタ
レイヤとベクトル レイヤ両方すべてを新しいマップ ウィンドウの投影法に再投影することができ
ます。
これらの設定は、MapXtreme API にも適用されます。詳細については、『開発者リファレンス』
で MapInfo.Mapping.FeatureViewer クラスの RasterReprojection プロパティおよび
RasterReprojectionResampling プロパティを参照してください。
ラスタ再投影の有効/無効を切り替えるには、[ラスタ再投影] チェック ボックスを使用します。ラ
スタ再投影を有効にするには、チェック ボックスをオンにします。ラスタ再投影を無効にするに
は、チェック ボックスをオフにします。ラスタ再投影は、デフォルトでは無効です。つまり、ラ
スタ レイヤをマップに追加しても、再投影は実行されません。
ラスタ再投影の実行方法を指定するには、[再投影方法] の設定を使用します。次のいずれかを選択
します。
•
•
[最適化して使用] – イメージのラスタ再投影は、ソースイメージ空間への変換後にターゲット
の長方形の外観によって決定されます。ターゲットの長方形が ”厳密な” 長方形である場
合、つまり、上下の 2 辺が X 軸に平行し、左右の 2 辺が Y 軸に平行している場合、標準的な
Windows 関数を使ってソース イメージが両方向に拡大されます。イメージが厳密な長方形テ
ストに不合格の場合、再投影は、指定された再サンプリング法を使用して実行されます。
[常に使用] – ラスタ再投影は常に実行されます。MapXtreme は、正確な数式に基づいてイメー
ジの座標を計算し、3 次おりたたみ内挿法または最近隣内挿法のいずれかを使用してピクセル
の再サンプリングが実行されます。
[再投影再サンプリング法] の設定では、再投影されたラスタ イメージに対する再サンプリング法
を指定します。
再サンプリングとは、本来は連続階調で表現されるべき明暗が不連続な一連のピクセル値として
表現されているとき、ソース イメージに基づき、ラスタ イメージのピクセル値を復元 (通常は、
イメージ センサの瞬間視野によってカバーされるグラウンド オブジェクト上の点の明るさに対し
て比例的に復元) する手法のことです。
ターゲット イメージのピクセル値を計算する方法として、3 次おりたたみ内挿法と最近隣内挿法
の 2 つの再サンプリング法があります。以下のいずれかを選択します。
MapXtreme v7.2
455
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
•
[3 次おりたたみ内挿法] は、その識別能力により、ピクセル値の最善の"復元" を提供します。3
次おりたたみ内挿法では、ターゲット イメージのピクセルは、ソース イメージの基本ピクセル
を中心とする 4x4 の正方格子内のピクセル値に基づいて計算されます。基本ピクセルの座標
は、特殊な最適化手順に基づいて、ターゲット イメージのすべてのピクセルに対して計算され
ます。次に、ピクセルは、基本ピクセルの座標に基づいて重みが付けられます。通常、航空画
像や衛星ラスタ画像には、イメージ品質が優れている 3 次おりたたみ内挿法をお勧めします。1
•
[最近隣内挿法] では、再投影されたイメージのピクセル値がソース イメージの基本ピクセル値
で置き換えられます。この再サンプリング法は、3 次おりたたみ内挿法よりレンダリング時間
は短縮されますが、精度が落ちる可能性があります。一般に、ラスタ マップ、グリッド、およ
びスキャンされたマップの再サンプリングには、結果を短時間で取得できる最近隣内挿法をお
勧めします。
ラスタ再投影の回転角度を変更するには、[ビュー] タブで回転角度を指定し、[適用] をクリックし
ます。「ビュー」を参照してください。
レイヤの設定
レイヤ ツリー内のマップ レイヤ ノードをクリックすると、レイヤ管理ウィンドウに以下のタブが
表示されます。
表示/非表示
[表示] チェック ボックスをオンにすると、マップ レイヤが表示可能になります。レイヤ ツリーで
対象レイヤの横のチェック ボックスをオンにしても同じ効果が得られます。
レイヤを表示するズーム範囲または縮尺範囲を指定するには、[範囲内で表示] チェック ボックス
をオンにします。ズーム範囲を選択した場合は、最小ズームと最大ズームをマイル単位で指定し
ます。これにより、レイヤはこのズーム範囲内で表示されます。縮尺範囲を選択した場合は、近
接の縮尺と最遠の縮尺を指定します。これにより、レイヤはこの縮尺範囲内で表示されます。
マップ レイヤ上で対応するオプションを選択することによって、ノード、中心点、線方向などを
表示することもできます。ノードは、ラインや折れ線やポリゴンのセグメントを定義するポイン
トです。中心点は、マップ オブジェクトの中心です。線方向とは、その線が描画された方向をい
います (道路レイヤで道順を示すためなどに使用されます)。マップ フィーチャを編集したい場合
は、これらの要素を表示してください。[編集可能] チェック ボックスは、[オプション] タブにあり
ます。
オプション
このタブにある以下の各チェック ボックスを使用すると、フィーチャ レイヤの編集とカスタマイ
ズが簡単に行えるようになります。
1.
MapXtreme で使用されている 3 次おりたたみ内挿法 のアルゴリズムは、S.K.Park および
R.A.Schowengerdt 共著『Computervision, Graphics and Image Processing』(1983、Volume 23、 258 ~
272 ページ) に基づいています。
MapXtreme v7.2
456
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
•
[選択可能] - このチェック ボックスをオンにすると、[ツール] メニュー コマンドまたはツール
バーの各選択ツールを使用してレイヤ内のオブジェクトを 選択できます。選択の対象から外す
レイヤについては、[選択可能] チェック ボックスをオフにします。
•
[編集可能] - このチェック ボックスをオンにすると、レイヤが編集可能になります。
•
[描画ツールでこのレイヤにフィーチャを追加] - 描画ツールを提供するアプリケーションで使用
するワークスペースを準備し、その描画ツールを使用してレイヤ内に新しいフィーチャを作成
できるようにするには、このチェック ボックスをオンにします。
•
[情報チップを表示] - 選択したレイヤ内のマップ オブジェクトに情報チップを表示するには、
このチェック ボックスをオンにします。情報チップのテキストは、[情報チップの式] フィール
ドで指定した式の結果で構成されます。たとえば、式がテーブル内のフィールドである場合、
情報チップはそのフィールドの値で構成されます。式がテーブル内のフィールド情報を使用す
る計算式である場合、情報チップはその計算の結果で構成されます。
[スナップ モード] - 特定のレイヤについてスナップ モード機能のオン/オフを切り替えるには、
レイヤ ツリーでレイヤを選択し、このチェック ボックスをオンまたはオフにします。
•
•
[情報チップの式] – レイヤの情報チップに表示する情報チップを制御します。テーブル内の先
頭フィールド以外も表示できます。「第 10 章 : 式の作成」を参照してください。
[オプション] タブの設定は、レイヤの表示/非表示の影響を受けません。[オプション] タブの設定
は、レイヤが現在表示されているかどうかに関係なく、確認できます。
範囲
レイヤの場合、このタブには、選択されているレイヤの範囲が表示されます。[レイヤ全体の表示]
ボタンをクリックすると、レイヤ全体が表示されます。[デフォルトの領域を表示] をクリックする
と、レイヤのデフォルト ビューが表示されます。
情報
選択されているレイヤに関する情報を表示します。テーブルの名前とパス、テーブルの種類
(MapInfo テーブルなど)、および座標系が示されます。
主題図レイヤの設定
主題図レイヤをクリックすると、レイヤ管理ウィンドウに以下のタブが表示されます。
表示/非表示
主題図レイヤを選択したとき、選択した主題図の表示は [表示/非表示] タブのオプションによって
制御されます。[表示] チェック ボックスをオンにすると、主題図レイヤが表示されます。オフに
すると、主題図レイヤは表示されません。
主題図を表示するズーム範囲または縮尺範囲を指定するには、[範囲内で表示] チェック ボックス
をオンにします。ズーム範囲を選択した場合は、最小ズームと最大ズームの距離を指定します。
これにより、主題図はこのズーム範囲内で表示されます。縮尺範囲を選択した場合は、近接の縮
尺と最遠の縮尺を指定します。これにより、主題図はこの縮尺範囲内で表示されます。
MapXtreme v7.2
457
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
主題図
主題図の種類と、その値を取得するための式を指定します。主題図を変更することもできます。
スタイルまたは凡例を変更するには、[主題図の変更] をクリックします。
ラベル レイヤの設定
レイヤ ツリーでラベル レイヤをクリックすると、レイヤ管理ウィンドウの下部に [表示/非表示] タ
ブが表示されます。ラベル レイヤを展開してラベル ソースを表示すると、[自動ラベル作成機能]、
[スタイル]、[テキスト]、[位置]、および [ルール] の各タブが表示されます。これらのタブを使用し
て、ラベル ソース内のラベルの外観と内容を制御します。
表示/非表示
ラベル レイヤを選択したとき、ラベルの表示は [表示/非表示] タブのオプションによって制御され
ます。[表示] チェック ボックスをオンにすると、ラベルが表示されます。オフにすると、ラベル
は表示されません。
ラベルを表示するズーム範囲または縮尺範囲を指定するには、[範囲内で表示] チェック ボックス
をオンにします。ズーム範囲を選択した場合は、最小ズームと最大ズームの距離を指定します。
これにより、ラベルはこのズーム範囲内で表示されます。ズーム範囲を指定する場合、最大値は
指定した値を含みません。つまり、レイヤはマップのズームが最大値よりも小さい場合にだけ表
示されます。したがって、ズームの最大値を 5000 マイルに設定し、マップを 5000 マイルちょう
どにズームした場合、レイヤは表示されません。
縮尺範囲を選択した場合は、近接の縮尺と最遠の縮尺を指定します。これにより、ラベルはこの
縮尺範囲内で表示されます。
ラベルをデフォルトの状態に戻すには、[ラベルの変更をクリア] をクリックします。このボタンを
クリックすると、ラベル ツールを使って手動で追加された各ラベルが削除され、ラベルが元の位
置に復元されます。
自動ラベル作成機能
自動ラベルを作成し、その表示を管理できます。マップの自動ラベルを生成するには、[ラベルを
自動で作成] チェック ボックスをオンにします。自動ラベルを表示するズーム範囲または縮尺範囲
を指定するには、[範囲内で表示] チェック ボックスをオンにします。ズーム範囲を選択した場合
は、最小ズームと最大ズームの距離を指定します。縮尺範囲を選択した場合は、近接の縮尺と最
遠の縮尺を指定します。これにより、自動ラベルはこの縮尺範囲内で表示されます。
MapXtreme v7.2
458
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
スタイル
ラベル テキストとラベルの線のスタイルを制御します。ラベル テキストの場合、[テキスト スタ
イル] ボックスを使用して [テキスト スタイル] ダイアログ ボックスを開きます。ラベルのフォン
ト、色、背景、およびその他のテキスト効果を指定できます。ラベルの線の場合、[ライン スタイ
ル] ボックスを使用して [ライン スタイル] ダイアログ ボックスを表示します。このダイアログで
は、ラベルの線のスタイルを設定できます。[ラベルの線] グループで、ラベルの線をなしにする
か、シンプルな線または矢印付きの線を使用するかを選択します。
L
ラベルの線は、湾曲ラベルには対応していません。MapXtreme は、MapInfo Professional で作
成されたラベルの線、またはラベルの線がカスタマイズされたラベル ツールを使用して作成
されている場合は、これを読み込むことができます。「湾曲ラベル」を参照してください。
テキスト
テーブル内のフィールドまたは派生情報からラベル テキストを作成するための式を指定できます。
位置
このタブの設定を使用して、ラベルの方向、オフセット、および回転角度を設定します。
ラベルの方向とは、ラベルのアンカー ポイントに対する相対的な位置です。いずれかのボタンを
クリックして方向を選択します。
ラベルのオフセットとは、ラベルとアンカー ポイントの間の距離 (ピクセル単位) です。
ラベルの回転角度とは、ラベルを描画する角度です。回転角度には以下の 3 つの設定があります。
•
•
•
1 つのセグメントに対して平行 - 高速道路などのライン フィーチャにラベルを付ける場合、各
ラベルが最も近い高速道路セグメントに対して平行に描画されるようにしたいときは、このオ
プションを選択します。
セグメントに沿ってラベルを曲線化 - 高速道路などのライン フィーチャにラベルを付ける場合、
ラベルのテキストが高速道路の形状に沿って表示されるようにしたいときは (つまり、湾曲ラ
ベルを使用するには)、このオプションを選択します。レイヤ管理ウィンドウの [スタイル] タブ
でアンチエイリアス処理を有効にすると、湾曲ラベルをより美しく描画することができます。
詳細については、「湾曲ラベル」を参照してください。
角度の指定 – ラベルの角度を度単位で指定します。たとえば、すべてのラベルが水平に描画さ
れるようにするには、ゼロを指定します。
MapXtreme v7.2
459
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
ルール
マップでラベルを表示するための特定の条件を設定できます。
[ 重複テキストを許可 ] "Portland, OR"、"Portland, ME" など、異なるオブジェクトに重複するラベ
ルを表示する場合は、このチェック ボックスをオンにします。このオプションは、道路マップで
道路セグメントに個別にラベルを描画するときも使用します。
[ テキストのオーバーラップを許可 ] ラベルを別のラベルの上に描画する場合は、このチェック
ボックスをオンにします。マップ上で優先度の高いラベルの上に重なるラベルは表示されませ
ん。
[ 部分的にラベル付け ] 中心点がマップ ウィンドウに表示されない折れ線およびオブジェクトにラ
ベルを描画する場合は、このチェック ボックスをオンにします。
[最大ラベル数] 表示するラベルの最大数を指定します。たとえば、最も突出したデータ (人口が最
大、収入が最大、成長率が最大など) がテーブルの先頭になるようにデータを並べ替えるものとし
ます。このようなデータの上位 100 レコードのみを表示するには、[最大ラベル数] ボックスに 100
を入力します。100 レコードより下のレコードにはラベルが表示されないため、表示される 100
ラベルはマップ上でより目立ちます。
[ ラベルの優先度の式 ] この式フィールドはオプションです。この式フィールドを空にした場合、
1 つのラベル ソース内のフィーチャは予期しない方法でラベル付けされます。たとえば、一部の
小都市にはラベルが付けられ、一部の大都市にはスペースの余裕がないためにラベルが付けられ
ない場合があります。式を指定した場合 (数値式である必要があります)、マップの表示部分にある
各フィーチャについて式が計算され、大きな値を持つフィーチャに対して高いラベル付け優先度
が与えられます。式を指定するには、[設定] ボタンをクリックします。
MapXtreme v7.2
460
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
たとえば、都市を表すポイント フィーチャを含む WorldCapitals レイヤのラベルを設定するとしま
す。人口の多い都市には、高いラベル付け優先度を割り当てます。この場合、次のようなラベル
付けの式を指定します。
cap_pop
cap_pop フィールドは州都を表します。cap_pop のラベルの優先度の式を指定するとき、人口の
多い都市に高いラベル付け優先度が割り当てられるように指定します。その結果、人口の多い都
市に優先的にラベルが付けられ、それ以外の都市にはスペースに余裕があるときにだけラベルが
付けられます。
[ テーブルの優先度の式 ] この式フィールドはオプションです。ラベル レイヤには複数のラベル
ソースを含めることができます。たとえば、World Countries (世界の国々) のラベル セットを表す
ラベル ソースと、World Capitals (各国の首都) のラベル セットを表すラベル ソースを使用できま
す。デフォルトでは、リストの最上位にあるラベル ソースが最も高い優先度を持ちます。ラベル
ソースに高い優先度を割り当てたい場合は、そのラベル ソースをリストの上位に移動するか (レイ
ヤ管理ウィンドウ内のラベル ソースのリスト)、ラベル ソースごとにテーブルの優先度の式を指定
できます。
たとえば、World Countries ラベル ソースにテーブルの優先度の式として 10 を指定し、World
Capitals ラベル ソースにテーブルの優先度の式として 5 を指定した場合、国のラベルは首都のラ
ベルより優先度が高くなります。
グループ レイヤの設定
レイヤ管理ウィンドウでグループ レイヤ ノードを強調表示すると、[表示/非表示] タブが表示され
ます。ここでは、グループ内のすべてのレイヤに適用される表示/非表示の設定を制御します。
グループ内の各レイヤに異なる表示/非表示の設定を適用するには、グループ レイヤの下に表示さ
れるレイヤを強調表示し、表示される [表示/非表示] タブを変更します。
スタイル オーバーライドの設定
レイヤ管理ウィンドウでスタイル オーバーライド レイヤを強調表示すると、[表示/非表示] タブが
表示されます。ここでは、スタイル オーバーライドの表示/非表示と、ズーム範囲を制御します。
表示されている [スタイル] ボタンを使用すると、レイヤのエリア、ライン、シンボル、およびテ
キストのスタイルを設定できます。
[標準] と [重ね合わせ] のいずれかの描画モードを選択します。[標準] 描画モードは、スタイル
オーバーライドを使用してレイヤを描画します。[重ね合わせ] は、レイヤの上にスタイル オー
バーライドを描画します。
経緯度線レイヤの設定
経緯度線レイヤをクリックすると、レイヤ管理ウィンドウの下部に、以下のタブが表示されます。
MapXtreme v7.2
461
開発者ガイド
第 23 章 : ワークスペース マネージャ
レイヤの管理
表示/非表示
ラインとラベルのプロパティ
ライン間隔
MapXtreme v7.2
462
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
範囲
このタブで変更を加えた場合は、[範囲を設定] をクリックして変更を有効にしてください。
経緯度線の詳細については、「経緯度線レイヤ」を参照してください。
ワークスペース マネージャの機能の使用
ここでは、ワークスペース マネージャの機能の一部を適用してマップ描画機能を拡張する方法を
説明します。次のトピックで構成されます。
•
「GDI+ による透過性とアンチエイリアスを用いたレンダリングの拡張」
•
「半透明効果の作成」
•
「湾曲ラベル」
•
「経緯度線レイヤ」
GDI+ による透過性とアンチエイリアスを用いたレンダリングの拡張
Microsoft Windows GDI+ は Windows XP または Windows Server 2003 オペレーティング システム
に含まれる機能で、2 次元のベクトル グラフィックスやイメージ、およびタイポグラフィを可能
にします。GDI+ によって新しい機能が追加され、また既存の機能が最適化されるため、Windows
の Graphics Device Interface (GDI)、すなわち旧バージョンの Windows に含まれるグラフィック
デバイス インターフェイスの機能が強化されます。MapXtreme の GDI+ レンダリング機能を利用
することで、半透明のラベル、主題図、レイヤを作成できます。また、アンチエイリアスも適用
できるため、高解像度レンダリングを低い解像度で表示するときに、直線と曲線の縁やリージョ
ンの境界線がぎざぎざになるのを防ぎ、滑らかにすることができます。
GDI+ レンダリングは MapInfo.Mapping.DrawingAttributes と MapInfo.Mapping.LegendDrawing の
属性クラスに含まれる 2 つの新しいプロパティ、EnableTranslucency および SmoothingMode を
使って、API で有効にすることができます。また、ワークスペース マネージャのレイヤ管理ウィ
ンドウの [スタイル] タブを使ってこれらのプロパティを有効にすることもできます。
MapXtreme v7.2
463
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
L
アンチエイリアスは透過性が有効な場合のみ使用できます。これらはいずれもワークス
ペース マネージャのユーザ インターフェイスを使って設定するか、プログラムから設定し
ます。[アンチエイリアスを使用] をオンにした場合、[透過性を有効化] が自動的に選択され
ます。[透過性を有効化] をオフにした場合は、[アンチエイリアスを使用] も自動的にオフに
なります。
次のマップは、一般道路と高速道路におけるラベルの透過性とアンチエイリアスの効果を示して
います。アンチエイリアスが有効になっているため、リージョンの境界線や折れ線が滑らかに表
示されていることがわかります。
GDI+ で拡張される前のレンダリング:GDI+ で拡張された後のレンダリング
すべてのスタイル ダイアログ (ライン スタイル、エリア スタイル、シンボル スタイル、テキスト
スタイルなど) にある透過性のトラックバーでは、ボックスに数値を選択して、0 から 100 までの
パーセンテージ値を設定できます。ただし、このトラックバーは透過性が有効になっていなけれ
ば使用できません。
MapXtreme v7.2
464
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
色の透過性をプログラムから変更するには、System.Drawing.Color.FromArgb() メソッドを使用し
ます。このメソッドでは、適用する色のアルファ値を指定できます (GDI+ では、アルファ チャネ
ルは透過性情報のために予約済みのピクセル カラー データに含まれます)。詳細については、
.NET のドキュメントを参照してください。
透過性はすべての色でサポートされており、透過性が有効か無効かにかかわらず、ツールは正し
く機能します。[透過性を有効化] のオプションは、半透明のラスタ イメージの表示やエクスポー
トには影響しませんが、印刷する場合は有効にしておく必要があります。
L
透過性やアンチエイリアス処理を有効にして高品位のマップをレンダリングすると、レン
ダリング速度が低下する場合があります。この影響は、3 つ以上の透過レイヤを含んだ
マップで特に顕著に現れます。
半透明効果の作成
マップ フィーチャの色、ラベルの色、または主題図レイヤのスプレッド スタイルの色に半透明効
果を適用すると、マップの他のフィーチャがその色の下に透けて見えるようになります。
マップに半透明効果を適用する方法
次のマップには、半透明な都市境界領域が含まれています。“Watervliet” というラベルの付いた
領域の一部がオーバーラップしており、ラベルの領域の中でオーバーラップされていない部分
(“Watervliet” の最初の 2 文字の部分) とされている部分の表示が異なっていることがわかりま
す。このラベル自身も、マップの他の部分に対して半透明に置かれています。
MapXtreme v7.2
465
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
レイヤに半透明効果を追加するには、レイヤの元のスタイルを変更するために、スタイルのオー
バーライドを使用します。
L
プログラム上でオーバーライド スタイル修飾子を重ね合わせる (OverrideType = AddNew)
と、最初にフィーチャのスタイルが描画されます。重ね合わせる方のスタイルが半透明な
ので、フィーチャもその下から透けて見えます。
1. ワークスペース マネージャのレイヤ管理ウィンドウのレイヤ ツリーで、"root" ノードを選択しま
す (このノードはマップに対応します)。[スタイル] タブで、[透過性を有効化] を選択します。
2. 透過性を追加するレイヤを選択し、それをリストの一番上に移動してから、スタイル オーバー
ライドを追加します。
3. スタイル オーバーライドに対する [表示/非表示] タブで、そのレイヤのオブジェクトに固有のス
タイル ボタンをクリックします。この例の場合は、[領域のスタイル] ボタンをクリックします。
MapXtreme v7.2
466
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
[領域のスタイル] ダイアログが表示されます。
4. 透過性トラックバーを使用して、適用する透過性のレベルを選択します。色ごとに、異なる透
過性レベルを選択できます。
ラベルに半透明効果を適用する方法
以前の例でも、ウォーターマークによく似た半透明のラベルが表示されていました。半透明の都
市境界領域で表示をオフにすると、ラベルは次のように表示されます。
MapXtreme v7.2
467
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
この例のように、マップの上に半透明のラベルを追加するには、以下のように操作します。
1. ワークスペース マネージャのレイヤ管理ウィンドウのレイヤ ツリーで、"root" ノードを選択しま
す (このノードはマップに対応します)。[スタイル] タブで、[透過性を有効化] を選択します。
2. レイヤ管理ウィンドウでラベル ソースを選択し、[スタイル] タブに移動します。
3. [テキスト スタイル] ボタンをクリックして、[テキスト スタイル] ダイアログを表示します。
4. 透過性トラックバーを使用して、ラベルの色に適用する透過性のレベルを選択します。上の例
では、フォアグラウンドのテキストの透過性が 80% に設定されています。
主題図に半透明効果を適用する方法
主題図マップには、半透明効果を適用できます。次の例は、都市境界図レイヤに適用されたレン
ジ主題図を表しています。このレイヤは、他のレイヤに重ねて配置されています。
透過性を有効にした場合、主題図の開始範囲と終了範囲 (Bin) に対して透過値を選択することで、
色を自動的に変化させることができます。これにより、主題図の開始 Bin と終了 Bin の間にも、自
動的に透過値が適用されます。たとえば、前出のマップの主題図では、開始 Bin には透過値75% (
灰色) が、終了 Bin には透過値 50% (赤色) が適用されています。この主題図には 3 つの Bin が存在
するため、中間の Bin には自動的に透過値 63% (50 と 75の間で均等に配分) が適用されます。
湾曲ラベル
湾曲ラベルとは、ラインの湾曲に沿って表示されるラベルのことです。湾曲ラベルを使うことで、
道路や河川など、ラインから構成されるマップ フィーチャの外観を美しくすることができます。
MapXtreme v7.2
468
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
湾曲ラベルをワークスペース マネージャで作成するには、ラベル レイヤを選択し、[位置] タブで [
セグメントに沿ってラベルを曲線化] を選択します。API を介する湾曲ラベルのレンダリングの詳
細については、『MapXtreme 開発者リファレンス』の ILayout インターフェイスのセクションを
参照してください。
MapXtreme は、マップ内のすべての孤および折れ線レコードに対する湾曲ラベルを、湾曲してい
ないラベルと同じように作成しようとします。例えば道路マップでは、道路がいくつもの折れ線
や長い折れ線で作成されている場合があります。どの湾曲ラベルを作成し、それをどこに表示す
るかは、折れ線の長さと数、湾曲ラベルを作成するかどうかを決定するルール、およびラベル作
成オプションの選択の、すべての要因によって変わってきます。
レイヤ データ内の折れ線や弧のセグメントの中には、ラベル名のエントリを含まないものもあり
ます。その場合、MapXtreme ではセグメントのラベルを表示できません。
MapXtreme で湾曲ラベルを表示できるかどうかは、以下の多数のルールによって決定します。
•
•
•
•
•
•
•
•
•
•
•
•
MapXtreme では、TrueType フォントを使用した湾曲ラベルだけを描画できます。TrueType 以
外のフォントを選択した場合、同等の TrueType フォントが代わりに使用されるため、選択し
たラベルが予想どおりに表示されない場合があります。また、TrueType 以外を使用した水平
ラベルを湾曲ラベルに変更した場合、フォントが置き換えられるために、変更後のラベルの表
示が変わる可能性があります。
ラベル文字列の部分が、ラベルを作成する弧や折れ線の長さに合っている必要があります。
合っていない場合、MapXtreme は、ラベルが長すぎると判断し、ラベルを破棄します。
折れ線のぎざぎざがひどいと、MapXtreme で湾曲ラベルを描画できない場合があります。た
だし、これは線の曲率によって変わります。
道路のセグメントはまっすぐに見えても、ラベルが湾曲する場合があります。その理由は、道
路セグメントの折れ線データに、そのままのズーム レベルでは表示されない湾曲が含まれるか
らです。表示上ではわからない湾曲であっても、ラベルは道路の湾曲に従って作成されます。
マップを十分に近い距離まで拡大してみれば、道路の湾曲が表示されるはずです。
自分自身に向けて湾曲しているラベルは破棄され、表示されません。
湾曲ラベルも、湾曲していないラベルも、オーバーラップの検出、重複テキスト、セグメント
の部分的なラベル付けのルールは同じです。これらの各ルールによって、ラベルがどのよう
に、いつ表示されるかが変わります。
湾曲ラベルは [ラベル] ツールを使用して、弧や折れ線に沿ったどのポイントでも作成できます。
湾曲ラベルを他のラベルと同じようにドラッグすることはできません。ただし、[ラベル] ツー
ルを使用して位置を変更することは可能です。
湾曲ラベルには、[ラベルの線] コントロールは使用できません。
湾曲ラベルと非湾曲ラベルは、ワークスペースのレイヤに保持されます。
湾曲ラベルに下線を付けることはできません。
湾曲ラベルは透過性やアンチエイリアスが有効かどうかにかかわらず、常に滑らかに表示され
ます。
湾曲ラベルの双方向文字列のサポート
湾曲ラベルは右から左に記述する言語でもサポートされます。Windows に付属している Uniscribe
ライブラリのサポートが追加されました。このライブラリでは、コンテキスト グリフのシェーピ
ングおよびヘブライ語やアラビア語などの双方向スクリプトの並び替えを行います。このメソッ
ドにより、複雑なスクリプトを使用して文字列を解析し、別々のまとまりに分割することで、表
示用に並べ替えることができます。
MapXtreme v7.2
469
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
MapInfo Professional で作成された湾曲ラベル
MapInfo Professional で使用可能な湾曲ラベルの表示の設定は、.MWS ワークスペースに保存して
MapXtreme に読み込むことができます。MapInfo Professional で行われた湾曲ラベルの位置の変
更 も .MWS ワ ー ク ス ペ ー ス に 保 存して MapXtreme に読み込むことができます。以下に、
MapXtreme に読み込むことができる表示の設定と位置の変更について説明します。
•
MapXtreme は、ワークスペース マネージャでの湾曲ラベルのラベルの線の作成には対応して
いませんが、MapInfo Professional で作成されたラベルの線、またはカスタマイズされたラベ
ル ツールを使用して作成されたラベルの線を読み込むことはできます。
•
MapXtreme は、ラインの端点のカスタム (ユーザ定義の) 位置を含むラベルについては引出し
線を読み込むことができます。たとえば、MapInfo Professional でラベルの端点を移動して
ワークスペース (.MWS) に保存すると、その端点は、MapXtreme でワークスペースを開いたと
きに意図したとおりに位置付けられます。MapXtreme は、カスタムのラインの終端の読み込
みと保存は行いますが、その作成はサポートしていません。
MapInfo Professional で作成されて MWS に保存された湾曲ラベルは、MapXtreme でも同じ位
置に表示されます。
MapInfo Professional で新しい場所にドラッグされたラベルは、MapXtreme では湾曲ラベルと
して表示されることがあります。ラベルの変更が .MWS ワークスペースに保存され、そのワー
クスペースが MapXtreme で開かれたときに、湾曲ラベル オプションが有効になっている場
合、ラベルは湾曲ラベルとして表示されます。ただし、MapInfo Professional でラベルがド
ラッグされてから、ワークスペースに保存される前に回転された場合、MapXtreme はラベル
を湾曲化しません。これは、MapXtreme は、湾曲ラベルの設定よりも、MapInfo Professional
が変更したラベルの角度を優先するためです。
•
•
湾曲ラベルの作成
曲線に沿ってラベルを配置するには
1. ワークスペース マネージャで、ラベルを変更するマップを開きます。
2. 変更対象のラベルを含んだレイヤ ソースを強調表示します。
3. ラベルが表示可能であることを確認します。
4. [位置] タブをクリックします。湾曲に沿ってラベルを表示するには、回転のセクションで [セグ
メントに沿ってラベルを曲線化] を選択します。
MapXtreme v7.2
470
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
5. 必要であれば、[位置] タブで次の方向ボタンを押し、ラベルのアンカー ポイントに対する相対
位置を設定します。
左ボタン: 湾曲ラベルは、弧/折れ線の開始位置に左揃えで配置されます。
中央: 湾曲ラベルは、弧/折れ線の中間点に配置されます。
右ボタン: 湾曲ラベルは、弧/折れ線の終端位置に右揃えで配置されます。
L
ラベルの配置には、折れ線の長さが影響します。折れ線が長いほど、想定したとおりに
ラベルが表示されます。
湾曲ラベルの再配置
湾曲ラベルの位置を変更するには、メイン ツールバーにあるラベル ツールを使用します。変更対
象となるラベル ソースの [位置] タブで、[セグメントに沿ってラベルを曲線化] オプションがオン
になっていることを確認してください。
1. ラベルを移動するレイヤを一覧から選択します。
2. [オプション] タブの [選択可能] チェック ボックスをオンにします。
3. 湾曲ラベルを移動するラベル ソースを選択します。
4. メイン ツールバーの
(ラベル ツール) をクリックします。
5. ラベルの移動先の線をクリックします。
6. ラベルが目的の位置に配置されるまで、ラベルの新しい場所をクリックします。
L
MapXtreme v7.2
選択したセグメントにラベル名が関連付けられていない場合、ラベルは表示されません。
471
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
経緯度線レイヤ
経緯度線はマップに重ね合わせ、一定の間隔 (5 度ごと、15 度ごとなど) で表示されるグリッド (緯
度と経度の線) です。基準の枠組みを確立するときに使用します。
多くの点で、経緯度線は他のレイヤとまったく同じように機能しますが、 以下の点で他の種類の
レイヤとは異なります。
•
•
•
経緯度線レイヤを他の種類のレイヤのように編集することはできない。つまり、新しいフィー
チャを追加できない。
経緯度線にラベル スタイルや位置を設定することは可能だが、経緯度線レイヤにラベル レイ
ヤを作成することはできない。
経緯度線レイヤに主題図レイヤを作成することはできない。
経緯度線レイヤの追加
経緯度線はレイヤ管理ウィンドウから直接追加できます (マップ ノードを右クリックしてコンテキ
スト メニューを使います)。
MapXtreme v7.2
472
開発者ガイド
第 23 章 : ワークスペース マネージャ
ワークスペース マネージャの機能の使用
デフォルトでは、経緯度線の間隔と範囲は、マップ ウィンドウのズームとサイズによって決まり
ます。したがって、経緯度線レイヤをマップに追加すると、経緯度線はズーム レベルに関係なく
表示されます。
経緯度線レイヤの管理
経緯度線レイヤを追加した後、レイヤ管理ウィンドウから以下のさまざまな方法を使ってレイヤ
を管理およびカスタマイズすることができます。
•
経緯度線レイヤの表示/非表示、およびズーム/縮尺の設定の制御
•
•
主要な経緯度線とそれ以外の経緯度線の間隔の表示と設定
経緯度線のラベルや線の表示/非表示およびスタイルの制御
•
経緯度線の範囲 (東、西、南、北) の指定 (度、フィート、またはメートルで)
•
•
レイヤ管理ウィンドウ内でのレイヤの順番の上下移動
経緯度線レイヤの削除 (コンテキスト メニューを使う方法でのみ可能)
•
複数の経緯度線レイヤおよびグループ レイヤの作成
詳細については、「経緯度線レイヤ」を参照してください。
経緯度線レイヤは次のように経緯度線アイコンで示されます。
MapXtreme v7.2
473
開発者ガイド
24
GeoDictionary マネー
ジャの使用
GeoDictionary マネージャは、マッピング アプリケーションで使用できるよう
に MapXtreme に用意されているユーティリティです。この章では、このツー
ルの使用方法について説明します。
この章の構成
Š
Š
Š
Š
GeoDictionary マネージャの使用 . . . . . . . . .
GeoDictionary マネージャの変更点 . . . . . . . .
GeoDictionary マネージャのユーザ インターフェイス
GeoDictionary ファイル . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
475
475
475
479
第 24 章 : GeoDictionary マネージャの使用
GeoDictionary マネージャの使用
GeoDictionary マネージャの使用
GeoDictionary マネージャ アプリケーションは、GeoDictionary ファイルの操作をサポートするよ
うに設計されています。GeoDictionary は、自動データバインド時にアプリケーションから比較で
きる MapInfo のテーブルに関する登録情報を含む XML ファイルです。GeoDictionary には、比較
できる、または比較する MapInfo のテーブルだけを登録します。
アプリケーションで使用する .tab ファイルをすべて GeoDictionary に登録する必要はありません。
不要なファイルを登録すると、オーバーヘッドが発生します。登録が必要なのは、比較対象とす
るテーブルだけです。
GeoDictionary マネージャの変更点
MapXtreme の GeoDictionary マネージャは、MapX、および旧バージョンの MapXtreme に含まれ
ていたユーティリティに似ています。最大の違いは、基本となるファイル (*.dct) が XML ファイル
になり、テキスト エディタまたは XML エディタで編集できるようになったことです。
GeoDictionary マネージャのユーザ インターフェイス
ここでは、GeoDictionary マネージャのユーザ インターフェイスについて説明します。
GeoDictionary マネージャの実行
レイヤを手動で登録するときに GeoDictionary マネージャを実行するには、以下の手順に従います。
•
[スタート] > [すべてのプログラム] > [MapInfo] > [MapXtreme] > [GeoDictionary マネージャ] を
クリックします。
GeoDictionary マネージャが表示されます。最後に開いていたファイルが起動時に再読み込
みされます。
MapXtreme v7.2
475
開発者ガイド
第 24 章 : GeoDictionary マネージャの使用
GeoDictionary マネージャのユーザ インターフェイス
要素
GeoDictionary
説明
[GeoDictionary] 編集ボックスには、現在の管理対象の GeoDictionary のフ
ル パスが表示されます。編集ボックスの右にあるボタンをクリックする
と、別の GeoDictionary を選択して管理できます。GeoDictionary のバイナ
リ ファイルと XML ファイルの両方を開くことができますが、保存される
のは XML 形式だけです。
登 録 さ れ て い る [登録されているテーブル] リスト ボックスには、GeoDictionary に登録され
テーブル
ているすべてのテーブルのフレンドリ名のリストが表示されます。登録を
抹消、またはプロパティを変更するには、テーブルを強調表示します。
テーブルをダブルクリックすると、プロパティを編集できる [プロパティ]
ダイアログ ボックスが開きます。
登録
[登 録] ボタ ンをクリックすると、[ファイルの種類] コンボ ボックスが
"MapInfo テーブル (*.tab)" に設定された状態で標準の [ファイルを開く] ダ
イアログ ボックスが開きます。ファイル ピッカーでテーブルを選択する
と、そのテーブルの [テーブルのプロパティ] ダイアログ ボックスが開きま
す。[ファイルを開く] ダイアログ ボックスでファイルを複数選択した場合
は、テーブルごとに [プロパティ] ダイアログ ボックスが開きます。
登録抹消
このボタンをクリックすると、選択したテーブルが GeoDictionary から削
除されます。Shift キーを押しながらクリックすると、登録を抹消するテー
ブルを複数選択できます。[登録抹消] ボタンをクリックしても、ファイル
はディスクから削除されません。
プロパティ
[プロパティ] ボタンをクリックすると、選択されているテーブルの [テーブ
ルのプロパティ] ダイアログ ボックスが開きます。この後の [テーブルのプ
ロパティ] ダイアログ ボックスの説明を参照してください。
MapXtreme v7.2
476
開発者ガイド
第 24 章 : GeoDictionary マネージャの使用
GeoDictionary マネージャのユーザ インターフェイス
要素
説明
新規作成
[新規作成] ボタンをクリックすると、画面上のフィールドの内容が消去さ
れ、新しい GeoDictionary ファイルを作成できます。この GeoDictionary
ファイルを閉じようとすると、変更内容を保存するかどうかの確認が求め
られます。
保存
[保存] ボタンをクリックすると、現在のファイルが、ファイルを開いたと
きの形式にかかわらず XML 形式で保存されます。
別名で保存
[別名で保存] ボタンをクリックすると、現在のファイルを別の名前で、ま
たは別の場所に保存できます。
終了
[終了] ボタンをクリックすると、アプリケーションが終了します。
GeoDictionary ファイルを変更した場合は、変更内容を保存するかどうかの
確認が求められます。
[テーブルのプロパティ] ダイアログ ボックスを使用して、比較するテーブルのプロパティを設定
します。[テーブルのプロパティ] ダイアログ ボックスを開くには、[プロパティ] ボタンをクリック
するか、[登録されているテーブル] リストで任意のテーブル名をダブルクリックします。
MapXtreme v7.2
477
開発者ガイド
第 24 章 : GeoDictionary マネージャの使用
GeoDictionary マネージャのユーザ インターフェイス
要素
説明
MapInfo テーブル
MapInfo のテーブルが GeoDictionary と同じディレクトリにある
場合はそのファイル名、それ以外の場合は相対パス名が表示され
る読み取り専用の編集ボックスです。ファイルが別のドライブま
たはボリュームにある場合は、フル パスが表示されます。
概要
このフィールドでは、テーブルのフレンドリ名を変更できます。
.TAB ファイルの Description タグ、または Description タグが見つ
からなかった場合はファイル名がデフォルトで表示されますが、
名前は変更できます。GeoDictionary マネージャでの概要の変更
は GeoDictionary に保存されるだけで、テーブル自体には反映さ
れません。このため、CD-ROM 上のデータなど読み取り専用デー
タを GeoDictionary マネージャで簡単に使用できます。
一致率
このフィールドには、最初は GeoDictionary のデフォルト値が挿
入されます。この値を変更すると、特定のテーブルについて値を
変更できます。値は 1 ~ 100 の間である必要があります。
フィールド情報
このリスト ボックスには、テーブル内のすべてのインデックス付
きフィールドのリストが表示されます。特定のフィールドのボッ
クスがオンになっている場合、比較処理時にそのフィールドが検
索されます。
検索対象の調整に使用する このフィールドでは、特定のインデックスで一意ではないデータ
テーブル
との完全一致を判別するための調整テーブルを設定できます。
US Counties などの一部のテーブルには、一意ではないインデッ
クス付きフィールドがあります。この場合、データとの完全一致
を判別するために調整テーブルが必要です。テーブルに一意では
ないインデックス付きフィールドがある場合は、一意のエントリ
を見つけるために比較に使用するテーブルをこのフィールドで指
定します。
このテーブルが属する関連 このリスト ボックスには、この特定のテーブルが含まれる特定
マップ
のワークスペース、GeoSet、またはその他のファイルが表示さ
れます。
追加
GeoSet、ワークスペース、または特定の Tab ファイルに関連付け
るその他のファイルを選択できる標準のファイル ピッカーが表示
されます。1 つ以上のファイルを選択すると、関連するマップの
リストに追加されます。Shift キーまたは Control キーを押しなが
らクリックすると、複数のファイルを選択できます。
削除
選択されている Geoset、ワークスペース、またはその他のファイ
ル名を、関連付けられているマップのリストから削除します。
MapXtreme v7.2
478
開発者ガイド
第 24 章 : GeoDictionary マネージャの使用
GeoDictionary ファイル
GeoDictionary ファイル
GeoDictionary ファイル (*.dct) は、GeoDictionary マネージャを使用せずに手動で変更できます。
XML を理解し、簡単に記述できる場合は、この方法が便利です。.dct ファイルは純粋な XML です。
サンプルの .dct file
GeoDictionary ファイルのサンプル GeoDic_US.dct を次に示します。このファイルは、構造の例と
して示す簡単な GeoDictionary です。
<?xml version="1.0" encoding="Windows-1252" standalone="yes"?>
<!--GeoDictionary file-->
<GeoDictionary>
<DefaultMatchThreshold>80</DefaultMatchThreshold>
<MatchTables>
<MatchTable>
<TablePath>US_CNTY.TAB</TablePath>
<TableDescription>US county boundary</TableDescription>
<RefineTableName>USA.TAB</RefineTableName>
<MatchThreshold>90</MatchThreshold>
<AssociatedMaps>
<AssociatedMap>USA.GST</AssociatedMap>
</AssociatedMaps>
<MatchFields>
<MatchField>
<FieldName>County</FieldName>
</MatchField>
<MatchField>
<FieldName>Fips_code</FieldName>
</MatchField>
</MatchFields>
</MatchTable>
</MatchTables>
</GeoDictionary>
構造内の各要素は、次の表に示す GeoDictionary マネージャの個々のフィールドとコントロールに
対応します。
XML 要素
[ テーブルのプロパティ ]
ダイアログ ボックスの
フィールド
説明
GeoDictionary
なし。
ファイルのルート要素。
DefaultMatchThreshold
なし。
特定のテーブルの MatchThreshold が定義されてい
ない場合の比較のしきい値。
この値は、GeoDictionary マネージャを使用して設
定できません。
MapXtreme v7.2
479
開発者ガイド
第 24 章 : GeoDictionary マネージャの使用
GeoDictionary ファイル
XML 要素
[ テーブルのプロパティ ]
ダイアログ ボックスの
フィールド
説明
MatchTables
なし。
登録された MatchTable のコンテナ要素。[登録さ
れているテーブル] リストの項目ごとに 1 つの
MatchTable 要素が必要です。
MatchTable
MapInfo テーブル
比較する各テーブルのファイル名。
TablePath
MapInfo テーブル
各 MatchTable の相対パス。
TableDescription
[概要] フィールド、および MatchTable のフレンドリ名。
メイン ダイアログ ボック
スの [登録されているテー
ブル] リストに表示される
名前
RefineTableName
検索対象 の調整に使用す 比較の調整に使用する関連テーブル。
るテーブル
MatchThreshold
一致率
AssociatedMaps、
AssociatedMap
このテー ブルが属 する関 この特定のテーブルが含まれる特定のワークス
連マップ
ペースおよび GeoSet。
MatchFields
なし。
この MatchTable の比較のしきい値。指定がない場
合は DefaultMatchThreshold が使用されます。
MatchField 要素と FieldName 要素のコンテナ。
MatchField、FieldName [フ ィ ー ル ド 情 報] リスト リスト ボックスで、自動比較とバインド時の検索
ボックス
対象として選択された各項目。
MapXtreme v7.2
480
開発者ガイド
MapXtreme アプリケー
ションを作成および展開す
る方法
この付録は、MapXtreme アプリケーションを簡単に作成、パッケージ化、お
よび展開する方法を示すチュートリアルになっています。このチュートリアル
を終了すると、適切にインプリメントされたマッピング アプリケーションを
開発、パッケージ化、および展開するすべてのステップを実行したことになり
ます。
このチュートリアルは、読者が Visual Studio をインストール済みで、その使
用方法を理解していることを前提に作成されています。Visual Studio .NET に
ついてわからない点がある場合は、Microsoft MSDN Web サイトに多くの情報
が掲載されていますのでご覧ください。
msdn.microsoft.com/developerscenter/ を参照してください。また、
MapXtreme がインストールされていることも必要です。このマニュアルに記
載されているコード例は、Visual Basic を使用してインプリメントされていま
す。多くのサンプル アプリケーションでは、C# .NET サンプルも提供されて
います。
この付録の構成
Š
Š
Š
MapXtreme サンプルのカスタマイズ . . . . . . . . . . . . 482
デスクトップ アプリケーションの作成 . . . . . . . . . . . 482
Web アプリケーションの作成 . . . . . . . . . . . . . . . 492
A
付録 A: MapXtreme アプリケーションを作成および展開する方法
MapXtreme サンプルのカスタマイズ
MapXtreme サンプルのカスタマイズ
この付録には、次の 2 つのチュートリアルが含まれています。
•
「デスクトップ アプリケーションの作成」
•
「Web アプリケーションの作成」
この 2 つのチュートリアルを進めることで、MapXtreme デスクトップ アプリケーションと Web
アプリケーションのカスタマイズ方法を学び、展開の準備をすることができます。
デスクトップ アプリケーションの作成
このデスクトップ アプリケーションは、MapXtreme に付属する主題図サンプル アプリケーション
の 1 つを基に作成します。このサンプル アプリケーションは、既に使用可能なマッピング アプリ
ケーションです。簡単な変更を加えるだけで、自分の目的に合わせてカスタマイズできます。こ
のチュートリアルで解説する変更方法を基本にすれば、どのようなデスクトップ MapXtreme プロ
ジェクトもカスタマイズすることができます。MapXtreme に付属しているすべてのサンプル アプ
リケーションは、製品に含まれているマップ アプリケーション テンプレートから作成されていま
す。詳細については、「Visual Studio でのアプリケーションの作成」を参照してください。
サンプル アプリケーションの実行
まずは ThemeLegend アプリケーションを実行して、どのように表示されるかを確認しましょう。
1. Visual Studio で、[ファイル] > [開く] > [プロジェクト/ソリューション] を選択し、ThemeLegend
という名前のサンプル アプリケーションに対応するプロジェクトを開きます。このプロジェクト
のデフォルトのパスは次のとおりです。
C:\Program Files\MapInfo\MapXtreme\7.x.x\Samples\VisualStudio\Desktop\
Features\ThemeLegend\vb\ThemeLegendVB.vbproj
(ここで、x は使用する MapXtreme のバージョン番号です。)
2. [デバッグ] > [デバッグ開始] を選択するか、F5 を押して、アプリケーションを実行します。
MapXtreme v7.2
482
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
アメリカ合衆国の標準的地図が表示されます。これは、各州の土地面積に基づく主題図を表し
ています。大きな州ほど濃い青色で表示され、小さな州は薄く表示されます。凡例には、その
色が表す土地面積の範囲が示されます。
このアプリケーションに付属するツールを使って、いくつか基本的な機能を実行できます。
テーブルを開くことや、特定のリージョンの拡大または縮小、マップ上のリージョンの選択、
マップの移動を行えます。さらに、[レイヤの管理] を使用して、各レイヤに特定の設定を適
用することもできます。アプリケーションの動作方法や、ユーザへの表示内容を確認するため
に、ツールを実際に使用してみてください。
3. それが終わったら、アクティブな Form1 ウィンドウを閉じ、アプリケーションを終了して、デ
ザイン モードに戻ります。
アプリケーションの変更
次に、サンプル アプリケーションのカスタマイズ方法を説明するために、ThemeLegend コードに
いくつか変更を加えます。このアプリケーションの次の要素を変更します。
•
データ ソース
•
レンジの数 (Bin)
•
•
•
•
レンジの種類
レンジの色
凡例の位置
ツールバー
1. Visual Studio で、カーソルをソリューション エクスプローラに移動し、MapForm1.vb を右ク
リックします。[コードの表示] を選択して、コード ページを表示します。
デザイン モードで MapForm1.vb を表示している場合には、フォーム上の任意の場所を右ク
リックして [コードの表示] を選択します。
L
このチュートリアルで説明するサンプル アプリケーションはすべて、MapXtreme ディ
ストリビューション CD に含まれています。参照されている行番号は、各自のインス
トールにおけるコードと、完全には一致しない場合があります。
2. 新しいタブが追加され、アプリケーション コードが表示されます。スクロールしながらコード
ページに目を通し、コードを確認してください。アプリケーションの処理の多くは、Form1()
クラスで実行されていることに注意してください。ここでは、このクラスに変更を加えます。
3. 主題図の基本となるデータ ソースを変更します。それには、アプリケーションで使用するテー
ブルの名前を変更し、別の FeatureLayer を指定する必要があります。次の変更を加えます。
•
210 行目で、テーブル名を usa.tab から mexico.tab に変更します。
USA のマップではなく、メキシコのマップが読み込まれます。
•
218 行目で、FeatureLayer を usa から mexico に変更します。
4. 以下の図で、コードの変更箇所を赤い四角で囲んで示しています。
MapXtreme v7.2
483
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
5. [デバッグ] > [デバッグ開始] を選択して (または F5 を押して)、アプリケーションを実行し、変
更を確認します。作業が終わったら、Form1 ウィンドウを閉じます。
同 じ 種 類 の 主 題 図 が、メ キ シ コ の デ ー タ を 使 用 し て 作 成 さ れ ま す。テ ー ブ ル の 名 前 と
FeatureLayer を変更するだけで、この主題図に適合する任意のデータ ソースを指定するこ
とができます。
次は、主題図自体に変更を加えます。RangedTheme コンストラクタに渡すパラメータを操作
することで、主題図の計算方法と表示方法を変更できます。
6. コード内で、RangedTheme という語を強調表示にして、F1 を押します (212 行目)。画面に、
RangedTheme に関するヘルプ トピックが表示されます。このヘルプ トピックに目を通せば、
各パラメータがコンストラクタに渡されたときにどのような機能をするかがわかります。
7. ここでは、主題図のレンジ (Bin) の数を増やします。221 行目で、Bin の数を 5 から 8 に変更
します (Bin とは、最大値と最小値で構成されるレンジを意味します。主題図では、色分けの
目的に合わせて近似値をグループ化するために使用されます)。
MapXtreme v7.2
484
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
8. 次に、レンジの配分方法を変更します。配分方法によって、レンジの計算方法が指定されます。
221 行目で、EqualCountPerRange を EqualRangeSize に変更します。EqualRangeSize の配
分方法では、各レンジに含まれる値の数が等しくなります。
9. 次の図で、コードの変更箇所を赤い四角で囲んで示しています。
10. [デバッグ] > [デバッグ開始] を選択して (または F5 を押して)、変更したアプリケーションをビ
ルドし、実行します。主題図 Bin の数が増え、配分方法が変わったことがわかります。作業が
終わったら、Form1 ウィンドウを閉じます。
次に、レンジの色を変更します。色を変更する方法は、2 つあります。各 Bin に特定の色を
設定する方法と、最初と最後の Bin に色を設定する方法です。ここでは、最初の Bin と 2
番目の Bin の間で色が段階的に変化するように色分けします。現在、コードでは白から青の
範囲で色が変化するように指定されています。これを、青から赤の範囲に変更しましょう。
MapXtreme v7.2
485
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
11. レンジの色を変更するには、フィル スタイルの色を編集する必要があります。コードを表示し
て、次の変更を加えます。
最初の Bin の色を変更するには、231 行目で、WhiteFillStyle を BlueFillStyle に変
更します。
• 2 番目の Bin の色を変更するには、241 行目で、BlueFillStyle を RedFillStyle に変
更します。
その中間にあるすべての Bin が、青と赤の中間の色で色分けされます。
•
12. [デバッグ] > [デバッグ開始] を選択して (または F5 を押して)、変更したアプリケーションをビ
ルドし、実行します。新しい設定を反映して、マップの色が変わります。作業が終わったら、
Form1 ウィンドウを閉じます。
多くの変更を加えたため、凡例でマップの一部が隠れてしまっています。次に、マップ全体が
表示されるように凡例を移動します。移動ツールを使ってマップを移動することもできます
が、移動による変更は一時的なものです。移動後のマップ位置は、アプリケーションが実行さ
れている間しか保持されません。ここでは、凡例の位置をプログラム上で変更します。
13. コード ページを表示して、凡例の位置に次の変更を加えます。
•
258 行目で、"mapControl1.Size.Width - legend.Size.Width" を "0" に変更します。
凡例の位置の X 座標が、フレームの左側に変更されます。Y 座標はそのままにします。
14. 次の図で、コードの変更箇所を赤い四角で囲んで示しています。
MapXtreme v7.2
486
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
15. [デバッグ] > [デバッグ開始] を選択して (または F5 を押して)、アプリケーションをビルドし、
実行します。凡例の位置が変わったことがわかります。作業が終わったら、Form1 ウィンドウ
を閉じます。
最後の変更は、ツールバーにラベル ツールを追加することです。
16. Visual Studio のデザイン モードで、MapForm1.vb を開きます。
17. ツールボックスの [メニューとツール バー] グループから [ToolStrip] を選択し、ラベル ツール
を追加する MapControl をクリックします。分割ボタンが表示されます。
18. 分割ボタンの下矢印をクリックし、ボタンのリストから [LabelToolStripButton] を選択します。
MapXtreme v7.2
487
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
ラベル ツールがフォームの右上隅に表示され、[プロパティ] ウィンドウで自動的に
mapControl1 に割り当てられます。
MapXtreme v7.2
488
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
このように、サンプルを基にして独自のカスタマイズを加えることができます。簡単に独自の
データに置き換えたり、主題図を修正したり、ツールを加えたりできます。この主題図マップに
は、他にも次のような変更を加えることができます。
•
•
•
データ ソース (テーブル) の別のフィールドを使用して、主題図が別の値 (たとえば人口など)
に基づくようにする。凡例を必ず更新し、変更を反映してください。
別の主題図と凡例を追加する。
別のツールを追加する。
リリース モードでのビルド
変更が終わったら、すぐにリリース ビルドを実行できます。リリース ビルドとは、顧客向けまた
は 内部ユーザ向けにリリースするアプリケーションのビルドです。リリース ビルドを実行するに
は、以下の手順に従います。
1. [ビルド] > [構成マネージャ] を選択します。
2. [アクティブ ソリューション構成] ドロップダウン リストで、ビルド タイプを [Release] に変更
します。
3. [構成マネージャ] ダイアログ ボックスの [閉じる] をクリックします。
4. ソリューション エクスプローラで ThemeLegendVB プロジェクトを右クリックし、[ビルド] を
選択します。
終わったら、「デスクトップ アプリケーションのパッケージ化」を参照してください。
デスクトップ アプリケーションのパッケージ化
このセクションでは、デスクトップ アプリケーションをパッケージ化する方法を示します。パッ
ケージとは、ソフトウェア製品に必要なファイルとディレクトリをまとめたものです。製品は
CD-ROM や DVD-ROM などの配布メディアに転送できるように、1 つ以上のパッケージとしてビ
ルドする必要があります。デスクトップ アプリケーションのパッケージを構成する Setup.exe
ファイルに、デスクトップ アプリケーションのインストールと実行に必要なすべてのファイルが
含まれます。
MapXtreme では、このプロセスが可能なかぎり簡単化されています。Visual Studio の機能と
MapXtreme の自動化機能を使用することで、正しいマージ モジュールがパッケージに含まれま
す。マージ モジュール (MSM) は、コンポーネントのインストールに必要なファイル、リソース、
レジストリ エントリ、セットアップ ロジックを 1 つに格納したパッケージです。MSM のリスト
は「アプリケーションの配布」に示されており、ここでは、MapXtreme のランタイム インストー
ラおよび有効なオプションについても説明されています。
セットアップ プロジェクトの作成
まず、ソリューションのセットアップ プロジェクトを作成する必要があります。そのセットアッ
プ プロジェクトを使って、Setup.exe ファイルを作成します。
MapXtreme v7.2
489
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
1. ソリューション エクスプローラで、ソリューションの名前をクリックして強調表示し、[ファ
イル] > [新しいプロジェクトの追加] を選択します。[新しいプロジェクトの追加] ダイアログ
ボックスが表示されます。
2. [プロジェクトの種類] リストで、[その他のプロジェクトの種類] を展開し、[セットアップと配
置] をクリックして [Visual Studio インストーラ] を選択します。
プロジェクトがソリューションの一部でない場合は、[プロジェクトの追加] ショートカット
が表示されません。[ファイル] > [プロジェクトの追加] を選択し、[セットアップ] を選択
してセットアップ プロジェクトを追加できます。ソリューションがセットアップ プロジェク
トと共に作成されます。
3. [セットアップ プロジェクト] を強調表示します。セットアップ プロジェクトの名前と場所を入
力して、[OK] をクリックします。Visual Studio に、新しいセットアップ ファイルのファイル
システムが表示されます。
4. 次に、データ ファイルを追加する必要があります。ソリューション エクスプローラで、セッ
トアップ プロジェクトを右クリックし、メニューから [追加] > [ファイル] を選択します。
5. [追加] > [ファイル] ダイアログ ボックスで、[ファイルの種類] ボックスのドロップダウン リス
トから [すべてのファイル] を選択し、データ ファイルの場所に移動します。
6. セットアップ プロジェクトに追加する必要のあるファイルをすべて選択します。
7. [開く] をクリックします。ファイルは、ソリューション エクスプローラの ThemeLegendVB プ
ロジェクトの下に追加されます。
MapXtreme v7.2
490
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
デスクトップ アプリケーションの作成
8. セットアップ プロジェクトに追加するファイルが別のパスにもある場合は、手順 5 ~ 8 を繰り
返します。
L
このアプリケーションを別のマシンに展開する場合は、開発コンピュータと展開先コン
ピュータでデータの絶対パスが一致している必要があります。
セットアップ ファイルが書き込まれるパスを表示または変更するには、次のようにします。
1. セットアップ プロジェクトを右クリックし、メニューから [プロパティ] を選択します。
2. [セットアップ プロパティ ページ] で、[出力ファイル名] を変更できます。ここでは、セット
アップ ファイルに組み込む構成 (デバッグまたはリリース) も選択します。
ビルドしたアプリケーションを Windows の [スタート] メニューに配置する場合は、[ファイル シ
ステム] タブで [ユーザーのプログラム メニュー] メニューを右クリックし、[新しいショートカッ
トの作成] メニューをクリックして、必要に応じて名前とプロパティを設定します。または、[ス
タート] メニュー上の指定した位置 (サブメニュー内など) にプログラムを配置するためのスクリプ
トを記述することもできます。
同様に、ユーザのデスクトップにショートカットを配置するには、[新しいショートカットの作成]
メニューをクリックし、必要に応じて名前とプロパティを設定します。または、ショートカット
を作成してユーザのデスクトップに配置するためのスクリプトを記述できます。
ライセンス ファイルの追加
次に、アプリケーションにデスクトップ ライセンス ファイル (MapXtremeDesktop.lic) を追加し、
ユーザがアプリケーションを利用できるようにする必要があります。「展開用のランタイム ライ
センス」を参照してください。
ここでは、ライセンス ファイルの追加方法を説明するために、パッケージに試用ライセンスを含
めることにします。1実際のアプリケーションをパッケージ化する際には、ランタイム ライセンス
を追加する必要があります。
1. Visual Studio インターフェイスで、[ファイル システム (Setup)] タブをクリックします。
2. [アプリケーション フォルダ] アイコンを右クリックし、[追加] > [ファイル] を選択します。
3. [ファイルの追加] ダイアログ ボックスで、C:\Program Files\Common
Files\MapInfo\MapXtreme\7.x.x を開き、MapXtremeTrial.lic を選択します。[開く] をクリック
します。
ファイルがセットアップ プロジェクトに追加され、他のアプリケーション ファイルと共にアプリ
ケーション フォルダにインストールされます。
1.
展開用のパッケージを作成するには、SDK または MapXtreme のランタイム インストールに MapXtremeTrial.lic
が付属している必要があります。評価バージョンの MapXtreme でセットアップ プロジェクトを作成すること
はできません。
MapXtreme v7.2
491
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
オプションのステップ: ワークスペース マネージャと GeoDictionary マネージャの追加
必要であれば、顧客が使用できるように、パッケージに MapXtreme のユーティリティであるワークス
ペース マネージャと GeoDictionary マネージャを含めることができます。「ライセンス ファイルの追
加」の指示に従ってください。MapXtreme のインストール フォルダ にある WorkspaceManager.exe お
よび GeoDictionaryManager.exe を MapXtreme.lic にあわせて置き換えます。
セットアップ プロジェクトのビルド
セットアップ プロジェクトをビルドすると、データ、コンパイル済みのコード、プロジェクトに
必要な MSM がすべて含まれた Setup.exe ファイルが作成されます。このセットアップ プロジェ
クトは、MapXtreme ソリューションの一部となります。
セットアップ プロジェクトのビルドが終了したら、ソリューションをビルドします。ソリュー
ション全体をビルドすると、マッピング アプリケーションがコンパイルされてビルドされた後、
インストール用の Setup.exe ファイルがビルドされます。これで、パッケージが完成し、展開の
準備が整いました。
デスクトップ アプリケーションの展開
デスクトップ アプリケーションがビルドされ、展開用のすべてのコンポーネントがパッケージ化
されました。そこで、これを実用ワークステーションに配置します。
アプリケーションを展開するには、作成した Setup.exe ファイルをエンド ユーザに配布する必要
があります。ファイルを配布できるように、Setup.exe ファイルを CD-ROM または DVD-ROM に
コピーします。ユーザが各自のコンピュータ上で Setup.exe 実行ファイルを起動してインストー
ルを開始し、指示に従ってインストールを実行します。これですべて終了です。
Web アプリケーションの作成
こ の チ ュ ー ト リ ア ル で は、MapXtreme に付属する Thematics Web サンプルを基にします。
MapXtreme Web サンプルは、Visual Studio Web アプリケーション プロジェクトです。これには
完全に動作する Web アプリケーションが含まれ、アプリケーションをサポートするためのデータ
が事前に読み込まれます。また、状態管理が処理されます。
サンプル Web アプリケーションの実行
まずは Thematics Web サンプルを実行して、どのように表示されるかを確認しましょう。
1. Visual Studio で、[ファイル] > [プロジェクトを開く] を選択し、ThematicsVB サンプルのフォ
ルダを開きます。このフォルダのデフォルトのパスは、C:\Program
Files\MapInfo\MapXtreme\7.x.x\Samples\Web\Features\Thematics\ThematicsVB です (ここで、x
は使用する MapXtreme のリリース番号です)。
MapXtreme v7.2
492
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
2. [デバッグ] > [デバッグ開始] を選択します (または F5 を押してサンプルをデバッグ モードで実
行します)。
Thematics サンプルの Web アプリケーション プロジェクトは、背景の世界地図、適用されるさま
ざまな主題図をリストするプルダウン メニュー、MS Access テーブルの属性フィールド、および
主題図を適用する [Apply] ボタンで構成されています。Web ページには、MapXtreme Web テンプ
レートに含まれる標準のツール ボタン (拡大、縮小、中心、移動) が表示されます。さらにこのア
プリケーションにはレイヤ管理機能もあり、表示するレイヤを設定し、現在のマップのズーム レ
ベルを表示できます。
詳細については、「MapXtreme Web アプリケーションのコンポーネント」を参照してください。
終わったら、Web ページを閉じます。ただし、プロジェクトは開いたままにしてください。
MapXtreme v7.2
493
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
アプリケーションの変更
このサンプル アプリケーションを変更するために、分離コード ページである WebForm1.aspx.vb
を見てみましょう。この分離コード ページのコードは、Web フォームの HTML を表示するコード
です。
L
この Thematics サンプル Web アプリケーションの設計は、もう 1 つのデスクトップ サン
プル アプリケーションとは大きく異なっています。最も重要な違いは、この Web サンプル
がデータ テーブル名およびデータ フィールド名と強く関連付けられている点です。このよ
うな項目は、デスクトップ サンプルのときのように簡単に変更することはできません。
分離コード ページで、単純な主題図プロパティをいくつか作成し、色分けを行います。この変更
によって、ユーザーが主題図を実行したときの表示が変わります。変更を加えるメソッドは、244
行目の CreateThemeOrModifier メソッドです。最初に変更するのは、Dot Density 主題図です。表
示方法を変更します。
1. Visual Studio で、カーソルをソリューション エクスプローラに移動し、WebForm1.aspx を右ク
リックします。[コードの表示] を選択し、分離コード ページ WebForm1.aspx.vb を表示します。
デザイン モードで WebForm1.aspx を表示している場合には、フォーム上の任意の場所を
右クリックして [コードの表示] を選択します。
L
このチュートリアルで説明するサンプル アプリケーションはすべて、MapXtreme ディ
ストリビューション CD に含まれています。参照されている行番号は、各自のインス
トールにおけるコードと、完全には一致しない場合があります。
スクロールしながらコード ページに目を通し、コードを確認してください。
2. 次の変更を加えます。
•
•
ThemeAndModifierTypes.DotDensityTheme Case ステートメントの下、288 行目で、
Color.Purple を Color.DarkGreen に変更します。
これによって、アプリケーションの実行時、Dot Density 主題図を選択したときのドットの
表示色が変わります。
289 行目で、ValuePerDot プロパティを 2000000 から 5000000 に変更します。
これにより、人口に基づいて表示されるドットの数が変わります。その結果、ドットの数
が減ります。
次の図に、コードの変更箇所を赤い四角で囲んで示します。
MapXtreme v7.2
494
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
3. [デバッグ] > [デバッグ開始] を選択して (または F5 を押して)、Web アプリケーションをビルド
し、実行します。ブラウザにページが表示された後で、[DotDensityTheme] 主題図を選択し
て、[Pop_1994] をオンにします。
地図上のドットの色が、濃い緑になります。
もう 1 つ、簡単な変更を加えましょう。この変更は、Range 主題図が対象です。
4. 次の変更を加えます。
•
ThemeAndModifierTypes.RangedTheme Case ステートメントの下、276 行目で、Bin の個
数のパラメータを 5 から 8 にします。
これによって、主題図のデータ Bin の数が変更されます。
•
同じ行、276 行目で、Bin の配分方法を EqualCountPerRange から NaturalBreak に変更し
ます。
これにより、データをデータ Bin に配分する方法が変更されます。
MapXtreme v7.2
495
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
5. [デバッグ] > [デバッグ開始] を選択して (または F5 を押して)、新しい変更を反映した Web ア
プリケーションをビルドし、実行します。ページが表示されたら、[RangedTheme] を選択し
て、[Pop_1994] をオンにします。
データ Bin を増やしたこと (色分け) で主題図がどのように変化したか、新しいデータ配分方法に
基づいて主題図上の国の色がどのように変化したかを確認してください。
このように、このサンプル Web アプリケーションの表示に単純な変更を加えることは比較的簡単
です。これ以外にこのサンプルに加えられる変更としては、次のようなものがあります。
•
Web ページのレイアウトの変更。コントロールの移動など。
•
Web ページのスタイルの変更。色やフォントなど。
状態管理について
Web アプリケーション サンプルをカスタマイズする際には、アプリケーションの要素を変更する
だけでなく、状態管理のベスト プラクティスも考えてビルドする必要があります。Web 環境にお
けるアプリケーションとユーザの状態処理は複雑であるため、MapXtreme がこれをどのように処
理するかについて理解し、各自の開発の中でこの概念をどのように適用するかについて検討する
必要があります。Web アプリケーションの状態管理については、「第 6 章 : 状態管理について」
を参照してください。
ベスト プラクティスの点から見ると、このサンプルでは、マップおよび設定の事前読み込みワー
クスペースを使用し、アプリケーションとユーザの状態を手動で管理し、プールされたセッショ
ン オブジェクトを使用することで、アプリケーションが複数の要求を効率的に処理できます。
また、ユーザが初めての要求を行っているかどうかを検出するように設計されています。それが
初めての要求である場合、アプリケーションは初期状態で表示されます。ユーザがアプリケー
ションに再アクセスしている場合は、各ユーザの個別の設定が保持されます。このサンプルは複
数のユーザとセッション オブジェクトを共有しているため (プールと呼ばれる)、セッションが初
期状態にあるか ("クリーン")、別のユーザの変更が含まれているか ("ダーティ") が検出されます。
MapXtreme v7.2
496
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
すべてのユーザの設定を個別に保持するために、このサンプルでは Session.State を Manual に設
定 し ま す。MapXtreme Session 状態が自動的に保存される Web アプリケーションでは、
Session.State は HttpSessionState に設定されます。つまり、セッション全体が HTTP Session に
保存されます。この場合、状態が自動的に保存されますが、保存対象が選別されないため、パ
フォーマンスが低下します。セッション全体が保存されます。
リリース モード向けの構成
変更が終わったら、すぐにリリース ビルドを実行できます。
ASP.NET 2.0 で注意すべき重要な点は、Visual Studio には Web アプリケーション プロジェクトの
コンパイルに関する機能がまったくないことです。従来の ASP.NET 1.1 と Visual Studio .NET で
は、分離コードのソース コードと Web フォームをビルドし、コンパイル済みコードを出力ディレ
クトリに出力できました。Visual Studio では、コンパイルに関するすべての機能が切り離され、
ASP.NET プラットフォームに任されています。Visual Studio のビルド コマンドで実行されるの
は、Web アプリケーションの構成の検証のみです。
デバッグを実行せずに、パッケージ化のために Web アプリケーション プロジェクトを構成するに
は、Web アプリケーション プロジェクトの Web.config ファイルの構成設定を変更します。
Web.config フ ァ イ ル 内 で、XML 要 素 "compilation" (27 行目) を探し、属性値を "debug" から
"false" に変更します。変更後、次のようになります。
<compilation defaultLanguage="vb" debug="false">
この設定により、すべてのソース コードをリリース モードでビルドするように、ASP.NET コンパ
イラに指定されます。
アプリケーションをビルドするには、ソリューション エクスプローラで ThematicsVB プロジェク
トを右クリックし、[Build Web Application] を選択します。
Web アプリケーションのパッケージ化
Web アプリケーションのパッケージの作成は、デスクトップ アプリケーションのパッケージの作
成に似ています。
Web セットアップ プロジェクトの作成
最初に、ソリューションに Web セットアップ プロジェクトを追加します。Web セットアップ プ
ロジェクトを作成するには、次の手順を実行します。
1. ソリューション エクスプローラで、ソリューションを右クリックし、[追加] > [新しいプロジェ
クト] を選択します。[新しいプロジェクトの追加] ダイアログ ボックスが表示されます。
2. [プロジェクトの種類] リストで、[その他のプロジェクトの種類] を展開し、[セットアップと配
置] をクリックします。
MapXtreme v7.2
497
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
3. [セットアップ/配置プロジェクト] で、[Web セットアップ プロジェクト] を選択します。[OK]
をクリックします。Web セットアップ アプリケーション プロジェクトが作成されます。
プロジェクトがソリューションの一部でない場合は、[プロジェクトの追加] ショートカット
が表示されません。[ファイル] > [プロジェクトの追加] を選択し、[セットアップ] を選択
してセットアップ プロジェクトを追加できます。ソリューションがセットアップ プロジェク
トと共に作成されます。
次に、ソリューションのどの部分を含むかを指定します。
4. ソリューション エクスプローラで、新しく作成した Web セットアップ プロジェクトを右ク
リックし、[追加] > [プロジェクト出力] を選択します。[プロジェクト出力グループの追加] ダイ
アログ ボックスが表示されます。
5. [コンテンツ ファイル] をクリックし、[OK] をクリックします。
アプリケーション内の Web ページは、デスクトップ アプリケーションにおける実行ファイ
ルとは異なり、HTML ファイルとして生成されるため、コンテンツ ファイルを含める必要
があります。
MapXtreme v7.2
498
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
6. Web アプリケーションのデプロイメントを自分で作成する場合は、MSM を手動で追加する必
要があります。詳細については、「Web アプリケーションの展開」を参照してください。
7. 次に、実稼働サーバにデータを格納する必要があります。実稼働サーバにデータをコピーする
か、独立したインストーラでインストールすることができます。
8. Web セットアップ プロジェクトに対する Visual Studio の [ファイル システム] ウィンドウで、
Web アプリケーションのフォルダを右クリックし、[プロパティ] ウィンドウを表示します。仮
想ディレクトリの名前を ThematicsWeb_7_0 に変更します。これにより、対象コンピュータ上
の仮想ディレクトリが指定されます。
MapXtreme v7.2
499
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
ライセンス ファイルの追加
MapXtreme Web アプリケーションをパッケージ化する際には、ユーザがすべてのマップを利用で
きるように、有効な MapXtremeWeb.lic が必要になります。展開ライセンスの詳細については、
「展開用のランタイム ライセンス」を参照してください。この例では、使用する MapXtreme の
バージョンに付属しているトライアル ライセンスを使用します。1
1. 最初に、ライセンス ファイルの保存場所を作成します。MapXtreme 試用ライセンスのパスを
MapXtreme インストール フォルダに複製する必要があります。このパスは以下のとおりです。
C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x.
[ファイル システム] ウィンドウで、[対象コンピュータ上のファイル システム] を右ク
リックし、[特別なフォルダの追加] > [共通ファイル フォルダ] を選択します。
2. [共通ファイル フォルダ] を右クリックして、[追加] > [フォルダ] を選択します。フォルダの名
前を "MapInfo" に変更します。
3. パスの最後のフォルダを右クリックし、[追加] > [フォルダ] を選択して、以降のフォルダを作
成します。フォルダの構造に従って、新しく作成したフォルダの名前を変更します。完成した
ファイル ツリーは、次の図のようになります。
4. 7.x.x フォルダを右クリックし、[追加] > [ファイル] を選択します。MapXtreme 試用ライセンス
ファイル (MapXtremeTrial.lic) を探して、それを 7.x.x フォルダに追加します。MapXtreme 試
用ライセンス ファイルは、C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x に置かれ
ています。
Web セットアップ プロジェクトのビルド
これで、Web セットアップ プロジェクトをビルドする準備ができました。
1. [ビルド] > [バッチ ビルド] を選択します。[バッチ ビルド] ダイアログ ボックスが表示されます。
2. Web アプリケーション プロジェクトのリリース構成を探し、対応する [ビルド] チェック ボッ
クスをオンにします。
3. [ビルド] をクリックします。
1.
展開用のパッケージを作成するには、SDK または MapXtreme のランタイム インストールに MapXtremeTrial.lic
が付属している必要があります。評価バージョンの MapXtreme でセットアップ プロジェクトを作成すること
はできません。
MapXtreme v7.2
500
開発者ガイド
付録 A: MapXtreme アプリケーションを作成および展開する方法
Web アプリケーションの作成
ビルドが完了したら、Windows エクスプローラを使用して、Web セットアップ プロジェクトの
Release ディレクトリを開いてください。Setup.exe ファイルまたは setup.msi ファイルが作成さ
れています。このファイルを展開に使用します。
Web アプリケーションの展開
Web 展開では、Web アプリケーションをホスティングしている組織が Setup.exe ファイルを実稼
働サーバで実行する必要があります。開発サーバから実稼働サーバに Setup ファイルを転送した
後、実稼働サーバにインストールする必要があります。小規模な組織の場合、開発者が展開も行
うことがあります。大規模な組織では、管理者が展開を行う場合があります。その後で、ユーザ
がインターネット ブラウザに URL を入力し、サイトにアクセスできるようになります。さまざま
なインストーラ、データのアクセス、プロキシ サーバ、権限の詳細については、「アプリケー
ションの配布」を参照してください。
このチュートリアルでは、読者が開発者として展開を行うものと仮定します。実稼働サーバに
は、.NET Framework v.2.0 以上と、MapXtreme がインストールされている必要があります。
実 稼働 サー バに アプ リ ケー ショ ンをインストールしてライセンス ファイルを追加したら、
Web.config ファイルを修正して、事前読み込みワークスペースがローカル マシンで参照されるよ
うにします。
Web アプリケーションを展開すると、セットアップ アプリケーションによって、IIS に必要な仮
想ディレクトリが作成され、必要な他のすべてのコンポーネントが適切な場所に配置されます。
このアプリケーションの場合、ライセンス ファイルは Program Files\Common
Files\MapInfo\MapXtreme\7.x.x ディレクトリに置かれます。
Web アプリケーションが実行されていることを確認するには、ブラウザを起動し、URL として
http://<ProductionServerMachine>/ThematicsWeb_7_0/ を入力します。この URL には、アプリ
ケーションをパッケージ化する際に指定した仮想ディレクトリを使用して、実稼働サーバ上の
Web アプリケーションの場所を指定する必要があります。
インストールの完了後、コマンド プロンプトで iisreset を実行することにより、コンピュータ上の
IIS サーバを再起動する必要があります。または、アプリケーションが割り当てられているアプリ
ケーション プールをリサイクルします。
MapXtreme v7.2
501
開発者ガイド
B
カスタマイズ MapXtreme
この付録では、カスタマイズできる MapXtreme のクラス、インターフェイ
ス、およびその他の要素の例を示します。
この付録の構成
Š
Š
Š
Š
カスタマイズ可能なクラス. . . . . . .
ワークスペース マネージャ機能拡張 . .
アプリケーション データ ファイルの場所
略語ファイルの検索. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
503
511
515
517
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
カスタマイズ可能なクラス
以下のクラスは、容易にサブクラス化できるように設計されており、開発のニーズに合わせてカ
スタムのサブクラスを作成できます。
•
「MapInfo.Data.Provider 名前空間」
•
「ADO.NET」
•
「Engine.CustomProperties」
•
•
「検索」
「FeatureStyleModifier または FeatureOverrideStyleModifier」
•
「UserDrawLayer」
•
「Windows.Controls」
•
「ツール」
•
「スタイル」
•
「GmlFeatureCollection」
•
「WorkSpacePersistence および WorkSpaceLoader」
MapInfo.Data.Provider 名前空間
MapXtreme は、MapXtreme がそのままでは理解できない形式のデータにアクセスするための拡張
可能データ プロバイダ モデルを提供しています。このモデルの作成にはかなりの量の作業が必要
となるため、MapXtreme が提供する他のデータ アクセス方法では不十分である場合のみ、作成す
ることをお勧めします。このモデルについては、「付録 D : 拡張可能データ プロバイダ」を参照
してください。
ADO.NET
上述の拡張可能データ プロバイダ モデルを用いて独自のデータ プロバイダをインプリメントする
前に、MapInfo.Data.TableInfoAdoNet クラスの使用を検討してください。このクラスを使用する
と、専用のデータ ソースが提供されていない、マップ作成不可のデータにアクセスすることがで
きます。詳細については、『開発者リファレンス』を参照してください。
Engine.CustomProperties
CustomProperties クラスを使用して、オブジェクトに独自の情報を追加します。CustomProperties
で情報を追加できるオブジェクトは、FeatureCollection、FeatureStyleModifer、
GmlFeatureCollection、GroupLayer、IFeatureCollection、IMapLayer、ISession、LabelModifier、
LabelSource、Legend、LegendFrame、Map、MapLayer、MapTool、MultiFeatureCollection、
Session.PooledSession、および Table です。Add メソッドを使用して、情報を追加し、 Item メソッ
ドを使用して、情報を取得します。CustomProperties は、どのタイプでも使用できます。
MapXtreme v7.2
503
開発者ガイド
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
L
MapXtreme オブジェクトを直接 CustomProperties コレクションに追加しないでください。追
加すると、シリアライゼーション中にエラーが発生します。代わりに、Alias を追加します。
たとえば、Map を CustomProperties に追加せず、 代わりに Map.Alias を追加します。
CustomProperties を使用して、プロパティを追加および取得する方法の例を次に示します。
Public Shared Sub MapInfo_Engine_CustomProperties()
Dim bag As CustomProperties = New CustomProperties
bag.Add("One", 1)
bag.Add("DateNow", DateTime.Now)
Dim i As Integer = CType(bag("One"), Integer)
Dim ts As DateTime = CType(bag("DateNow"), DateTime)
End Sub
検索
検索機能のカスタマイズについては、任意の方法で検索を行うために使用できるクラスがいくつ
かあります。QueryFilter クラスを使用すると、SQL クエリで使用できるカスタムの "where" 句を
作成できます。QueryDefinition クラスを使用すると、実行するカスタムの SQL クエリを定義でき
ます。SearchResultProcessor を使用すると、クエリの結果の後処理を設定できます。
これらのクラスの使用例については、MapXtreme のインストール先ディレクトリ下の Samples
ディレクトリにあるサンプル アプリケーション Search を参照してください (デフォルトのインス
トール先は C:\Program Files\MapInfo\MapXtreme\7.x\Samples\Desktop\Features\Search)。
QueryFilter
IQueryFilter インターフェイスは、すべてのクエリ フィルタがサポートする必要のあるインター
フェイスを定義します。QueryFilter を使用して QueryDefinition の "where" 句の全体または一部を
定義します。
QueryDefinitionquerydefinition
QueryDefinition クラスは、検索によって実行するクエリを定義します。QueryDefinition は、フィ
ルタ (IQueryFilter)、Columns、および OrderBy で構成されます。Columns を指定しなかった場合
は、"*" が使用されます。
ISearchResultProcessor または SearchResultProcessor
SearchResultProcessor は、検索結果に対する後処理を実行して選択する行を絞り込む
ISearchResultProcessor インターフェイスをインプリメントします。
MapXtreme v7.2
504
開発者ガイド
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
FeatureStyleModifier または FeatureOverrideStyleModifier
FeatureStyleModifier または FeatureOverrideStyleModifier から派生して独自の FeatureStyleModifier を
作成し、レイヤの外観を変更できます。これらのクラスを使用して、特定のレイヤにあるオブジェ
クトの特定の FeatureStyle の変更を指定します。
次の例では、1990 年から 2000 年の間に人口が減少した場合に USA.TAB のリージョンを赤に設定
する修飾子を作成しています。
using MapInfo.Mapping;
using MapInfo.Styles;
using System.Drawing;
internal class UsaPopulationDecreasedModifier :
MapInfo.Mapping.FeatureStyleModifier
{
public UsaPopulationDecreasedModifier() : base(null, null)
{
// use 2 columns for expressions
Expressions = new string[] { I18N.Wrap(
"Pop_1990",I18N.WrapType.Column),
I18N.Wrap("Pop_2000",I18N.WrapType.Column) };
}
// called during draw events
protected override System.Boolean
Modify(MapInfo.Styles.FeatureStyleStack styles,
object[] values)
{
// compares the values from each column
if ( double.Parse(values[0].ToString()) >
double.Parse(values[1].ToString()) )
{
// if population decreased, color the region red
CompositeStyle style = styles.Current;
if (style.AreaStyle.Interior is SimpleInterior)
{
((SimpleInterior)style.AreaStyle.Interior).ForeColor =
Color.Red;
// modifies the region
return true;
}
}
// does not modify the region
return false;
}
}
MapXtreme v7.2
505
開発者ガイド
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
UserDrawLayer
UserDrawLayer クラスを使用して、マップにカスタム レイヤを描画します。このレイヤには、カ
スタマイズしたロゴ、ポイントの透過オーバーレイなど、任意のものを追加できます。このクラ
スを使用するには、新しいクラスを派生し、描画メソッドをオーバーロードします。この方法を
次のサンプル コードに示します。
C# の例:
using
using
using
using
System.Runtime.Serialization;
System;
System.Drawing;
MapInfo.Mapping;
[Serializable]
class MyUserDrawLayer : UserDrawLayer {
// Call the base class constructor with name and alias.
public MyUserDrawLayer(string Name, string Alias) : base(Name, Alias)
{}
// Override the abstract Draw method to draw a rectangle.
public override void Draw(System.Drawing.Rectangle ClientRect,
System.Drawing.Rectangle
UpdateRect, Graphics graphics) {
// Create a pen.
Pen blackPen = new Pen(Color.Black, 3);
// Create location and size of rectangle.
float x = 10.0F;
float y = 10.0F;
float width = 200.0F;
float height = 200.0F;
// Draw rectangle to screen.
graphics.DrawRectangle(blackPen, x, y, width, height);
}
}
MapXtreme では VB バージョンの UserDrawLayer サンプル アプリケーションも
..\MapInfo\MapXtreme\7.x.x\Samples\Desktop\Features フォルダに用意しています。
Windows.Controls
Windows.Controls 名前空間内の多くのクラスは、サブクラス化し、カスタムの動作をインプリメ
ントできます。この方法で LayerControl をカスタマイズする 2 つの例を以下に示します。
MapInfo.Windows.Controls.PropertiesUserControl
LayerControl にカスタム タブを追加する場合は、PropertiesUserControl をサブクラス化したクラス
を作成します。次に、LayerControl の GetLayerTypeControls() メソッドと SetLayerTypeControls()
メソッドを呼び出して、他のタブ クラスのコレクションにクラスを追加します。例については、
MapXtreme のインストール先ディレクトリ下の Samples\Features ディレクトリにあるサンプル ア
MapXtreme v7.2
506
開発者ガイド
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
プリケーションを参照してください。LayerControl サンプル アプリケーションの
MapBackgroundControl.cs ファイルに、PropertiesUserControl をサブクラス化した
MapBackgroundControl クラスがあります。
MapInfo.Windows.Controls.LayerNodeHelper およびそのすべてのサブクラス
LayerNodeHelper クラスは、LayerControl のレイヤ ツリー内の外観と動作を制御します。これらの
ヘルパ クラスは、たとえばユーザが削除できるレイヤを示します。ILayerNodeHelper インター
フェイスのプロパティでレイヤ ノードの外観または動作を十分に制御できない場合、たとえばユー
ザが一部のマップ レイヤを削除できるというロジックをテーブルごとに適用したい場合は、任意の
ヘルパ クラスをサブクラス化し、適切なメソッドをオーバーライドし、そのオーバーライドしたメ
ソッドでレイヤごとのロジックを実行できます。次に、LayerControl.SetLayerTypeHelper メソッド
を呼び出してヘルパ クラスを使用できます。
デフォルトでは、ユーザが GroupLayer を削除すると確認のダイアログ ボックスが表示されま
す。ただし、GroupLayer が完全に空の場合は、確認のダイアログ ボックスが表示されずに空の
GroupLayer が削除されます (LabelLayer も同様)。GroupLayer が空の場合でも確認のダイアログ
ボックスが表示されるようにするには、GroupLayerNodeHelper から派生するクラスを作成し、
IsRemovalConfirmed メソッドをオーバーライドします。この方法を次のサンプル コードに示し
ます。
using System;
using MapInfo.Windows.Controls;
namespace MapInfo.Samples.LayerControl
{
public class CustomLayerNodeHelper : GroupLayerNodeHelper
{
public CustomLayerNodeHelper()
{
}
public override bool IsRemovalConfirmed(object obj)
{
return true;
}
}
}
ア プ リ ケ ー シ ョ ン で こ の ヘ ル パ クラスを使用するには、次のような構文で LayerControl の
SetLayerTypeHelper メソッドを呼び出します。
layerControlDlg.LayerControl.SetLayerTypeHelper(
typeof(GroupLayer), new CustomLayerNodeHelper() );
LayerNodeHelper のサブクラスは以下のとおりです。
•
MapNodeHelper
•
MapLayerNodeHelper
•
GroupLayerNodeHelper
MapXtreme v7.2
507
開発者ガイド
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
•
LabelLayerNodeHelper
•
LabelSourceNodeHelper
•
LabelModifierNodeHelper
•
FeatureStyleModifierNodeHelper
•
RangedThemeNodeHelper
•
DotDensityThemeNodeHelper
•
IndividualValueThemeNodeHelper
•
PieThemeNodeHelper
•
BarThemeNodeHelper
•
GradSymbolThemeNodeHelper
ツール
ツールは、既存のツールをサブクラス化するか、カスタム (Custom) のベース ツールにコード
を追加してカスタマイズできます。デスクトップ ツールの詳細については、「第 7 章 : デスク
トップ アプリケーション、コントロール、 ダイアログ、ツール」を参照してください。Web
ツールについては、「第 5 章 : Web アプリケーション、コントロール、 およびツール」を参照し
てください。
スタイル
以下のクラスを使用して、オブジェクトに適用するスタイルのコレクションにカスタマイズを追
加できます。
BitmapPointStyleRepository
BitmapPointStyleRepository クラスを使用すると、現在のすべてのビットマップ ポイント スタイ
ルをループ処理し、指定したディレクトリから新しいビットマップ イメージを追加できます。
Refresh() メソッドを使用すると、任意の新しいビットマップ イメージを、すべてのイメージが含
まれるリポジトリに追加できます。BitmapPointStyles に使用するイメージのコレクションを
C:\MyData\MyBitmapImages というディレクトリから再読み込みする方法を次のサンプル コード
に示します。
using MapInfo.Styles;
StyleRepository styleRepository = Session.Current.StyleRepository;
BitmapPointStyleRepository bmpPointStyleRepository =
styleRepository.BitmapPointStyleRepository;
bmpPointStyleRepository.Reload("C:\MyData\MyBitmapImages");
MapXtreme v7.2
508
開発者ガイド
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
InteriorStyleRepository
InteriorStyleRepositor クラスを使用すると、現在のすべての内部スタイルをループ処理し、指定し
たディレクトリから新しい内部スタイルの新しいビットマップ イメージを追加できます。リー
ジ ョ ン の 塗 り つ ぶ し に 使 用 す る 内 部 パ タ ー ン の 現 在 の セ ッ ト に 追 加 す る に は、
AppendBitmapPattern() メソッドを使用します。新しい BMP イメージを InteriorStyleRepository に
追加する方法を次のサンプル コードに示します。
using MapInfo.Styles;
StyleRepository styleRepository = Session.Current.StyleRepository;
InteriorStyleRepository interiorStyleRepository =
styleRepository.InteriorStyleRepository;
// AppendBitmapPattern returns the zero-based index of the pattern in
// the repository.The index returned may be used to
// retrieve a SimpleInterior style using the repository indexer.
int index = interiorStyleRepository.AppendBitmapPattern(
"C:\MyImages\trees.bmp"
);
if (index >= 0)
{
SimpleInterior style =
(SimpleInterior)interiorStyleRepository[index];
}
LineStyleRepository
LineStyleRepository クラスを使用すると、現在のすべてのライン スタイルをループ処理し、新し
いライン スタイルを追加することができます。(Reload() メソッドを使用して、新しいファイルを
リポジトリに追加することができます。C:\MyData ディレクトリにある PEN ファイルから、
SimpleLineStyles に使用するライン スタイル パターンのコレクションを再読み込みする方法を次
のサンプル コードに示します。
using MapInfo.Styles;
StyleRepository styleRepository = Session.Current.StyleRepository;
LineStyleRepository lineStyleRepository =
styleRepository.LineStyleRepository;
lineStyleRepository.Reload("C:\MyData\MyLineStyles.PEN");
VectorPointStyleRepository
VectorPointStyleRepository クラスを使用すると、現在のすべてのベクトル シンボルをループ処理
し、指定したファイルから新しいベクトル シンボルを追加できます。独自のシンボル セットを作
成するには、MapBasic の「シンボル作成機能」アプリケーションを使用する必要があります。ベ
クトル シンボル セットを変更したら、Reload() メソッドを使用してシンボル セットをリポジトリ
に読み込みます。C:\MyData ディレクトリにある FNT ファイルから、SimpleVectorPointStyles の
コレクションを再読み込みする方法を次のサンプル コードに示します。
using MapInfo.Styles;
MapXtreme v7.2
509
開発者ガイド
付録 B: カスタマイズ MapXtreme
カスタマイズ可能なクラス
StyleRepository styleRepository = Session.Current.StyleRepository;
VectorPointStyleRepository vecPointStyleRepository =
styleRepository.VectorPointStyleRepository;
vecPointStyleRepository.Reload("C:\MyData\MyVectorSymbols.FNT");
GmlFeatureCollection
GmlFeatureCollection クラスを使用して、XML ファイルからフィーチャをインポートします。マッ
プにフィーチャを追加するには、FeatureCollection オブジェクトを作成し、このオブジェクトに追加
する FeatureObject を作成します。その後、FeatureCollection をテーブルに挿入できます。
WorkSpacePersistence および WorkSpaceLoader
WorkSpaceLoader をサブクラス化することで、アプリケーションで保存された追加情報を使用中
の永続的なファイルに保持できます。開発者は、永続的な XML ファイルに保存したいすべての情
報をアプリケーションに書き込ませます。これは、UserData ノードの下に情報を追加することに
よって行われます。WorkSpacePersistence クラスが永続的なファイルを書き込みを行っており、
このノード内に何らかのコンテンツがある場合、コンテンツの書き込みは自動的に行われます。
WorkSpaceLoader クラス、またはこのクラスの派生クラスのいずれかは、UserData ノードの子に
含まれるすべてのデータを読み込みます。この例を次に示します。
using MapInfo.Persistence;
class myWorkSpaceLoader : WorkSpaceLoader
{
public myWorkSpaceLoader(string fileName): base(fileName)
{
// empty
}
override public void Load()
{
// called parent Load() method.
base.Load();
XmlNode userData = this.UserDataXmlNode;
foreach (XmlNode childNode in userData.ChildNodes)
{
string text = childNode.Name;
text = childNode.InnerText;
// user can do their own load stuff here
}
}
}
MapXtreme v7.2
510
開発者ガイド
付録 B: カスタマイズ MapXtreme
ワークスペース マネージャ機能拡張
ワークスペース マネージャ機能拡張
MapXtreme のワークスペース作成ツールであるワークスペース マネージャは、ワークスペースの
作成を容易にするための新しいメニュー コマンド、ツール、およびタブ ウィンドウを追加して拡
張することができます。
ワークスペース マネージャの機能とユーザ インターフェイスの詳細については、「第 23 章 : ワー
クスペース マネージャ」を参照してください。
ワークスペース マネージャ機能拡張は、ワークスペース マネージャの機能を拡張するために記述
された .NET アセンブリです。多くの場合、MapXtreme API を用いて、ワークスペース マネー
ジャには公開されていないオブジェクト モデルの機能を追加することにより、これらのアセンブ
リを作成します。
たとえば、メニュー項目、ツール、タブ ウィンドウをさらに追加したり、変更イベントに反応さ
せたりすることができます。レイヤ管理も拡張可能です。ワークスペース マネージャと同様の方
法で、新しい機能をメニューに追加することができます。
機能拡張の作成を終えたら、ワークスペース マネージャの更新されたメニュー ストリップに新し
く追加された [機能拡張] メニューを使用してそれを読み込みます。ワークスペース マネージャの
起動時に自動的に読み込むこともできます。
作成すると便利なワークスペース マネージャ機能拡張の例としては、ソート機能付きのテーブル
ブラウザ、カスタム主題図テンプレート、オブジェクトの作成および編集用の新しいツールなど
が挙げられます。
ワークスペース機能拡張の作成
MapXtreme には、ワークスペース マネージャにユーザが独自の機能を追加できるようにするため
のインターフェイスを定義する、MapInfo.WorkspaceManager.Extension.dll というアセンブリが提
供されています。
public interface IWorkspaceManagerExtension
{
string Name
{
get;
}
string Version
{
get;
}
bool HasPropertiesDialog
{
get;
}
void ShowPropertiesDialog(IWin32Window owner);
IWorkspaceManagerNotifications Load(IWorkspaceManager callback);
MapXtreme v7.2
511
開発者ガイド
付録 B: カスタマイズ MapXtreme
ワークスペース マネージャ機能拡張
void Unload();
}
機能拡張を作成するには、IWorkspaceManagerExtension インターフェイスをインプリメントする
クラスを、少なくとも 1 つ含むアセンブリを作成します。このクラスは、引数のないコンストラ
クタを持つ必要があります。
Load メソッド
IWorkspaceManagerExtension の主要なメソッドは、次のメソッドです。
IWorkspaceManagerNotifications Load(IWorkspaceManager callback);
このメソッドは、拡張クラスが作成された後で呼び出されます。このメソッドに引き渡されるの
は、IWorkspaceManager をインプリメントするオブジェクトのインスタンスです。これによりこ
のクラスは、ワークスペース マネージャを逆に呼び出して、メニュー、ツールストリップ、タブ
コントロールなどのユーザ インターフェイス要素にアクセスしたり、ワークスペースの読み込み
や保存などのコマンドを実行したりすることができるようになります。
public interface IWorkspaceManager
{
bool NewWorkspace();
bool LoadWorkspace(string filename);
void SaveWorkspace(string filename);
void MarkWorkspaceChanged();
bool HasWorkspaceChanged();
string LoadedWorkspaceFileName{get;}
int AddMapTab(MapInfo.Mapping.Map map);
int FindMapTab(MapInfo.Mapping.Map map);
int AddLegendTab(MapInfo.Mapping.Legends.Legend legend);
int FindLegendTab(MapInfo.Mapping.Legends.Legend legend);
void RemoveTab(int tab);
Microsoft.Win32.RegistryKey GetRegistryKey();
MapInfo.Windows.Controls.MapControl MapControl{get;}
MapInfo.Windows.Controls.MapControl GetMapControlFromTab(int tab);
MapInfo.Windows.Controls.LegendControl GetLegendControlFromTab(int tab);
MapInfo.Windows.Controls.LayerControl LayerControl{get;}
System.Windows.Forms.Form MainForm{get;}
System.Windows.Forms.MenuStrip Menu{get;}
System.Windows.Forms.ToolStrip FileToolStrip{get;}
System.Windows.Forms.ToolStrip MapToolStrip{get;}
System.Windows.Forms.ToolStrip ToolsToolStrip{get;}
System.Windows.Forms.StatusStrip StatusStrip{get;}
System.Windows.Forms.TabControl MainTabControl{get;}
MapXtreme v7.2
512
開発者ガイド
付録 B: カスタマイズ MapXtreme
ワークスペース マネージャ機能拡張
ContextMenuStrip MapContextMenu{get;}
ContextMenuStrip LegendContextMenu{get;}
ContextMenuStrip GenericTabContextMenu{get;}
}
イベント処理
機能拡張において、ワークスペース マネージャからのイベント通知を受け取る必要がある場合
は、IWorkspaceManagerNotifications インターフェイスをインプリメントし、Load() メソッドで
それを返すクラスを追加します。ワークスペース マネージャは、ワークスペースの作成、読み込
み、または保存時に、このクラスを呼び出します。
public interface IWorkspaceManagerNotifications
{
void OnNewWorkspace();
void OnWorkspaceLoaded(WorkSpaceLoader workspaceLoader, string
filename);
void OnWorkspaceSaving(WorkSpacePersistence workspacePersistence,
string filename);
void OnWorkspaceSaved(string filename);
void OnLayerControlDialog(MapInfo.Windows.Dialogs.LayerControlDlg
dlg);
}
機能拡張の読み込み
ワークスペース マネージャ機能拡張は、[機能拡張] > [機能拡張の読み込み] により、読み込むこと
ができます。アセンブリの場所を指定することのできる [開く] ダイアログが表示されます。
読み込み済みの機能拡張と読み込まれていない機能拡張を確認するには、[機能拡張マネージャ] ダ
イアログを使用します。このダイアログは、[機能拡張] > [機能拡張マネージャ] により表示するこ
とができます。プロパティ ダイアログが存在する場合は、このダイアログから表示することがで
きます。
メモリ内にあるアセンブリからの機能拡張の読み込み
機能拡張は、自動的に読み込むこともできます。ワークスペース マネージャは起動時に、読み込
む機能拡張を 2 か所で検索します。
ま ず、現 在 の AppDomain に 既 に読み込まれているすべてのアセンブリをスキャンして、
IWorkspaceManager をインプリメントする種類のものが存在するかを調べます。これは高度な使
用方法であり、SessionEventHandler (「ISessionEventHandler」を参照してください) にもワー
クスペース マネージャ機能拡張が含まれている場合のみ、この機能を使用します。
次にワークスペース マネージャは、WorkspaceManager.exe が格納されているのと同じサンプル
ディレクトリにある Extensions というフォルダを検索します。アセンブリは、
<my_extension>.WorkspaceManagerExtension.dll という名前でなければなりません。この
ディレクトリにあるすべての機能拡張アセンブリは、ワークスペース マネージャと同じ AppDomain
に読み込まれます。
MapXtreme v7.2
513
開発者ガイド
付録 B: カスタマイズ MapXtreme
ワークスペース マネージャ機能拡張
機能拡張の読み込みのためのコマンド ライン引数
ワークスペース マネージャが読み込む機能拡張を検索する場所を、コマンド ラインによって制御
することも可能です。
/LoadExtensions=[All|Folder|None]
各値の意味は、以下の通りです。
All を指定すると、読み込み済みのアセンブリを検索し、Extensions フォルダを検索します。
Folder を指定すると、Extensions フォルダのみを検索し、読み込み済みのアセンブリを
スキップします。
None を指定すると、機能拡張の自動読み込みを行いません。
機能拡張のアンロード
機能拡張は、ユーザによって、または、ワークスペース マネージャが終了するときにアンロード
することができます。機能拡張は、追加したメニュー、ツールバー、タブ ウィンドウなどを削除
し、できる限り多くのリソースを解放するように設計する必要があります。ワークスペース マ
ネージャを閉じると、機能拡張アセンブリは AppDomain からアンロードされます。
機能拡張の例
起動時に、以前使用していたワークスペースを読み込むワークスペース マネージャの機能拡張の
例を次に示します。
using MapInfo.WorkspaceManager.Extension;
using System.Windows.Forms;
using System;
public class LoadLastWorkspaceExtension : IWorkspaceManagerExtension
{
private string _name;
private IWorkspaceManager _callback;
private LoadLastWorkspaceExtension()
{
_name = "Load Last Workspace Extension";
}
public string Name
{
get { return _name; }
}
public string Version
{
get { return "0.57"; }
}
// this get called when extension is first loaded
MapXtreme v7.2
514
開発者ガイド
付録 B: カスタマイズ MapXtreme
アプリケーション データ ファイルの場所
// use it to hook up and UI like menu items, toolbars, etc
public IWorkspaceManagerNotifications Load(IWorkspaceManager
callback)
{
_callback = callback;
Microsoft.Win32.RegistryKey key = _callback.GetRegistryKey();
string s = (string)key.GetValue("RecentFiles");
if (s != null && s.Length > 0)
{
try
{
string[] files = s.Split('|');
callback.LoadWorkspace(files[0]);
}
catch { }
}
key.Close();
return null; // returning because we don’t need the
notifications
}
public void Unload()
{
// nothing to clean up
}
public bool HasPropertiesDialog
{
get { return false; }
}
public void ShowPropertiesDialog(IWin32Window owner)
{
throw new NotImplementedException();
}
}
アプリケーション データ ファイルの場所
MapXtreme のアプリケーションでは、以下のファイルに格納されているデータが使用されます。
MapXtreme v7.2
515
開発者ガイド
付録 B: カスタマイズ MapXtreme
アプリケーション データ ファイルの場所
ファイルの種類
ファイル名
略語ファイル
MAPINFOW.ABB
ペン ファイル
MAPINFOW.PEN
投影法ファイル
MapInfoCoordinateSystemSet.xml
ベクトル シンボル ファイル
MapInfow.fnt
カスタム シンボル ディレクトリ
CustSymb
Nadcon のファイル
*.las、*.los
jgd2000 のファイル
jgd2000.*
MapXtreme のアプリケーションでは、デフォルトで以下のディレクトリにあるデータ ファイルが
検索されます。
•
•
•
C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x - MapXtreme のインストーラによっ
てこれらのファイルが配置されるディレクトリです。
アプリケーションがあるディレクトリ - Windows アプリケーションの場合、.exe ファイルがあ
るディレクトリです。Web アプリケーションの場合、Web.config ファイルがあるディレクト
リです。
MapInfo.CoreEngine アセンブリ フォルダ - このディレクトリは、アプリケーションによって
検索される最後のディレクトリです。
上記の場所に対応するディレクトリのリストは、ISessions.AppDataPaths プロパティを使用して
取得します。このプロパティは、文字列の配列としてリストを返します。プログラムによってこ
のリストに追加することはできませんが、アプリケーションの構成ファイルでカスタム セクショ
ンを定義して追加することはできます。この方法を次のサンプル コードに示します。追加パスを
定義する順序によって、検索の順序が決まります。また、カスタムの場所は、上記のデフォルト
の場所の前に検索されます。
<SpecialPath> タグの例を次に示します。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MapInfo.CoreEngine"
type="MapInfo.Engine.ConfigSectionHandler,
MapInfo.CoreEngine, Version=6.8.0.536, Culture=neutral,
PublicKeyToken=93e298a0f6b95eb1" />
</configSections>
<MapInfo.CoreEngine>
<ApplicationDataPaths>
<SpecialPath>
<LocalApplicationData>YourCorporation\Your
Application<\LocalApplicationData>
<\SpecialPath>
</ApplicationDataPaths>
MapXtreme v7.2
516
開発者ガイド
付録 B: カスタマイズ MapXtreme
略語ファイルの検索
</MapInfo.CoreEngine>
</configuration>
こ の 例 で は、C:\Documents and Settings\username\Application Data\Your Corporation\Your
Application\CustSymb などのフォルダでカスタム シンボルが検索されます。<SpecialPath> 要素に
はフォルダ名 CustSymb を含めないように注意してください。含めた場合、このパスは ...\Your
Application\CustMapXtreme 2008\CustSymb\CustSymb と解釈されます。"CustSymb" が重複して
いるので、この指定は正しくありません。
アプリケーション データが .NET Framework の特別なシステム フォルダからの相対パスにある場
合 は、<SpecialPath> 構 文 を 使 用 します。たとえば、"My Documents" ディレクトリの下の
MyAppData というディレクトリにアプリケーション データがある場合、構成ファイルのエントリ
は次のようになります。
<Personal>MyAppData</Personal>
ここで "Personal" は、My Documents ディレクトリを表す、.NET Framework の
Environment.SpecialFolder 列挙体の値です。
上記の構成要素内の各要素についての説明を以下に示します。
<configSections>
カスタム セクションのハンドラを宣言する場所です。この例では、アセンブリ MapInfo.CoreEngine
で定義されている ConfigSectionHandler クラスで構成ファイルの MapInfo.CoreEngine セクションが
解析されます。
<MapInfo.CoreEngine>
このセクションには、MapInfo.CoreEngine アセンブリの設定があります。具体的には、アプリ
ケーション データの検索パスです。
<ApplicationDataPaths>
このセクションでは、MapXtreme でアプリケーション データ ファイルの検索に使用される追加パ
スを定義します。
<Path>
アプリケーション データのフル パスがわかっている場合に使用する要素です。
<SpecialPath>
アプリケーション データが、既知のシステム フォルダからの相対パスにある場合にこの構文を使用
します。たとえば、My Documents ディレクトリの下の MyAppData というディレクトリにアプリ
ケーション データがある場合、構成ファイルのエントリは <Personal>MyAppData</Personal>
とします。ここで "Personal" は、My Documents ディレクトリを表す Environment.SpecialFolder 列
挙型の値です。Environment.SpecialFolder 内の任意の列挙値を使用して、構成ファイルでアプリ
ケーション データのパスを定義できます。
略語ファイルの検索
略語ファイルをデータに合わせてカスタマイズすると、検索処理の効率を上げることができま
す。詳細については、「Find 処理の調整」を参照してください。
MapXtreme v7.2
517
開発者ガイド
MapInfo ワークスペース
について
MapXtreme は、移動したり共有で使用したりでき、MapInfo コードスペース
の定義を使用するワークスペース形式を備えています。この付録では、ワーク
スペースの定義、機能、および使用について説明します。MapInfo コードス
ペースの定義の詳細については、「付録 G : MapInfo コードスペースの定義」
を参照してください。
この付録の構成
Š
Š
Š
MapInfo ワークスペースとは . . . . . . . . . . . . . . . 519
.GST からのプログラムによる .MWS ワークスペースの作成 . . 524
ワークスペースの構造. . . . . . . . . . . . . . . . . . . 519
C
付録 C: MapInfo ワークスペースについて
MapInfo ワークスペースとは
MapInfo ワークスペースとは
MapXtreme では、作成するマップを、移動したり共有で使用したりできる XML ベースのワークス
ペース (拡張子 .MWS) として保持できます。ワークスペースとして保持すると、作業環境にかか
わらず、MapInfo 製品を使用している他のユーザとマップを共有できます。
現在、MapXtreme Java、MapX、または MapInfo Professional を使用するユーザは以下の異なる
ファイル形式でマップを保持しています。
•
MapXtreme Java のマップはマップ定義ファイル (.MDF ファイル) として保存されます。
•
MapX のマップは Geoset (.GST ファイル) として保存されます。
•
MapInfo Professional のマップはワークスペース (.WOR ファイルおよび .MWS ファイル) とし
て保存されます。
個々の MapInfo 製品のユーザは、これらのファイルを使用してマップを共有していました。
MapInfo Professional のワークスペースには、ブラウザ ウィンドウとレイアウト ウィンドウ、グ
ラフ、凡例、およびプリンタ設定が含まれる場合もあります。
MapInfo ワークスペース形式では、接続、マップ定義、マップ レイヤ、データ ソース定義、およ
びスタイルへのアクセス性と移植性を高める名前付きリソースを作成できます。メインのワーク
スペース スキーマの名前は MXP_Workspace_1_5.xsd です。このスキーマは製品メディアに収録
されています。他にも、マップ定義用の MXP_MapDefinition_1_5.xsd や、名前付きレイヤ、接
続、データ ソース定義、およびスタイル用の MXP_NamedReources_1_5.xsd などの関連スキー
マがあります。
XML ドキュメントではテキストの識別子を使用しており、また可能な場合は XML 標準化組織に
よって定められている識別子を使用しています。ただし、XML は拡張可能であり、ドキュメント
の作成者が、ドキュメント内で使用するデータの意味をわかりやすくするために識別子を追加で
きるようになっています。これらの識別子が Pitney Bowes Software の定義に従った名前になるよ
うに、識別子は MapInfo コードスペースで指定しています。MapInfo コードスペースの識別子につ
いては、「付録 G : MapInfo コードスペースの定義」を参照してください。
ワークスペースの作成およびワークスペース マネージャの使用の詳細については、「第 23 章 :
ワークスペース マネージャ」を参照してください。
L
MapInfo Professional で作成した .WOR ワークスペースは MapXtreme では使用できませ
ん。MapX の Geoset は MapXtreme で読み取れます。
ワークスペースの構造
ワークスペースの構造を理解するため、ワークスペースとその XML コードについて説明します。
MapXtreme のインストール先ディレクトリ下の Sample ディレクトリにある World.MWS ワーク
スペースを使用します。ここでは、ワークスペース内の 5 種類のデータのうち、4 種類について説
明します。
MapXtreme v7.2
519
開発者ガイド
付録 C: MapInfo ワークスペースについて
ワークスペースの構造
1. ヘッダーでは、バージョン タイプや作成日などの基本的なファイル情報を定義します。
2. 接続セクションでは、ワークスペースに含まれるデータベース、ファイル、および WMS 接続
を定義します。名前付き接続の情報もここで定義します。
3. データ ソース定義セクションでは、データとその場所を定義します。名前付きデータ ソース
定義がある場合も、ここで定義します。
4. マップ定義セクションでは、ラベルの詳細、ズーム範囲、使用する色など、ワークスペースに
関連するレイヤ、主題図、およびラベルの機能を定義します。マップ、レイヤ、主題図、スタ
イルの名前付き定義もここで指定します。
スキーマの追加セクションは、ユーザ定義のデータに使用します。これにより、アプリケーショ
ンで独自のデータを保持できます。ユーザ データは "ワイルドカード" の要素です。スキーマに対
して検証されないので、任意の内容を入力できます。
MapXtreme での名前付きリソースのサポートの詳細については、「名前付きリソースが含まれる
ワークスペースを開いて保存する」を参照してください。
ヘッダー セクション
ファイルの先頭には、XML ファイルのヘッダー情報が必須です。ここでは、ファイルが準拠する
XML のバージョン、エンコーディング、およびファイルがスタンドアロンかどうかを定義しま
す。ファイルの最上位の要素は Workspace 要素です。ここでは、ファイルのバージョン、日付、
および XML 名前空間の定義の属性を指定します。
L
MapXtreme でワークスペースの保持用にサポートされているエンコーディングは UTF-8
です。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<WorkSpace name="" version="MXP_WorkSpace_1_5"
xmlns:gml="http://www.opengis.net/gml"
xmlns="http://www.mapinfo.com/mxp">
接続セクション
接続 (ConnectionSet) セクションでは、ワークスペースを使用するのに必要なデータベース接続お
よびファイル接続を定義します。現在サポートされているデータベース接続は、MS Windows
ODBC 接続、Oracle (OCI) 接続、および JDBC ドライバ接続です。ファイル接続は、ファイルの
パスを示します。これらの接続の例を次に示します。
<ConnectionSet>
<DBConnection dbType="sqlserver">
<ConnectionName>JCD_SS2005_MIGS_BOUNDARY2</ConnectionName>
<ODBCConnectionString>driver={SQL Native Client};server=JODEMPSEW3\MIGS;database=MIUS06_BOUNDARY2;uid=MIGS;</ODBCConnectionString>
</DBConnection>
</ConnectionSet>
MapXtreme v7.2
520
開発者ガイド
付録 C: MapInfo ワークスペースについて
ワークスペースの構造
<ConnectionSet>
<FileConnection dbType="file">
<ConnectionName>MapStorage1_US</ConnectionName>
<FilePath>c:\data\maps</FilePath>
</FileConnection>
</ConnectionSet>
データソース定義セクション
データソース定義 (DataSourceDefinitionSet) セクションでは、各接続先で取得するデータ ファイ
ル (TAB ファイルなど) およびデータベース テーブルを定義します。取得するデータを表すメタ
データを指定することもできます。次の例は、名前付きデータ ソース定義、データベース データ
ソース定義、および TAB データ ソース定義を示しています。
<DataSourceDefinitionSet>
<NamedDataSourceDefinitionRef resourceID="MyDataSource"/>
<DBDataSourceDefinition id="id1" readOnly="false">
<DataSourceName>alias_Line_ontario_oracle_9i_rel
</DataSourceName>
<ConnectionMember>
<ConnectionName>ontario_oracle_9i_release_1</ConnectionName>
</ConnectionMember>
<DBQuery>
<Query>select * from us_hiway_extra</Query>
</DBQuery>
<DBDataSourceMetadata>
<FeatureGeometryAttribute srsName="mapinfo:coordsys 1,62">
OBJECT
</FeatureGeometryAttribute>
<KeyAttributes />
</DBDataSourceMetadata>
</DBDataSourceDefinition>
<TABFileDataSourceDefinition id="id2" readOnly="false">
<DataSourceName>alias_Line_us_hiway_extra</DataSourceName>
<FileName>FeatureLayerBuilder\us_hiway_extra.tab</FileName>
</TABFileDataSourceDefinition>
</DataSourceDefinitionSet> ...
マップ定義セクション
マップ定義 (MapDefinitionSet) セクションでは、1 つ以上のマップとそのマップを構成するレイヤ
を定義します。マップには、それぞれイメージのサイズ、ズームと中心の設定、レンダリング時
のマップの座標系などの表示条件があります。次の例は、名前付きマップ定義参照およびマップ
定義を示しています。LayerList の下には、2 つの名前付きレイヤ、3 つの定義済みレイヤ、および
ラベル レイヤの名前付きスタイル参照があります。
<MapDefinitionSet>
<NamedMapDefinitionRef resourceID="MyWorldMap"/>
MapXtreme v7.2
521
開発者ガイド
付録 C: MapInfo ワークスペースについて
ワークスペースの構造
<MapDefinition id="id7" name="Map1" alias="Map1" uniqueId="4adeb0e97c77-4957-a3fb-a1a0677756ef">
<DisplayConditions>
<MapSize uom="mapinfo:imagesize pixel">
<ImageWidth>600</ImageWidth>
<ImageHeight>400</ImageHeight>
</MapSize>
<ZoomAndCenter>
<MapZoom uom="mapinfo:length mi">3000</MapZoom>
<gml:Point srsName="EPSG:4269">
<gml:coordinates>-79.771366,38.003251000000006
</gml:coordinates>
</gml:Point>
</ZoomAndCenter>
<DisplayCoordSys>
<SRSName>EPSG:4269</SRSName>
</DisplayCoordSys>
</DisplayConditions>
<LayerList>
<NamedLayerRef resourceID="NamedLayer_World 25 Major Cities"/>
<NamedLayerRef resourceID="NamedLayer_World Capitals"/>
<FeatureLayer id="id8" name="World25Cities"
alias="World25Cities"
volatile="unknown">
<DataSourceRef ref="id4" />
</FeatureLayer>
<FeatureLayer id="id9" name="WorldCapitals"
alias="WorldCapitals"
volatile="unknown">
<DataSourceRef ref="id2" />
</FeatureLayer>
<FeatureLayer id="id10" name="Regions"
alias="Regions"
volatile="unknown">
<DataSourceRef ref="id6" />
</FeatureLayer>
<LabelSource maxLabels="2147483647" name="World 25 Major Cities">
<Visibility visible="true">
<VisibleRange enabled="true">
<ZoomRange uom="mapinfo:length mi" minInclusive="true"
maxInclusive="true">0 8000</ZoomRange>
</VisibleRange>
</Visibility>
<DataSourceRef ref="id3" />
<BaseLabelProperties>
<LabelProperties>
<LabelVisibility visible="true">
<VisibleRange enabled="false">
<ZoomRange uom="mapinfo:length mi"
minInclusive="true" maxInclusive="true">0 8000</ZoomRange>
</VisibleRange>
</LabelVisibility>
MapXtreme v7.2
522
開発者ガイド
付録 C: MapInfo ワークスペースについて
ワークスペースの構造
<LabelText justification="right">
<BaseLabelStyle>
<NamedStyleRef resourceID="Layer_id7" id="Layer_id7"/>
</BaseLabelStyle>
<StringTokenList>
<StringToken>
<StringValueExpression>
<AttributeName>Place_Name</AttributeName>
</StringValueExpression>
</StringToken>
</StringTokenList>
<LabelCharacterLimit
spacing="1">2147483647</LabelCharacterLimit>
</LabelText>
<LabelCallout visible="true" end="none">
<LineStyle stroke="black" width="1" widthunit="mapinfo:imagesize pixel">
<Pen>mapinfo:pen 2</Pen>
</LineStyle>
</LabelCallout>
<LabelReferencePosition recalculate="outOfView">
<LineLabelPositionInterval>0</LineLabelPositionInterval>
</LabelReferencePosition>
<LabelLayout>
<Alignment>
<HorizontalAlignment>right</HorizontalAlignment>
<VerticalAlignment>center</VerticalAlignment>
</Alignment>
<Offset uom="mapinfo:imagesize pixel">
<XOffset>-2</XOffset>
<YOffset>0</YOffset>
</Offset>
<LabelRelativeOrientation>parallel</LabelRelativeOrientation>
</LabelLayout>
<LabelBaseSize useScale="false">
<MapScale>0</MapScale>
</LabelBaseSize>
</LabelProperties>
</BaseLabelProperties>
<LabelThemeList />
</LabelSource>
</LayerList>
</MapDefinition>
</MapDefinitionSet>
レイヤのリストには、このマップに設定されているラベルのプロパティが含まれます。プロパ
ティには、ラベルがあるレイヤ、ラベルのファイル ソース、ラベルを表示する範囲などのラベル
の表示ルール、ラベルのフォントとサイズのプロパティ (必要な場合)、ラベルの文字制限、引き出
し線、ラベルの位置設定 (必要な場合)、およびラベルの配置や向きが含まれます。
MapXtreme v7.2
523
開発者ガイド
付録 C: MapInfo ワークスペースについて
.GST からのプログラムによる .MWS ワークスペースの作成
.GST からのプログラムによる .MWS ワークスペースの作成
MapX では、Map.SaveMapAsGeoset メソッドを使用して既存のマップから Geoset を作成しま
す。ユーザは、プログラムによってそれぞれのワークスペースを保存し、次に示すコードを使用
してワークスペース マネージャでワークスペースを表示できます。
L
ユーザがマップをワークスペースとして保存するには、1 つ以上のレイヤを含むマップを開
いている必要があります。
// Reads a MapX geoset, writes a MapXtreme workspace.
using MapInfo.Persistence;
using MapInfo.Mapping;
.
.
.
MapLoader MapLoader = MapLoader.CreateFromFile("my.gst");
MapExport MapExport = new MapExport();
MapExport.Map.Load(MapLoader);
WorkSpacePersistence wsp = new WorkSpacePersistence();
wsp.Save("c:\\temp\\newwork.mws");
MapXtreme v7.2
524
開発者ガイド
拡張可能データ プロバイダ
この付録では、MapXtreme の拡張可能データ プロバイダのアーキテクチャ
と、MapXtreme においてそのままではアクセスできない空間データに対し、
拡張可能データ プロバイダを作成する方法について説明します。
この付録の構成
Š
Š
Š
Š
Š
Š
Š
Š
Š
Š
はじめに. . . . . . . . . . . . . . . . . . . . . . . . . 526
拡張可能データ プロバイダの概要 . . . . . . . . . . . . . 526
作業の開始. . . . . . . . . . . . . . . . . . . . . . . . 529
必須コンポーネント. . . . . . . . . . . . . . . . . . . . 530
オプションの基本構築ブロック : ベース クラス、ヘルパ、ユーティリ
ティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .532
サンプル : COTW (Center of the World) データ プロバイダ . . 534
オプションのインターフェイス. . . . . . . . . . . . . . . 536
データ プロバイダの作成とテスト . . . . . . . . . . . . . 537
SpatiaLite サンプル データ プロバイダ . . . . . . . . . . . 539
高度なトピックと重要な検討事項. . . . . . . . . . . . . . 540
D
付録 D: 拡張可能データ プロバイダ
はじめに
はじめに
MapXtreme では、MapXtreme でサポートされていないデータ形式にアクセスするためにインプリ
メントすることのできる、拡張可能データ プロバイダ モデルが提供されています。このモデル
は、必須およびオプションのインターフェイス、抽象ベース クラスの基本構築ブロック、および
ユーティリティで構成されます。
MapXtreme のデータ プロバイダ モデルの拡張は、作成およびテストを担当する人々が多大な責任
を負うことが求められる、困難な作業です。ほとんどの MapXtreme ユーザにとっては、既存の空
間 デ ー タ 形 式 用 の MapXtreme デ ータ プロバイダ、または、非空間データ用の Microsoft の
ADO.NET で十分に要求を満たすことができます。MapXtreme のデータ アクセス方法に関する詳
細については、「第 8 章 : データでの作業」を参照してください。
MapXtreme データ モデルでは満たすことのできないデータ アクセス要件が存在する場合は、以下
に記載するインターフェイスと指針を用いて、データ モデルを拡張する必要があります。
MapXtreme の拡張可能データ プロバイダ インターフェイスは、MapXtreme のオブジェクト モデ
ルの中の MapInfo.Data.Provider 名前空間の下に整理されています。MapInfo.Data および
MapInfo.Data.Common 名前空間の中のクラスが、これらのインターフェイスをサポートします。
MapXtreme の拡張可能データ プロバイダは現在、テーブルのオープン、テーブルの内容と関連す
るメタデータの読み出し、複数の手法を用いたテーブル内容の検索、および挿入、更新、削除操
作によるテーブル内容の変更をサポートします。
拡張可能データ プロバイダの概要
MapXtreme 内の Catalog は、内部データ プロバイダ アーキテクチャとともに作成されます。拡張
可能データ プロバイダ モデルは、以下の図が示すように、.NET インターフェイスの集合によっ
てこの内部アーキテクチャを公開するためのものです。
MapXtreme v7.2
526
開発者ガイド
付録 D: 拡張可能データ プロバイダ
拡張可能データ プロバイダの概要
データ プロバイダの仕組みと、その作成方法を理解するための中心的な概念がいくつか存在しま
す。以下の図は、MapXtreme データ アクセス エンジンの、いくつかの主要なインターフェイスと
既存コンポーネントの間の関係を示すものです。拡張可能データ プロバイダのコンポーネント
は、太枠で囲まれた薄紫色で示されています。
データ プロバイダ
データ プロバイダは、アプリケーションとデータ ソースを結びつける役割を果たし、アプリケー
ションで使用するデータにアクセスするためのメカニズムを提供します。
MapXtreme v7.2
527
開発者ガイド
付録 D: 拡張可能データ プロバイダ
拡張可能データ プロバイダの概要
MapXtreme の拡張可能データ プロバイダは、インターフェイスのコレクションであり、任意の
データ ソースからの任意のデータ形式のデータへのアクセスを可能とします。データと、表示、
クエリ、編集、分析などの MapXtreme の機能との間の接続を提供する MapXtreme データ プロバ
イダを拡張しています。
データ プロバイダという語は、拡張機能インターフェイスの特定のインプリメントを指すもので
す。たとえば、MapXtreme には、(SQLite に基づく) SpatiaLite データベースにアクセスするため
のデータ プロバイダ インプリメントが含まれています。データ プロバイダ インプリメントの基
礎となる IDataProvider という拡張可能インターフェイスのデータ プロバイダ コレクションに、
インターフェイスがあります。
データ ソース
データ ソースとは、データベース管理システム、Web サービス、またはその他のエンジンやソフ
トウェア API のことで、データと、データの記述、クエリ、操作、関連付けなどを行うデータ ア
クセス機能を公開します。
データ ソースの例としては、マップ データをフィーチャのコレクションとして返す WFS サーバが
あります。WFS サーバは、フィーチャ タイプをテーブルとして公開することのできる、データ
ソースです。サービスの URL や、認証のためのその他のプロパティによって、データ プロバイダが
データ ソースにアクセスする方法が定義されます。この情報を、データ ソース定義と呼びます。
ほとんどのデータ プロバイダ インプリメントにデータ ソースが含まれますが、データ ソースの
概念は必須ではありません。ファイル ベースの形式に対するデータ プロバイダには、テーブル モ
デルのみが含まれる場合もあります。MapInfo テーブルと ESRI Shapefiles は、データ ソースへの
接続を必要としないデータ プロバイダの例です。
テーブル
テーブルは、同じスキーマ (またはフィールドの集合) を持つフィーチャの集合です。テーブル
に、ジオメトリ プロパティは必須ではありませんが、データ プロバイダを作成する場合には、
テーブルのうちのいくつかにジオメトリ プロパティが存在することになるでしょう。MapXtreme
において、ジオメトリ データは、テーブル上のフィールドとして、文字列や数値などの簡単な
データ型のフィールドと同じように扱われます。
テーブルは、テーブル内に含まれるデータを記述するためのメタデータを公開し、そのデータを
クエリしたり編集したりするためのアクセスを提供します。テーブル内のすべてのフィーチャ
は、データ プロバイダがキーを使用して一意に識別できる必要があります。MapXtreme ではキー
を、選択や結果セット、また、編集操作のために使用します。
カーソル
カーソルとは、フィーチャの集合を列挙するオブジェクトのことです。MapXtreme は、テーブル
に対して検索メソッドの 1 つを呼び出すことにより、データ プロバイダからのフィーチャをリク
エストします。テーブルは、カーソルを返します。このカーソルを用いて MapXtreme は、指定さ
れた条件を満たすフィーチャを列挙することができます。カーソルによって返されたフィーチャ
は、一時的なものです。つまり、現在のフィーチャから取得したデータは、カーソルが開いてい
て、その現在のレコード上に配置されている間のみ有効であるとみなされます。(次のフィーチャ
MapXtreme v7.2
528
開発者ガイド
付録 D: 拡張可能データ プロバイダ
作業の開始
へと移動したり、カーソルを閉じたりすることにより) カーソルの位置が変わると、そのフィー
チャにはもうアクセスできないとみなされます。堅牢かつ拡張性のあるデータ プロバイダをイン
プリメントするには、カーソル モデルのこの一時的な性質を利用し、特に FeatureGeometry オブ
ジェクトを返す場合に、メモリを再利用する必要があります。
フィーチャ アクセサは、キーによってフィーチャにアクセスするために使用される、特殊な種類
のカーソルです。MapXtreme において、キーによって 1 つ以上のフィーチャにアクセスする必要
がある場合には必ず、まずフィーチャ アクセサをリクエストし、それに対してフィーチャをリク
エストします。上述のカーソルの一時的な性質は、フィーチャ アクセサにも当てはまります。
作業の開始
さて、MapXtreme のデータ プロバイダ モデルを拡張しようと決めた場合、どこから作業を開始す
ればよいのでしょうか?
準備作業
まずこの付録全体とインプリメント例に目を通し、その概念とそれらの相互関係をしっかりと理
解しておくことをお勧めします。作業を開始する準備ができたら、作業に関連する要件を十分に
把握するために、まずは非常に簡単なデータ プロバイダを作成します。最終的には拡張可能な
データ プロバイダが必要である場合でも、必須の要素のみを使用して基本的なデータ プロバイダ
を作成することにより、データ モデルを深く理解することができます。
必要最小限の要素については、「必須コンポーネント」のセクションを参照してください。「拡
張可能データ プロバイダの概要」をよく読んで、さまざまなインターフェイスの相互関係と、
MapXtreme のデータ アクセス モデルとの関係を理解しておきます。提供されている「サンプル:
COTW (Center of the World) データ プロバイダ」を参照して、基本データ プロバイダのインプリ
メント方法を理解し、MapXtreme サンプルのソース コードによってインストールされた、完全な
機能を実現したデータ プロバイダである「SpatiaLite サンプル データ プロバイダ」を参照してく
ださい。
また、SDK に提供されているオプションの基本構築ブロックについても学習し、何が既にインプ
リメントされているのかを把握しておくことをお勧めします。「オプションの基本構築ブロック:
ベース クラス、ヘルパ、ユーティリティ」を参照してください。
データ プロバイダを作成する際にはまず、データ プロバイダにおいてデータ ソースを使用するか
どうかを決定する必要があります。すべてのデータ プロバイダに、この種類のモデルが存在する
わけではなく、これが必須であるというわけでもありません。単なるテーブルベースの場合もあ
ります。データ ソースとは、同一の接続によって複数のフィーチャ (またはテーブル) の集合にア
クセスするために通信する、任意のサービスまたはデータベースのことです。データベース サー
バは、必ずデータ ソースとして公開されるのに対し、データベースのテーブルはテーブルとして
公開されます。WFS サーバは、データ ソースとしてモデル化されるのに対し、WFS サーバが公
開する FeatureType は、テーブルとしてモデル化されます。ADO.NET DataSet は、データ ソース
として公開することができますが、そこに含まれる DataTable はテーブルとして公開されます。
Excel スプレッドシートは、選択範囲がさまざまなテーブルとして公開された、データ ソースとし
MapXtreme v7.2
529
開発者ガイド
付録 D: 拡張可能データ プロバイダ
必須コンポーネント
て公開されるでしょう。ASCII テキスト ファイルや、フィーチャの集合を 1 つだけ含むことので
きるその他のファイル形式のように、データ モデルがより簡単なものである場合は、おそらく
データ ソースは必要なく、データ プロバイダをテーブル モデルのみの簡単なモデルにすることが
できます。データが非常に複雑な場合でも、データ ソース モデルが必要でない場合があります。
たとえば、ファイルベースのデータ形式の中には、州や省、またはその他の何らかの規則に基づ
き、複数のファイルに分割してフィーチャを格納するものがあります。このような場合には、
テーブルベースのデータ プロバイダとなり、データ ソースは必要ありません。
より詳細な情報
拡張可能データ プロバイダのアーキテクチャを構成するインターフェイスは、MapInfo.Data.Provider
および MapInfo.Data 名前空間に定義されています。『MapXtreme リファレンス ガイド』の
MapInfo.Data.Provider 名前空間も参考にすることをお勧めします。
必須コンポーネント
基本データ プロバイダを作成するには、以下のコンポーネントをインプリメントする必要があり
ます。これらのクラスは、テーブルのオープン、テーブルの内容と関連するメタデータの読み出
し、テーブル内容の検索など、基本的なデータ アクセス操作をサポートします。
これらのインターフェイスのインプリメント方法に関するヒントや指針については、完全で堅牢なプ
ロバイダ インプリメントである「SpatiaLite サンプル データ プロバイダ」を参照してください。
MapXtreme v7.2
530
開発者ガイド
付録 D: 拡張可能データ プロバイダ
必須コンポーネント
IDataProvider インターフェイス
IDataProvider インターフェイスは、カスタム データ プロバイダ インプリメントの基礎となりま
す。このプロバイダが対象とするテーブル形式をオープンするための機能を公開します。また、
これらのテーブルを管理するデータ ソースに関連する機能も公開します。データ ソースを使用し
ないデータ プロバイダを作成することもできるため、IDataSource インターフェイスのインプリ
メントは、オプションの作業となります。このクラスは通常、シングルトンのインスタンスとし
て定義します。
ITableDefinition インターフェイス
ITableDefinition インターフェイスは、拡張可能データ プロバイダと、MapXtreme のパブリック
API Table モデルの間の主要なリンクとなります。特定のデータ プロバイダ用に ITable をインスタ
ンス化するために必要となるプロパティを提供します。このインターフェイスをインプリメント
す る ク ラ ス は、テ ー ブ ル を 開 く た めに MapXtreme のユーザが入力する情報を識別します。
MapXtreme Catalog は、OpenTable メソッドのオーバーロードをいくつか提供し、データ プロバ
イダのユーザが ITable からテーブルをインスタンス化できるようにしています。OpenTable が呼
び出された後には、ITableMetadata、ICursor、IFeature など、他のすべてのインターフェイスは
ユーザから隠蔽され、MapXtreme の内部で使用されます。
また、このインターフェイスは通常、ワークスペース ファイルに書き出しておくべき情報でもあ
ります。詳細については、「永続化プロバイダ」を参照してください。
ITable インターフェイス
ITable インターフェイスは、MapXtreme がマップにおいて読み、 クエリし、表示することのでき
る情報の基本コンテナである Table 用のインターフェイスを定義します。ITable のメソッドには、
SearchAll、SearchByEnvelope (対象領域)、SearchByKey などがあります。テーブルは、フィー
チャの単一のコレクションであり、すべてのフィーチャは同じ構造 (スキーマ) を持つ必要があり
ます。
ITableMetaData インターフェイス
ITableMetaData インターフェイスは、開いているテーブルのプロパティやサポート機能に関する
重要な情報を伝達するために使用します。その情報としては、フィールドやそのデータ型、テー
ブルに含まれるジオメトリのタイプ、編集操作をサポートするかどうかなどがあります。
テーブル メタデータは、テーブルのスキーマをフィールド定義のコレクションとして公開しま
す。フィールドは、IColumn および IGeometryColumn インターフェイスによって公開されます。
FeatureGeometry オブジェクトを返すフィールドはすべて、IGeometryColumn として公開する必
要があります。IGeometryColumn を使用することにより、プロバイダが、挿入および更新操作中
に返したり受け付けたりするジオメトリ値において Z および M 次元をサポートするかどうかを示
すこともできます。データ プロバイダのほとんどのインプリメントにおいて、MapXtreme 検索リ
クエストと、基盤にあるプロバイダ インプリメントとの間の情報の送受を支援するために、
IColumn および IGeometryColumn のカスタム インプリメントが含まれます。
MapXtreme v7.2
531
開発者ガイド
付録 D: 拡張可能データ プロバイダ
オプションの基本構築ブロック : ベース クラス、ヘルパ、ユーティリティ
ICursor インターフェイス
ICursor インターフェイスは、IFeature オブジェクトを返す IEnumerator です。ITable に対する検
索リクエストが発行された場合、その結果はフィーチャへのアクセスを提供する ICursor となりま
す。カーソルが返すフィーチャは、カーソルの状態が変化しない間だけ有効な、一時的なもので
ある可能性があります。次のレコード (フィーチャ) へとカーソルを進めると、現在のレコードの
新しい値に更新された、同じフィーチャ オブジェクトが返される場合があります。堅牢なデータ
プロバイダをインプリメントするには、このメモリ再利用の動作を利用する必要があります。
検索リクエストでは、テーブルが公開する属性 (フィールド) のサブセットが要求される場合があ
ります。カーソルが返すフィーチャは、検索において要求されたフィールドの構造に一致するも
のでなければなりません。
IFeatureAccessor インターフェイス
IFeatureAccessor は、テーブルからキーによってフィーチャをフェッチするために使用します。
指定されたキーで識別されるフィーチャを返す、FetchByKey という公開された 1 つの主要なメ
ソッドを持ちます。データ プロバイダが返す各フィーチャは、キーを含む必要があります。キー
の定義と内容は、データ プロバイダによって決定されます。MapXtreme が、FetchByKey リクエ
ストまたは編集操作のために、データ プロバイダにキーを返すと、データ プロバイダは正しいレ
コードを識別するためにそのキー値を使用します。IFeatureAccessor インターフェイスでは、
MapXtreme による呼び出しの集合を 1 つにまとめる方法を提供しています。これにより、必要な
らばデータ プロバイダは、コマンドを用意しておき、キー値のみをバインドして、FetchByKey の
各呼び出しを実行することができます。
オプションの基本構築ブロック: ベース クラス、ヘルパ、ユーティリ
ティ
MapXtreme の拡張可能データ プロバイダは、現状ではサポートされていない形式のデータにアク
セスするためにインプリメントすることのできる、インターフェイスのコレクションです。
MapXtreme では、すぐにインプリメントを開始できるように、さまざまなユーティリティ、サン
プル、および指針を提供しています。これらは、ほとんどのユーザが使用することのできる共通
のインプリメントです。これらに目を通すことにより、以下の項目について理解することができ
ます。
Š 「抽象ベース クラス」
Š 「ユーティリティ クラス」
Š 「キーのインプリメント」
非常に簡単なインプリメントを作成する場合でも、作業を開始する前に、ここで何が提供されて
いるかを理解しておくとよいでしょう。その一部が既に作成されているかもしれないからです。
MapXtreme v7.2
532
開発者ガイド
付録 D: 拡張可能データ プロバイダ
オプションの基本構築ブロック : ベース クラス、ヘルパ、ユーティリティ
抽象ベース クラス
多くのインターフェイスに対し、抽象ベース クラスが提供されています。抽象ベース クラスは、
インターフェイスのデフォルト インプリメントを処理することを目的としています。これによ
り、ユーザは必要な部分のみをインプリメントすればよいことになります。
たとえば、IDataProvider は、OpenDataSource メソッドと、2 種類の OpenTable メソッド (デー
タ ソースを使用するものと使用しないもの) を提供します。データ ソースを使用する場合は、
OpenDataSource と、データ ソースを使用する OpenTable をインプリメントする必要がありま
す。データ ソースを使用しない場合は、データ ソースを使用しない OpenTable のみをインプリメ
ントすればよいことになります。
IDataProvider の抽象ベース クラスには、これらのメソッドのデフォルト インプリメントがあり、
それらのメソッドがサポートされていないことを示しています。これらのメソッドには、"virtual"
という修飾子がついているため、どれに対してオーバーライドするインプリメントを作成するか
を決め、必要な部分のみを作成します。
ユーティリティ クラス
SimpleFeature
データ プロバイダの基本的な目的は、フィーチャにアクセスすることです。通常、フィーチャは
テーブル内の行です。空間フィーチャは、ジオメトリ、スタイル、キー、および属性で記述され
ています。
IFeature インターフェイスをインプリメントする、SimpleFeature というユーティリティ クラスが
提 供 され て い ま す。メタ デ ー タ (SimpleFeatureMetdata) 定義の関係と、Feature への Attribute
(AttributeValues) のリストが、識別するキー (IKey) 値とともにインプリメントされています。
SimpleFeature クラスは、ほとんどのデータ プロバイダで使用されます。
また、SimpleFeature は FeatureChangedEventHandler イベント管理もインプリメントします。
SimpleFeature については、MapInfo.Data.Common 名前空間の下に記載されています。
ジオメトリおよび座標系の OGC 変換
MapXtreme 拡 張 可 能 デ ー タ プ ロ バ イダには、OGC ジオメトリ (OpenGIS® Simple Features
Interface Standard) と MapXtreme ジオメトリの間の変換処理を支援するユーティリティがありま
す。これには、PostGIS、mySQL、SQL Server 2008 など、いくつかの空間データ システムが利
用する OGC の WKT (Well-Known Text) および WKB (Well-Known Binary) が含まれます。WKT と
は、空間リファレンス システムの標準テキスト表現のことです。WKB は、ジオメトリの標準バイ
ナリ表現です。
これらのユーティリティは、MapInfo.OGC 名前空間に含まれています。WKT および WKB 用の
データ リーダーとライタをインプリメントし、ビッグ エンディアンとリトル エンディアンの両方
のバイト オーダをサポートします。
MapXtreme v7.2
533
開発者ガイド
付録 D: 拡張可能データ プロバイダ
サンプル : COTW (Center of the World) データ プロバイダ
キーのインプリメント
MapXtreme データ プロバイダがアクセスするデータの要件は、すべてのフィーチャにキーが存在
することです。この SDK には、整数キーと文字列キーという、2 つの一般的なキー インプリメン
トが提供されています。
扱うデータが整数または文字列ベースである場合は、IKey インターフェイスからキーをインプリ
メントする必要はなく、このキー インプリメントのうちの 1 つを使用することができます。
サンプル: COTW (Center of the World) データ プロバイダ
"Center of the World" データ プロバイダは、データ プロバイダ インプリメントを組み立てる方法
を示すことを目的とした、非常に簡単な例です。このデータ プロバイダでは、経度/緯度 (0,0) の
空間ポイントを含む 1 行からなるテーブルを管理しています。
新しい拡張可能データ プロバイダをインプリメントするにはまず、IDataProvider をインプリメン
トするクラスを作成します。このクラスは、シングルトンのインスタンスとしてインプリメント
す る 必要 が あ り ます。そ う す る ことにより、このクラスに対するすべての参照 ( たとえば、
ITableDefinition や IDataSourceDefinition からの参照) が、同一のインスタンスへと一意に解決され
ます。以下に、サンプル インプリメントの最初の部分を示します。
using System;
using MapInfo.Engine;
using MapInfo.Data.Provider;
namespace COTW
{
public sealed class COTWDataProvider :
{
private static string PROVIDER_NAME = "Center of the World
Sample Extensible Data Provider for MapXtreme";
private static COTWDataProvider m_singleton = null;
private COTWDataProvider(string name)
: base(name)
{
}
public static COTWDataProvider GetInstance()
{
if (m_singleton == null)
m_singleton = new COTWDataProvider(PROVIDER_NAME);
return m_singleton;
}
}
}
MapXtreme v7.2
534
開発者ガイド
付録 D: 拡張可能データ プロバイダ
サンプル : COTW (Center of the World) データ プロバイダ
このクラスは、IDataProvider そのものではなく、AbstractDataProvider を拡張したものであるこ
とに注意してください。「オプションの基本構築ブロック: ベース クラス、ヘルパ、ユーティリ
ティ」で述べたように、抽象ベース クラスは、可能な限り適切なデフォルト インプリメントを提
供することを目的とする、基本構築ブロックとして提供されています。IDataProvider の場合、こ
の 抽 象 ク ラ ス は、name
プ ロ パ テ ィを管理し、NotImplementedException
をスローする
OpenDataSource および OpenTable メソッドのデフォルト インプリメントを含みます。これによ
りユーザは、何が関連しているかを把握し、それだけをインプリメントすることにより、簡潔な
インプリメントを作成することができます。
定義するテーブルの構造は固定であるため、必要となる ITableDefinition のインプリメントはそれ
ほど多くありません。意味のある例とするために、テーブル定義において、ポイントに使用する
ための外部指定ラベルとして使用することのできる文字列値を受け取ることにします。完全なイ
ンプリメントは、以下のようになります。
using System;
using MapInfo.Data.Provider;
namespace COTW
{
public sealed class COTWTableDefinition : AbstractTableDefinition
{
private string m_label;
public COTWTableDefinition(string label)
: base()
{
if (label == null)
throw new ArgumentNullException("label");
m_label = label;
}
public override IDataProvider DataProvider
{
get { return COTWDataProvider.GetInstance(); }
}
public string Label
{
get
{
return m_label;
}
}
}
}
ここでも、インターフェイスを直接使用するのではなく、抽象ベース クラスを使用しました。抽象
ベース クラスを使用することにより、この場合は、インターフェイスにおける DataSourceDefinition
および CustomMetadata プロパティのデフォルトのままでよい部分については、まったく気にしな
MapXtreme v7.2
535
開発者ガイド
付録 D: 拡張可能データ プロバイダ
オプションのインターフェイス
くてよいことになります。DataProvider プロパティが、先ほどインプリメントしたシングルトンの
COTWDataProvider インスタンスを参照する方法に着目してください。この例では、独自の新しい
プロパティも導入されています。
オプションのインターフェイス
MapXtreme 拡張可能データ プロバイダ モデルには、以下のようなデータにアクセスする場合のさ
らなる機能を提供する、オプションのインターフェイスがあります。
•
IDataSource
•
IDataSourceDefinition
•
ITableModifyProcessor
IDataSource
IDataSource インターフェイスは、Catalog.OpenTable において、新しいテーブルを特定のデータ
ソースに関連付けるために使用します。データ ソースを使用しないデータ プロバイダを作成する
こともできるため、これはオプションとなります。
データ ソースは、関連する IDataSourceDefinition を含む ITableDefinition が開かれるとき、また
は、Catalog.DataSources.OpenDataSource メソッドによって直接、インスタンス化されます。抽
出された IDataSourceDefinition が IDataProvider.OpenDataSource に渡されて、データ ソースへの
接続が確立され、関連付けられた IDataSource インスタンスが返されます。
IDataSourceDefinition
DataSourceDefinition は、データへのアクセスにデータ ソースを使用する場合のみ必要となりま
す。データ ソースをインスタンス化するためにユーザが入力する情報が含まれています。データ
ソースを使用しない場合は、TableDefinition のみを用意すればテーブルを開くことができます。
開かれるテーブルの処理において、データ ソースへの接続を確立するために、DataSourceDefinition
プロパティから IDataSourceDefinition が抽出され、OpenDataSource (IDataSourceDefinition,
CustomProperties) へと引き渡されます。
DataSourceDefinition を イ ン プ リ メ ントする際には、System.Object.Equals(object) メソッドを
オーバーライドする有効なインプリメントを作成する必要があります。
ITableModifyProcessor
テーブル メタデータは、Insert、Update、または Delete 操作がサポートされているかどうかを示
します。上記のいずれかの操作がサポートされている場合は、ITableModifyProcessor のインプリ
メントを用意する必要があります。特定の挿入、更新、および削除メソッドのインプリメント
は、対応する個々のメタデータ プロパティに従って作成する必要があります。あるデータ プロバ
MapXtreme v7.2
536
開発者ガイド
付録 D: 拡張可能データ プロバイダ
データ プロバイダの作成とテスト
イダは、たとえば挿入操作のみをサポートするかもしれません。MapXtreme で提供されている
ASCII データ プロバイダは、挿入操作のみをサポートし、更新または削除操作をサポートしない
データ プロバイダの 1 例です。
ITable インターフェイスにも、ReadOnly というプロパティがあることに注意してください。この
プロパティは、新たな制御レベルを加えるものであり、これによってテーブルが読み取り専用で
あることを示すことができます。データ プロバイダが完全にインプリメントされたモディファイ
プロセッサを提供していても、十分なアクセス権限がない場合や、データ ファイルが読み取り専
用メディア上にある場合など、他の理由によってテーブルが読み取り専用となる場合がありま
す。データ プロバイダは事前にこれらの条件を確認し、テーブル全体を読み取り専用とするか、
または、個々のテーブル メタデータ プロパティによって読み取り専用とすることができます。
データ プロバイダの作成とテスト
データ プロバイダの作成は複雑な作業であり、作成したデータ プロバイダ コードを呼び出すのは
ほとんどが MapXtreme であるため、そのデバッグも困難です。段階的にデータ プロバイダを作成
し、インプリメントした部分のみをテストしながら作業を進めていくことをお勧めします。この
作業をうまく進めるために、インプリメントしたい部分のみに対応するコードを記述することの
できるサンプル プロジェクトから開始するとよいかもしれません。データ プロバイダの拡張に伴
い、このサンプルを拡張していくことができます。ただし、これを直接データ プロバイダ プロ
ジェクトに含めてはいけません。Visual Studio では、単一のソリューションの中に複数のプロジェ
クトを作成することが可能です。
データ プロバイダ モデルの中にデータ ソースがある場合は、そこから作業を開始するのがよいで
しょう。IDataSourceDefinition および IDataSource のインプリメントを作成し、
Catalog.DataSources.OpenDataSource メソッドを使用して、MapXtreme がデータ プロバイダを
呼び出し、そのデータ ソース オブジェクトを DataSources コレクションに入れることができるか
どうかを確認します。
このテーブル モデルの最初の目標は、テーブルを開き、テーブルのメタデータを表示することに
なります。これならば、検索やカーソルに関する、これよりもかなり複雑なコードを記述するこ
となく、作成しテストすることができます。ITableDefinition、ITable、および ITableMetadata のイ
ンプリメントの作成が必要です。最初は、NotImplementedException をスローするように、検索お
よび変更インターフェイスをインプリメントします。テスト アプリケーションでは、テーブル定
義クラスのインスタンスを作成して内容を設定し、この定義を引数として Catalog.OpenTable を
呼び出すことによりテーブルをインスタンス化し、テーブルの TableInfo プロパティに設定された
フィールド定義を確認します。フィールド定義は、テーブル メタデータが MapXtreme に引き渡し
た情報を正確に反映していなければなりません。その情報としては、適切な座標系、データの上
下限値、ジオメトリ フィールドのデフォルト ビューなどがあります。
データ プロバイダの作成およびテストにおける次の作業は、非常に簡単な検索ロジックと、カー
ソル インプリメントを追加することです。テスト アプリケーションに、次のような簡単なコード
のブロックを追加します。
Table table = catalog.OpenTable(myTableDefinition, "MyTable");
foreach (Feature feature in table)
MapXtreme v7.2
537
開発者ガイド
付録 D: 拡張可能データ プロバイダ
データ プロバイダの作成とテスト
{
// inspect the feature, write out values to the console, etc...
}
このコードを動作させるには、ITable.SearchAll メソッドをインプリメントし、カーソル インプリ
メントを作成する必要があります。また、キー インプリメントを作成する必要があります。上記
のコード例で返されるフィーチャは、キーに対する適切な値を反映するものでなければなりませ
ん (ただし、値は文字列にシリアライズされます)。
この基本レベルのコードを動作させることができれば、データ プロバイダのマップにおけるテス
トを開始することができます。ここでは、スタイルが正しいかなど、期待通りのジオメトリが返
されているかどうかを視覚的に確認することができます。事前に SearchByEnvelope のインプリメ
ントが一部必要になります。ここでは areaOfInterest 引数は無視し、まずはデータの状態を確認す
ることのみを目的として、すべてのレコードを返します。すべてのリクエストに対してすべての
フィーチャを取得するため、パフォーマンスは低くなります。マウスをマップ上で移動させるた
びに MapXtreme が情報チップを表示しようとするのを防ぐために、レイヤ上の情報チップのプロ
パティをオフにしておくとよいでしょう。情報チップは、マウスが存在するポイント周辺の小さ
な領域 areaOfInterest とともにデータ プロバイダの階層をたどって呼び出しを行います。これに
加えて、すべてのテーブル フィーチャを返していたのでは、パフォーマンスは非常に低くなって
しまいます。また、フィーチャ アクセサをインプリメントするまでは、選択や結果セットの機能
をテストすることはできません。
先に進む前に、SearchByEnvelope メソッドのサポートを追加する必要があります。これを追加す
れば、マップのレンダリングに必要なフィーチャのみを MapXtreme に返すことができるようにな
るため、データ プロバイダの大まかなパフォーマンスを把握することができます。情報チップの
設定をオンに戻し、情報チップ式にさまざまな値を設定して、 MapXtreme に正しいデータが引き
渡されているかどうかを確認することもできるようになります。パフォーマンスが思わしくなけ
れば、さらに複雑にする前に、ここで一度設計を評価し、調整するとよいでしょう。
次の大きな関門は、フィーチャ アクセサ インターフェイスのインプリメントです。このインター
フェイスをテストする最も簡単な方法は、結果セット フィーチャ コレクションを作成し、フィー
チャを列挙することです。内部的には、結果セット フィーチャ コレクションは、検索条件を満た
すレコードのキーをキャッシュし、結果セットにアクセスする際にはフィーチャ アクセサを使用
します。
これらすべての部分を動作させることができれば、データ プロバイダの作成における最も困難な
作業のうちの最大の部分を終えたことになります。次に作成したいのは、永続化プロバイダで
す。これにより、作成した定義を MapXtreme ワークスペース ファイルに永続化することができま
す。ここでは、新しいワークスペース マネージャ拡張機能に着目し、ワークスペース マネージャ
機能拡張の追加を検討するとよいでしょう。この機能拡張は、テーブルを定義するためのユーザ
インターフェイスを提供し、永続化プロバイダ機能拡張に結合することができます。これによ
り、ワークスペースを設定および作成し、データ プロバイダの永続的なコンテンツとともにワー
クスペースを読み出すこともできるようになります。
MapXtreme v7.2
538
開発者ガイド
付録 D: 拡張可能データ プロバイダ
SpatiaLite サンプル データ プロバイダ
ここまでは、簡単なデスクトップ アプリケーション環境に限定してデータ プロバイダのテストを
実施することをお勧めします。永続化をインプリメントしたら、Web ベースの展開について検討
してみるとよいでしょう。これには、テーブル、カタログ全体、またはセッションが、複数の
ユーザ リクエストにわたってシリアライズできるように、シリアライゼーションのサポートが必
要になります。
SpatiaLite サンプル データ プロバイダ
拡張可能データ プロバイダ SDK には、拡張可能データ プロバイダ アーキテクチャの多くの機能を
実現した、データ プロバイダのサンプル インプリメントが含まれています。MapInfo.SpatiaLite.sln
は、SQLite3 Ado.Net データ プロバイダを使用して、基盤となる SQLite3 データベースへの接続を確
立し、MapXtreme アプリケーションにおいてテーブルを開く、Visual Studio ソリューションです。
このサンプル インプリメントは、セッション初期化時のカスタム コードの自動読み込みや、ワーク
スペース マネージャの機能の拡張など、MapXtreme のその他の拡張可能な側面も示すものとなって
います。このサンプルは、MapXtreme インストール ディレクトリの下の \Samples\DataProviders
フォルダにあります。
L
コンパイルすると実行可能なアプリケーションとなる、MapXtreme の他のサンプル アプリ
ケーションとは異なり、このサンプル インプリメントは .NET アセンブリを生成します。
こ の サ ン プ ル 作 成 の 目 的 は、動 作 す る ア プ リ ケ ー シ ョ ン を 作 成 す る こ と よ り も、
MapXtreme の拡張性オプションを示すことにあったためです。
MapInfo.SpatiaLite.sln は、次の 2 つのプロジェクトから構成されます。
•
SpatiaLite データ プロバイダ
•
SpatiaLite ワークスペース マネージャ機能拡張
SpatiaLite データ プロバイダ機能拡張
このプロジェクトのコードは、MapXtreme 拡張可能データ プロバイダのクラスおよびインター
フェイスを拡張して、SpatiaLite テーブルのオープン、レコードの挿入/更新/削除、テーブルの検
索、スタイルの変更、SQLite3 データベースへの新しいテーブルのインポートが可能な SpatiaLite
データ プロバイダを作成する方法を示します。より効率的にコーディングを行うために、抽象
ベース クラスを使用しています。どのクラスおよびインターフェイスを拡張したかという詳細に
ついては、サンプルに付属している Readme.rtf を参照してください。
コンパイル時に、SpatiaLite データ プロバイダ プロジェクトは、メイン データ プロバイダ インプ
リメントとして動作する MapInfo.SpatiaLite.DataProvider.SessionEventHandler.dll というアセンブ
リと、MapXtreme 起動時にデータ プロバイダの自動読み込みを可能とする セッション イベント
ハンドラを作成します。
MapXtreme v7.2
539
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
SpatiaLite データ プロバイダ アセンブリには、永続化プロバイダのインプリメントも含まれてい
ます。永続化プロバイダは、データ プロバイダのオプションのコンポーネントですが、便利なも
のです。永続化プロバイダにより、MapXtreme がそのままでは MapInfo ワークスペース (.MWS)
に読み書きすることのできない SpatiaLite テーブルおよびデータ ソース定義が可能となります。
「永続化プロバイダ」を参照してください。
SpatiaLite データ プロバイダにおける ISessionEventHandler のインプリメントも、オプションで
すが便利なコンポーネントです。これをデータ プロバイダ アセンブリに含めることにより、
MapXtreme 起動時にデータ プロバイダを自動読み込みすることができるようになります。つま
り、MapXtreme セッションの初期化後、直ちに MapXtreme アプリケーションに SpatiaLite テーブ
ル定義を読み込み、使用可能とすることができます。
SessionEventHandler は、データ プロバイダの拡張機能に固有のものではありません。セッショ
ン起動時に必要となる任意のカスタム コードを読み込むために、使用することができます。この
機能を利用して、カスタム SpatiaLite テーブルおよびデータ ソース定義を永続化しています。他
のカスタム コードにこれを使用するには、アセンブリに SessionEventHandler.dll という接尾辞を
付け、MapXtreme がこれを認識するように \Common
Files\MapInfo\MapXtreme\7.x.x\SessionEventHandlers に配置する必要があります。このトピック
の詳細については、「ISessionEventHandler」を参照してください。SpatiaLite ワークスペース
マネージャ機能拡張
MapXtreme におけるもう 1 つの主要な拡張点は、ワークスペース マネージャの機能を拡張可能と
したことです。SpatiaLite データ プロバイダ サンプルに含まれている SpatiaLite ワークスペース
マネージャ機能拡張プロジェクトが、その例です。このプロジェクトでは、ワークスペース マ
ネージャを拡張して、SpatiaLite メニュー、ダイアログ、およびデータベースに接続してテーブル
を開くためのコードを提供します。
このプロジェクトをコンパイルすると、WorkspaceManagerExtension DLL という接尾辞の付いた
アセンブリが生成されます。このアセンブリは、SpatiaLite データベース用のテーブル定義を提供
する SpatiaLite データ プロバイダに依存します。
ワークスペース マネージャ機能拡張は、ワークスペースの作成や保存に伴って必要となる任意の
機能を含むことができます。これらについては、「付録 B : カスタマイズMapXtreme」を参照し
てください。
高度なトピックと重要な検討事項
このセクションでは、拡張可能データ プロバイダの設計や作成において、検討すべきさまざまな
トピックを取り上げます。
MapXtreme v7.2
540
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
Š
Š
Š
Š
Š
Š
Š
Š
「ジオメトリの作成」
「座標系」
「スタイル」
「例外処理」
「永続化プロバイダ」
「シリアライゼーション」
「認証」
「スレッド セーフ機能」
ジオメトリの作成
サ ー ド パ ー テ ィ の 空 間 形 式 を サ ポートする拡張可能データ プロバイダでは、その形式と
MapXtreme FeatureGeometry 形式の間で空間データを変換する必要があります。カーソルや
フィーチャ アクセサから取得した IFeature オブジェクトの値として、FeatureGeometry オブジェ
クトが返されます。それらが含むフィーチャおよびジオメトリ オブジェクトは、一時的なもので
す。MapXtreme は、カーソルが開いており、現在のフィーチャの上に存在する間だけ、これらの
オブジェクトが有効であるとみなします。そのため、非常に堅牢で拡張性のあるデータ プロバイ
ダ インプリメントでは、カーソルまたはフィーチャ アクセサの存続期間にわたって、同じフィー
チャとフィーチャ ジオメトリ オブジェクトを再利用しようと試みます。
1 度作成された後、現在のフィーチャに対応して継続的に更新されるジオメトリのことを、“一時
的な” ジオメトリと呼びます。MapXtreme のジオメトリ モデルには、ジオメトリのこのような使
用を可能とする、コンストラクタとメソッド シグネチャがあります。MultiPoint、MultiCurve、お
よび MultiPolygon オブジェクトを最初に作成した後、新しいフィーチャに対する変更を加えるた
めに、これらの既存のインスタンスに対してジオメトリ エディタ インターフェイスを使用するこ
とができます。MultiCurve および MultiPoygon オブジェクトに対しては、Clear メソッドを使用し
てジオメトリを空にしてから、それぞれ AddCurve または AddPolygon を使用してジオメトリを再
定義することができます。MultiPoint オブジェクトに対しては、ReplaceAll メソッドを使用して再
定義することができます。また、入力配列を使用するコンストラクタ シグネチャと Add/Replace
メソッドは、オプションのサイズ指定をサポートし、単一配列のインスタンスも効率よく再利用
できるようにしています。
OGC 変換コードは、上述の方法で動作します。WKB と WKT のパースに使用する内部のバイト配
列は再利用され、必要に応じてサイズが大きくなります。データが適切なジオメトリ メソッド
(AddPolygon など) に引き渡されるとき、入力配列の方が引き渡されたデータよりも大きい可能性
があるため、配列サイズに対応するフォームが使用されます。
複数のポリゴンからなる MultiPolygon オブジェクトに対し、MapXtreme は通常、いずれかのポリ
ゴ ン の 間 に 内 側 / 外 側 の 相 互 関係があるかどうかを調べます。たとえば、ドーナツ型の
MultiPolygon インスタンスは、外側のポリゴンと、カッターとして解釈される 2 つめの内側ポリ
ゴンからなり、2 つで論理的に単一のジオメトリを構成している場合があります。ジオメトリ
コードは、デフォルトでは何の仮定も行いません。編集が終了した時点ですべての構成ポリゴン
を解析し、上述のような関係が存在するかどうかを検索します。変換されるサード パーティの空
間形式において、既にこのような関係がわかっており、ポリゴンを正しい順序 (外側のポリゴンの
直後にその内側にあるポリゴン) で追加することができるならば、MapXtreme がすべてのポリゴ
MapXtreme v7.2
541
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
ンを再度解析するという負荷の高い処理を行う必要はありません。MultiPolygon クラスのオーバー
ロードされた EditingComplete メソッドを使用し、withinSpecified 引数として “true” を指定する
ことにより、この操作を抑制することができます。
この処理には、多大な時間がかかる可能性があります。1 つのノードを移動すると、内側のポリゴ
ンが突然外側のポリゴンになってしまう可能性がある、対話型の編集操作には、これが必要にな
ります。データ プロバイダでは通常、ジオメトリを作成するたびにこのような負荷の高い処理が
必要になることはない形式で、データが格納されていることが既にわかっています。
ジオメトリの数が多い場合、またはノード数の多い複雑なジオメトリである場合には、このよう
なジオメトリ オプションを理解し利用することが、パフォーマンスの高いデータ プロバイダをイ
ンプリメントするために必須となります。
座標系
MapXtreme のジオメトリ フィールドは、同じ座標系の FeatureGeometry オブジェクトを返す必要
があります。異なるフィールドやテーブルでは、異なる座標系を使用しているかもしれません
が、テーブルのある 1 つのフィールドから返されるジオメトリ値はすべて同じ座標系を使用し、
テーブルのメタデータが IGeometryColumn.CoordSys プロパティによって提供する座標系と一致
しなければなりません。
ほとんどのデータ プロバイダでは、データとともに格納および管理されているメタデータによっ
て座標系を判断します。しかし、その情報が存在しない場合は、データ プロバイダはテーブルの
定義の一部として座標系を指定するようにユーザに要求することができます。
座標系は、Session.CoordSysFactory プロパティから使用可能な CoordSysFactory インスタンスに
よって作成することができます。データ プロバイダが返すすべての FeatureGeometry オブジェク
トに対し、新しい座標系オブジェクトを作成する必要はありません。IGeometryColumn インター
フェイスが返す座標系オブジェクトは、各 FeatureGeometry オブジェクトによって直接参照するこ
とができます。挿入および更新操作のためにデータ プロバイダに引き渡される FeatureGeometry
オブジェクトは、データ プロバイダに引き渡される前に MapXtreme によってフィールドの座標系
に変換されます。
スタイル
MapXtreme の拡張可能データ プロバイダ モデルは、次の 2 つの方法でフィーチャ ジオメトリの
スタイルをサポートします。
•
テーブル内のすべてのフィーチャに適用されるスタイル プロパティ
•
フィーチャごとのスタイル情報を含む、スタイル属性フィールド
拡張可能データ プロバイダ テーブルから開かれた MapInfo.Data.Table に、少なくとも 1 つのジオメ
トリ フィールド (マップ作成可能テーブル) が存在する場合、そこにはスタイル フィールドがありま
す。そのフィールドには、拡張可能データ プロバイダ テーブルのスタイル フィールドから取得した
データか、それが存在しない場合は、データ プロバイダ テーブルの IGeometryColumn.DefaultStyle
プロパティで指定されるデフォルト スタイルのデータが設定されます。
MapXtreme v7.2
542
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
ITableMetadata.Columns
スタイル情報は、MapInfo.Data.Provider.ITableMetadata インターフェイスで提供されるフィール
ド 定 義 に よ っ て 受 け 渡 し さ れ ま す。スタイル属性フィールドは、ITableMetadata.Columns の
IColumn インスタンスであり、その DataType プロパティには MIDbType.Style という値が設定さ
れています。スタイル属性フィールドは、テーブル内の複数のフィーチャに異なるスタイル値が
含まれる可能性がある場合のみ、必要となります。
IGeometryColumn.DefaultStyle
テーブルの 1 つのフィーチャ ジオメトリ フィールドの中のオブジェクトをレンダリングする際
に、単一のスタイルを一様に適用したい場合には、スタイル属性フィールドは不要です。この場
合に対しては、スタイル オブジェクト インスタンスを、フィーチャ ジオメトリ フィールドの
DefaultStyle プロパティ (IGeometryColumn.DefaultStyle) として直接管理することができます。
スタイル フィールドが存在する場合でも、デフォルト スタイルを常に設定しておくことをお勧め
します。デフォルト スタイルは、スタイル フィールドに null 値が含まれていたり、値が設定され
ていなかったりした場合に、代用するスタイル属性値として使用します。デフォルト スタイルを
明示的に設定しなければ、MapXtreme には必要に応じて適用することのできる内部デフォルト ス
タイルがありません。
フィーチャ ジオメトリ フィールドに対しデフォルト スタイルのみを使用する場合でも、Catalog
内で開かれた Table インスタンスに関連付けられたフィールド コレクションの中に、スタイル
フィールドが表示されます。このフィールドは、null 値が設定可能で、読み取り専用です。また、
すべての値のデフォルト値は、指定されたデフォルト スタイル インスタンス値となります。
拡張可能データ プロバイダ インプリメントにおいて、複数のジオメトリ フィールドや、複数のス
タイル フィールド データ構成を定義してはいけないという明示的な規則はありませんが、メタ
データ モデルは、スタイル フィールドのジオメトリ フィールドへの明示的な関連付けをサポート
しません。マップ レイヤをレンダリングする場合、そのレイヤを処理するテーブルには、単一の
ジオメトリ フィールドが存在し、それに隣接するスタイル フィールドはあっても 1 つだけとい
う、暗黙の仮定があります。同様に、モデルでは、拡張可能データ プロバイダにおいて、隣接す
るジオメトリ フィールドが存在しないスタイル フィールドを含むテーブルを定義することが許可
されていますが、そのようなテーブルは、現時点では正しくキャッシュされず、また、他の形式
にエクスポートすることもできない可能性があります。
例外処理
データ プロバイダにおける例外処理は非常に重要です。データ プロバイダは通常、ファイル ハン
ドルやデータベース接続などのシステム リソースを扱うことになります。通常コードや例外コー
ドの流れにおいて、これらのリソースをきちんとクリーンアップしなければ、リークが生じ、時
間の経過とともにアプリケーションの異常動作やメモリ リークにつながる恐れがあります。この
ような問題は、プールされたセッションを利用する Web アプリケーションにおいて多く見られま
す。メモリ リークによって、最終的にはシステムがシャットダウンしたり、リークした接続の解
放を待つ複数のプロセスがハングしたりする場合があります。
MapXtreme v7.2
543
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
スローする例外は、Microsoft が「例外処理のベストプラクティス」で規定する、標準的な .NET
の慣習に従う必要があります。カスタム例外をスローする場合は、
Data.Provider.DataProviderException クラスを使用します。必要ならば、追加の動作を提供するた
めにこのクラスをサブクラス化することができます。
例外処理は、データ プロバイダのリソースの外部化を検討するよい機会でもあります。リソース
ファイルの中の文字列やビットマップなどのリソースを適切に把握することにより、データ プロ
バイダを他の言語向けにローカライズすることができます。SpatiaLite データ プロバイダのサンプ
ルでは、例外処理用にリソース文字列を処理するためのリファレンス インプリメントが提供され
ています(プロジェクトの中の Resources.cs ファイルを参照してください)。
永続化プロバイダ
MapXtreme は、デ ー タ ア ク セ ス 情報 ITableDefinitions および IDataSourceDefinitions の、
MapXtreme の XML ベースのワークスペース (.MWS) への保存をサポートします。これは、拡張可
能データ プロバイダのオプションのコンポーネントであり、ワークスペースを他のユーザと共有
したり、後にその情報を再利用したりする必要がある場合に、利用することができます。
拡張可能データ プロバイダに永続化サポートを追加する最も簡単な方法は、
MapInfo.Data.Provider.IMxpPersistenceProvider インターフェイスをインプリメントする永続化プ
ロバイダ クラスを作成することです。
より高度な永続化プロバイダを作成する場合は、作成されたワークスペース ファイルの XML 検証
をサポートするためのスキーマを提供することを検討してください。MapXtreme は、ワークス
ペース XML を自動的に検証することはしないため、明示的にこの機能が必要である場合のみ、こ
れを作成します。
永続化プロバイダを独自のアセンブリとして作成することを検討してもよいでしょう。プロバイダ
は、拡張可能データ プロバイダの他のコンポーネントとは独立して、事前に読み込まれる場合があ
ります。プロバイダ アセンブリならば、明示的に必要になったときにデータ プロバイダを読み込
むように制御することにより、他のコンポーネントの読み込みを先送りすることができます。
永続化プロバイダの使用方法
永続化プロバイダは、Catalog の PersistenceProviderCollection の中で管理されます。このコレク
ションは、セッション起動時に MapXtreme がデフォルトの場所のアセンブリの中に、永続化プロ
バイダが含まれているかどうかを検索する際に、自動的に初期化される場合があります。デフォ
ルトの場所は、\Program Files\Common Files\MapInfo\MapXtreme\7.x.x\SessionEventHandlers で
す。プロバイダを、PersistenceProviderCollection の Add および AddFromFolder メソッドを使用
して、プログラムによって PersistenceProviderCollection に追加することもできます。
セッション コンテキストを MapInfo.Persistence.WorkspacePersistence クラスによって MapInfo
ワークスペース ファイル (.MWS) に保存するとき、拡張可能データ プロバイダから開かれたテー
ブルがカタログの中に存在するかどうかを PersistenceProviderCollection に問い合わせます。その
データ プロバイダに対する永続化プロバイダが存在する場合は、その永続化プロバイダを用い
て、拡張可能テーブル情報をワークスペースに永続化します。同様に、ワークスペースが読み込
MapXtreme v7.2
544
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
まれるときには、使用可能な永続化プロバイダのコレクションの中から、拡張可能データ プロバ
イダ テーブルに関連付けられたワークスペース ファイルの中のカスタム タグを理解することので
きるデータ プロバイダを検索します。
永続化プロバイダのインプリメント
PersistenceProviderCollection.AddFromFolder メソッドで永続化プロバイダ クラスを読み込むに
は、このクラスに引数のないパブリックのコンストラクタ シグネチャが存在する必要がありま
す。このメソッドは、MapXtreme のセッション初期化時に内部で使用されるものと同じです。
PersistenceProviderCollection.Add メソッドをプログラムで使用するために、新しいコンストラク
タ シグネチャを追加することができます。
MapXtreme では、ユーザが永続化プロバイダ クラスをインプリメントするための開始点として、
AbstractMxpPersistenceProvider という抽象ベース クラスを提供しています。
永続化プロバイダにおいて用意する必要のあるものとして、その永続化プロバイダに対してサ
ポートされているデータ プロバイダ、(XML タグ用の) エンティティ名、およびスキーマ名前空間
が 存 在 す る か ど う か を 確 認 す る メ ソ ッ ド が あ り ま す。こ れ ら の メ ソ ッ ド と し て、
IMxpPersistenceProvider インターフェイスに含まれる 3 つの問い合わせメソッドをインプリメン
トします。
SupportsDataProvider() は、指 定 さ れ た IDataProvider に 対 す る ITableDefinition お よ び
IDataSourceDefinition 構造体を管理するプロバイダを特定するために使用します。一般的に、永続
化プロバイダは、単一のデータ プロバイダをサポートするように作成されるため、このメソッド
のインプリメントは通常、指定された IDataProvider がそのデータ プロバイダ クラスのインスタ
ンスであるかどうかを確認するだけの簡単なものとなります。
SupportsSchemaNamespace と SupportsEntityName は互いに連携して、ワークスペースの永続化
解除時に、拡張可能データ プロバイダ コンテンツに対して特定された名前空間とタグ名をサポー
トする永続化プロバイダを特定します。たとえば、ワークスペース ファイルを読んでいくと、拡
張可能データ プロバイダに対する以下のようなコンテンツが現れます。
<sample:SampleTableDefinition xmlns:sample="http://sample/sample">
<sample:TableName>test</sample:TableName>
</sample:SampleTableDefinition>
XMLNode オブジェクト参照は、外側のタグに対して取得されます。NamespaceURI プロパティ
("sample") は SupportsSchemaNamespace に引き渡され、LocalName プロパティ ("SampleTableDefinition")
は SupportsEntityName に引き渡されて、両者をサポートする永続化プロバイダが特定されます。抽象ク
ラスで提供されているコンストラクタ シグネチャも、これらのメソッドのデフォルト インプリメント
をサポートします。
AbstractMxpPersistenceProvider には、IMxpPersistenceProvider.Schema のデフォルト インプリ
メントとともに動作して、アセンブリ内に組み込みリソースとして添付されている .xsd スキーマ
ファイルへの XMLSchema 参照を返すコンストラクタ シグネチャがあります。詳細については、
『開発者リファレンス』を参照してください。
MapXtreme v7.2
545
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
IMxpPersistenceProvider のその他のメソッドは、データ ソースおよびテーブル定義の読み取り/書
き込みを行うものです。データ ソースを使用しないデータ プロバイダでは、テーブル定義に対す
る読み取り/書き込みメソッドのみをインプリメントします。データ ソースが存在する場合は、
データ ソース定義を永続化する必要があります。その処理は、MapXtreme が行います。ユーザ
は、テーブルに固有のテーブル定義プロパティの永続化のみを考えればよいことになります。
読み取りメソッドには、拡張可能コンテンツに対する XML タグへの XmlElement ハンドルが含まれ
ます。データ ソースとテーブル定義のコンポーネントは、その要素内の子ノードとして管理されま
す。上記の SampleTableDefinition の例に続くインプリメント コードは以下のようになります。
ITableDefinition td = null;
if (node.LocalName.Equals("SampleTableDefinition") &&
node.NamespaceURI("http://sample/sample"))
{
string tableName = null;
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode.LocalName.Equals("TableName") &&
childNode.NamespaceURI.Equals("http://sample/sample"))
{
tableName = childNode.InnerText;
}
}
td = new SampleTableDefinition(tableName);
}
書き込みメソッドでは、ワークスペース XML に挿入する XmlElement を作成する必要がありま
す。これらの要素は、XML ドキュメント インスタンスにバインドされるため、永続化される拡張
可 能 デ ー タ プ ロ バ イ ダ 定 義 イ ン タ ーフェイスとともに、XmlDocument が引き渡されます。
DataSourceDefinition の書き込みメソッドでは、XmlDocument がメソッド引数として直接引き渡
されるのに対し、TableDefinition の書き込みメソッドでは、XmlDocument が
IMxpPersistenceServices 引数の Document メンバとして引き渡されることに注意してください。
XmlElement outerTag = xmlDocument.CreateElement("sample",
"SampleTableDefinition", "http://sample/sample");
XmlElement innerTag = xmlDocument.CreateElement("sample", "TableName",
"http://sample/sample");
innerTag.InnerText = "test";
outerTag.AppendChild(elNode);
詳細な情報および例については、『開発者リファレンス ガイド』、「SpatiaLite サンプル データ
プロバイダ」、および『MapXtreme Code Exchange』にあるその他のデータ プロバイダ例を参
照してください。
シリアライゼーション
シリアライゼーションとは、オブジェクトを永久に保存したり、有効期間の間メモリに保持した
りするために、オブジェクトをデータ ストリームに変換するプロセスです。このプロセスは、
MapXtreme Web アプリケーションやマルチスレッド デスクトップ アプリケーションにおいてオ
ブジェクトを維持する上で、不可欠です。
MapXtreme v7.2
546
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
シリアライゼーションをしなければ、たとえばセッション中にオブジェクトに対する Web リクエ
ストが生じるたびに、オブジェクトを再作成しなければならなくなります。
シリアライズされたオブジェクトに対するリクエストが生じると、オブジェクトはデシリアライ
ズされ (データ ストリームから復元すること)、変更が加えられます。MapXtreme のシリアライ
ゼーション アルゴリズムは、(他のシリアライゼーション アルゴリズムとは異なり) オブジェクト
のコピーを作成しません。したがって、デシリアライズされるオブジェクトは 1 回しか作成され
ません。
Web アプリケーションやマルチスレッド デスクトップ アプリケーションの状態管理を適切に行う
ために、アプリケーション開発者が MapXtreme Table インスタンスを直接、または、すべての
テーブルのコレクションを含む MapXtreme Catalog のシリアライゼーションによって、シリアラ
イズしなければならない場合がよくあります。テーブルの種類がサポートされていない場合は、
アプリケーション開発者はその制約下で、テーブルと、それらの Catalog の全体的な状態を明示的
に管理する方法を考案しなければなりません。このため、拡張可能 データ プロバイダの開発者に
は、作成したプロバイダのシリアライゼーションをサポートし、MapXtreme の Table シリアライ
ゼーション ワークフローに適切に統合することをお勧めします。
シリアライズが必要なプロバイダ インプリメントのコンポーネント
MapXtreme ではテーブルを、永続的なものか一時的なものかで区別します。永続的なテーブル
は、その定義と構造のみをシリアライズすれば、デシアライズ時に正しく再作成することができ
ます。一時的なテーブルでは、これに加えて、データをシリアライズする必要があります。拡張
可能データ プロバイダのテーブルは、永続的なテーブルであるとみなされるため、全体的なシリ
アライゼーション作業は軽減されますが、それでも複数のプロバイダ クラスをシリアライズする
必要があります。
データ ソースの概念をサポートするプロバイダの場合は、IDataSourceDefinition および IDataSource
インターフェイスをインプリメントするクラスが、両方ともシリアライズ可能でなければなりませ
ん。データ ソースをサポートするか否かにかかわらず、すべてのプロバイダは、ITableDefinition お
よび ITable インターフェイスをインプリメントするクラスのシリアライゼーションもサポートする
必要があります。また、デシアライゼーションが正しく行われるようにするために、ITableDefinition
および IDataSourceDefinition インターフェイスは、Equals メソッドの有効なオーバーライドを提供
する必要があります。
ITableMetadata をインプリメントするクラスは、明示的にシリアライズ可能である必要はありま
せんが、シリアライズ可能にしておく方が望ましいことを示す理由がいくつかあります。シリア
ライズ可能でない場合、それらのテーブルおよびデータ ソース インスタンスのデシリアライゼー
ションでは、それらを再作成しなければならない場合があり、メタデータの再取得は、パフォー
マンスの観点から負荷が高い可能性があります。
シリアライゼーション作業を支援するために、拡張可能データ プロバイダ API では、これらの各
インターフェイスのシリアライズ可能な抽象ベース クラスを提供しています。デフォルト インプ
リメントで管理される関連プロパティについても、シリアライゼーションのサポートが提供され
ています。
MapXtreme v7.2
547
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
クラスのシリアライズ方法
.NET では、System.Runtime.Serialization 名前空間の ISerializable インターフェイスのインプリメ
ントと、クラス定義への [Serializable] 属性の適用を組み合わせることにより、クラスをシリアラ
イズ可能にします。プロバイダの開発者は、インプリメントの作成において、.NET シリアライ
ゼーションに関する一般的な指針に従ってかまいませんが、特に提供されている抽象ベース クラ
スから派生させたクラスを作成する場合には、両方を適用することを強くお勧めします。
シリアライゼーションをサポートしない場合の注意点
ソリューションのコンポーネントとしてプロバイダを使用するアプリケーション開発者に対し、
より適切で広範囲なサポートを提供できるように、拡張可能データ プロバイダにおいて、シリア
ライゼーションをサポートすることを推奨します。しかし、プロバイダ インプリメントにおいて
シリアライゼーションをサポートしなければならないという厳格な要件があるわけではありませ
ん。実際、このサポートを提供することが基本的に困難であるか、信頼性が低いことを示す、正
当な理由が存在する場合もあります。
アプリケーション開発者は、.NET リフレクション API を使用して、プロバイダがシリアライゼー
ションをサポートしているようだということを確認することはできますが、状態管理を必要とす
るアプリケーションに、どのようにしてそのプロバイダを正しく使用するかという点について
は、必要な情報がすべて提供されているとは限りません。このようなソリューションのコンポー
ネントとして、そのプロバイダ インプリメントを使用することができるか、どのようにして使用
するのかという具体的な情報を記載した、ドキュメントを作成することを強くお勧めします。
シリアライゼーションと依存関係
MapXtreme 拡張可能データ プロバイダには、必須および推奨クラスの間に存在する、多くの依存関
係があります。ITableDefinition には、IDataSourceDefinition プロパティがあります。IDataSource に
も IDataSourceDefinition があり、ITable には IDataSource、ITableMetadata、および ITableDefinition
プロパティがあります。
通常は、参照が共有される可能性のあるプロパティは、シリアライズする必要はないかもしれま
せん。たとえば、ITableDefinition の IDataSourceDefinition プロパティは、複数のテーブルを開く
ために再利用されるデータ ソース定義である場合があります。ITableDefinition をインプリメント
するクラスのシリアライゼーションに、これを含める必要はありません。ITable の IDataSource お
よび ITableDefinition プロパティにも同じことがいえます。
定義プロパティは、参照を共有するために後で上書きされる場合でも、シリアライズに含めるこ
とをお勧めします。
テ ー ブル の デ ー タ ソ ー ス の シ リ アライズは、MapXtreme が自動的に行うため、ITable 内の
IDataSource 参照はシリアライズしてはいけません。
共有オブジェクト参照は、MapXtreme が提供するシリアライゼーション ロジックによって再確立
されます。拡張可能データ プロバイダ API には、中核となる MapXtreme データ アクセス エンジ
ンがこの作業を実施するために必要な仕組みが含まれています。具体的な例としては、以下のも
のがあります。
•
IDataProvider インターフェイスの ReAssociate メソッド
•
ITableDefinition インターフェイスの設定可能な DataSourceDefinition プロパティ
MapXtreme v7.2
548
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
シリアライゼーションのインプリメント
クラスは、[Serializable] 属性を付与するか、System.Runtime.Serialization.ISerializable インター
フェイスをインプリメントすることにより、シリアライズします。これらの両方を行うことをお
勧めします。ISerializable.GetObjectData メソッドをインプリメントする必要があり、このメソッ
ドはパブリックでなければなりません。
public void GetObjectData(SerializationInfo info, StreamingContext
context)
抽象ベース クラスを派生させたクラスでは、このシグネチャに override キーワードを付け加え、
インプリメントの最初の行では、管理するコンポーネントのシリアライゼーションをベース クラ
スにデリゲートする必要があります。たとえば、次のようなケースが考えられます。
base.GetObjectData(info, context);
インスタンス内のその他のシリアライズ可能なメンバは、文字列キーとメンバ値を引数として
SerializationInfo 型の引数である info の AddValue メソッドを呼び出すことにより、info へとシリ
アライズします。たとえば、次のようなケースが考えられます。
info.AddValue("TableName", _tableName);
デシリアライゼーションのインプリメント
デ シ リ ア ラ イ ゼ ー シ ョ ン を サ ポ ートするには、上記の GetObjectData と引数が同じである
protected のデシリアライゼーション コンストラクタを用意します。たとえば、次のようなケース
が考えられます。
protected COTWTableDefinition(SerializationInfo info, StreamingContext
ctxt)
抽象ベース クラスを派生させたクラスである場合には、このコンストラクタは、管理するコン
ポーネントのデシリアライゼーションをベース クラスにデリゲートする必要があります。たとえ
ば、次のようなケースが考えられます。
protected COTWTableDefinition(SerializationInfo info, StreamingContext
ctxt) : base(info, ctxt)
こ の コ ン ス ト ラ ク タ 内 で、ク ラ ス インスタンスは、SerializationInfo 型の引数である info の
“get” メソッドを使用して値を取得することにより、メンバ変数に値を代入します。たとえば、
上記の GetObjectData の例でシリアライズした TableName 値をデシリアライズするコードは、以
下のようになります。
_tableName = info.GetString("TableName");
シリアライゼーションに関連するメソッドについては、少なくとも部分的には、インプリメント
するクラスがシールド クラスであるか否かによって、オーバーライドのサポートやメソッド属性
などに関する推奨が異なります。FxCop のようなコード解析ツールを使用すると、適切な推奨を
得るための有効な支援を得ることができます。
詳細な情報および例については、『MapXtreme 開発者リファレンス (オンライン ヘルプ)』、この
付録の中の「SpatiaLite サンプル データ プロバイダ」、および『MapXtreme Code Exchange』
にあるその他のデータ プロバイダの例を参照してください。
MapXtreme v7.2
549
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
認証
データ プロバイダの多くは、データ ソースまたはテーブルを開く際に認証を必要とします。デー
タ ソースやテーブルでは、認証の詳細がセキュリティの下に格納されており、一般からアクセス
可能な共有ワークスペース ファイルから使用することはできません。
OpenDataSource および OpenTable の処理の実行時認証をサポートするために、MapXtreme 拡張
可能データ プロバイダ モデルでは、IDataProviderCallback という新しいインターフェイスを提供
しています。このインターフェイスでは、データ ソースやテーブル定義に何かが不足しており、
データ ソースやテーブルを開くことができない場合の解決策として、拡張可能データ プロバイダ
が使用することのできるユーザ定義のコールバック メソッドをサポートします。
最も簡単なインプリメントとしては、カスタム データ プロバイダのクライアント コードに、
IDataProviderCallback インターフェイスをインプリメントし、データ ソースまたはテーブルを直
接開くために使用される IDataSourceDefinition および ITableDefinition コールバック メソッドのイ
ンプリメントを提供するクラスを用意することになります。
しかし、ほとんどのユーザは、IDataProviderCallback の初期化を含む別個のアセンブリを、MapXtreme
Session の初期化の一環として読み込むことが必要になるでしょう。「ISessionEventHandler」を参
照してください。デフォルト ワークスペースの読み込み時にデータ ソースまたはテーブル定義を解決
しようとする場合は、これが必要になります。たとえば、Web ベースのアプリケーションでは、コー
ルバックのセッション初期化のサポートが必要になります。
データ プロバイダ コールバックの使用方法
コールバック メソ ッドの呼び出しは、データ プロバイダのインプリメントで処理します。
MapXtreme は、コールバック メソッドのコレクションのサポートを管理し、定義されたインター
フェイスによってこれをデータ プロバイダに渡します。MapXtreme が、IDataProviderCallback の
いずれかを呼び出すことはありません。
IDataProviderCallback インスタンスは、MapXtreme Session Catalog の中の
DataProviderCallbacksCollection によって管理されます。このコールバック コレクションのコレ
クションは、コールバック オブジェクトを System.Type に関連付け、各 Type の関連付けごとに
複数のコールバックをサポートします。DataProviderCallbacksCollection の管理には、いくつかの
方法があります。Session 初期化時 (SessionEventHandler/DataProvider の読み込みのセクション
を参照してください)、アプリケーション初期化時、および、非常に簡単な使用方法として、クラ
イアント アプリケーションからの OpenTable への明示的な呼び出しの直前に管理する方法があり
ます。
MapXtreme は、Session Catalog に対し、OpenDataSource または OpenTable メソッドに関連付けられ
たコールバックをクエリし、コレクションへの参照をデータ プロバイダに提供します。IDataProvider
インターフェイスは、OpenDataSource および OpenTable 操作時、IDataProviderCallback のコレクショ
ンを列挙する IEnumerator への参照をサポートします。OpenDataSource または OpenTable の失敗が、
入力される DataSourceDefinition または TableDefinition の変更によって解決可能である場合は、
DataProvider クラスは、OpenDataSource または OpenTable の失敗の解決に必要となる適切なロジック
をインプリメントするために、IEnumerator が参照する任意のコールバックを使用することができま
す。あるいは、DataProvider では、設計的に不十分な定義オブジェクトを補完するための、有名な手法
をインプリメントすることもできます。
MapXtreme v7.2
550
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
コールバックの典型的な例は、デスクトップ アプリケーション環境において、OpenDataSource
コールバックが、ユーザにダイアログを表示し、データ プロバイダに対する有効なユーザ名とパ
スワードの組み合わせの入力を求めることにより、認証を解決するというものです。
データ プロバイダ コールバックのインプリメント
IDataProviderCallback インターフェイスでは、IDataSourceDefinition と ITableDefinition の両方の
データ プロバイダ定義型のデータを変更するための、メソッド シグネチャが定義されています。
IDataProviderCallback をインプリメントするクラスは、OpenDataSource/OpenTable 要件を満た
すために、定義オブジェクトの実行時更新を行うメソッドの適切なインプリメントを提供する必
要があります。
また、正しい対処方法を判断するための、さらなる実行時状態情報をコールバックに提供するた
めに、コールバック メソッドで IDataProviderCallbackInfo インターフェイスを定義することもで
きます。IDataProviderCallbackInfo は、単なるマーカー インターフェイスであり、コールバック
に提供する情報の性質を定義することはしません。一般的なインプリメントには、実行時例外や
状態列挙体属性が含まれます。
MapInfo.Data.Provider 名前空間には、データ プロバイダ インプリメンタやクライアント アプリケー
ションで使用することのできる、標準的なインプリメントがあります。DataProviderCallback クラス
は、デリゲートベースのコールバック ハーネスをインプリメントし、クライアント コードにおいて
拡張可能データ プロバイダ アセンブリの外部のコールバック メソッドを割り当てることができるよ
うにしています。DataProviderCallbackExceptionInfo クラスは、System.Exception 参照を保持するも
のとして IDataProviderCallbackInfo をインプリメントしており、DataProviderCallbackCollection は、
IDataProviderCallback の ICollection をインプリメントしています。
以下は、認証を解決するコールバック シナリオのインプリメント方法を示す例です。
// Create a method to handle the OpenDataSource InvalidCredentials state
// Implements IDataProviderCallback.Callback signature
public static IDataSourceDefinition InvalidCredentialsCb(
IDataSourceDefinition dsd, IDataProviderCallbackInfo info)
{
// Implementation details are specific to the Data Provider,
specifically, to the appropriate IDataSourceDefinition implementation
DataProviderCallbackExceptionInfo pcinfo
= info as DataProviderCallbackExceptionInfo;
if (pcinfo != null)
{
if (pcinfo.Exception == /* invalid credentials */)
{
// Example: present user dialog
string newpwd = GetPasswordFromUser();
// Example: create new EDP implementation specific DataSourceDefinition
// with updated password credentials
return new EDPDataSourceDefinition(newpwd);
}
}
}
MapXtreme v7.2
551
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
// MXT/EDP client code
{
// Create a callback harness and assign the callback method
DataProviderCallback cb = new DataProviderCallback();
cb.DataSourceDefinitionCallback = InvalidCredentialsCb;
// Associate the IDataProviderCallback with the EDP definition data type
Session.Current.Catalog.DataProviderCallbacksCollection.AddProviderCallba
ck(
typeof(EDPDataSourceDefinition), cb);
// Create an initially invalid Data Source Definition
EDPDataSourceDefinition dsd = new
EDPDataSourceDefinition("badpassword");
// open table
EDPTableDefinition tableDef = new EDPTableDefinition (dsd);
Table t = Session.Current.Catalog.OpenTable(tableDef, "TESTTABLE");
}
データ プロバイダにおける IDataProviderCallback の使用のインプリメント
IDataProvider の OpenDataSource および OpenTable メソッドには、IDataProviderCallback イン
スタンスの列挙子があります。この列挙子は、Catalog によって自動的に提供されます。
DataProvider のインプリメントでは、OpenDataSource または OpenTable 操作を完了するため
に、必要ならばコールバックを列挙し、呼び出す必要があります。
DataProvider のインプリメントでは、有効なオープン データ ソースが作成されていることを確認
するために、たとえば以下のように処理が進行します。
public override IDataSource OpenDataSource(
IDataSourceDefinition definition,
CustomProperties customProperties,
IEnumerator<IDataProviderCallback> callbacks)
{
EDPDataSourceDefinition dsDef = definition as EDPDataSourceDefinition;
if (dsDef == null)
{
// invalid definition
// throw exception
}
EDPDataSourceDefinition tmpDsDef = dsDef;
EDPDataSource ds = null;
bool needDS = true;
while (needDS)
{
needDS = false;
DataProviderCallbackExceptionInfo cbinfo = null;
MapXtreme v7.2
552
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
try
{
// Data Source ctor will fail if data source definition is invalid,
e.g., invalid credentials
ds = new EDPDataSource (tmpDsDef, customProperties);
}
catch (Exception e)
{
cbinfo = new DataProviderCallbackExceptionInfo(e);
}
if (ds == null
&& callbacks != null)
{
while (!needDS
&& callbacks.MoveNext())
{
// callback will return null if it is unable to modify the
//
the definition appropriate for a retry attempt
//
Example: User selected cancel from a credential input dialog
tmpDsDef = callbacks.Current.Callback(dsDef, cbinfo) as
EDPDataSourceDefinition;
if (tmpDsDef != null)
{
needDS = true;
}
} // while (!needDS and callbacks.MoveNext())
} // if (ds == null && callbacks != null)
if (!needDS
&& cbinfo != null)
{
throw cbinfo.Exception;
}
} // while(needDS)
return ds;
}
スレッド セーフ機能
MapXtreme はスレッド セーフです。つまり、予期せぬ副作用を生じることなく、異なるスレッド
が同時に異なるセッション、カタログ、テーブル、マップなどにアクセスすることができます。
MapXtreme オブジェクトはマルチスレッド対応ではなく、マップ、テーブル、カタログなどの同
一のインスタンスを、複数のスレッドから同時にアクセスすることはできません。少なくとも
データ プロバイダが Web 環境に展開される可能性がある場合には、データ プロバイダのインプ
リメントにおいて、このモデルに従う必要があります。
MapXtreme v7.2
553
開発者ガイド
付録 D: 拡張可能データ プロバイダ
高度なトピックと重要な検討事項
一般的に、グローバル変数やシングルトンのオブジェクトなどに依存しない限り、コードはス
レッド セーフであるはずです。スレッド ローカル ストレージの使用にも依存しないことをお勧め
します。ASP.NET は、リクエストの実行スレッドを実際に変更する可能性があるためです。これ
らの指針に従ってデータ プロバイダを作成すれば、コード内の同期ロックを完全になくすことは
できなくても、多数挿入する必要はなくなります。同期ロックは、ソリューションの拡張性を妨
げる可能性があります。しかしアクセスする実際のデータにおいて、同期が不可避であるか、ま
たは望ましい場合があります。たとえば、データ プロバイダが Excel スプレッドシートのデータ
を公開する場合、スプレッドシートは、異なるスレッド (または異なるプロセス) による読み出し
操作は許可する一方で、編集操作はできないようにロックされる可能性があります。このような
シナリオに対しては、データ プロバイダの作成方法を検討することが重要になります。カーソ
ル、フィーチャ アクセサ、およびモディファイ プロセッサはすべて、必要に応じてデータに対す
るある種類のロックを暗黙的に想定します。ただし、アクティブなカーソル、フィーチャ アクセ
サ、およびモディファイ プロセッサが存在しない場合は、基盤にあるデータ ファイル (存在する
場合) を開いたままにしてはいけません。
IDataProvider は唯一の例外であり、これはシングルトンとしてインプリメントすることをお勧め
します。このインターフェイスは、ファクトリ インターフェイスであり、状態を持ってはいけま
せ ん ( つ ま り、静 的 な INSTANCE プロパティ以外のクラス メンバ変数は存在しません)。
MapXtreme がデータ ソースやテーブルを開くためにデータ プロバイダを呼び出すには、定義オブ
ジェクトがデータ プロバイダを参照する必要があります。このメカニズムを実現するために、イ
ンスタンス化可能なクラスが必要ですが、シングルトンのクラスでまったく問題ありません。
ユーザは、接続をキャッシュし、できればデータ ソースやテーブル オブジェクトもキャッシュし
て、OpenTable または OpenDataSource の呼び出し時にそれらを再利用したいと考えるかもしれ
ません。決してこれを行わないことを、強く推奨します。MapXtreme は、Catalog にデータ ソー
スおよびテーブルのコレクションを提供し、ITableDefinition および IDataSourceDefinition クラス
で提供された Equals ロジックによって、正しいインスタンスを検索し、再利用します。これによ
り、クロス スレッドやマルチスレッドの状態に陥ることを防ぎます。ADO.NET データ プロバイ
ダなど、基盤にあるデータ アクセス技術では、データ ベース接続をキャッシュし、再利用してい
るかもしれません。そのアーキテクチャは、マルチスレッド環境における正しい動作を保証する
ものであるため、問題ありません。
MapXtreme v7.2
554
開発者ガイド
E
MapXtreme アプリケー
ションからの印刷
この付録では、MapXtreme 開発プロジェクトから、最良のマップ イメージを
印刷する方法について説明します。最初に、印刷機能の概要といくつかのヒン
トについて説明し、次に、MapXtreme アプリケーションの印刷時に発生する
可能性がある問題のトラブルシューティングについて説明します。
この付録の構成
Š
Š
Š
Š
Š
概要. . . . . . . . . . . . . . . . . . . . . . .
MapXtreme の印刷オプションについて . . . . . . .
アプリケーションへの印刷のインプリメント. . . . .
印刷に関する一般的なヒント. . . . . . . . . . . .
これまでに知られている印刷に関する問題の対処方法.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
556
556
560
562
566
付録 E: MapXtreme アプリケーションからの印刷
概要
概要
MapXtreme 開発アプリケーションからの印刷は、通常は、ごく簡単です。しかし、多様な印刷デ
バイスの広がりに伴い、デバイス固有の問題が発生します。そこで、開発者には、ユーザによる
印刷をカスタマイズするために、さまざまな機能が提供されています。これらのオプションは、
印刷するマップと使用するデバイスに応じて印刷を最適化するように設計されています。各種プ
リンタおよびプロッタのニーズや差異に合わせて、それぞれ異なる設定値が設計されています。
MapXtreme では、次の操作を実行できます。
•
マップの印刷 - MapPrintDocument クラスを使用します。
•
凡例の印刷 - LegendPrintDocument クラスを使用します。
•
デバイスへの直接出力または拡張メタファイル (EMF) を使用する出力。
•
•
異なるサイズのマップの印刷。
透過色や透過レイヤを含むマップの印刷。
詳細については、「GDI+ による透過性とアンチエリアシング」を参照してください。
•
透過ラスタ イメージの印刷。
透過ラスタ イメージを印刷するには、EnableTranslucency を有効にする必要があります。
MapXtreme では、次の操作は実行できません。
•
印刷オプション ダイアログ ボックスの使用。
•
レイアウトの印刷。
レイアウトは、マップ内の凡例を印刷する上で重要です。この制約に対処する方法につい
ては、「マップ内に凡例を印刷する」を参照してください。
複数ページのマップの印刷。
マップが複数のページにわたる場合、先頭のページのみ印刷されます。
プログラムを通じてのファイルへの出力。
この機能をインプリメントするには、Microsoft.NET 2.0 Framework
System.Printing.PrinterSettings クラスを使用する必要があります。
•
•
MapXtreme アプリケーションの印刷を処理するクラスは、Microsoft.NET 2.0 Framework
System.Drawing.PrintDocument クラスから派生したクラスであり、その機能を継承しています。デ
バイスの出力制御は、Microsoft.NET 2.0 Framework の System.Printing.PrinterSettings クラスおよび
System.Printing.PageSettings クラスによって管理されます。MapInfo.Printing.MapPrintDocument ク
ラスはマップを印刷するものであり、MapInfo.Printing.LegendPrintDocument は凡例の印刷に使用さ
れます。
MapXtreme の印刷オプションについて
MapXtreme アプリケーションからマップまたは凡例を印刷する場合は、ユーザに以下の印刷オプ
ションを提供できます。ユーザがこれらの設定を制御できるためには、この機能を、アプリケー
ションの印刷ダイアログ ボックスに組み込む必要があります。これらのオプションの変更を特に
許可しない場合は、デフォルト設定が使用されます。これらの設定値はプログラムを使用して調
整することもできます。
MapXtreme v7.2
556
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
MapXtreme の印刷オプションについて
印刷サイズ
MapXtreme は、マップを異なるサイズで印刷するオプションを備えています。マップを印刷する
サイズを変更するには、MapPrintDocument.MapPrintSize プロパティを、MapPrintSize 列挙体の
中の 1 つの値に設定します。その値は次のとおりです。
ページの大きさに合わせる
このオプションはデフォルト値であり、縦横比を変更せずに、ページに収まるように拡大縮小し
てマップを印刷します。
MapPrintDocument.MapPrintSize=MapPrintSize.FitPage
ページ全体
ページ全体に収まるようにようにマップを印刷します。縦横比が保持されないため、マップが歪
むことがあります。
MapPrintDocument.MapPrintSize=MapPrintSize.FillPage
現在のマップ サイズ
マップを元のサイズで印刷します。問題なく印刷できることもありますが、印刷されるページよ
りマップが大きい場合、はみ出た部分は失われます。
MapPrintDocument.MapPrintSize=MapPrintSize.MapSize
L
以下のプロパティは、MapInfo.Printing.MapPrintDocument クラスおよび
MapInfo.Printing.LegendPrintDocument クラスで共通です。
透過ラスタの特殊処理
これによって、アプリケーションは、透過ピクセルの表示とラスタ イメージの印刷を内部で管理で
きます。画面上では、透過イメージは、ラスタ操作 (ROP) を使用して透過ピクセルを処理すること
によってレンダリングされます。この方法は、印刷時には、動作することもあれば動作しないこと
もあります。それは、MapXtreme では、異なる方法を使用して、印刷時の透過に関連する方法を決
定するためです。特定の印刷ドライバが ROP を正しく処理するかどうかを判断し、それに応じて
値を true または false に設定する必要があります。多くの印刷環境では、この値は true に設定
する必要があります。画面に描画する場合、この値は通常 false に設定されます。この値を設定
するには、DrawingAttributes.SpecialTransparentRasterHandling を使用します。この
値を true (デフォルト) に設定すると、アプリケーション内部で印刷を管理できます。
L
この設定は、ベクトル レイヤの印刷には影響しません。
透過ベクトルの特殊処理
これによって、アプリケーションは、印刷時の透過ベクトルのフィル パターンを内部で管理でき
ます。この機能を有効または無効にするには、
DrawingAttributes.SpecialTransparentVectorHandling を使用します。これを true
に設定すると、MapXtreme は、透過フィル パターンまたは透過ビットマップ シンボルを印刷する
MapXtreme v7.2
557
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
MapXtreme の印刷オプションについて
ときに特殊な処理を実行できます。この設定は、通常、印刷で使用されます。透過フィル パター
ンおよび透過ビットマップ シンボルの印刷を印刷デバイスに処理させる場合は、これを false に
設定します。どのフィル パターンがビットマップで、どのフィル パターンがベクトルであるかの
詳細については、「フィル パターンの使用時に印刷を高速化する」を参照してください。
可能な場合ラスタ データを True Color で表示
プリンタによっては、24 ビット (True Color) イメージがサポートされません。MapXtreme は、こ
れ に 対 処 す る 内 部 機 能 を 備 え て い ま す。こ の 機 能 を 有 効 ま た は 無 効 に す る に は、
DrawingAttributes.TrueColorRaster を使用します。
これを true (デフォルト) に設定すると、24 ビット (True Color) を使用してラスタ イメージおよ
びグリッド イメージを印刷できます。これは、イメージが 24 ビットで、プリンタが 256 色 (8
ビット) 以上をサポートする場合に可能です。プリンタが 24 ビット イメージをサポートしない場
合は、この属性を false として設定し、DitherMethod で指定されるディザリングを使用して、
256 色のみでラスタ イメージをレンダリングします。この値を false に設定して 24 ビット イ
メージを印刷した場合、イメージは非常に劣化して印刷されます。この属性を false に設定する
場合は、ディザリング方法も設定する必要があります (以下を参照)。
GDI+ による透過性とアンチエリアシング
MapXtreme の GDI+ レンダリング機能を利用することで、半透明のライン、ラベル、レイヤを作
成できます。また、アンチエリアシングも適用できるため、高解像度レンダリングを低い解像度
で表示するときに、直線と曲線の縁や塗りつぶしエリアの外周がぎざぎざになるのを防ぎ、なめ
らかにすることができます。
MapPrintDocument または LegendPrintDocument を使用してマップや凡例を印刷すると、自動的
に DrawingAttributes.EnableTranslucency プロパティが Map.DrawingAttributes の値に設定され、
DrawingAttributes.SmoothingMode プロパティが Legend.DrawingAttributes の値に設定されます。
このプロパティは、初期化後にユーザが独自の値に設定できます。これにより、この 2 つの表示
オプションは明示的に設定しなくても、マップまたは凡例から引き継がれます。
EnableTranslucency: マップを画面、プリンタ、またはファイル エクスポートに出力する際に、
スタイルの色やレイヤの透過値を取得、または適用するかどうかを設定します。このプロパティが
false の場合、スタイル (Color.A など) およびレイヤ (MapLayer.Alpha など) の透過値は無視されま
す。代わりに、255 という値が使用されます。このプロパティは、ラスタ透過度 (RasterStyle.Alpha
など) には影響しません。透過ラスタを印刷するには、EnableTranslucency を有効にする必要があり
ます。ただしこれは、画面への表示やエクスポートには必要ありません。このプロパティを false に
設定すると、DrawingAttributes.SmoothingMode が自動的に SmoothingMode.None に設定されます。
つまり、透過性を有効にしなければ、アンチエリアシングを使用できません。
SmoothingMode: マップのレンダリング品質を取得、または設定します。このプロパティでは、
MapInfo.Mapping.SmoothingMode 列挙体のメンバが指定されます。デフォルト値は
SmoothingMode.None です。SmoothingMode により、直線、曲線、塗りつぶしエリアの外周にス
ムージング (アンチエリアシングとも呼ばれます) を使用するかどうかを指定します。このプロパ
MapXtreme v7.2
558
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
MapXtreme の印刷オプションについて
ティを SmoothingMode.AntiAlias に設定すると、
MapInfo.Mapping.DrawingAttributes.EnableTranslucency が自動的に true に設定されます。つまり、
アンチエリアシングを使用する際には必ず透過が有効になります。
EnableTranslucency を false に設定すると、SmoothingMode が None 以外の場合、自動的に None
に設定されます。SmoothingMode を AntiAlias に設定すると、EnableTranslucency が true 以外の
場合、自動的に true に設定されます。EnableTranslucency が true のとき、透過性を維持したまま
SmoothingMode を None と AntiAlias に切り替えることができます。
MapStyleControl クラス
MapStyleControl (MapInfo.Windows.Controls 名前空間) は、デスクトップ LayerControl のタブに表
示可能なコントロールです。ユーザはこのコントロールを使用して、マップのスタイルやレンダ
リング オプション (アンチエイリアス処理、透過性など) を設定できます。
ディザリング方法
ディザリングとは、色深度が減少する場合に、イメージの外観を維持するために、ピクセルを電
子的にブレンドする技法です。24 ビット イメージを 256 色に変換する場合には、ディザリング方
法を選択します。
•
•
ハーフトーン ディザリング。イメージの中のコントラストが高い要素間で色の一連のハーフ
トーンの差異を計算して、スムーズな色の遷移を作成します。表示、印刷、およびエクスポー
トの各オプションで、このオプションがデフォルトで選択されます。
誤差拡散ディザリング。コントラスト色の間で中間色を計算し、その中間色に向かって均等に
ブレンドするように、周囲のピクセルを色分けします。
DrawingAttributes.RasterDitherMethod プロパティを使用して、この値を設定します。こ
れを、DitherMethod 列挙体の値に設定できます。
例:
mapPrintDocument.DrawingAttributes.RasterDitherMethod =
MapInfo.Mapping.DitherMethod.HalfTone;
ポリゴンの穴の特殊処理
MapXtreme アプリケーションでは、さまざまな個別のピースを使用し、それを結合することに
よって、複雑なポリゴン オブジェクトを描画できます。ポリゴンを穴や島と共に印刷する場合、
各部が適切に一致せず、重なり合ったり、ギャップが生じたりすることがあります。この不適切
な動作に対処して、ポリゴンを適切に表示および印刷するための、内部プログラミング機能があ
ります。この機能を利用するには、DrawingAttributes.SpecialPolygonHoleHandling プ
ロパティの値を true に設定します。画面に描画する場合、この値は false に設定します。
MapXtreme v7.2
559
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
アプリケーションへの印刷のインプリメント
パターンのスケール
この設定によって、非透過ビットマップ フィル パターンを画面に表示されているままの状態で印
刷したり、プリンタ ドライバに、フィル パターンのレンダリングを詳細に制御させたりできま
す。この値は、DrawingAttributes.ScaleBitmapPatterns で設定します。この値が true の
場合、ビットマップ フィル パターンは拡大され、プリンタと画面の解像度の差が補正されます。
false の場合、パターンはスケールされず、プリンタ ドライバによってフィル パターンがスケー
ルされます。プリンタ ドライバでフィル パターンをスケールできる場合は、この値を false に設
定します。プリンタ ドライバでフィル パターンをスケールできない場合は、印刷出力が小さく表
示されたり、塗りつぶされたような状態で出力されることを回避するために、この値を true に設
定します。どのフィル パターンがビットマップで、どのフィル パターンがベクトルであるかの詳
細については、「フィル パターンの使用時に印刷を高速化する」を参照してください。
このプロパティが true に設定されている場合、プリンタ ドライバではパターンがスケールされる
が、画面ではパターンがスケールされないため、印刷プレビューと印刷されたドキュメントが同じ
に見えないことがあります。画面には正しく表示されていなくても、印刷は正しく行われます。
L
フィル パターンに背景色がある場合、これは非透過と見なされます。一方、背景色がない場
合は透過フィルと見なされ、このプロパティの値にかかわらず、常にスケールされます。
デバイスへの直接出力
こ の オ プ シ ョ ン を 使 用 す る と、イ メ ー ジ を プ リ ン タ に 直 接 印 刷 で き ま す。こ の 値 は、
PrintMethod.Direct で設定します。
拡張メタファイル (EMF) を使用する出力
イメージをプリンタに送る前に、イメージの拡張メタファイルを生成するには、このオプション
を使用します。このオプションは、現在のプリンタ技術を利用してスプール サイズを小さくし、
品質を損なうことなく短時間でファイルを出力します。この値は、PrintMethod.Emf で設定し
ます。
アプリケーションへの印刷のインプリメント
MapXtreme 内の印刷用の名前空間には、マップの印刷を支援する一連のクラスが含まれていま
す。これらのクラスを使用して、接続されている印刷デバイスへの、マップの基本的な印刷を処
理します。
ダイアログおよびプリンタ制御ダイアログにアクセスするには、MapPrinting クラスを使用しま
す。アプリケーションに対して 1 つの MapPrinting オブジェクトを割り当て、印刷/印刷プレ
ビュー/ページ設定で同じインスタンスを使用することが重要です。
Setup a MapPrinting and assign a map:
this.mapPrinting = new MapPrinting();
MapXtreme v7.2
560
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
アプリケーションへの印刷のインプリメント
this.mapPrinting.Map = this.mapControl1.Map;
マップを印刷するサンプル コードを次に示します。
this.mapPrinting.ShowDialog = true;
this.mapPrinting.Print();
マップの印刷プレビューを表示するサンプル コードを次に示します。
this.mapPrinting.PrintPreview();
[ページ設定] ダイアログを表示するサンプル コードを次に示します。
this.mapPrinting.PageSettingsDialog();
メインの印刷クラスに含まれる PrintDocument を通じて、プリンタ設定にアクセスできます。派生
クラスには独自のマッピング ニーズをサポートする設定とオプションが追加されているため、
MapPrinting オブジェクトのクラスを取得し、これを派生クラスに再キャストする必要があります。
mapPrinting = new MapPrinting();
mapPrinting.Map = mapControl1.Map;
MapPrintDocument mapPrintDocument = mapPrinting.PrintDocument
as MapPrintDocument;
if (mapPrintDocument != null) {
// here are some examples of how to set print options
// Set these based on your needs
mapPrintDocument.DrawingAttributes.SpecialTransparentRasterHandling
= true;
mapPrintDocument.PrintMethod = PrintMethod.Direct;
// and set other properties of mapPrintDocument
}
マップ印刷オプションを変更する UI は用意されていません。ダイアログでは、システム プリンタ
の設定のみ変更できます。ユーザに追加のオプションを提供するには、独自の UI を提供して、
MapPrintDocument のプロパティを設定する必要があります (DrawingAttributes、PrintMethod、
PrintSize など)。
PrintDocument では、印刷プロセスにアクセスしたり、印刷イベントが発生したときのコールバッ
クを追加することもできます。たとえば、各印刷ページに、ロゴやその他のグラフィックスを追
加するものとします。
C# の例
mapPrinting = new MapPrinting();
mapPrinting.Map = mapControl1.Map;
mapPrinting.PrintDocument.PrintPage += new
PrintPageEventHandler(mapPrintDocument1_PrintPage);
private void mapPrintDocument1_PrintPage(object sender,
PrintPageEventArgs e)
{
// add customization for each page (ie; title, page #, etc.)
MapXtreme v7.2
561
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
印刷に関する一般的なヒント
Graphics g = e.Graphics;
}
VB の例
mapPrinting = New MapPrinting()
mapPrinting.Map = mapControl1.Map
AddHandler mapPrinting.PrintDocument.PrintPage, AddressOf
mapPrintDocument1_PrintPage
Private Sub mapPrintDocument1_PrintPage(ByVal sender As Object, ByVal e As
PrintPageEventArgs)
' add customization for each page (ie; title, page #, etc.)
Dim g As Graphics = e.Graphics
End Sub
この方法を使用すると、グラフィックス オブジェクトにアクセスし、使用できる任意のグラ
フィックス ルーチンを使用して、さらにグラフィックスやテキストを印刷できます。
印刷に関する一般的なヒント
L
MapInfo 社では、特に 1 種類のプリンタ/プロッタをお勧めできませんし、お勧めすること
もありません。また、特定のプリンタが常に動作することを確認することもありません。
出力に影響する要素が多すぎて、お勧めすることができないのです。
以下に示すヒントは、当社のユーザが報告してきた、印刷に関する一般的な問題とその対処方法
から成るナレッジベースの抜粋です。
印刷に関する問題のトラブルシューティングを行う場合は、まず、MapXtreme のリリースにパッ
チがある場合はこれをダウンロードおよびインストールし、プリンタとオペレーティング システ
ムに適した最新のプリンタ ドライバを使用することが重要です。例外については、このマニュア
ルに記載します。
PrintPage イベントをオーバーロードする方法
.NET 印刷 API は、PrintPage イベントをオーバーロードするメカニズムを備えています。これを
使用すると、各印刷ページをカスタマイズできます。たとえば、タイトル、ページ番号、ロゴな
どを追加できます。
このためには、PrintPageEventHandler をインプリメントする必要があります。以下にコードの例
を示します。
this.mapPrinting = new MapPrinting();
this.mapPrinting.Map = this.mapControl1.Map;
this.mapPrinting.PrintDocument.PrintPage += new
System.Drawing.Printing.PrintPageEventHandler(this.mapPrintDocument1_Prin
tPage);
MapXtreme v7.2
562
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
印刷に関する一般的なヒント
private void mapPrintDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
// TODO - add your code here to alter the printed page
}
マップ内に凡例を印刷する
このセクションの先頭で説明したように、MapXtreme では、レイアウトの印刷はサポートされま
せん。マップ内に凡例を印刷するには、凡例を修飾としてマップに追加する必要があります。以
下にこのサンプル コードを示します。
//create cartographic legend
MapInfo.Mapping.Legends.Legend legend =
mapControl1.Map.Legends.CreateLegend(new System.Drawing.Size(5, 5));
legend.Border = true;
MapInfo.Mapping.LayerType[] normalLyr = new MapInfo.Mapping.LayerType[1];
normalLyr[0] = MapInfo.Mapping.LayerType.Normal;
MapInfo.Mapping.IMapLayerFilter filter =
MapInfo.Mapping.MapLayerFilterFactory.FilterByLayerType(normalLyr);
MapInfo.Mapping.Legends.LegendFrame frame;
foreach(MapInfo.Mapping.FeatureLayer ftrLayer in
mapControl2.Map.Layers.GetMapLayerEnumerator(filter))
{
frame =
MapInfo.Mapping.Legends.LegendFrameFactory.CreateCartographicLegendFrame(
ftrLayer);
legend.Frames.Append(frame);
}
//set legend location on the map
System.Drawing.Point pt = new System.Drawing.Point(220, 200);
pt.X = mapControl2.Size.Width - legend.Size.Width;
pt.Y = mapControl2.Size.Height - legend.Size.Height;
legend.Location = pt;
//append legend as map adornment
mapControl1.Map.Adornments.Append(legend);
mapPrinting.print ();
MapXtreme v7.2
563
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
印刷に関する一般的なヒント
古いドライバは動作し、新しいドライバは動作しない
古いドライバが動作し、新しいドライバが動作しない場合、判別がつかなければ、古いドライバ
を使用します。
HP 755 ドライバに関するヒント
このプロッタ モデルによる印刷が困難な場合は、代わりに、HP 650C (C2859B) のプロッタ ドラ
イバを使用してみてください。プリンタやプロッタ モデルに関して問題が生じた場合、類似のモ
デルが存在するのであれば、類似のモデルのドライバを代わりに使用することで、多くの場合、
問題が解決されます。たとえば、HP 8500 DN Color LaserJet のプリンタ ドライバに、HP8550
Color LaserJet ドライバを使用できます。
効果的なパターンのスケールに関するヒント
印刷する場合は、使用しているプリンタ ドライバの種類を確認します。多くの PCL6 ドライバと
一部の HPGL ドライバは、フィル パターンのスケールを処理する機能を備えており、この機能を
制御できます。そのスケール機能をオフにすると、印刷イメージと、モニタ上に表示されるイ
メージが異なる可能性があります。当社のスケール機能は、マップおよび凡例の印刷要件を適切
に満たすように拡張されているため、ドライバのスケール オプションはオフにして、当社のス
ケール機能を使用することをお勧めします。当社のパターン スケール オプションをオンにするに
は、アプリケーション内でパターンのスケールを有効にします (「パターンのスケール」を参照)。
次に、当社のスケール機能を無効にして、どちらがよいかを確認します。テストの結果、当社の
スケール機能の方が、画面の表示にほぼ一致するカラー出力が得られます。
LanguageLevel 2 または 3 を使用して PostScript ドライバに印刷している場合、一部の Microsoft
ドライバは、パターンのスケールをサポートしないことがわかっています。この場合は、当社の
スケール機能は正しく動作しない可能性があります。Microsoft 社では、ドライバの言語レベルを
LanguageLevel 1 にリセットして、この制約を取り除くことを推奨しました。この条件には、いく
つかの例外があることがわかりました。Windows 2000 および Windows NT では、いくつかの HP
Laser Jet および Color Laser Jet PostScript ドライバは、当社のスケール オプションを使用して、
正しく印刷できます。
MapXtreme v7.2
564
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
印刷に関する一般的なヒント
フィル パターンの使用時に印刷を高速化する
[領域のスタイル] ダイアログ ボックス内の先頭の 6 個のフィル パターン (塗りつぶしの後) は
Windows の標準であり、印刷が高速に行われる傾向があります。これらのフィル パターンはベク
トル ベースです。残りのパターンは、MapXtreme に付属しているビットマップです。フィル パ
ターンを選択するときに、この点に考慮してください。
1
1 高速で印刷するには、このフィル パターンを使用します。
さらに印刷速度を向上する
印刷速度を改善したい場合、プリンタに [はやい]、[標準]、[きれい] などの印刷の品質に関するオプ
ションがあれば、[はやい] を選択することをお勧めします。この場合、出力の解像度は低下します。
ディスク容量に問題がある
拡張メタファイル オプションを使用して印刷する場合は特に、一時ディスク容量が十分にあるこ
とを確認します。ディスク上に、レイヤ化されたビットマップが作成されます。
グローバルに印刷する : ローカル スプール !
印刷ジョブは、プロッタではなくローカルにスプール1してください、 これによって、プリンタで
はなくコンピュータが出力をラスタ化するため、効率的です。
1.
スプールとは、プリンタが処理できる状態になるまで、印刷ドキュメントのデータをメモリまたはファイ
ルに格納するプロセスです。
MapXtreme v7.2
565
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
これまでに知られている印刷に関する問題の対処方法
1
1 [印刷ドキュメントをスプールし、プログラムの印刷処理を高速に行う] をクリック
し、[ 全ページ文のデータをスプールしてから、印刷データをプリンタに送る] をク
リックします。
1. ローカルな印刷ジョブのスプールを設定するには、[スタート] > [設定] > [コントロール パネル] > [
プリンタ] を選択します。
2. プリンタを右クリックし、メニューの [プロパティ] を選択し、プリンタのプロパティを表示し
ます。
3. [詳細設定] タブをクリックし、詳細なプロパティ オプションを表示します。
L
コンピュータの管理権限を持っていない場合は、スプール オプションを使用できない
可能性があります。この変更を行うには、IT 部門に連絡してください。
4. [OK] をクリックして、変更を保存します。
これまでに知られている印刷に関する問題の対処方法
ア プ リ ケ ー シ ョ ン に よ る 印 刷 や プ ロ ッ ト に 影 響 す る 要 素 は 数 多 く 存 在 す る も の で あ り、
MapXtreme アプリケーションも例外ではありません。MapXtreme は、プリンタ ドライバを備え
ていません。現在の Windows オペレーティング システムにインストールされている既存のドライ
バを使用します。ここでは、ユーザやパートナーによって発見された具体的なプリンタ/プロッタ
の問題について説明します。これらの情報は、ユーザをサポートする開発者をサポートする目的
で提供されています。
MapXtreme v7.2
566
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
これまでに知られている印刷に関する問題の対処方法
プラットフォームに依存しない問題
これらの問題は、特に明記されていないかぎり、オペレーティング システムやハードウェア/ソフ
トウェアにかかわらず発生します。以下の中から自分が扱っている問題を見つけて、対処方法を
参照してください。
ハッチ パターンが黒いポリゴンとして印刷される
プリンタ/プロッタ: HP Designjet Series プロッタ
問題: ハッチ パターンが含まれるマップを印刷すると、黒の塗りつぶしとして表示される部分が
ある。
対処法: Hewlett Packard 社によれば、新しい HP プリンタ ドライバ (4.63) は、Windows 以外の標
準ハッチ パターンを正しく処理します。新しい HP 4.63 ドライバをダウンロードおよびインス
トールして、この問題に対処することをお勧めします。
印刷時にハッチ パターンが圧縮される
オペレーティング システム: WindowsNT 4.0/2000
プリンタ/プロッタ: HP LaserJet Series (HP LaserJet 4050 Series PCL 6 でテスト)
問題: MapInfo ハッチ パターン ([AreaStyle] ダイアログ ボックスの先頭の 6 パターン以外のパター
ン) を使用すると、パターンが非常に圧縮されることがあります。これは、パターンがビットマッ
プで、高いプリンタ解像度で描画されることが原因です。標準の Windows パターンでは、このよ
うな問題は生じません。プリンタ解像度が、圧縮の程度に影響します。
対処法: [縮尺パターン] (WYSIWYG) という新しい出力設定を持つ一部のプリンタ ドライバでは、
パターンを正しくスケールできます。当社でテストした HP プリンタの場合、[印刷設定] > [印刷品
質] > [詳細設定] オプションを選択すると、このオプションを使用できます。
フィル パターンのスケールが 2 度にわたって実行されてしまうため、ユーザはドライバまたは当
社のスケール機能をオフにする必要があります。両方のスケールを試して、自分に適したスケー
ルを見つけてください。
プラットフォーム固有の問題
これらの問題は、特に明記されていないかぎり、特定のオペレーティング システムやハードウェ
アに関係します。これらの問題は、オペレーティング システムで分類されています。
MapXtreme v7.2
567
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
これまでに知られている印刷に関する問題の対処方法
HP 500、800、5000 DesignJet プロッタを使用してラスタを印刷するときに、2 ~ 4
cm ごとに印刷出力が繰り返される
この問題に対処するには、2 つの方法が考えられます。まず最初に、ドライバ レベルまたはプリ
ンタ レベルから、プリンタをローカルにスプールします。
L
この問題を解決するには、プリンタおよびプリンタ ドライバに対して、読み取り/書き込み
の権限を持っている必要があります。
この問題を解決するには、ドライバのプロパティの中で、高度な隠し設定を変更します。
ベクトル オーバーレイでラスタを印刷するときに、 2 ~ 4 cm ごとに印刷を繰り返すことを回避す
るには、次の操作を行います。
1. [コントロール パネル] でプリンタ ドライバのプロパティを見つけます。この設定を表示するに
は、プリンタ アイコンを右クリックし、[プロパティ] を選択します。
2. [詳細設定] タブをクリックします。以下のオプションを選択します。
•
[Avoid out of memory] オプションを選択します。
•
Windows 2000 または Windows XP オペレーティング システムを使用している場合は、
100% の倍率を選択します。
3. このダイアログ ボックスで、[標準の設定] ボタンをクリックします。
4. このダイアログ ボックスで、[バージョン情報] ボタンをクリックします。そのドライバの [バー
ジョン情報] ダイアログ ボックスが表示されます。
5. キーボードの F8 キーを押したまま、[OK] ボタンをクリックします。[Special Options] ダイア
ログ ボックスが表示されます。
MapXtreme v7.2
568
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
これまでに知られている印刷に関する問題の対処方法
6. [Enable SpoolSmart] チェック ボックスをオフにして、[OK] をクリックします。
L
このドライバ オプション ボックスの設定を変更する場合は、必要に応じて元に戻せるよう
に、元の値を書き留めておいてください。これらは HP サポート エンジニア用に作成され
たものであり、汎用ではありません。
これらの設定を Quick Set として保存し、ラスタ ファイルを印刷するたびに実行できます。
1. HP プリンタ ドライバに移動し、ドライバ設定にアクセスします。オペレーティング システム
に基づいて、次のいずれかの方法を使用します。
•
Windows NT 4.0 を使用している場合 - Windows デスクトップから、[スタート] > [設定] > [プ
リンタ] を選択します。適切なプロッタ ドライバのアイコンを右クリックし、[ドキュメン
トの既定値] を選択します。
•
Windows 2000/XP を使用している場合 (クラシック表示) - Windows デスクトップから、[ス
タート] > [設定] > [プリンタ] を選択します。 適切なプロッタ ドライバのアイコンを右ク
リックし、[印刷設定] を選択します。
2. 隠しメニューで、目的の値を設定します。
3. [Quick Sets] ボックスに、選択した設定の名前 ("Raster Print Settings" など) を入力し、[保存]
をクリックします。現在のすべてのドライバ設定 (用紙の種類、隠しメニュー設定など) は、
Quick Sets 名として保存されます。プリンタ ドライバはこの設定を記憶しており、将来の印刷
ジョブで使用できます。
同じ設定を使用して後でラスタ マップを印刷するには
1. [印刷] コマンドを選択して、[印刷] ダイアログ ボックスを表示します。
2. [プロパティ] ボタンを選択します。[プロパティ] ダイアログ ボックスが表示されます。
3. [Quick Sets] ドロップダウン リストに、入力した名前 (この例の場合は "Raster Print Settings")
が表示されていることを確認し、[OK] をクリックします。[印刷] ダイアログ ボックスが再表示
されます。
4. [OK] をクリックして印刷します。
L
Quick Sets の特殊設定が必要ない場合は、この設定をデフォルトのマシン設定に戻してく
ださい。
HP Designjet プリンタ (ドライバ 5.31 または 5.32) で印刷できない
このドライバを使用しようとすると、次のいずれかが発生します。
•
•
[Maximum Performance] オプションを選択すると、メモリ エラーに関するメッセージが表示さ
れ、イメージの一部だけが印刷されます。
[Avoid out of memory] オプションを選択すると、コンピュータがクラッシュし、ハード ディスク
の空き領域の不足を示すメッセージと、仮想メモリの不足を示すメッセージが表示されます。
MapXtreme v7.2
569
開発者ガイド
付録 E: MapXtreme アプリケーションからの印刷
これまでに知られている印刷に関する問題の対処方法
この問題の対処方法は、上記の問題の対処方法に似ています。[Special Options] ダイアログ ボック
スは同じです。
1. プログラムを使用して、次の印刷オプションを設定します。
MapPrintDocument mapPrintDocument = this.mapPrinting.PrintDocument as
MapPrintDocument;
mapPrintDocument.PrintMethod = PrintMethod.Direct;
mapPrintDocument.DrawingAttributes.SpecialTransparentVectorHandling =
true;
mapPrintDocument.DrawingAttributes.SpecialTransparentRasterHandling =
false;
mapPrintDocument.DrawingAttributes.TrueColorRaster = true;.
2. [コントロール パネル] の [プリンタ] または [プリンタと FAX] を選択し、印刷先のプリンタを見
つけます。
3. プリンタを右クリックし、[プロパティ] オプションを選択します。[プロパティ] ダイアログ ボッ
クスが表示されます。
4. [バージョン情報] ボタンをクリックし、このプリンタ ドライバの [バージョン情報] ダイアログ
ボックスを表示します。
5. キーボードの F8 キーを押したまま、[OK] ボタンをクリックします。[Special Options] ダイア
ログ ボックスが表示されます。
6. [Enable SpoolSmart] チェック ボックスをオフにします。
MapXtreme v7.2
570
開発者ガイド
F
スタイルのルックアップ
この付録には、フィル パターン、ライン スタイル、ベクトル シンボル、カス
タム ビットマップ シンボルなど、サポートされているスタイルのルックアッ
プ テーブルが含まれています。スタイルの説明およびその使用方法の詳細に
ついては、「第 15 章 : マップのスタイル設定」を参照してください。
この付録の構成
Š
Š
Š
Š
Š
フィル パターン . .
ライン スタイル . .
ベクトル シンボル .
カスタム シンボル .
MapXtreme アイコン
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
572
586
587
591
593
付録 F: スタイルのルックアップ
フィル パターン
フィル パターン
MapXtreme フィル パターン (MapXtreme プログラミング API の内部スタイルとも呼ばれています)
の一覧を次の表に示します。各フィル パターンには、インデックス番号とパターン番号が関連付け
られています。インデックス番号は、InteriorStyleRepository オブジェクトをプログラムでアクセス
するときに使用され、パターン番号は、フィル パターンを説明する内部的な名前に相当します。
詳しい説明を以下に示します。
フィル パターン
グラフィカルなフィル パターン自体。
インデックス番号
ゼロを基点とするインデックス。フィル パターンを表す内部スタイルを InteriorStyleRepository か
ら取得するときに使用されます。
パターン番号
フィル パターンを表す数値の識別子。内部スタイル オブジェクトを作成するときに使用できま
す。これはあくまでも内部的な番号であり、プログラムを通じて InteriorStyleRepository にアクセ
スするときには使用できません。ただし、MapXtreme ワークスペース ファイル (.mws) 内でフィ
ル パターンを指定するときに使用されます。
インデックス番号の指定方法
フィル パターンの表に示されているように、フィル パターンのインデックスは、1 ~ 172 の範囲
です (インデックス番号の列)。他の MapInfo 製品 (MapInfo Professional、MapBasic など) でも、1
を基点とするこのインデックス方式が使用されます。ただし、MapXtreme API では、0 を基点と
するインデックスを使用する InteriorStyleRepository オブジェクトを通じて、フィル パターン (内
部スタイル オブジェクトとも呼ばれます) が取得されます。
特に、InteriorStyleRepository オブジェクトを使用すると、0 を基点として、0 ~ 172 の範囲を持
つインデックス方式を使用して、使用できるすべての内部スタイル オブジェクトをループ処理で
きます。つまり、実際には 173 の内部スタイル オブジェクトを選択できます。しかし、インデッ
クス 0 とインデックス 1 の内部スタイル オブジェクトは同一です。要素 0 および要素 1 のオブ
ジェクトは、以下の理由から、同じでなければなりません。
まず、InteriorStyleRepository クラス自体の、0 を基点とする固有のインデックス機能に対応する
必要があります。つまり、InteriorStyleRepository クラスでは、その IList から要素を取得するの
に、0 を基点とするインデックス アクセスのみ許可しています (IList は、nteriorStyleRepository
クラスがインプリメントしている標準の .NET インターフェイスです)。
MapXtreme v7.2
572
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
次に、0 を基点とするインデックス方式は、パターン番号の列に示されている 1 を基点とするイン
デックス方式と、同期している必要があります。そのため、フィル パターンは、インデックス範
囲 1 ~ 172 の 172 個のみが存在します。そのインデックス要素の定義を指定するために、プログ
ラム可能なインデックス 0 のフィル パターンが追加されました。
L
先頭の 8 個のフィル パターンは、インデックス番号とパターン番号が同じです。それ以降の
パターン番号は、対応するインデックス番号より、常に 3 だけ大きい値です (このため、パ
ターン番号の最後の値は 175 で、インデックス番号の最後の値は 172 です)。これは、間違い
ではありません。172 個の一意なフィル パターンが存在します。表に漏れはありません。
フィル パターンと対応するインデックス番号およびパターン番号
フィル パターン
インデックス番号
パターン番号
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
12
(なし)
MapXtreme v7.2
573
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
10
13
11
14
12
15
13
16
14
17
15
19
16
18
17
20
18
21
19
22
20
23
21
24
22
25
574
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
23
26
24
27
25
28
26
29
27
30
28
31
29
32
30
33
31
34
32
35
33
36
34
37
35
38
36
39
575
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
37
40
38
41
39
42
40
43
41
44
42
45
43
46
44
47
45
48
46
49
47
50
48
51
49
52
50
53
576
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
51
54
52
55
53
56
54
57
55
58
56
59
57
60
58
61
59
62
60
63
61
64
62
65
63
66
64
67
577
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
65
68
66
69
67
70
68
71
69
72
70
73
71
74
72
75
73
76
74
77
75
78
76
79
77
80
78
81
578
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
79
82
80
83
81
84
82
85
83
86
84
87
85
88
86
89
87
90
88
91
89
92
90
93
91
94
92
95
579
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
93
96
94
97
95
98
96
99
97
100
98
101
99
102
100
103
101
104
102
105
103
106
104
107
105
108
580
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
106
109
107
110
108
111
109
112
110
113
111
114
112
115
113
116
114
117
115
118
116
119
117
120
118
121
581
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
119
122
120
123
121
124
122
125
123
126
124
127
125
128
126
129
127
130
128
131
129
132
130
133
131
134
582
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
132
135
133
136
134
137
135
138
136
139
137
140
138
141
139
142
140
143
141
144
142
145
143
146
144
147
583
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
145
148
146
149
147
150
148
151
149
152
150
153
151
154
152
155
153
156
154
157
155
158
156
159
157
160
584
開発者ガイド
付録 F: スタイルのルックアップ
フィル パターン
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
MapXtreme v7.2
インデックス番号
パターン番号
158
161
159
162
160
163
161
164
162
165
163
166
164
167
165
168
166
169
167
170
168
171
169
172
170
173
585
開発者ガイド
付録 F: スタイルのルックアップ
ライン スタイル
フィル パターンと対応するインデックス番号およびパターン番号(続く)
フィル パターン
インデックス番号
パターン番号
171
174
172
175
ライン スタイル
MapXtreme v7.2
586
開発者ガイド
付録 F: スタイルのルックアップ
ベクトル シンボル
ベクトル シンボル
MapXtreme のインストール プロセスの中で、10 種類の MapInfo 固有の TrueType フォントが自動
的にインストールされます。これらのフォントによって、Weather (天気)、Real Estate (不動産)、
Transportation ( 輸 送) な ど、さ ま ざまな分野の記号シンボルが提供されます。記号の番号は
Unicode 文字値です。これは Unicode 文字コード ブロックの最初の範囲に含まれているため、番
号の割り当ては ASCII 文字セットでも共通しています。
MapInfo Arrows
MapInfo Cartographic
MapXtreme v7.2
587
開発者ガイド
付録 F: スタイルのルックアップ
ベクトル シンボル
MapInfo Miscellaneous
MapInfo Oil & Gas
MapInfo Shields
MapXtreme v7.2
588
開発者ガイド
付録 F: スタイルのルックアップ
ベクトル シンボル
MapInfo Real Estate
Map Symbols
MapInfo Symbols
MapInfo 3.0 互換シンボル
MapXtreme v7.2
589
開発者ガイド
付録 F: スタイルのルックアップ
ベクトル シンボル
MapInfo Transportation
MapInfo Weather
MapXtreme v7.2
590
開発者ガイド
付録 F: スタイルのルックアップ
カスタム シンボル
カスタム シンボル
以下のシンボルは、C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x\CustSymb にあり
ます。各イメージのファイル拡張子は .BMP です。
これらのシンボルは、MapInfo.Styles 名前空間内の BitmapPointStyleRepository コレクション クラ
スを通じて、プログラムによってアクセスできます。
独自のビットマップ イメージを作成し、それを CustSymb ディレクトリに追加できます。作成す
るイメージのサイズには事実上制限はありません。ただし、MapXtreme で表示できるかどうか
は、利用可能なメモリ量によります。イメージは四角形である必要はなく、最大 24 ビットの色深
度 を 設 定 で き ま す。イ メ ー ジ を 自 然 な 幅 と 高 さ で 表 示 す る に は、イ メ ー ジ の そ れ ぞ れ の
BitmapPointStyle オブジェクト内で、ブール型の "NativeSize" プロパティを true に設定する必要
があります。
AMBU1-32
AMBU-64
BADG1-32
BADG2-32
BANK1-32
BANK2-32
BANK-64
BOOK1-32
BUILDINGS
CAMP1-32
CAR1-32
CAUT1-32
CHUR1-32
COMP1-32
FARM1-32
FAST1-32
FIRE1-32
FIRE-64
FOOD-64
GLOB1-32
GOLF1-32
HOSP1-32
HOUS1-32
HOUS232
HOUS3-32
HOUS-64
HYDR1-32
INTE1-32
LITE1-32
LITE2-32
MapXtreme v7.2
591
開発者ガイド
付録 F: スタイルのルックアップ
カスタム シンボル
MAIL1-32
MBOX1-32
MBOX2-32
MOSQ1-32
ONEW1-32
ONEW232
PENC1-32
PIN1-32
PIN2-32
PIN3-32
PIN4-32
PIN5-32
(シアン)
(赤)
(黄)
(緑)
(青)
PIN6-32
PINB-64
PING-64
PINGY-64
PINR-64
POLI1-32
(紫)
(青)
(緑)
(灰色)
(赤)
RAIL1-32
RAIL2-32
RAIL3-32
RAIL-64
RED-CAR
REST1-32
STAT1-32
STOP1-32
SYNA1-32
TARG1-32
TAXI1-32
TEMP1-32
TOWE1-32
TOWE2-32
TRAF1-32
TRUC1-32
TRUC2-32
TRUC-64
YIEL1-32
YIEL2-32
MapXtreme v7.2
592
開発者ガイド
付録 F: スタイルのルックアップ
MapXtreme アイコン
MapXtreme アイコン
以下のサムネールの一覧は、 MapXtreme ベースのアプリケーションで使用できるツールバー アイ
コンのコレクションです。これらは、MapXtreme インストール フォルダの \Samples\Icons フォル
ダにインストールされます。各 .PNG には、大 (24x24 ピクセル)、小 (16x16 ピクセル) の 2 つの
形式があります。
ADD_NODE
ADORNMENT
ARC
ARROW
ASSIGN_
TARGET
CLIP_MODE
CLIP_REGION
CLOSE_ALL
COPY
CREATE_
DRIVE_REG
CROSSHAIR
CUT
DRAG_HANDLE ELLIPSE
FIND_
ADDRESS
GEOCODE_
USE_SRV
GRABBER
GRAPH_
SELECT
HELP
HOT_LINK
INFO
INVERTSELEC LABEL
T
LAYERS
LEGEND
LINE
LINE_STYLE
MB_12
MB_6
MB_7
MB_8
NEW_
BROWSER
NEW_DOC
NEW_
GRAPHER
NEW_LAYOUT
NEW_MAPPER
MapXtreme v7.2
593
開発者ガイド
付録 F: スタイルのルックアップ
MapXtreme アイコン
NEW_
REDISTRICTER
ODBC_
DISCONNECT
ODBC_
MAPPABLE
ODBC_OPEN
ODBC_
REFRESH
ODBC_
SYMBOL
ODBC_UNLINK
OPENWFS
OPENWMS
OPEN_FILE
OPEN_WOR
PASTE
POLYGON
POLYGON_
STYLE
POLYLINE
PRINT
PRINT_PDF
RECT
RESHAPE
ROUND_RECT
RULER
RUN
SAVE_FILE
SAVE_WIN
SAVE_WOR
SCALEBAR
SEARCH_BDY
SEARCH_
POLYGON
SEARCH_
RADIUS
SEARCH_
RECT
SYMBOL
SYMBOL_
STYLE
TEXT
TEXT_STYLE
SET_TARGET_ STATISTICS
MAP
MapXtreme v7.2
594
開発者ガイド
付録 F: スタイルのルックアップ
MapXtreme アイコン
UNDO
UNSELECT_
ALL
ZOOM_OUT
ZOOM_
QUESTION
MapXtreme v7.2
WEB_SERVICE WINDOW_
_PREF
FRAME
595
WRENCH
ZOOM_IN
開発者ガイド
MapInfo コードスペース
の定義
MapInfo コードスペースは、MapInfo のマップやワークスペースの作成時に使用
する定義と標準のリストです。これらの定義は、MapXtreme を使用するときに
参照できます。当社のコードスペースの定義を、一般的に使用されている EPSG
(European Petroleum Survey Group) という別のコードスペースと比較してみてく
ださい。このコードスペースは、EPSG の Web サイト http://www.epsg.org/ か
らダウンロードできます。
この付録の構成
Š
MapInfo コードスペースの定義 . . . . . . . . . . . . . . 597
G
付録 G: MapInfo コードスペースの定義
MapInfo コードスペースの定義
MapInfo コードスペースの定義
現在の MapInfo コードスペースを次の表に示します。これらの定義によって、XML ベースのマッ
プ ドキュメントでこのコードスペースを使用し、srsName などの共通の値を参照できます。たと
えば、ポイント ジオメトリは次のように定義できます。
<gml:Point srsName="mapinfo:coordsys 1,74"> ...</gml:Point> または
<gml:Point srsName="epsg:4269"> ...</gml:Point>
MapInfo コードスペースの定義
位置 1
カテゴリ
coordsys
pen
CoordSys
イル*
位置 2
位置 3
ファ
位置 4
説明および例
リファレンス座標系。
例: mapinfo:coordsys 1,74
簡単な Mapinfo のペン パターン。デ
フォルトの MapInfo MapInfow.pen の
定義に基づく番号 [1-255]。確立され
たすべてのルールに従います。
[1-255]
例: mapinfo:pen 46
brush
簡単な Mapinfo のブラシ パターンの番
号 [1-8, 12-175] (注意: 9 ~ 11 は予約さ
れています。) デフォルトの MapInfo
のビットマップ定義に基づきます。
[1-8, 12-175]
例: mapinfo:brush 17
length
長さの単位。
インチ | フィート | ヤード | マイル |
および
ミリメートル | センチメートル | メー
トル | キロメートル |
および
survey フィート | 海里 |
および
リンク | チェイン | ロッド | ポイント |
twip | pica | 度をサポートします。
in | ft | yd | mi
mm | cm | m | km |
sft | nmi | li | ch |
rd | pt | twip | pica
| deg
pt= 1/72 in
pica = 12 pt
twip = 1/20 pt
例:
1 deg = (pi/180) *
6370997 m =
69.09329 mi ( 大
円に基づく)
imagesize
mapinfo:length m
mapinfo:length pt
mapinfo:length deg
イメージ サイズの非ライン単位。
pixel
例: mapinfo:imagesize pixel
MapXtreme v7.2
597
開発者ガイド
付録 G: MapInfo コードスペースの定義
MapInfo コードスペースの定義
MapInfo コードスペースの定義 (続く)
位置 1
カテゴリ
位置 2
位置 3
位置 4
説明および例
データ型。
type
boolean
例: mapinfo:type boolean
byte
例: mapinfo:type byte
date
例: mapinfo:type date
datetime
例: mapinfo:type datetime
time
例: mapinfo:type time
decimal
[|(n
n)|]
n.m
n は合計
桁数、
m は小数
点以下の
桁数
(m<=n)。
最小値 (オプション)。
最大値 (オプション)。
精度 (オプション)。
例:
mapinfo:type decimal (100 -- すべて
d>100
mapinfo:type decimal 100) -- すべて
d<100
mapinfo:type decimal [200 300] -- すべ
て 200<=d<=300。
mapinfo:type decimal 10.7 -- 合計 10
桁以内 (小数点以下が 7 桁なので小数
点の左側 3 桁) の 10 進数。
mapinfo:type decimal [200 300] 10.7 -上記 2 例の組み合わせ。
double
[|(n
n)|]
例: mapinfo:type double (0 150)
float
[|(n
n)|]
例: mapinfo:type float 30.25]
int
[|(n
n)|]
例: mapinfo:type int [0 180]
short
[|(n
n)|]
例: mapinfo:type short
string
n
最大長 n (オプション)。
例: mapinfo:type string 256
例: mapinfo:type char
char
MapXtreme v7.2
598
開発者ガイド
付録 G: MapInfo コードスペースの定義
MapInfo コードスペースの定義
MapInfo コードスペースの定義 (続く)
位置 1
カテゴリ
位置 2
位置 3
位置 4
説明および例
スカラーの属性比較演算子、ジオメト
リ演算子、またはブール演算子。
operators
eq | neq | lt | gt |
lteq | gteq
バイナリ スカラー値演算子。
in | not_in
スカラー値 in/not_in、スカラー値の列
挙。
例: value in {2, 50, 88, 95}
例: mapinfo:op eq
value not_in {“NY”, “NJ”}
例:
mapinfo:op in
mapinfo:op not_in
スカラー値が、そのスカラー値の型の
順序関係に基づき 2 つのスカラー値の
間にあります。例: value between {5,
25}
between |
not_between
value not_between {1may2000,
30may2000}
例:
mapinfo:op between
mapinfo:op not_between
文字列値が RHS パターンと一致しま
す。RHS パターンの形式は、データ
ソースに固有の場合があります。例:
lastname like "Jo%" (Oracle のワイル
ドカード文字 "%" を使用)。
like | not_like
例:
mapinfo:op like
mapinfo:op not_like
フィーチャ ジオメトリ fg が指定の
Polygon と交差します。
intersects
例: mapinfo:op intersects
MapXtreme v7.2
599
開発者ガイド
付録 G: MapInfo コードスペースの定義
MapInfo コードスペースの定義
MapInfo コードスペースの定義 (続く)
位置 1
カテゴリ
operators
(続き)
位置 2
位置 3
位置 4
説明および例
フィーチャ ジオメトリ (fg) の mbr (最
小外接四角形) が、指定の Polygon の
mbr と交差します。
mbr_intersects
例: mapinfo:op mbr_intersects
フィーチャ ジオメトリ (fg) が指定の
Point を含みます。フィーチャ ジオメト
リ (fg) が指定の Polygon に含まれます。
contains
例: mapinfo:op contains
フィーチャ ジオメトリ (fg) が指定の
Polygon の中心点を含みます。フィー
チャ ジオメトリ (fg) の中心点が指定
の Polygon に含まれます。
contains_centroid
例: mapinfo:op contains_centroid
ブール型の値 and。
and
例: mapinfo:op and
ブール型の値 or。
or
例: mapinfo:op or
MapXtreme v7.2
600
開発者ガイド
付録 G: MapInfo コードスペースの定義
MapInfo コードスペースの定義
MapInfo コードスペースの定義 (続く)
位置 1
カテゴリ
位置 2
位置 3
位置 4
説明および例
面積の単位。
area
sq
平方ライン単位。
in | ft | yd
| mi | mm
| cm | m |
km | sft |
nmi | li |
ch | rd | pt
| twip |
pica |
degree
例: mapinfo:area sq mi
定義済みの面積の単位。
acre | a | ha |
perch | rood
例: mapinfo:area acre
a = アール (10m
x10m の面積)
ha = ヘクタール
(100m x 100m の
面積)
perch = 272.25
平方フィート (1
平方ロッド、1
ロッドは 16.5
フィート)
rood = 40 perch
(1/4 エーカー)
time
時間の単位。ミリ秒 | 秒 | 分 | 時間 | 日
| 週 | 月 | 年。
msec | sec | min |
hr | day | week |
month | year
例: mapinfo:time hr
angle
角度の単位。度 | ラジアン。
deg | rad
例: mapinfo:angle rad
temp
温度の単位。ケルビン | 華氏 | 摂氏。
K|F|C
例: mapinfo:temp C
*
MapXtreme の座標系情報は、C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x 内の
MapInfoCoordinateSystemSet.xml にあります。
MapXtreme v7.2
601
開発者ガイド
H
座標系の要素
この付録では、座標系システムの要素について、サポートする測地系、楕円、
変換などを詳しく説明します。
この付録の構成
Š
Š
Š
Š
Š
Š
投影法とそのパラメータ. . . . . .
投影法の測地系. . . . . . . . . .
測地系の変換. . . . . . . . . . .
カスタム測地系. . . . . . . . . .
National Transformation v.2 (NTv2)
座標系と投影法に関する情報. . . .
. . . . . . . . . . . . 603
. . . . . . . . . . . . 607
. . . . . . . . . . . . 619
. . . . . . . . . . . . 619
. . . . . . . . . . . . . . . . . . . . . . .624
. . . . . . . . . . . . 627
付録 H: 座標系の要素
投影法とそのパラメータ
投影法とそのパラメータ
標準緯線 2
X
X
X
正距方位図法
X
X
X
X
Cassini-Soldner
X
X
X
X
正積円筒図法
X
X
X
Double Stereographic
X
X
X
エッカート IV 図法
X
X
X
エッカート VI 図法
X
X
X
正矩円錐図法
X
X
X
ガル図法
X
X
X
Hotine Oblique Mercator 図法
X
X
X
X
ランベルト正積方位図法
X
X
X
X
ランベルト等角円錐図法
X
X
X
X
経度-緯度
X
メルカトル
X
X
X
ミラー
X
X
X
モルワイデ
X
X
X
New Zealand Map Grid
X
X
X
Polyconic
X
X
X
地域別メルカトル図法
X
X
X
ロビンソン図法
X
X
X
MapXtreme v7.2
603
X
X
レンジ
標準緯線 1
X
擬似偏北距離
元の緯度
X
擬似偏東距離
元の経度
X
比率因数
単位
Albers Equal-Area Conic
方位
Datum
次の表に、各投影法に適用できるパラメータを、MapInfoCoordinateSystemSet.xml 内の関連する
座標系の行に示されている順序で示します。このファイルは、
C:\Program Files\Common Files\MapInfo\MapXtreme\7.x.x にあります。
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
開発者ガイド
X
X
X
Swiss Oblique Mercator
X
X
X
X
横メルカトル
X
X
X
X
X
X
X
X
X
X
X
X
レンジ
X
擬似偏北距離
平射図法
擬似偏東距離
X
比率因数
X
方位
X
標準緯線 2
元の経度
サンソン図法
標準緯線 1
単位
元の緯度
Datum
付録 H: 座標系の要素
投影法とそのパラメータ
投影法
投影法は、座標系で使用する方程式です。MapInfo で使用される投影法と、
MapInfoCoordinateSystemSet.xml で投影法を識別するための番号を次の表に示します。
番号
投影法
9
Albers Equal-Area Conic
28
正距方位図法 (すべての緯度原点)
5
正距方位図法 (極地のみ)
30
Cassini-Soldner
2
正積円筒図法
31
Double Stereographic
14
エッカート IV 図法
15
エッカート VI 図法
6
正距円錐図法 (Simple Conic)
17
ガル図法
7
Hotine Oblique Mercator 図法
4
ランベルト正積方位図法 (極地のみ)
29
ランベルト正積方位図法
3
ランベルト等角円錐図法
19
ランベルト等角円錐図法 (1972 年にベルギーについて修正)
MapXtreme v7.2
604
開発者ガイド
付録 H: 座標系の要素
投影法とそのパラメータ
番号
投影法
1
経度/緯度
10
メルカトル
11
ミラー円筒図法
13
モルワイデ
18
New Zealand Map Grid
27
Polyconic
26
地域別メルカトル図法
12
ロビンソン図法
16
サンソン図法
20
平射図法
25
Swiss Oblique Mercator
8
横メルカトル図法 (ガウスクルーガー図法)
21
横メルカトル図法 (デンマーク システム用改訂版 34 Jylland-Fyn)
22
横メルカトル図法 (デンマーク システム用改訂版 34 Sjaelland)
23
横メルカトル図法 (デンマーク システム用改訂版 34/45 Bornholm)
24
横メルカトル図法 (フィンランド KKJ 用改訂版)
たとえば、経度/緯度投影法は MapInfoCoordinateSystemSet.xml で次のように示されています。
<GeographicCRS>
<srsName>Longitude / Latitude (Porto Santo 1936)</srsName>
<srsID>
<code>coordsys 1,94</code>
<codeSpace>mapinfo</codeSpace>
<remarks>Longitude / Latitude (v 6.0 and later
projections)</remarks>
</srsID>
<usesEllipsoidalCS/>
<usesGeodeticDatum/>
</GeographicCRS>
上記の MapInfoCoordinateSystemSet.xml の基本投影法番号は、定数値の追加により変更されてい
る場合があります。有効な値とその意味を次の表に示します。
MapXtreme v7.2
605
開発者ガイド
付録 H: 座標系の要素
投影法とそのパラメータ
定数
意味
パラメータ
1000
アフィン変換を使用
座標系の標準パラメータの後ろにアフィン変換単
位の指定子および係数が表示されます。
2000
バインドを明示的に使用
座標系の標準パラメータの後ろにバインドが表示
されます。
3000
アフィン変換と境界の両方を使用
システムのパラメータ、アフィン パラメータ、
境界の順で表示されます。
例:
たとえば、横メルカトル図法に基づいたシンプルな座標系と NAD 1983 測地系を使用するとしま
す。MapInfoCoordinateSystemSet.xml ファイルには以下の行が示されています。
<ProjectedCRS>
<srsName>UTM Zone 1 (NAD 83)</srsName>
<srsID>
<code>coordsys 8,33,7,-177,0,0.9996,500000,0</code>
<codeSpace>mapinfo</codeSpace>
<remarks>Universal Transverse Mercator </remarks>
</srsID>
<baseCRS/>
<definedByConversion/>
<usesCartesianCS/>
</ProjectedCRS>
上記に基づいた座標系の他に、次のパラメータでアフィン変換を指定する必要もあります。
Units=meters; A=0.5; B=-0.866; C=0; D=0.866; E=0.5; and F=0.
この場合は、MapInfoCoordinateSystemSet.xml ファイルで以下の行を指定します。
<ProjectedCRS>
<srsName>UTM Zone 1 (NAD 83)- rotated 60 degrees</srsName>
<srsID>
<code>coordsys 8,33,7,-177,0,0.9996,500000,0, 7, 0.5, 0.866, 0, 0.866, 0.5, 0 </code>
<codeSpace>mapinfo</codeSpace>
<remarks>Universal Transverse Mercator</remarks>
</srsID>
<baseCRS/>
<definedByConversion/>
<usesCartesianCS/>
</ProjectedCRS>
また、座標系を (x1, y1, x2, y2)=(-500000, 0, 500000, 1000000) にバインドするには、以下の行を
指定します。
<ProjectedCRS>
<srsName>UTM Zone 1 (NAD 83)- bounded</srsName>
<srsID>
MapXtreme v7.2
606
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
<code>coordsys 8,33,7,-177,0,0.9996,500000,0, -500000, 0,
500000, 1000000
</code>
<codeSpace>mapinfo</codeSpace>
<remarks>Universal Transverse Mercator </remarks>
</srsID>
<baseCRS/>
<definedByConversion/>
<usesCartesianCS/>
</ProjectedCRS>
座標系に両方の変更点を適用してカスタマイズするには、以下の行を指定します。
<ProjectedCRS>
<srsName>UTM Zone 1 (NAD 83)</srsName>
<srsID>
<code>coordsys 8,33,7,-177,0,0.9996,500000,0, 7, 0.5, 0.866, 0, 0.866, 0.5, 0, -500000, 0, 500000,
1000000 </code>
<codeSpace>mapinfo</codeSpace>
<remarks>Universal Transverse Mercator </remarks>
</srsID>
<baseCRS/>
<definedByConversion/>
<usesCartesianCS/>
</ProjectedCRS>
投影法の測地系
測地系は、準拠楕円体を地球上の特定の点に結び付けることによって構築されています。各測地
系の詳細を以下の表に示します。
•
MapInfoCoordinateSystemSet.xml ファイルで測地系を識別するための番号。
•
•
•
測地系の名前
測地系が通常使用されるマップ。
測地系の準拠楕円体
番号
領域マップ
Datum
楕円体
1
Adindan
エ チ オ ピ ア、マ リ、セ ネ ガ Clarke 1880
ル、スーダン
2
Afgooye
ソマリア
1007
AGD 66, 7 パラメータ
オーストラリア、オーストラ Australian National
リア首都特別地域
1008
AGD 66, 7 パラメータ
オーストラリア、タスマニア州
MapXtreme v7.2
607
Krassovsky
Australian National
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
1009
AGD 66, 7 パラメータ
オーストラリア、ビクトリア Australian National
州/ニューサウスウェールズ州
1006
AGD 84, 7 パラメータ
オーストラリア
Australian National
3
Ain el Abd 1970
バーレーン諸島
International
118
American Samoa
米サモア諸島
Clarke 1866
4
Anna 1 Astro 1965
ココス諸島
Australian National
119
Antigua Island Astro 1943
アンティグア、リーワード諸島
Clarke 1880
5
Arc 1950
ボ ツ ワ ナ、レ ソ ト、マ ラ ウ Clarke 1880
イ、ス ワ ジ ラ ン ド、ザ イ ー
ル、ザンビア、 ジンバブエ
6
Arc 1960
ケニア、タンザニア
Clarke 1880
7
Ascension Island 1958
アセンション島
International
9
Astro B4 Sorol Atoll
ターン島
International
8
Astro Beacon "E"
硫黄島
International
10
Astro DOS 71/4
セント ヘレナ島
International
11
Astronomic Station 1952
マーカス島
International
151
ATS77 (Average Terrestrial
System 1977)
カナダ
ATS77
12
Australian Geodetic 1966
(AGD 66 - 3 パラメータ)
オーストラリアおよびタスマ Australian National
ニア島
13
Australian Geodetic 1984
(AGD 84 - 3 パラメータ)
オーストラリアおよびタスマ Australian National
ニア島
1006
Australia-National-AGD84 7
パラメータ
オーストラリア
Australian National
1007
Australia (A.C.T.AGD66 7 パ
ラメータ)
オーストラリア
Australian National
1008
Australia (Tasmania AGD66
7-param)
タスマニア
Australian National
1009
Australia (Victoria/NSW
AGD66 7-param)
ビクトリア州、ニューサウス Australian National
ウェールズ州
MapXtreme v7.2
608
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
151
Average Terrestrial System
1977 (ATS77)
120
Ayabelle Lighthouse
ジブチ
Clarke 1880
110
ベルギー
ベルギー
International
14
Bellevue (IGN)
エフェテ島、エロマンガ島
International
15
Bermuda 1957
バーミューダ諸島
Clarke 1866
16
Bogota Observatory
コロンビア
International
121
Bukit Rimpah
バンカ島、ビリトン島
(インドネシア)
Bessel 1841
17
Campo Inchauspe
アルゼンチン
International
18
Canton Astro 1966
フェニックス諸島
International
19
Cape
南アフリカ
Clarke 1880
20
Cape Canaveral
フロリダ、バハマ諸島
Clarke 1866
1005
Cape, 7 パラメータ
南アフリカ
WGS 84
21
Carthage
チュニジア
Clarke 1880
22
Chatham 1971
チャタム諸島 (ニュージーラ International
ンド)
23
Chua Astro
パラグアイ
International
122
Co-Ordinate System 1937 of
Estonia
エストニア
Bessel 1841
24
Corrego Alegre
ブラジル
International
123
Dabola
ギニア
Clarke 1880
124
Deception Island
デセプション島、南極
Clarke 1880
1000
Deutsches Hauptdreicksnetz
(DHDN)
ドイツ
Bessel
25
Djakarta (Batavia)
スマトラ島 (インドネシア)
Bessel 1841
26
DOS 1968
ギゾ島 (ニュージョージア島)
International
27
Easter Island 1967
イースター島
International
MapXtreme v7.2
609
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
115
EUREF 89
ヨーロッパ
28
European 1950 (ED 50)
オーストリア、ベルギー、デ International
ンマーク、フィンランド、フ
ランス、ドイツ、ジブラルタ
ル、ギリシャ、イタリア、ル
クセンブルグ、オランダ、ノ
ルウェー、ポルトガル、スペ
イン、スウェーデン、スイス
29
European 1979 (ED 79)
オ ー ス ト リ ア、フ ィ ン ラ ン International
ド、オランダ、ノルウェー、
スペイン、スウェーデン、ス
イス
108
European 1987 (ED 87)
ヨーロッパ
125
Fort Thomas 1955
ネビス島、 セントキッツ島、 Clarke 1880
リーワード諸島
30
Gandajika Base
モルディブ共和国
International
116
GDA 94
オーストラリア
GRS 80
32
測地基準系 1967 (GRS 67)
全世界
GRS 67
33
測地基準系 1980 (GRS 80)
全世界
GRS 80
126
Graciosa Base SW 1948
フ ァ イ ア ル 島、グ ラ シ オ ザ International 1924
島、ピコ島、サンジョルジェ
島、テルセイラ島 (アゾレス
諸島)
34
Guam 1963
グアム諸島
Clarke 1866
35
GUX 1 Astro
ガダルカナル島
International
150
Hartbeesthoek 94
南アフリカ
WGS 84
127
Herat North
アフガニスタン
International 1924
128
Hermannskogel
ユーゴスラビア (1990 年以前)、 Bessel 1841
スロベニア、クロアチア、ボ
スニア ヘルツェゴビナ、セル
ビア
36
Hito XVIII 1963
チリ南部 (南緯 53 度周辺)
MapXtreme v7.2
610
GRS 80
International
International
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
37
Hjorsey 1955
アイスランド
International
38
Hong Kong 1963
香港
International
1004
Hungarian Datum (HD 72)
ハンガリー
GRS 67
39
Hu-Tzu-Shan
台湾
International
40
Indian
タイ、ベトナム
Everest (インド
1830)
41
Indian
バングラディシュ、インド、 Everest (インド
ネパール
1830)
129
Indian
パキスタン
Everest (パキスタ
ン)
130
Indian 1954
タイ
Everest (インド
1830)
131
Indian 1960
ベトナム
Everest (インド
1830)
132
Indian 1975
タイ
Everest (インド
1830)
133
Indonesian 1974
インドネシア
Indonesian 1974
42
Ireland 1965
アイルランド
Modified Airy
134
ISTS 061 Astro 1968
サウスジョージア島
International 1924
43
ISTS 073 Astro 1969
ジエゴ ガルシア
International
152
Japanese Geodetic Datum
2000 (JGD2000)
日本
GRS80
44
Johnston Island 1961
ジョンストン島
International
45
Kandawala
スリランカ
Everest (インド
1830)
46
Kerguelen Island
Kerguelen Island
International
47
Kertau 1948
西マレーシア、シンガポール
Everest ( 西マレー
シアとシンガポー
ル 1948)
MapXtreme v7.2
611
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
135
Kusaie Astro 1951
カロリン諸島、ミクロネシア International 1924
連邦
48
L.C.5 Astro
ケイマンブラック島
Clarke 1866
136
Leigon
ガーナ
Clarke 1880
49
Liberia 1964
リベリア
Clarke 1880
113
Lisboa (DLx)
ポルトガル
International
50
Luzon
フィリピン (ミンダナオ島を Clarke 1866
除く)
51
Luzon
ミンダナオ島
Clarke 1866
52
Mahe 1971
マエ島
Clarke 1880
53
Marco Astro
サルベージ諸島
International
54
Massawa
エリトリア (エチオピア)
Bessel 1841
114
Melrica 1973 (D73)
ポルトガル
International
55
Merchich
モロッコ
Clarke 1880
56
Midway Astro 1961
ミッドウェー島
International
57
Minna
ナイジェリア
Clarke 1880
137
Montserrat Island Astro 1958
モンセラト、リーワード諸島
Clarke 1880
138
M'Poraloko
ガボン
Clarke 1880
58
Nahrwan
マシラ島 (オマーン)
Clarke 1880
59
Nahrwan
アラブ首長国連邦
Clarke 1880
60
Nahrwan
サウジアラビア
Clarke 1880
61
Naparima, BWI
トリタニタード トバコ
International
109
オランダ
オランダ
Bessel
117
New Zealand Geodetic
Datum 2000 (NZGD2000 49)
ニュージーランド
GRS 80
31
New Zealand Geodetic
Datum 1949 (NZGD 49)
ニュージーランド
International
MapXtreme v7.2
612
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
1010
(New Zealand (NZGD49 7parameter)
ニュージーランド
International
62
North American 1927
(NAD 27)
US本土
Clarke 1866
63
North American 1927
(NAD 27)
アラスカ
Clarke 1866
64
North American 1927
(NAD 27)
バハマ諸島 (サンサルバドル Clarke 1866
島を除く)
65
North American 1927
(NAD 27)
サンサルバドル島
66
North American 1927
(NAD 27)
カナダ (ニューファンドラン Clarke 1866
ド島を含む)
67
North American 1927
(NAD 27)
パナマ運河地帯
68
North American 1927
(NAD 27)
カリブ海 (タークス カイコス Clarke 1866
諸島)
69
North American 1927
(NAD 27)
中央アメリカ (ベリーズ、コ Clarke 1866
スタリカ、エルサルバドル、
グアテマラ、ホンジュラス、
ニカラグア)
70
North American 1927
(NAD 27)
キューバ
Clarke 1866
71
North American 1927
(NAD 27)
グリーンランド (ヘイズ半島)
Clarke 1866
72
North American 1927
(NAD 27)
メキシコ
Clarke 1866
73
North American 1927
(NAD 27)
ミシガン (アメリカ合衆国平 Modified Clarke
1866
面座標系
1927 でのみ使用)
74
North American 1983
(NAD 83)
アラスカ、カナダ、中央アメ GRS 80
リカ、US 本土、メキシコ
139
North Sahara 1959
アルジェリア
MapXtreme v7.2
613
Clarke 1866
Clarke 1866
Clarke 1880
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
107
Nouvelle Triangulation
Francaise (NTF) Greenwich
Prime Meridian
フランス
Modified Clarke
1880
1002
Nouvelle Triangulation
Francaise (NTF) Paris Prime
Meridian
フランス
Modified Clarke
1880
111
NWGL 10
全世界
WGS 72
75
Observatorio 1966
コルボ島、フロレス島 (アゾ International
レス諸島)
140
Observatorio Meteorologico
1939
コルボ島、フロレス島 (アゾ International 1924
レス諸島)
76
Old Egyptian
エジプト
Helmert 1906
77
Old Hawaiian
ハワイ
Clarke 1866
97
OldTokyo
日本、韓国、沖縄
Bessel 1841
78
オマーン
オマーン
Clarke 1880
79
Ordnance Survey of Great
Britain 1936
イ ン グ ラ ン ド、マ ン 島、ス Airy
コットランド、シェトランド
諸島、ウェールズ
80
Pico de las Nieves
カナリア諸島
International
81
Pitcairn Astro 1967
ピトケアン島
International
141
Point 58
ブルキナファン、ニジェール
Clarke 1880
142
Pointe Noire 1948
コンゴ
Clarke 1880
157
Popular Visualization
全世界
Popular
Visualization
143
Porto Santo 1936
ポルトサント島、マディラ諸島
International 1924
1000
Potsdam
ドイツ
Bessel
82
Provisional South American
1956
ボ リ ビ ア、チ リ、コ ロ ン ビ International
ア、エクアドル、ガイアナ、
ペルー、ベネズエラ
36
Provisional South Chilean
1963
チリ南部 (南緯 53 度周辺)
MapXtreme v7.2
614
International
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
83
Puerto Rico
プエルトリコ、バージン諸島
Clarke 1866
1001
Pulkovo 1942
ドイツ
Krassovsky
1012
PZ90
ロシア
PZ90
84
Qatar National
カタール
International
85
Qornoq
南グリーンランド
International
1000
Rauenberg
ドイツ
Bessel
86
Reunion
マスカリン諸島
International
112
Rikets Triangulering 1990
(RT 90)
スウェーデン
Bessel
1011
Rikets Triangulering 1990
(RT 90)、7 パラメータ
スウェーデン
Bessel
87
Rome 1940
サルジニア島
International
88
Santo (DOS)
エスピリトサント島
International
89
São Braz
サンミゲル島、サンタマリア International
島 (アゾレス諸島)
90
Sapper Hill 1943
イーストフォークランド島
International
91
Schwarzeck
ナミビア
Modified Bessel
1841
144
Selvagem Grande 1938
サルベージ諸島
International 1924
145
Sierra Leone 1960
シエラレオネ
Clarke 1880
146
S-JTSK
チェコ共和国
Bessel 1841
1013
SK42
ロシア
PZ90
1024
SK95
ロシア
PZ90
92
South American 1969
アルゼンチン、ボリビア、ブ South American
ラジル、チリ、コロンビア、 1969
エクアドル、ガイアナ、 パラ
グアイ、ペルー、ベネズエラ
トリタニタード トバコ
93
South Asia
シンガポール
MapXtreme v7.2
615
Modified Fischer
1960
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
領域マップ
Datum
楕円体
94
Southeast Base
ポルトサント島、マディラ諸 International
島
95
Southwest Base
フ ァ イ ア ル 島、グ ラ シ オ ザ International
島、ピコ島、サンジョルジェ
島、テルセイラ島 (アゾレス
諸島)
1003
Switzerland (CH 1903)
スイス
147
Tananarive Observatory 1925 マダガスカル
96
Timbalai 1948
ブルネイ、東マレーシア ( サ Everest (インド
1830)
ラワク、サバ)
1015
Tokyo
日本
Bessel 1841
98
Tristan Astro 1968
トリスタン ダ クーニャ
International
99
Viti Levu 1916
ビチレブ島 (フィジー諸島)
Clarke 1880
148
Voirol 1874
チェニジア/アルジェリア
Clarke 1880
149
Voirol 1960
アルジェリア
Clarke 1880
100
Wake-Eniwetok 1960
マーシャル諸島
Hough
101
World Geodetic System 1960
(WGS 60)
全世界
WGS 60
102
World Geodetic System 1966
(WGS 66)
全世界
WGS 66
103
World Geodetic System 1972
(WGS 72)
全世界
WGS 72
104
World Geodetic System 1984
(WGS 84)
全世界
WGS 84
105
Yacare
ウルグアイ
International
106
Zanderij
スリナム
International
Bessel
International 1924
単位
次の表に、利用できる座標系の単位と、MapInfoCoordinateSystemSet.xml ファイルでその単位を
識別する際に使用する番号を示します。
MapXtreme v7.2
616
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
番号
単位
6
センチメートル
31
チェイン
3
フィート*
2
インチ
1
キロメートル
30
リンク
7
メートル
0
マイル
5
ミリメートル
9
海里†
32
ロッド
8
US Survey フィート (アメリカ合衆国平面座標系 1927 で使用)‡
4
ヤード
*
1 フィート = 30.48 cm
†
1 海里 = 1,852 m
‡
US Survey フィート = 12/39.37 メートルまたは約 30.48006 cm
座標系の原点
原点とはすべての座標の参照元となるポイントのことで、経度/緯度で指定します。特定の座標系
について、その正確性が最も向上する位置を原点として選択します。原点を北の方向へ移動させ
ると、Y の値が大きくなります。東へ移動すると X 値が大きくなります。これらの座標値は、通
常、北距および東距と呼ばれます。
横メルカトル投影法の場合、原点の経度は中心子午線になります。横メルカトル投影法では、 中
心子午線に接するように地球に円筒をかぶせます。したがって、投影法マップの縮尺は中央子午
線周辺については正確になります。
Hotine Oblique Mercator 投影法では、赤道または経線以外の大円を指定する必要があります。
MapInfo でこの作業を行うには、楕円体上でポイントを 1 つ指定してから、そのポイントからの方
向を指定します。そのポイントが座標系の原点となります。
MapXtreme v7.2
617
開発者ガイド
付録 H: 座標系の要素
投影法の測地系
標準緯線 (円錐図法)
円錐投影法では、2 本の緯線に交差するように円錐を地球にかぶせます。この 2 本の緯線が標準緯
線です。1 つは投影ゾーンの北、1 つは南にあります。1 本の標準緯線を使用する場合は、同じ緯
線を 2 回指定します。両方とも緯度で表されます。
Oblique Azimuth (Hotine Oblique Mercator)
ポイントと方向 (円弧) を使用して大円 (Hotine Oblique Mercator) を指定するとき、その方向は
Oblique Azimuth と呼ばれ角度で表されます。
比率因数 (横メルカトル図法)
比率因数は円筒座標に適用され、東西の境界のひずみを軽減しながらマップ中央のひずみを補正
します。この比率因数によって円筒が地球内部に潜り込み、円筒と地表は 2 本の線で交差しま
す。この線上での縮尺は正確です。
比率因数が 1:25000 などの比率で表されていることもあります。通常、これは縮尺と呼ばれま
す。比率因数と縮尺の関係は次のとおりです。
比率因数 = 1 - 縮尺
この場合、比率因数は 1-(1/25000)、つまり 0.99996 になります。
擬似偏北距離および擬似偏東距離
負の値が存在しなければ、座標の計算は比較的簡単です。アメリカ合衆国平面座標およびユニー
バーサル横メルカトル図法の座標の計算に伴う煩雑さを軽減するには、一般的には、北距および
東距に対して測定オフセットを追加します。これらのオフセットは、疑似偏北距離および疑似偏
東距離と呼ばれ、 角度ではなく座標単位で表されます。(座標単位は Units パラメータで指定しま
す。)
レンジ (方位図法)
レンジは、地球上のどれくらいの範囲を表示するかを角度で指定します。指定できる値は 1 ~ 180
です。90 を指定すると半球体、つまり地球の半分が表示されます。180 を指定すると地球全体が
表示されますが、ほとんどの部分にゆがみが生じます。
多円錐図法
以下の説明は、『Map Projections - A Working Manual』(USGS Professional Paper 1395、John P.
Snyder 著) からの抜粋です。
多円錐図法は、一般的には American Polyconic in Europe と呼ばれており、マップ上の各緯線が、
それぞれの緯線に接するように地球にかぶせられた各円錐を展開したものと同じになります。つ
まり、1 つの円錐しか使用しない一般的な円錐図法とは異なり、この図法では多数の円錐が関連し
ています。
MapXtreme v7.2
618
開発者ガイド
付録 H: 座標系の要素
測地系の変換
多円錐図法は正積でも等角でもありません。ただし、中心子午線周辺については、ゆがみもなく
縮尺も正確です。緯線の縮尺は正確ですが、緯線と交差する経線については中央から離れるに
従って引き伸ばされます。したがって、正角 (正しい角度) という点についてはそれ以外はどの緯
線も標準にはなりません。ただし、中心子午線上の角度は正確です。中心子午線周辺では、ゆが
みはかなり少なくなっています。
これは広い領域を対象とした投影法ではありません。広範囲にわたる経線をマッピングすると、
使用されている変換アルゴリズムが破綻します。たとえば、WORLD.TAB サンプル テーブルを多
円錐図法で投影すると、異常な形状になります。
測地系の変換
MapInfo では、Molodensky (3 パラメータ) と Bursa-Wolf (7-parameter) が使用して測地系の座標系
を変換していました。この 2 つは、ある測地系の座標を他の測地系の座標に変換するための一般
的な方法です。
NAD 83 測地系の導入後、NADCON (North American Datum CONversion) と呼ばれるプログラム
が NOAA により開発されました。NAD 27 と NAD 83 間で座標を変換するための非常に特殊なプ
ログラムです。この特殊な作業を行うため、NADCON は Molodensky に比べるとかなり細かなと
ころまで正確に変換されます。Molodensky では最小単位が 10 ~ 30 メートルだったのに比べ、
NADCON の最小単位は約 0.1 メートルです。米国の 国勢調査局を含め、ほとんどの米政府機関が
NADCON を標準で採用しており NAD 27 と NAD 83 間での変換を行っています。
NADCON の対象領域内 (米国、プエルトリコ、バージン諸島) にある座標を NAD 27 と NAD 83 間
で変換する場合、MapInfo 4.1.2 以降では NADCON アルゴリズムが使用されています。座標がこ
れ ら の 領 域 外 に あ る 場 合、NAD 27 または NAD 83 以外の測地系を使用している場合は、
Molodensky または Bursa-Wolfe を使用して変換が行われます。
必要なファイル アクセスが異なるため、NADCON 変換は Molodensky よりも若干速度が遅くなっ
ています。NADCON 変換をオフにする必要がある場合は、*.las ファイルと *.los ファイルを
MapXtreme プログラムまたは MapXtreme の Common ディレクトリから削除します。
カスタム測地系
測地系とは、地球の形状と方向を数学的に表記したものです。地球の形状は均一ではありませ
ん。このため、測地系にはさまざまな種類が多数あり、世界のさまざまな地域でその地域に合っ
た測地系が使われています。これらの測地系は、特定の領域の地表をなるべく正確に表すための
基準を提供します。
地球の座標系は、それぞれに対応した測地系を使って地球の地表になるべく近づけるようにして
います。2 つの座標系が異なる測地系を使用している場合、ある座標系の座標を他の座標系に変換
するときに、Pitney Bowes Software のマッピング製品では測地系変換を実行する必要がありま
す。Pitney Bowes Software では Bursa-Wolfe 測地系変換が採用されています。この精度は一般的
に 10 メートル以内です。(2 つの座標系が同じ測地系を使用している場合、測地系の変換は行われ
ません。したがって、変換の精度は 0.1 メートル以内になります。)
MapXtreme v7.2
619
開発者ガイド
付録 H: 座標系の要素
カスタム測地系
カスタム測地系の定義
座標系のほとんどが、Pitney Bowes Software であらかじめ定義された測地系のいずれかを使用し
ています。この測地系の一覧は、この付録に記載されています。この一覧にない測地系を使用す
る必要がある場合、かつ測地系の数学的パラメータについて理解している場合は、カスタム測地
系を使用して座標系を定義できます。測地系を定義するための情報を以下に示します。
1 つの楕円体 (回転楕円体)。短軸が中心となる楕円体で、3D 表面を形成します。楕円体は、長
短軸の長さ (メートル単位) と平坦化の角度で表されます。なお、長短軸は "a"、平坦化は "f"
で表されます。MapInfo では、40 を超える楕円体が事前に定義されています。事前定義された
楕円体の一覧については、以下の表を参照してください。
3 つの移動パラメータ。楕円体をそれぞれの軸に沿って移動する距離 (メートル単位) を指定し
ます。これらのパラメータは、通常、dX、dY、および dZ で表されます。DX、DY、DZ また
は u、v、w で表されていることもあります。
•
•
•
3 つの回転パラメータ。楕円体をそれぞれの軸を中心として回転させる角度 (秒単位) を指定し
ます。これらのパラメータは、通常、EX、EY、および EZ で表されます。eX、eY、eZ または
e、y、w で表されていることもあります。
•
比率矯正因数。楕円体のサイズの調整量 (100 万分の 1 単位) を指定します。このパラメータは
m で表されます。k で表されることもあります。
•
本初子午線の経度 (グリニッジからの東の度数)。本初子午線は、地球上のどの位置に経度 0x
を割り当てるかを指定します。測地系のほとんどが、グリニッジを通る子午線を本初子午線と
して使用しています。したがって、このパラメータは通常は 0 です。ただし、他の子午線を本
初子午線として採用している測地系もあります。たとえば、NTF Datum の本初子午線は、グリ
ニッジの東 2.33722917 度にあるパリを通る子午線です。座標系として NTF Datum を使用し
ている場合、座標系の経度の基点はグリニッジではなくパリになります。
すべての座標系でカスタム測地系を定義することができます。測地系番号 9999 および測地系パラ
メータを次の順番で指定してください。
9999, EllipsoidNumber, dX, dY, dZ, EX, EY, EZ, m, PrimeMeridian
測地系の中には、回転パラメータ、比率矯正因数、本初子午線を指定せずに、楕円体パラメータ
と移動パラメータ (dX、dY、dZ) のみを指定するものがあります。この場合、測地系番号として
9999 ではなく 999 を使用すると、より簡単に定義できます。
999, EllipsoidNumber, dX, dY, dZ
楕円体番号は以下のリストから選択する必要があります。現時点では、カスタム楕円体を定義す
ることはできません。このリストにない楕円体を使用する必要がある場合は、MapInfo の将来のリ
リースでその楕円体を追加できるよう MapInfo Technical Support にお知らせください。
番号
楕円体
a
1/f
9
Airy 1930
6377563.396
299.3249646
13
Airy 1930 (アイルランド用改訂版 1965)
6377340.189
299.3249646
51
ATS7 77
6378135.0
298.257
2
Australian
6378160.0
298.25
MapXtreme v7.2
620
開発者ガイド
付録 H: 座標系の要素
カスタム測地系
番号
楕円体
a
1/f
10
Bessel 1841
6377397.155
299.1528128
35
Bessel 1841 (NGO 用改訂版 1948)
6377492.0176
299.15281
14
Bessel 1841 (Schwarzeck 用改訂版)
6377483.865
299.1528128
36
Clarke 1858
6378293.639
294.26068
7
Clarke 1866
6378206.4
294.9786982
8
Clarke 1866 (ミシガン用改訂版)
6378450.047484481
294.9786982
6
Clarke 1880
6378249.145
293.465
15
Clarke 1880 (Arc 用改訂版 1950)
6378249.145326
293.4663076
30
Clarke 1880 (IGN 用改訂版)
6378249.2
293.4660213
37
Clarke 1880 (ジャマイカ用改訂版)
6378249.136
293.46631
16
Clarke 1880 (Merchich 用改訂版)
6378249.2
293.46598
38
Clarke 1880 (パレスチナ用改訂版)
6378300.79
293.46623
39
Everest (ブルネイ、東マレーシア (サバと 6377298.556
サラワク))
300.8017
11
Everest (インド 1830)
6377276.345
300.8017
40
Everest (インド 1956)
6377301.243
300.80174
50
Everest (パキスタン)
6377309.613
300.8017
17
Everest ( 西 マ レ ー シ ア とシンガポール 6377304.063
1948)
300.8017
48
Everest (西マレーシア 1969)
6377295.664
300.8017
18
Fischer 1960
6378166.0
298.3
19
Fischer 1960 (南アジア用改訂版)
6378155.0
298.3
20
Fischer 1968
6378150.0
298.3
21
GRS 67
6378160.0
298.247167427
0
GRS 80
6378137.0
298.257222101
5
Hayford
6378388.0
297.0
MapXtreme v7.2
621
開発者ガイド
付録 H: 座標系の要素
カスタム測地系
番号
楕円体
a
1/f
22
Helmert 1906
6378200.0
298.3
23
Hough
6378270.0
297.0
31
IAG 75
6378140.0
298.257222
41
Indonesian
6378160.0
298.247
4
International 1924
6378388.0
297.0
49
Irish (WOFO)
6377542.178
299.325
3
Krassovsky
6378245.0
298.3
32
MERIT 83
6378137.0
298.257
33
New International 1967
6378157.5
298.25
43
NWL 10D
6378135.0
298.26
42
NWL 9D
6378145.0
298.25
44
OSU86F
6378136.2
298.25722
45
OSU91A
6378136.3
298.25722
46
Plessis 1817
6376523.0
308.64
54
Popular Visualization
6378137.0
0.0
52
PZ90
6378136.0
298.257839303
24
South American
6378160.0
298.25
12
Sphere
6370997.0
0.0
47
Struve 1860
6378297.0
294.73
34
Walbeck
6376896.0
302.78
25
War Office
6378300.583
296.0
26
WGS 60
6378165.0
298.3
27
WGS 66
6378145.0
298.25
1
WGS 72
6378135.0
298.26
28
WGS 84
6378137.0
298.257223563
MapXtreme v7.2
622
開発者ガイド
付録 H: 座標系の要素
カスタム測地系
WGS 84 測地系と比べ、移動パラメータと回転パラメータが楕円体の空間的な方向を示します。
これらのパラメータの符号 (正または負) が正しいかどうかを確認することが重要です。地域の測
地系について説明するドキュメントには、通常、その地域の測地系から WGS 84 に座標を変換す
るためのパラメータが記載されています (つまり、これらのパラメータは、WGS 84 から地域の測
地系が引き出されたことを前提としています)。この場合、ドキュメントに示されているとおりに
パラメータを使用できます。ただし、逆方向、つまり WGS 84 から地域の測地系に座標を変換す
るためのパラメータがドキュメントに記載されている場合は、移動、回転、縮尺矯正の各パラ
メータの符号を逆にする必要があります。
正しい順序でパラメータを指定することも重要です。ドキュメントによっては、回転パラメータの
順序が EZ, EY, EX というように EZ が先頭になっていることがあります。この場合、カスタム測地
系を定義するときに回転パラメータの順序を逆にする必要があります。ギリシャ文字でパラメータ
を表現しているドキュメントでは、この点を特に見落としがちです。パラメータが w、y、e という
順序で示されている場合、カスタム測地系の定義ではこの順序を逆にしなければなりません。
以下に、技術文書で紹介されていることの多い、地域の測地系の定義の例を示します (LD-2)。
LD-2 楕円体: Krassovsky
a
6378245.0 m
f
1 / 298.3
LD-2 から WGS 84 への変換
u
+24 m
v
–123 m
w
-94 m
w
+0.13
y
+0.25
e
0.02
m
+1.1 Þ 10-6
この測地系は Krassovsky 楕円体を使用しています。この楕円体番号は上記の表では 3 です。地域
の測地系から WGS 84 への変換について説明しているため、パラメータの符号を逆にする必要は
ありません。ただし、回転パラメータは w が先頭になっています。したがって、カスタム測地系
の定義ではこの順番を逆にする必要があります。
9999, 3, 24, -123, -94, -0.02, 0.25, 0.13, 1.1, 0
最後に、楕円体パラメータと移動パラメータのみを提供する LD-3 の例を示します。
LD-3 楕円体: Clarke 1880
MapXtreme v7.2
623
開発者ガイド
付録 H: 座標系の要素
National Transformation v.2 (NTv2)
a
6378249.145 m
f
1 / 293.465
WGS 84 負の地域の測地系 LD-3
dX
-7 m
dY
36 m
dZ
225 m
この測地系は Clarke 1880 楕円体を使用しています。この楕円体の番号は上記の表では 6 です。パ
ラメータの符号を逆にする必要はありません。また、回転パラメータは存在しないので、その順
序を気にする必要もありません。この場合、カスタム測地系の定義では 9999 の代わりに 999 を使
用できます。以下の 2 つの定義は同じことを意味します。したがって、いずれか片方を使用する
ことができます。
999, 6, -7, 36, 225
9999, 6, -7, 36, 225, 0, 0, 0, 0, 0
他のカスタム測地系定義と同様、MapInfoCoordinateSystemSet.xml 行の測地系番号の代わりに、
定義のいずれかを以下のように入力します。
"Longitude / Latitude (LD-3)", 1, 999, 6, -7, 36, 225
<srsName>UTM Zone 30 (LD-3)</srsName>
- <srsID>
<code>coordsys 8, 999, 6, -7, 36, 225, 7, -3, 0, 0.9996, 500000, 0
</code>
<codeSpace>mapinfo</codeSpace>
<remarks>Universal Transverse Mercator (LD-3)</remarks>
</srsID>
National Transformation v.2 (NTv2)
National Transformation v.2 (NTv2) は、Geomatics Canada の Geodetic Survey Division によって
開発されたアルゴリズムおよびグリッド シフト ファイル形式です。NTv2 を使用して、NAD 27 リ
ファレンス システムのデータを NAD 84 リファレンス システムのデータに変換することができま
す。アルゴリズムで使用されるグリッド シフト ファイルには、NAD 27 と NAD 83 の間の座標の
差を表す、1 つ以上の長方形のグリッドが保存されています。
National Transformation は当初、カナダの地理データを NAD 27 から NAD 84 に変換するために作
成されました。その後、オーストラリア、ニュージーランド、ドイツの測地系の変換に採用され
ています。
MapXtreme v7.2
624
開発者ガイド
付録 H: 座標系の要素
National Transformation v.2 (NTv2)
NTv2 アルゴリズム は、これらの変換をサポートするために、MapXtreme 6.7.1 からインプリメン
トされました。また、次の国のグリッド シフト ファイルが追加されています。
•
•
•
•
カナダ
オーストラリア
ニュージーランド
ドイツ
これらのファイルは、MapXtreme の Common Files フォルダに格納されています。このファイル
は、デフォルトで次の場所に格納されます。
C:\Program Files\Common Files\MapInfo\MapXtreme\7.0.0
アルゴリズムとグリッド シフト ファイルだけでなく、XML 構成ファイル (NTv2.xml) もインス
トールされます。これにより、NTv2 アルゴリズムを拡張して、他の測地系の変換をサポートする
ことができます。構成ファイルには、新しいグリッド シフト ファイルを追加できます。また、
NTv2 アルゴリズムでの特定のグリッド シフト ファイルの使用を有効または無効にすることもで
きます。NTv2.xml ファイルは MapXtreme の Common Files フォルダに格納されています。
NTv2 アルゴリズムおよびカナダのグリッド シフト ファイルは、次の著作権の下に保護されてい
ます。
© 1995 Her Majesty the Queen in Right of Canada, represented by the Minister of Natural Resources.
この後のセクションでは、各国のデータについてサポートされている変換と、構成ファイルの使
用方法について説明します。
カナダ
カナダ用として、次のグリッド シフト ファイルが用意されています。
NTV2_0.GSB – NAD 1927 から NAD 1983 への変換に使用
MAY76V20.GSB – NAD 1927 (Definition 1976) から NAD 1983 への変換に使用 (オ
ンタリオ州)
これらのファイルでは、NAD 1927 測地系または NAD 1927 (Definition 1976) 測地系と NAD 1983
測地系との間で変換が実行されます。NAD 1927 (Definition 1976) 測地系は、オンタリオ州の NAD
1927 測地系の見直しを行ったものです。
アルゴリズム、ソフトウェア、グリッド ファイル システムの詳細については、次の Geomatics
Canada の Geodetic Survey Division の Web サイトからダウンロードできます。
www.geod.nrcan.gc.ca/index_e.php
オーストラリア
オーストラリア用として、次のグリッド シフト ファイルが用意されています。
A66_National.gsb – AGD 1966 から GDA94 への変換に使用
National_84.gsb – AGD 1984 から GDA94 への変換に使用
MapXtreme v7.2
625
開発者ガイド
付録 H: 座標系の要素
National Transformation v.2 (NTv2)
オーストラリア用のグリッド システム ファイルでは、AGD 1966 測地系または AGD 1984 測地系
と GDA 1994 測地系との間で変換が実行されます。
変換およびグリッド シフト ファイルの詳細については、次の ICSM (Intergovernmental Committee
on Surveying and Mapping) の Web サイトからダウンロードできます。
www.icsm.gov.au/icsm/gda/gdatm/
ニュージーランド
ニュージーランド用として、次のグリッド シフト ファイルが用意されています。
nzgd2kgrid0005.gsb – NZGD49 測地系から NZGD2000 測地系への変換に使用
ニュージーランド用のグリッド シフト ファイルでは、NZGD49 測地系から NZGD2000 測地系へ
の変換が実行されます。
詳細については、次の LINZ (Land Information New Zealand) の Web サイトを参照してください。
このサイトでは、オンライン変換も実行できます。
www.linz.govt.nz/geodetic/conversion-coordinates/online-conversionservice
ドイツ
ドイツ用として、次のグリッド シフト ファイルが用意されています。
BETA2007.gsb – DHDN 測地系から ETRS89 への変換に使用
詳 細 情 報 と 公 式 な グ リ ッ ド シ フ ト ファイルのダウンロードについては、次の CRS EU
(Information and Service System for European Coordinate Reference Systems) の Web サイトを参
照してください。
www.crs-geo.eu/
構成ファイル
NTv2 構成ファイル (NTv2.xml) は、編集可能な XML ファイルで、他の測地系の変換のための新し
いグリッド シフト ファイルを追加したり、NTv2 での特定のグリッド シフト ファイルの使用を有
効または無効にしたりできます。
新しいグリッド シフト ファイルを追加するには、次の 3 つのパラメータを指定する必要があり
ます。
•
グリッド シフト ファイル名
•
•
変換元の測地系
変換先の測地系
測 地 系 は、さ ま ざ ま な 方 法 で 定 義 で き ま す。た と え ば、変 換 元 と 変 換 先 の 両 方 の 測 地 系 が
MapXtreme で定義されている場合は、MapXtremeCoordinateSystemSet.xml ファイルでこれらの
測地系に割り当てられている数値を使用して、構成ファイルで定義できます。このニュージーラ
ンドの例では、構成ファイルの XML は次のようになります (部分的に太字になっているのは、強
調するためであって、それ以上の意味はありません)。
MapXtreme v7.2
626
開発者ガイド
付録 H: 座標系の要素
座標系と投影法に関する情報
-
<NTv2Conversion>
<Description>NTv2 Conversion for New Zealand</Description>
<GridFile>NZGD2KGRID0005.GSB</GridFile>
<Enabled>true</Enabled>
- <SourceDatum>
<DatumID>1010</DatumID>
</SourceDatum>
- <DestinationDatum>
<DatumID>117</DatumID>
</DestinationDatum>
</NTv2Conversion>
- <NTv2Conversion>
しかし、測地系を簡単に定義できない場合もあり、 測地系を定義するために、測地系のシフト値
を指定しなければならないこともあります (それらの範囲も指定しなければならないこともありま
す)。たとえば、次の XML の例では、カナダの NAD 27 測地系が定義されています。ここでは、楕
円体と、x 、y、z のシフト値と、その範囲を使用して、測地系が定義されています (部分的に太
字になっているのは、強調するためであって、それ以上の意味はありません)。
-
<NTv2Conversion>
<Description>NAD 1927 to NAD 1983 conversion for Canada</Description>
<GridFile>NTV2_0.GSB</GridFile>
<Enabled>true</Enabled>
- <SourceDatum>
<EllipsoidID>7</EllipsoidID>
<ShiftX>-8</ShiftX>
<ShiftY>150.5</ShiftY>
<ShiftZ>186</ShiftZ>
<dShiftX>17</dShiftX>
<dShiftY>19.5</dShiftY>
<dShiftZ>8</dShiftZ>
</SourceDatum>
- <DestinationDatum>
<DatumID>74</DatumID>
</DestinationDatum>
</NTv2Conversion>
座標系と投影法に関する情報
以 下 に 示 す 最 初 の 3 つ の ド キ ュ メントは比較的薄い小冊子です。残りの 2 つは書籍です。
American Congress of Surveying and Mapping (小冊子) および U.S. Geological Survey (書籍) の住
所と電話番号も記載します。
•
American Cartographic Association。Choosing a World Map - Attributes, Distortions, Classes,
Aspects。Falls Church, VA: American Congress on Surveying and Mapping.Special Publication
No. 2.1988。
•
American Cartographic Association。Matching the Map Projection the Need。Falls Church, VA:
American Congress on Surveying and Mapping.Special Publication No. 3.1991。
MapXtreme v7.2
627
開発者ガイド
付録 H: 座標系の要素
座標系と投影法に関する情報
•
American Cartographic Association。Which Map is Best?Projections for World Maps。Falls
Church, VA: American Congress on Surveying and Mapping.Special Publication No. 1.1986。
•
John P. Snyder。Map Projections—A Working Manual。Washington: U.S.Geological Survey
Professional Paper 1395。1987
•
John P. Snyder および Philip M. Voxland。An Album of Map Projections。Washington:
U.S.Geological Survey Professional Paper 1453。1989。
•
•
問い合わせ先
American Congress on Surveying and Mapping, 5410 Grosvenor Lane, Suite 100, Bethesda,
MD 20814 2212; (301) 493-0200
•
Earth Science Information Center, U.S.Geological Survey, 507 National Center, Reston, VA
22092; (703) 860-6045 または (800) USA-MAPS
•
Peter H. Dana 氏。University of Texas at Austin、Department of Geography。マップ投影法、測地
系、および座標系の説明に関する Web サイト作成をサポート。これらの説明の多くで MapInfo
Professional が採用されているため、この Web サイトは役に立ちます。このサイトの内容は研
究、リサーチ、教育の目的で自由に使用きますが、次の情報を必ず明記してください。
Peter H. Dana 氏。The University of Texas at Austin、Department of Geography、Geographer's
Craft Project。
•
測地系については、次の Web サイトを参照してください。
www.colorado.edu/geography/gcraft/notes/datum/datum.html
座標系などの情報については、次の Web サイトを参照してください。
www.colorado.edu/geography/gcraft/notes/coordsys/coordsys.html
マップ投影法については、次の Web サイトを参照してください。
www.colorado.edu/geography/gcraft/notes/mapproj/mapproj.html
MapXtreme v7.2
628
開発者ガイド
ユーザ定義のメタデータ
この付録では、TableInfoServer クエリにおけるユーザ定義のメタデータのサ
ポートについて説明します。
この付録の構成
Š
Š
メタデータと MapCatalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .630
ユーザ定義のメタデータにおける TableInfoServer クエリのサ
ポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
I
付録 I: ユーザ定義のメタデータ
メタデータと MapCatalog
メタデータと MapCatalog
空間データベース クエリを扱う場合、クエリの結果セットに含まれる FeatureGeometry フィール
ドと Style フィールドの正確な定義を推測する際には、唯一 MapCatalog がメタデータのソースと
してこれまで使用されてきました。しかし、MapCatalog は、ソースとしての有用性、適合性、信
頼性に欠ける場合もあります。たとえば、次のようなケースが考えられます。
•
•
ビュー - リモートのデータベース サーバにビュー テーブルを定義する場合、対応するエントリ
を MapCatalog に追加するのはデータベース管理者の役目です。これは面倒な作業になること
があります。また、コンテンツに不整合が生じる危険があります。
ストアド プロシージャ - 空間結果セットを動的に生成する可能性があるため、ストアド プロ
シージャの呼び出しへの出力として生成することができる結果セットのすべてを正確に表す単
独の静的エントリを MapCatalog に追加することが不可能である場合があります。
L
•
•
ストアド プロシージャ クエリは、現在 SQL Server に対してのみサポートされています。
複数の空間フィールドを含むテーブル - 空間データベースでは複数の空間フィールドを含むテー
ブルを使用できますが、現在 MapCatalog スキーマではテーブルの 1 つの空間フィールドに対
して定義されたメタデータしか許容されません。
複雑なクエリ - 複雑なクエリで参照されるベース テーブルの正確な情報が MapCatalog に含ま
れていても、推論ロジックの信頼性が低くなる場合があります。その理由は次のとおりです。
• メタデータ推論ロジックで、正しいメタデータの位置を適切に特定することが難しい場合
がある (複雑な結合クエリなど)。
•
ジオメトリに適用される関数のため、MapCatalog メタデータが不正確になる場合がある (座
標系の変換、ポイントのバッファ、凸含集計など)。
•
推論ロジックで、複数のベース テーブルに指定されたメタデータを適切に調整する方法が
指定されていない場合がある (UNION クエリなど)。
ユーザ定義のメタデータにおける TableInfoServer クエリのサポート
MapInfo.Data.TableInfoServer ク ラ ス のプロパティを使用して、テーブルの FeatureGeometry
フィールドと Style フィールドにメタデータを定義できます。このユーザ定義のメタデータ、つま
りフィールドの説明によって、MapCatalog が存在しない場合にこれらのフィールドを識別するこ
とができます。
ColumnHints プロパティ
TableInfoServer に追加された ColumnHints プロパティによって、ユーザはユーザ定義メタデータ
を明示的に指定できます。これにより、クエリの結果セット内の FeatureGeometry フィールドと
Style フィールドが適切に識別されます。このような "説明" は、MapCatalog メタデータの位置を
特定できなかった場合に完全なメタデータを取得できるようにするのが主な目的です。しかし、
このような "説明" は、MapCatalog メタデータのコンポーネントを選択的にオーバーライドする、
MapXtreme v7.2
630
開発者ガイド
付録 I: ユーザ定義のメタデータ
ユーザ定義のメタデータにおける TableInfoServer クエリのサポート
潜在的に限定的な定義としても使用できます。どちらの場合も、ユーザ定義のメタデータは決定
的なものと見なされるため、必要なときに、クエリの結果の詳細が十分に把握できている場合に
のみ、フィールドの説明を使用するように注意が必要です。
ColumnHints プロパティは、Columns コレクションとして定義されます。このコレクションのイ
ンスタンスを作成し、その中のそれぞれの説明について Column インスタンスを挿入すると、この
コレクションが ColumnHints プロパティに割り当てられます。たとえば、tblInfoSrvfor という名前
の TableInfoServer 変数の場合は、次のようになります。
[C#]
Columns hints = new Columns();
// insert Column instances into the collection to serve as hints (see
below)
tblInfoSrv.ColumnHints = hints;
FeatureGeometry および Style 以外の種類の Column インスタンスも、説明を表す Columns コレ
クションに追加できますが、現状ではこのようなフィールド定義は無視されます。
FeatureGeometry フィールド説明の適用
FeatureGeometry フィールド説明を使用して、クエリの結果内の指定されたフィールドをフィー
チャ ジオメトリとして解釈するように指定できます。たとえば、空間オブジェクト (SpatialWare
ST_Spatial バイナリ、または Oracle Spatial MDSYS.SDO_GEOMETRY 構造など) を含む geo と
いう名前の列がクエリによって返された場合、説明を作成し、それを Columns コレクション (上
記の例を参照) に追加することで、このフィールドを識別できます。
[C#]
GeometryColumn geoCol = new GeometryColumn("geo");
...
hints.Add(geoCol);
こ の コー ド 内 の 省 略 記 号 (...) は、説 明を作成して Columns コレクションに追加する前に、
GeometryColumn イ ン ス タ ン ス の追加プロパティも設定する必要があることを示します。
FeatureGeometry 説明は、MapCatalog で得られるものと同じ情報を明示的に提供することを主な
目的としています。具体的には、次の情報です。
•
•
座標系
FeatureGeometry 型
•
•
デフォルトのビュー
デフォルトのスタイル
このようなプロパティをすべて考慮して、FeatureGeometry 説明を作成すると、次のようになり
ます。
[C#]
CoordSysFactory cfs = new CoordSysFactory();
CoordSys cs = cfs.CreateFromMapBasicString("Earth Projection 1, 0");
GeometryColumn geo = new GeometryColumn("geo", cs);
geo.PredominantGeometryType = GeometryType.Polygon;
geo.DefaultView = new DRect(-74, 40, -70, 44);
geo.DefaultStyle = new MapInfo.Styles.AreaStyle(
MapXtreme v7.2
631
開発者ガイド
付録 I: ユーザ定義のメタデータ
ユーザ定義のメタデータにおける TableInfoServer クエリのサポート
new MapInfo.Styles.SimpleLineStyle(new LineWidth(2.0,
MapInfo.Styles.LineWidthUnit.Pixel)),
new MapInfo.Styles.SimpleInterior(10));
hints.Add(geo);
空間フィールドのデフォルトのメタデータを提供する MapCatalog エントリが存在するとわかって
いる場合、特定のプロパティをオーバーライドする手段として "限定的な" 説明を使用できます。
通常、そのプロパティはデフォルト ビューやデフォルト スタイルなどのさまざまな設定プロパ
ティですが、複雑なクエリの独自の要件に応じて、そのようなプロパティを任意にオーバーライ
ドできます。
ColumnHints を (x,y) データ テーブルで使用することはできません。その場合、従来と同じく
SpatialSchemaXY を使用する必要があります。テーブルに SpatialSchemaXY を適用すると、関連
付けられている ColumnHints がすべて無視されます。
現在、MapXtreme テーブルでは FeatureGeometry フィールドが 1 つしかサポートされないため、
Columns コレクションに含まれる FeatureGeometry フィールド定義も 1 つのみと予想できます。
ただし、Columns コレクションでは、ユーザがこのフィールド定義を好きなだけ追加することは
防止されません。その場合、最終的にメタデータの定義をコンパイルする際には、各プロパティ
に対して検出された最後の非限定値が優先されます。
Style フィールド説明の適用
クエリの結果のフィールドに、各フィーチャの Style インスタンス (フィーチャ内で関連付けられ
ている FeatureGeometry に対応) を作成するために使用される値 (特に MapBasic スタイル文字列)
が含まれることを示す方法として、Style フィールド説明を使用できます。たとえば、クエリで
MapBasic スタイル文字列を含む、mb_style という名前のフィールドが返された場合、説明を作成
して、それを次のように hints コレクション (上記の例を参照) に追加できます。
[C#]
Column styleCol = new Column("mb_style", MIDbType.Style);
hints.Add(styleCol);
現在、1 つのテーブルでは 1 つの Style フィールドしかサポートされないため、hints コレクション
に含まれる Style フィールド定義も 1 つのみと予想できます。ただし、Columns コレクションで
は、ユーザがこのフィールド定義を好きなだけ追加することは防止されません。その場合、最後
に挿入されたフィールド定義が優先されます。
hints コレクションに Style フィールド説明が必須であるわけではありません。クエリにスタイル
情報を含むフィールドが含まれていない場合。この説明は除外できます。
KeyType プロパティと KeyColumns プロパティ
テーブル内の各フィーチャ (行) の固有の値を含む "キー" が、各テーブルに必要です。MapCatalog
には含まれませんが、これも重要なメタデータであり、プライマリ キー定義などを参照すること
によってリモート データベース テーブルに対して推測されます。
先に示したコンテンツ ソースの多くだけでなく、複合プライマリ キーのみを含むテーブルでも、
使用する一意のキーを推測することは困難です。そのような場合、TableInfo ベース クラスによっ
て提供される KeyType プロパティと KeyColumns プロパティを使用して、明示的な指示を与える
MapXtreme v7.2
632
開発者ガイド
付録 I: ユーザ定義のメタデータ
ユーザ定義のメタデータにおける TableInfoServer クエリのサポート
ことができます。たとえば、CUSTID という名前のフィールドを含む、顧客情報のデータベース
ビューがあるとします。このフィールドには一意な null 以外の値が含まれていることがわかって
います。次に示すように、このフィールドを結果の MapXtreme テーブルのキーとして使用するよ
うに指定できます。
[C#]
tblInfoSrv.KeyType = KeyType.Explicit;
StringCollection keyColumns = new StringCollection();
keyColumns.Add("CUSTID");
tblInfoSrv.KeyColumns = keyColumns;
この例では、StringCollection クラスは System.Collections.Specialized 名前空間に存在しています。
複合キーを使用できます。復号キーを定義するには、文字列コレクションに複数のフィールド名
を追加します。
データベース テーブルに複数の候補が含まれ、開発者が特定の候補を使用することを希望する場
合には、明示的なキー定義を使用して定義をオーバーライドすることもできます。
ワークスペースの保持
フィールド説明とキー定義を表すユーザ定義のメタデータ構造体は、ワークスペース ファイル
(.mws) 内のデータ ソース定義タグで保持されます。
MapXtreme v7.2
633
開発者ガイド
MapXtreme への移行
この付録では、従来の MapX のユーザ向けに MapXtreme の .NET ベースのオ
ブジェクト モデルについて説明し、それが MapX のアーキテクチャとどのよ
うに違うかを示します。
この付録の構成
Š
MapXtreme のオブジェクト モデルと MapX の比較 . . . . . 635
J
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapXtreme のオブジェクト モデルと MapX の比較
従来の Windows 用の MapX と MapXtreme を使用したことがあれば、MapXtreme の動作に類似点
と相違点があることに気付くでしょう。このセクションでは、MapXtreme と以前のバージョンの
API の間の主な相違点について説明します。
各オブジェクト モデルに固有の相違点
現在、MapX からの Map オブジェクトは、3 または 4 つのクラスで記述されています。Map には、
どのように表示されているかに関係なく、レイヤ、対象領域 (ビュー)、Adornments、Legends が含
まれます。MapControl は Map オブジェクトを持ち、Map および Map に関連するコントロールとし
て機能します。Windows Forms (デスクトップ) アプリケーションと ASP.NET (web) アプリケー
ションの両方に対して、MapControl が存在します。MapExport クラスは、ファイルまたはストリー
ムに Map をエクスポートできます。Session には、Map、Selection、および Table のコレクション
が含まれます。現在、シンボル凡例スケールが完全にサポートされています。ラベル レイヤを使用
すると、ラベルの位置をより高度に制御できます。グループ レイヤでは、レイヤ階層内で多数のレ
イヤを 1 つのものとして扱うことができます。
MapX データセットの概念は、MapInfo.Data 名前空間の柔軟なオプションに置き換えられまし
た。MapXtreme では、データ アクセスに ADO.NET を使用します。ADO.NET は、非常に類似性
の高いコードによって多彩なデータ形式にアクセス可能にすることにより、データ ソース間の移
行を容易にしています。データベース テーブルに対する前方アクセスおよび後方アクセスのため
に、より多彩なカーソルが追加されています。
MapXtreme は、テーブル中心のデータ モデルを使用します。以前のバージョンの API では、マッ
プはレイヤで構成されていましたが、特定のテーブル クラスは存在しませんでした。MapXtreme
オブジェクト モデルでは、テーブルは、データへのアクセスで中心的に使用されるオブジェクト
です。Session.Catalog は、テーブルのオープンと列挙に使用されます。レイヤはテーブルを参照
できますが、テーブルに固有のすべてのメソッドが Layer からテーブルに移されました。また、
MapXtreme では検索がレイヤではなくテーブルに対して行われます。
レンジ主題図と個別値主題図など、スタイルを修飾する Thematics は、もはや独自のレイヤを使
用しません。主題図などの以前のモデルは独立したレイヤを独占し、マップの他のレイヤとは独
立して機能していしました。オブジェクト主題図は引き続き独自のレイヤを持っており、現在
は、主題図の基盤となる元のマップ オブジェクトとは独立に、ユーザが選択する任意の方法で表
示できます。
ジオメトリは、オブジェクトのプロパティに対してより深いアクセスを持つ階層モデルに変更さ
れています。また、スタイルは、階層内で表現されています。
多数のマップ ツールが追加され、使用できるようになりました。拡張性と機能性が向上したこと
により、カスタマイズされたツールをより簡単に開発できるようになりました。また、拡張性の
高い Web アプリケーションで使用するためのツールが揃っています。
Web アプリケーションのために、MapXBroker と MapXServer はもう必要ありません。その代わ
り、MapXtreme は、標準 COM+ を使用して Session オブジェクトをプールします。
MapXtreme v7.2
635
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
アプリケーションの状態は、シリアライゼーションと ASP.NET 状態サーバを介して管理されま
す。状態管理とシリアライザーションの詳細については、「第 6 章 : 状態管理について」を参照し
てください。
次の表に、MapX 5.0 のオブジェクト モデルと、それに相当する MapXtreme の最新のオブジェク
ト モデルを示します。MapXtreme のように多機能な製品のアーキテクチャが変更されている場
合、このような対応関係は大まかなものであることに注意してください。
MapX 5.0MapX 5.0
AffineTransform
MapXtreme
AffineTransform
変更不可 (未設定)。CoordSysFactory.CreateAffineTransform を使用して作成
します。
AllFeaturesConstraint
Annotation
廃止されました。新しい Adornments クラスを使用します。MapControl に、
Control から派生した修飾が含まれます。
Annotations
廃止されました。
BindLayer
廃止されました。代替として Table.AddColumns() 引数を使用します。
BitmapSymbol
BitmapPointStyle
BitmapSymbols
BoundsConstraint
CoordSys
CoordSys。
変更不可 (未設定)。CoordSysFactory を使用して作成します。
MapXtreme v7.2
636
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
Dataset
MapXtreme
廃止されました。
代替:
•
式フィールド: Table.AddColumns() を使用して式フィールドを作成できま
す。
手動データ バインド (動的または静的): Table.AddColumns() で、
ADO.NET DataTable を指定する TableInfoClient を使用して開いた Table
を使用します。
自動データ バインド: Geodictionary 機能により処理されます。
•
ADO.NET 以外の外部データ
•
XY バインド: TableInfo.SpatialSchema プロパティに SpatialSchemaXY を
適用します。
PointRef バインド: TableInfo.SpatialSchema プロパティに
SpatialSchemaPointRef を適用します。
•
•
•
RowValues: MIDataReader、MIScrollableReader。「MICommand」を参照し
てください。
Refresh: Table.RefreshColumns()
Datasets
廃止されました。「Dataset」を参照してください。
Datum
Datum
変更不可 (未設定)。CoordSysFactory.CreateDatum() を使用して作成します。
Feature
ジオメトリ、スタイル、およびキー情報が Feature になります。
Features
「Feature」を参照してください。
FeaturesConstraint
FeatureFactory
テーブル レベルのオブジェクト処理
•
Buffer: 1 つのフィーチャの場合、Geometry レベルにあります
(FeatureGeometry.Buffer)。複数のフィーチャの場合、
FeatureProcessor.Buffer を使用します。
•
Combine: 1 つのフィーチャの場合、Geometry レベルにあります
(FeatureGeometry.Combine)。複数のフィーチャの場合、
FeatureProcessor.Buffer を使用します。
Intersect: 1 つのフィーチャの場合、Geometry レベルにあります
(FeatureGeometry.Intersect)。複数のフィーチャの場合、
FeatureProcessor.Intersect を使用します。
Field
MapXtreme v7.2
637
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
MapXtreme
Fields
Find
Find
FindFeature
FindResult
FindMatch
FindCloseMatch、FindAddressRange
FindMatches
FindCloseMatchEnumerator、FindAddressRangeEnumerator
FindResult
FindResult
Geoset
廃止されました。類似する機能: MapLoader
Geoset
廃止されました。MapXtreme で Geoset が開かれます。
Graphic
廃止されました。
IndividualValueCategory
IndividualValueThemeBin
IndividualValueCategories
ModifierThemeBins
Label
LabelLayer、LabelSource
Label
LabelLayer、LabelSource
LabelProperties
LabelProperties
MapXtreme v7.2
638
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
Layer
MapXtreme
UserDrawLayer、LabelLayer、FeatureLayer、ObjectThemeLayer、
GroupLayer...
•
AddFeature: 同様の処理を行うには、MICommand を使用して挿入操作を
行う際にジオメトリ フィールドに Geometry をバインドします。
•
AllFeatures
•
•
AutoLabel: 廃止されました。同様の処理を行うには、
LabelSource.DefaultLabelProperties.Enabled プロパティを true に設定し
ます。
Begin/EndAccess: 相当するものがありません。
•
Bounds: FeatureLayer.Bounds
•
ClearCustomLabels: 相当するものがありません。
•
ClippedBounds: 廃止されました。Map.SetView() を使用してください。
•
CoordSys
•
Datasets: 廃止されました。レイヤに Table が含まれています
(FeatureLayer.Table)。
•
DeleteFeature: 同様の処理を行うには、MICommand を使用して行を削除
します。
DrawLabelsAfter: この概念は廃止されました。同様の処理を行うには、各
レイヤの後で LabelLayer インスタンスを使用します。この方法の問題点
は、各 LabelLayer でそれぞれのラベル キャッシュが破棄されるため、レ
イヤ間でラベルが相互作用しなくなることのみです。
Editable: FeatureLayer.Editable
•
•
•
MapXtreme v7.2
FeatureIDFromFeatureName: 同様の処理を行うには、MICommand を使
用して SQL コマンドを実行します。
639
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
Layer (続き)
MapXtreme v7.2
MapXtreme
•
Find: Find
•
GetDrillDownFeaturesByID: 相当するものがありません。
•
•
GetFeatureByID: 相当する機能は、MICommand を使用したキーのカーソ
ルです。
Invalidate: IMapLayer.Invalidate
•
KeyField: 廃止されました。相当する機能は MICommand です。
•
LabelAtPoint
•
LabelProperties: LabelSource.DefaultLabelProperties
•
Labels
•
Name: FeatureLayer.Name または Alias
•
NoFeatures
•
OverrideStyle: 相当する機能は、FeatureLayer.Modifiers コレクションです。
•
Pack: 相当する機能は、FeatureLayer.Table.Pack です。
•
PredominantFeatureType:MISpatialColumnInfo.PredominantObjectType
Table.TableInfo.ColumnInfos プロパティからフィールドを取得できます。
•
Refresh: キャッシュをフラッシュします。Equivalent: Table.Refresh()
•
Search: 相当する機能は、MICommand です。ただし、結果に含まれるの
はフィーチャ キーだけではありません。
•
SearchAtPoint: 簡単に置き換えられる機能はありません。
•
SearchWithinDistance: 簡単に置き換えられる機能はありません。
•
SearchWithinRectangle: 簡単に置き換えられる機能はありません。
•
SearchWithinFeature: 簡単に置き換えられる機能はありません。
•
Selectable: FeatureLayer.Selectable
•
Selection: Session.Sessions コレクションの Selection クラス。
•
ShowCentroids: FeatureLayer.ShowCentroids
•
ShowLineDirection: FeatureLayer.ShowLineDirection
•
ShowNodes: FeatureLayer.ShowNodes
•
Style: 現在相当する機能は、FeatureLayer.Modifiers コレクションです。
•
SupportsPack: Table.SupportsPack
•
Type: IMapLayer.Type
•
UpdateFeature: 同様の処理を行うには MICommand を使用します。
•
Visible: IMapLayer.Enabled IMapLayer.Visible も検討します。
•
ZoomLayer: IMapLayer.ZoomRangeEnabled
•
ZoomMax: IMapLayer.ZoomRange.End
•
ZoomMin: IMapLayer.ZoomRange.Start
640
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
Layers
MapXtreme
Layers
•
AnimationLayer に相当する機能: GroupLayer および BackingStoreState.Off
•
InsertionLayer に相当する機能: AddMapTool.InsertionLayer
•
Selections: Session オブジェクトに同じ機能があります。
LayerInfo
廃止されました。相当する機能は TableInfo です。
Legend
Legend
LegendText
LegendRow
LegendTexts
LegendRows
MapXtreme v7.2
641
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
Map
MapXtreme
Map は、Map と MapControl という 2 つのエンティティに分割されました。
MapControl には、System.Windows.Forms.Control に適用できる機能が含ま
れます。これは WinForm に埋め込み可能なオブジェクトです。
Map には、表示方法に関係なく (WinForm でもエクスポートでも)、実際の
マッピング機能が含まれます。
次に、以前の Map クラスのプロパティ/メソッドが MapXtreme モデルでどの
ように扱われているかを示します。
•
Annotations: 廃止されました。
CenterX/Y: Map.Center
ConvertCoord: DisplayTransform.ToDisplay()、DisplayTransform.FromDisplay()
•
CreateCustomTool: MapTool から継承するか、マウスを使って選択線を描
画する機能を実現する Custom* ツールを使用します。
•
CurrentTool: MapTools.LeftButtonTool、MapTools.MiddleButtonTool、
MapTools.RightButtonTool。MapControl.MapTools プロパティを使って
MapTools にアクセスできます。
•
Datasets: 廃止されました。テーブルには MICatalog を使ってアクセスで
きます。
Dataset: 廃止されました。
•
•
DatasetGeoField: 廃止されました。Map.Dataset を参照してください。
•
DatasetTheme: 廃止されました。Map.Dataset を参照してください。
DefaultStyle
•
•
Distance: CoordSys.Distance()
•
DynamicSelectionSupport:
MapTools.DynamicSelectionModeSelectMapTool.DynamicSelectionEnabled
•
EditableLabels
•
ExportMap: MapExport クラス。さまざまなオプションを使ってマップを
エクスポートできます。
ExportSelection: MapExport.ExportSelection
•
MapXtreme v7.2
DisplayCoordSys: Map.GetDisplayCoordSys()
•
FeatureEditMode 列挙子:
•
miEditModeFeature -> MapTools.NodeMode = false
•
miEditModeNode -> MapTools.NodeMode = true
•
miMoveDuplicateNodes -> MapTools.MoveDuplicateNodes
•
miDeleteDuplicateNodes -> MapTools.DeleteDuplicateNodes
•
miEditModeAddNode -> MapTools.AddNodeMode
•
FeatureFactory: FeatureProcessor
•
GeoDictionary: Geodictionary
•
Geoset: 廃止されました。
642
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
Map (続き)
MapXtreme
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
MapXtreme v7.2
Geosets: 廃止されました。
GeosetWidth
hWnd
InfotipPopupDelay
InfotipSupport: 相当するものがありません。
IsPointVisible
Layers: Layers
MapPaperHeight/Width: PaperSize (MapExport.ExportSize を使用)
MapScreenHeight/Width: MapControl.Size、Map.Size
MapUnit: 表示座標系の CoordSys.Units。
MatchNumericFields: GeoDictionary 機能
MatchThreshold: GeoDictionary 機能
MaxSearchTime: GeoDictionary 機能
MilitaryGridReferenceToPoint: CoordSys.MilitaryGridToPoint()
MilitaryGridReferenceFromPoint: CoordSys.PointToMilitaryGrid()
Mouseicon: MapControl.Cursor
MousePointer: MapControl.Cursor
MouseWheelSupport:
MapControl.MouseWheelSupport.MouseWheelBehavior
NumericCoordSys: 廃止されました。各 Geometry が独自に CoordSys を
持つようになりました。座標を持つものはすべて座標系を持ちます。
Pan
PanAnimationLayer
PreferCompactLegends
PrintMap: Map.Draw()
PropertyPage
RedrawInterval: Map.IncrementalDraw.Interval
Refresh
ReuseEquivalentOnRestore
Rotation: Map.Rotation
SaveMapAsGeoset
SearchPath
SelectionStyle: Selection.Style
SetSize
SnapToNodeSupport
SnapTolerance: MapTools.SnapTolerance
Title: Adornments
TitleText
Version
WaitCursorEnabled
Zoom
ZoomTo
643
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
MapXtreme
MultivarCategory
MultiVariableThemeCategory
MultivarCategories
MultiVariableThemeCategories
NotesQueryInfo
廃止されました。
NotesViewInfo
廃止されました。
OCIQueryInfo
廃止されました。
ODBCQueryInfo
廃止されました。
Parts
相当する機能があります。
Point
DPoint
Points
廃止されました。
RangeCategory
RangedThemeBin
RangeCategories
ModifierThemeBins
Rectangle
DRect
ResolveObject
MatchResolver
ResolveObjects
MatchResolver コレクション
RowValue
MICommand
RowValues
MICommand
Selection
Selection
SourceRow
SourceRow
SourceRows
SourceRows コレクション
State
Style
Theme
ObjectTheme、FeatureStyleModifier
Themes
廃止されました。Themes の機能は、ObjectThemeLayer (ObjectThemes に
対応) または Layer の Modifiers コレクション (FeatureStyleModifier に対応)
に含まれています。
ThemeProperties
廃止されました。プロパティはテーマ クラス自体に含まれています。
MapXtreme v7.2
644
開発者ガイド
付録 J: MapXtreme への移行
MapXtreme のオブジェクト モデルと MapX の比較
MapX 5.0MapX 5.0
MapXtreme
Title
Adornments
Variable
MIParameter。式の中でバインドする場合には、MICommand.Parameters プ
ロパティを利用してコマンド内で使用される変数を定義できます。
Variable
MIParameterCollection
MapXtreme v7.2
645
開発者ガイド
ローカライゼーション
キット
ローカライゼーション キットは、ソフトウェアのテキスト要素 (エラー メッ
セージ、ダイアログ/コントロールのテキスト) を、英語、日本語、および簡体
字中国語以外の言語に翻訳するための Visual Studio ソリューションです。
この付録の構成
Š
Š
Š
ローカライゼーション キット . . . . . . . . . . . . . . . 647
ローカライゼーション キットの使用方法 . . . . . . . . . . 650
サテライト アセンブリへの秘密鍵の署名 . . . . . . . . . . 653
K
付録 K: ローカライゼーション キット
ローカライゼーション キット
ローカライゼーション キット
MapXtreme には、エラー メッセージおよびダイアログ/コントロール テキスト要素を翻訳して、
それを各自が開発する MapXtreme ベースのアプリケーションで使用したいと考えている開発者用
に、Visual Studio ソリューションが用意されています。
"ローカライゼーション キット" には、 MapXtreme のすべての実行時コンポーネントのリソース プ
ロジェクトが含まれています。ローカライゼーション キットは Visual Studio ソリューションとして
構成されているため、リソース文字列の編集やアセンブリのビルドを簡単に行えるほか、リソース
管理処理の多くがバックグラウンドで行われます。ソリューションは、Visual Studio、Visual C#
Express Edition、および MSBuild コマンド ライン ビルド ユーティリティで使用できます。
各プロジェクトには、翻訳用の英語リソース文字列と厳密名キー (.snk) ファイルが含まれていま
す。これは、MapXtreme アプリケーションに統合可能なアセンブリにコンパイルされます。以下
の表を参照すると、自分のアプリケーション用に翻訳する必要があるプロジェクトを簡単に識別
できます。また、各プロジェクトの内容を詳しく調べることによって、翻訳が必要なリソース
ファイル、あるいは文字列を限定することもできます。
LocalizationKit.sln には以下のプロジェクトが含まれています。
プロジェクト
概要
GeoDictionaryManager.resources
GeoDictionaryManager.exe のエラー文字列およびダイア
ログ テキスト要素を提供します。
MapInfo.CoreEngine.resources *
MapXtreme の中核を成すコンポーネント (マッピング、
データ アクセス、フィーチャ、スタイル、主題図、空間
処理など) に関する文字列を提供します。
MapInfo.LinearReferencing.resources Z 値と M 値のサポートおよび線形参照処理に関する文字
列を提供します。
MapInfo.Ogc.resources
FeatureGeometries と OGC の既知のテキストおよびバ
イナリ間の変換に関する文字列を提供します。
MapInfo.Services.resources
ジオコード化サービスおよびルーティング サービスの文
字列を提供します。
MapInfo.Web.resources
Web アプリケーションに関連する文字列を提供します。
MapInfo.WebControls.resources
Web コントロールおよび Web ツールに関連する文字列
を提供します。
MapInfo.Wfs.Server.resources
WFS サーバ エラー メッセージに関連する文字列を提供
します。
MapInfo.Windows.Dialogs.resources
Web ダイアログ コントロールに関連する文字列を提供し
ます。
MapXtreme v7.2
647
開発者ガイド
付録 K: ローカライゼーション キット
ローカライゼーション キット
プロジェクト
概要
MapInfo.Windows.resources
Web コントロールに関連する文字列を提供します。
MapInfo.Wms.Client.resources
WMS エラー メッセージに関連する文字列を提供します。
WorkspaceManager.resources
WorkspaceManager.exe のエラー文字列およびダイアロ
グ テキスト要素を提供します。
*
この名前空間に関するリソース情報については、次の表を参照してください。
リソース ファイル
用途
EllisAllTypeResources.en-US.resx
データソースからの読み取りに関するエラー
文字列
EllisCommandProcessorResources.en-US.resx
データソースからの読み取りに関するエラー
文字列
EllisCoordSysExceptions.en-US.resx
不正な座標系の値に関するエラー文字列
EllisCoordSysResources.en-US.resx
不正な座標系の値に関するエラー文字列
EllisDAEngineResources.en-US.resx
データソースのクエリ エラーに関するエラー
文字列
EllisDBInfoResources.en-US.resx
データベース エラーに関するエラー文字列
EllisDBLayerResources.en-US.resx
マップ エラーに関するエラー文字列
EllisExceptions.en-US.resx
一般的なシステム エラーに関するエラー文
字列
EllisExprPacketCreatorResources.en-US.resx
SQL クエリに関するエラー文字列
EllisExprPacketResources.en-US.resx
SQL クエリに関するエラー文字列
EllisFcnInfoServerResources.en-US.resx
SQL クエリに関するエラー文字列
EllisFindResources.en-US.resx
Find 操作に関する文字列
EllisGeoObjectProcessResources.en-US.resx
GeoObject 操作 (ライン、ポリゴンなど) に関
するエラー文字列
EllisGeoObjectResources.en-US.resx
GeoObject 操作 (ライン、ポリゴンなど) に関
するエラー文字列
MapXtreme v7.2
648
開発者ガイド
付録 K: ローカライゼーション キット
ローカライゼーション キット
リソース ファイル
用途
EllisGeoResources.en-US.resx
GeoDictionary およびファイルの読み込みに関
するエラー文字列
EllisGeosetResources.en-US.resx
Geoset ファイルに関するエラー文字列
EllisGmlXlatResources.en-US.resx
GML ファイルに関するエラー文字列
EllisLegendResources.en-US.resx
凡例で使用する文字列
EllisMapBasicInternalFcnResources.en-US.resx
MapBasic 機能に関するエラー文字列
EllisMapBasicTranslatorResources.en-US.resx
MapBasic 機能に関するエラー文字列
EllisMapperResources.en-US.resx
マップ操作/検索機能に関するエラー文字列
EllisMILexerResources.en-US.resx
文字列解析 (SQL、MapBasic など) 機能に関
するエラー文字列
EllisMILicensingResources.en-US.resx
コピー防止/ライセンス コンポーネントに関す
るエラー文字列
EllisMIRDBResources.en-US.resx
データベース接続に関するエラー文字列
EllisMIRDBSpatialResources.en-US.resx
データベース接続に関するエラー文字列
EllisMIWindowResources.en-US.resx
GUI で使用する文字列
EllisProgramResources.en-US.resx
ファイル操作に関するエラー文字列
EllisRasterResources.en-US.resx
WMS 接続およびラスタ/グリッド イメージに
関するエラー文字列
EllisTextFileReaderResources.en-US.resx
ファイル操作に関するエラー文字列
EllisThematicsResources.en-US.resx
主題図操作に関するエラー文字列
EllisUtilityResources.en-US.resx
ファイル操作に関するエラー文字列および一
般的なエラー文字列
EllisXMLUtilResources.en-US.resx
XML/GML 操作に関するエラー文字列
strings.en-US.resxGeneric
エラー文字列、単位、座標系、測地系、楕円
体名、さまざまな GUI 文字列、WFS 文字
列、シリアライゼーション、およびラスタ エ
ラー
MapXtreme v7.2
649
開発者ガイド
付録 K: ローカライゼーション キット
ローカライゼーション キットの使用方法
システム要件
Visual Studio 2010 または Visual Studio 2010 C# Express Edition。
ローカライゼーション キットの使用方法
ローカライゼーション キットは、任意の言語に翻訳可能なリソース文字列が含まれている Visual
Studio ソリューションとして提供されています。ソリューションは、Visual Studio、Visual C#
Express Edition、および MSBuild コマンド ライン ビルド ユーティリティで使用できます。操作
は、目的の .resx ファイルを Visual Studio のリソース エディタで開き、名前と値のペアを編集す
るだけです。1 つの .resx ファイル内の 1 行だけを翻訳することもできれば、すべてのアセンブリ
のすべての .resx ファイル内のすべての行を翻訳することもできます。アプリケーションで必要な
部分を翻訳してください。
翻訳用のファイルには、Microsoft の規則に従って、言語/ロケール識別子を使った名前が付けられ
ています。たとえば、 LinearReferencing.resources プロジェクトの英語 (米国) の例外文字列は、
LinearReferencingExceptionStrings.en-US.resx というファイル内にあります。言語識別子の詳細
については、Microsoft .NET Framework ライブラリで System.Globalization.CultureInfo クラス
を参照してください。
ほ とん ど の .resx ファ イ ルは、各 プロジェクトの Resources フォルダに格納されています。
Windows リソースおよび Windows.Dialog リソースは、Controls フォルダまたは Dialogs フォルダ
に格納されています。
サテライト アセンブリのビルド
サテライト アセンブリは、コンパイル済みのリソースのみを含む、オプションのスタンドアロン
のアセンブリです。.resx 文字列の翻訳が終了すれば、サテライト アセンブリをビルドできます。
Visual Studio でプロジェクトを右クリックし、[ビルド] を選択します。bin フォルダと、アセンブ
リが格納された言語/ロケール固有のフォルダが作成されます。アセンブリのファイル名は英語版
のアセンブリ名にならって作られ、拡張子は .resources.dll です。たとえば、WebControls アセン
ブリの名前は MapInfo.WebControls.resources.dll になります。
実行時、MapXtreme は適切な言語/ロケール リソース dll (提供されている場合) を使用し、.NET リ
ソース マネージャはそのサテライト アセンブリを検索するように設定されています。ローカライ
ズ アセンブリが見つからない場合は、英語版のアセンブリが代わりに使用されます。
アセンブリの署名
ローカライゼーション キットでビルドしたサテライト アセンブリは、以下のいずれかの厳密な名
前の公開鍵 (キットに含まれています) で署名されます。
•
MapInfo.CoreEngine.Public.snk
•
MapInfo.Ogc.Public.snk
•
MapInfo.WebControls.Public.snk.
MapXtreme v7.2
650
開発者ガイド
付録 K: ローカライゼーション キット
ローカライゼーション キットの使用方法
MapInfo.CoreEngine.Public.Snk は、独自の公開鍵を持つ MapInfo.Ogc.resources および
MapInfo.WebControls.resources 以外の、すべてのアセンブリの公開鍵です。これらの公開鍵でサ
テライト アセンブリに署名すると、アセンブリをテストとデバッグで使用できるようになりま
す。これらのアセンブリを使用して MapXtreme を実行するためには、これらをグローバル アセン
ブリ キャッシュ (GAC) に配置する必要があります。署名済みのアセンブリのみ、GAC に配置で
きます。
サテライト アセンブリの登録
Visual Studio ソリューションから出力されたサテライト アセンブリは、そのままでは GAC にイン
ストールしてテストできません。サテライト アセンブリをビルドし、公開鍵で署名した後、.NET
ランタイムがこのアセンブリを GAC に読み込むことができるように、登録する必要があります。
検証をスキップするアセンブリを登録するには、各サテライト アセンブリに対して厳密名ユーティ
リティ (sn.exe) を実行します。このコマンドは、sn.exe -Vr <assembly_name> です。検証を
スキップするように登録されると、そのサテライト アセンブリはテストできる状態になります。
コマンド ラインからのビルド
MapXtreme ローカライゼーション キットには、テスト用のサテライト アセンブリを準備するプロ
セスを簡単にするために、2 つの MSBuild プロジェクト ファイルが含まれています。MSBuild プロ
ジェクト ファイルは、アセンブリのビルド、署名、検証をスキップするための登録、およびグロー
バル アセンブリ キャッシュへのインストールを行います。MSBuild とその使用の詳細については、
MSDN の「MSBuild Reference」ページ (http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx) を
参照してください。
MSBuild プロジェクト ファイルは、LocalizationKit.proj および LocalizationKit.Utilities.proj の 2 つ
です。
LocalizationKit.proj
LocalizationKit.proj のターゲットは、以下のとおりです。
build - LocalizationKit ソ リ ュ ー ションをビルドし、LocalizationKit.Utilities プロジェクトの
"RegisterSkipVerifiection" ターゲットを呼び出します (デフォルト ターゲット)。
rebuild - LocalizationKit ソ リ ュ ー シ ョンをリビルドし、LocalizationKit.Utilities プロジェクトの
"RegisterSkipVerification" ターゲットを呼び出します。
clean - 出力されたサテライト アセンブリと、ビルド プロセスの中で生成された中間ファイルをす
べて削除します。
LocalizationKit.Utilities.proj
LocalizationKit.Utilities.proj のターゲットは、以下のとおりです。
RegisterSkipVerification - sn.exe -Vr <assembly_name> コマンドを実行することによって、
検証をスキップするサテライト アセンブリをすべて登録します (デフォルト ターゲット)。
MapXtreme v7.2
651
開発者ガイド
付録 K: ローカライゼーション キット
ローカライゼーション キットの使用方法
UnregisterSkipVerification - sn.exe -Vu <assembly_name> コマンドを実行することによって、
検証をスキップするサテライト アセンブリの登録をすべて解除します。
InstallGac - gacutil.exe /I <assembly_name> /f コマンドを実行することによって、サテ
ライト アセンブリをグローバル アセンブリ キャッシュにインストールします。
UninstallGac - gacutil.exe /uf <assembly_name> コマンドを実行することによって、グ
ローバル アセンブリ キャッシュからサテライト アセンブリをアンインストールします。
プロジェクトの構成プロパティに指定できる値は、debug (デフォルト) および release です。使用
については以下を参照してください。
LocalizationKit プロジェクト ファイルは、LocalizationKit.Utilities プロジェクト ファイル内のター
ゲットに依存し、そのターゲットを使用します。
L
Visual C# Express Edition を使用している開発者は、MSBuild と、厳密名ユーティリティお
よびグローバル アセンブリ キャッシュ ユーティリティを格納しているディレクトリを、シ
ステム パスに追加する必要があります。
次のパスを使用するものとします。
MSBuild (msbuild.exe) - C:\WINDOWS\Microsoft.NET\Framework\v3.5
厳密名ユーティリティ (sn.exe) およびグローバル アセンブリ キャッシュ ユーティリ
ティ (gacutil.exe) - C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
コマンド プロンプトの行は次のようになります。
LocalizationKit> set
path=%path%;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\Program
Files\Microsoft SDKs\Windows\v6.0A\bin
使用しているマシンによってディレクトリ パスは異なる可能性があるため、環境内の正しいパス
を使用してください。
ローカライゼーション キットをビルドするには、キットの root ディレクトリで次のコマンドを実
行します。
LocalizationKit> msbuild LocalizationKit.proj /target:build
/property:configuration=release
このコマンドは、各サテライト アセンブリを適切な厳密名の公開鍵ファイルで署名し、検証をス
キップするように登録し、グローバル アセンブリ キャッシュにインストールして、リリース バー
ジョン (デバッグ情報を含まない) のサテライト アセンブリをビルドします。
このサテライト アセンブリはテストすることが可能です。
MapXtreme v7.2
652
開発者ガイド
付録 K: ローカライゼーション キット
サテライト アセンブリへの秘密鍵の署名
サテライト アセンブリへの秘密鍵の署名
ローカライズされたアセンブリをアプリケーションに含める準備ができたら、Pitney Bowes
Software による秘密鍵の署名を受ける必要があります。詳細については、テクニカル サポートに
お問い合せください。
MapXtreme v7.2
653
開発者ガイド
用語集
この用語集では、このガイドおよび MapInfo 製品で使用されており、理解し
ておく必要のある用語および MapInfo の製品やテクノロジ固有の用語につい
て定義しています。
L
付録 L: 用語集
用語
用語
修飾
MapXtreme のマップ要素。凡例、タイトル、およびスケールバーで構成されます。
アフィン変換
回転、サイズ調整、せん断など、ジオメトリ オブジェクトの線形変換に加えて、その変換からの
シフトを行います。GIS で、マップをある座標系から別の座標系に変換するために使用されます。
アンチエリアシング
高解像度レンダリングを低い解像度で表示するときに、直線と曲線の縁や塗りつぶしエリアの外
周がぎざぎざになるのを防ぎ、なめらかにします。
Cartesian
地球上には存在しない x と y 座標を使用する座標系。CAD 描画では、ボールベアリング アセンブ
リ図や間取り図などのオブジェクトを登録するときにこの方法を使用します。Cartesian 座標で描
画されている図面については、ほとんどの場合、その一角の座標が 0, 0 になります。
Cartesian 座標
ジオメトリ オブジェクトの従来の表記方法。平面上の x 値および y 値によってオブジェクトが表
されます。
中心点
通常はマップ オブジェクトの中心。ほとんどの場合、マップ オブジェクトの中央、つまり、オブ
ジェクトの南北の中間と東西の中間の位置にあります。ただし、中心点は必ずオブジェクト上に
配置されていなければならないため、オブジェクトの中央にこない場合もあります。たとえば、
三日月型のリージョン オブジェクトの場合、実際にはリージョンの外側がそのオブジェクトの中
央になりますが、中心点は必ずリージョンの内側に配置されています。
文字エンコード
バ イ ト か ら 文 字 へ の 変 換 手 段。「UCS (Universal Character Set)」および「UTF-8 (Unicode
Transformation Format-8)」も参照してください。
クラス
オブジェクト指向言語では、クラスとは、ある機能を実行するためのメソッドが格納されている
オブジェクトまたはオブジェクトのセットのことをいい、意味的にはプロシージャ言語の派生型
と似ています。
コードスペース
「MapInfo コードスペース」を参照してください。
凸包ポリゴン バッファ
リージョン オブジェクトを作成するバッファの種類。このリージョン オブジェクトは、入力オブ
ジェクトのノードに基づくポリゴンを表します。凸包ポリゴンは、すべてのポイントの周りに "ラ
バー バンド" を配置する演算子と考えることができます。また、最小限のポイント数で構成されて
おり、すべてのポイントがポリゴンの上または内部に配置されます。凸包ポリゴン バッファで
は、内角が 180 度以内である必要があります。
MapXtreme v7.2
655
開発者ガイド
付録 L: 用語集
用語
COM+ プール
リソースを保存するために、オブジェクトが事前読み込みされてプールされる Microsoft コンポー
ネントです。
座標
Cartesian 座標系では x と y による位置、地球座標系では緯度と経度による位置。マップ上の他の
位置に対する相対的な位置を示します。地球座標系では、赤道とグリニッジ本初子午線を固定参
照ポイントとして使用できます。平面座標系では、2 次元の x と y 位置を参照ポイントからの距離
で表します。通常は、第一象限が使用されるため、すべての座標が正の数値になります。
座標系
ジオメトリ オブジェクトを数値で表すときに使用します。ジオメトリ オブジェクトのポイントは
一組の数値によって表されます。この数値がそのポイントの座標となります。地図製作では、座
標系は投影法と密接に関係しています。座標系を作成するには、投影法のパラメータに特定の値
を指定します。
データ プロバイダ
アプリケーションとデータ ソースの間のブリッジであり、アプリケーションで使用するデータに
アクセスするためのメカニズムを提供します。
データ バインド
データ ソースとサーバ コントロールの関係。MapXtreme の DataBinding クラスには、ASP.NET
サーバ コントロール内の 1 つのデータ バインド式に関する情報が格納されています。これによ
り、Visual Studio の RAD (高速アプリケーション開発) デザイナが設計時にデータ バインド式を作
成できます。
小数度
度数の端数を小数で表すこと。紙の地図の多くでは、度、分、秒 (40 度 30 分 0 秒など) で座標を
表し、分と秒の部分が端数になります。30 分は 1/2 度、30 秒は 1/2 分です。MapXtreme では、座
標を小数度 (72.558 度など) で表しています。つまり、40 度 30 分の経度は MapXtreme では 40.5
度と表されます。
緯度、経度、小数度
緯度と経度は、地球の表面の位置を表すときに使用する座標です。経度 (X座標) は東西の位置を示
しており、本初子午線の西は負の X 値になります。緯度 (Y 座標) は南北の位置を示します。赤道
の南が負の Y 値です。
派生クラス
派生クラスには、そのベース クラスのすべてのフィーチャが含まれます。ただし、追加機能また
は拡張機能については、そのいずれかのみが含まれます。
列挙
変数と指定できる値すべてが含まれる型。
MapXtreme v7.2
656
開発者ガイド
付録 L: 用語集
用語
イベント ハンドラ
ページ上のオブジェクトの属性。JavaScript または VBScript で書き込むことができます。たとえ
ば、ユーザがボタンをクリックしたときの動作またはリスト ボックスからテキストを選択した場
合の動作が、イベント ハンドラによって記述されます。VBScript と JavaScript の両方が、on
Click や on Select などの明示的に定義されたイベント ハンドラをサポートします。また、明示的
なイベント ハンドラに代わる関数を定義することも可能です。これらの関数は、暗黙的なイベン
ト ハンドラと呼ばれます。
Feature
ジオメトリ、スタイル、および属性が格納されているテーブルの行。Feature には、通常 Table と
Key が含まれており、これを使用してどの行を表しているのかを識別します。
FeatureLayer
テーブルからフィーチャを表示する MapXtreme のレイヤ。たとえば、世界各国を表すリージョン
オブジェクトのレイヤが FeatureLayer です。FeatureLayer を使用するには、マップの Layer コレ
クションを使用してこれを Map に追加する必要があります。ネイティブの .TAB データ、リモー
ト RDB、シームレス データ、またはラスタ データを FeatureLayer として使用できます。
Geocode
テーブルやデータベースのレコードに X 座標と Y 座標に割り当てて、そのレコードをマップのオ
ブジェクトとして表示できるようにする処理。
GeoDictionary
テ ー ブ ル (TAB フ ァ イ ル の み) に関する情報が格納されている MapXtreme のファイル。
GeoDictionary を使用して、テーブルをどのアプリケーション データにバインドするか、自動的に
判断します。
GeoDictionary マネージャ
GeoDictionary を維持管理するための MapXtreme のツール。
GIS ( 地理情報システム )
地理的または空間的なすべての参照データを効果的に作成、操作、分析、表示するように設計さ
れた、コンピュータのハードウェアとソフトウェアの集合体。
幾何学的中心点
オブジェクトの中心点 (「中心点」を参照)。オブジェクトの内部に配置する必要はありません (通
常は FeatureGeometry)。
GML (Geography Markup Language)
マッピング固有のマークアップ言語。GML は、地理的情報の IT 活用を推進している国際機関
OGC (Open GIS Consortium) によって開発中です。
経緯度線
地球地図上に一定の間隔 (5 度ごと、15 度ごとなど) で表示される水平線 (緯度) と垂直線 (経度) の
グリッド (格子)。基準の枠組みを確立するときに使用します。
グリッド
領域全体にわたるデータ値の補間。グリッドは、データが均等間隔のポイントで計測されている
データ ファイルから作成されます。マップ領域全体がグリッドに変換され、各グリッド セルは値
を表します。「第 17 章 : グリッド イメージ」を参照してください。
MapXtreme v7.2
657
開発者ガイド
付録 L: 用語集
用語
陰影処理
仮想的な光源に従ったグリッド マップのレリーフ色分け。各グリッド セルの明るさは面に当たる
光に対応し、光源に対する方向に基づいて調整されます。
HTML (Hypertext Markup Language)
通常のテキスト (Ascii) 言語。この言語を使用すると、さまざまなプラットフォーム上のさまざま
な Web ブラウザで表示できる Web ページを作成することができます。HTML では、タグを使用
してドキュメントの構造を指定します。リンク (URL を使用) をサポートしており、他の Web ド
キュメントやファイルにジャンプすることもできます。
HTTP (Hypertext Transfer Protocol)
Web クライアントと Web サーバ間のメッセージベースのネットワーク インターフェイス。HTTP
は TCP/IP に優先します。
Inflection
グリッドの値またはパーセントの変化によって色が変化するグリッド マップ上のポイント。
「第 17 章 : グリッド イメージと色調変化点」を参照してください。
インターネット インフォメーション サービス (IIS)
Microsoft 社が提供するソフトウェア サービスで、Web サイトの作成、設定、および管理をサポー
トします。具体的には、FTP (File Transfer Protocol) や SMTP (Simple Mail Transfer Protocol) が
IIS に含まれます。MapXtreme で WMS サーバを実行するには、IIS で動作するようにこのサーバ
を設定する必要があります。
ISession インターフェイス
MapXtreme の MapInfo.Engine 名前空間インターフェイス。すべての MapXtreme アプリケーショ
ンの開始点を提供します。ISession は、MapXtreme アプリケーションに必要なリソースの初期化
を管理し、アプリケーションのインスタンスに適用できるデータおよび機能を定義します。
緯度
赤道の 0 度から北極 (+90.0 度) および南極 (-90.0 度) の 90 度までのマップ上の水平線。赤道の上
下の度数または小数度で測定し、ある地点の南北の位置を説明するときに使用します。
レイヤ
MapInfo 製品のマップ表示の基本コンポーネントで、通常は複数のレイヤが重なり合わされて構成
されています。たとえば、道路データが、国や郵便番号領域のレイヤと重なり合っていることが
あります。マップ ウィンドウにテーブルが表示されているときは、そのマップ ウィンドウのレイ
ヤ全体にテーブルが表示されます。通常は、マップの各レイヤと、開いている 1 つのテーブルが
対応しています。
線形参照
従来のリファレンス座標系に代わって使用されるリファレンス システムであり、線形フィーチャ
の位置を地球上のポイントに結び付けます。線形ネットワークの一部としてマッピングできる物
理的な資産はすべて、その資産または関連した条件やイベントについて記述したデータを保持で
きます。MapXtreme では、そのデータが位置の X および Y 座標と共に MultiCurve オブジェクト
上の M 値 (指標値) として格納されます。それらの M 値をさらにマッピングしたり分析したりする
ことで、より適切なリソース管理を行えるようになります。「第 21 章 : 線形参照」を参照してく
ださい。
MapXtreme v7.2
658
開発者ガイド
付録 L: 用語集
用語
経度
北極から南極に走るマップ上の垂直線。ポイントの東西の位置を記述するときに使用します。東
西の位置は、本初子午線の 0 度から西 (-180.0 度) および東 (+180.0 度) の度数で示されます。経線
は赤道から最も離れた北極と南極で交差します。したがって、平行ではありません。
経度 / 緯度
MapInfo 製品のマップ上での地理オブジェクトを表すデフォルトの座標系。
MapControl
フォーム上にマップを表示できるようにする MapXtreme オブジェクト。MapControl は、マップの描
画先となるウィンドウを所有します。また、マップのサイズを制御し、マップ ツールと対話しま
す。MapXtreme は、MapControl のデスクトップ バージョンと Web バージョンを備えています。
MapInfo コードスペース
MapInfo のマップとワークスペースの作成で一般的に使用される定義と規格のリスト。座標系の設
定、ペン、ブラシ、距離の設定とその省略形、イメージのサイズの設定、よく使用される種類と
その省略形、利用できる演算子のリスト、時刻、日付、温度の単位と省略形などが含まれます。
詳細については、「付録 G : MapInfo コードスペースの定義」を参照してください。
MapInfo MapCatalog
空間テーブルに関するフィールド情報を含むサーバ テーブル。「MapInfo_MapCatalog」を参照
してください。
MapInfo SQL 言語
MapInfo マッピング製品で使用される SQL 構文のリファレンス。この SQL 言語は、SQL3 をベー
スに設計され、空間分析を可能にする MapInfo の特殊な演算子が追加されています。
子午線
北極から南極に走る線または線の一部。経線。
名前空間
継承とは関係なくクラスを分類するための名前付けシステム。たとえば、
System.Utilities.FileFinder と MyCompany.Utilties.FileFinder のように、無関係の 2 つのクラスに同
じ名前が付いており、かつ機能が異なる場合は、この 2 つのクラスを異なる名前空間に含めま
す。また、コンパイラによって間違ったクラスが参照されること (競合) を防止するのにも役立ち
ます。
一般マップ
オブジェクトが地球上に実在する位置を参照していないマップ。典型的な一般マップとしては間
取り図があります。
永続化
MapXtreme やその他の MapInfo 製品がデータを管理する方法を参照し、他の MapXtreme ユーザ
が、この API を使用して作成されたマップを必ず使用できるようにします。XML ベースのワーク
スペースの読み込みおよび保存に関連しており、GML の MapInfo Geometry オブジェクトを解析
および公開します。
MapXtreme v7.2
659
開発者ガイド
付録 L: 用語集
用語
PointRef スキーマ
マップ作成不可テーブルに適用し、そのテーブルをマップ作成可能にするための空間スキーマ。
マップ作成不可テーブルのフィールド (MatchColumn) とマップ作成可能なテーブルのフィールド
(RefColumn) を照合することにより、他のテーブルの Geometry オブジェクトを参照します。テー
ブルが開いている場合、そのテーブルには 読み取り専用の Geometry フィールドが格納されま
す。そして、レイヤとしてそのテーブルをマップに追加することができます。
プール
パフォーマンスとスケーラビリティを向上するために共有リソースに使用します。MapXtreme
Web アプリケーションでは、MapXtreme Session インスタンスを COM+ プールで使用でき、クラ
イアント リクエストに対応できます。
投影法
地球上の位置を、紙の地図などの 2 次元の平面上の位置に変換する数学的モデル。マップでは球
状のオブジェクト (地球) を平面に表そうとしています。したがって、すべての投影法で誤差が生
じます。マップの投影法では、領域、距離、形状、方向のいくつかが保持されませんが、地球儀
ではこれらのすべての属性が保持されます。航海図の作成に適した投影法 (メルカトルなど) や、
視覚分析用地図の作成に適した投影法 (ランベルトなどの正積投影法など) があります。
リージョン
1 つの外側の Ring と、0 個または複数の内側の Ring (穴) で構成されている MultiPolygon。
シリアライゼーション
シリアライゼーションとは、オブジェクトをデータ ストリームに変換してサーバ上に保持するプ
ロセスです。このプロセスは、MapXtreme の Web アプリケーションでオブジェクトを維持するう
えで不可欠です。オブジェクトが維持されなかった場合、サーバは Web リクエストごとにオブ
ジェクト (マップなど) を再作成する必要があります。
空間スキーマ
テーブルの空間機能を拡張することができるサービス。MapXtreme の空間スキーマには PointRef
と XY の 2 種類があります。マップ作成不可テーブルに、マップ作成可能テーブルのフィールドを
参照するときに参照できるフィールドか、X 値と Y 値を表すフィールドのいずれかが含まれる場
合、そのスキーマを使用して Geometry フィールドが作成されます。これらのテーブルは、レイヤ
としてマップに追加することができます。スキーマの種類の詳細については、この用語集の
PointRef スキーマおよび XY スキーマの定義を参照してください。
状態管理
ブラウザ セッションで得られた情報の保存と復元に関する、Web アプリケーション開発の一般用
語です。
MapXtreme v7.2
660
開発者ガイド
付録 L: 用語集
用語
テーブル
行とフィールドの形式で整理されているデータのコレクション。MapXtreme では、マップ上に表示
するデータがテーブルに格納されています。テーブルは、ジオメトリ、スタイル、属性など、
フィーチャに関する情報を保持します。MapXtreme では、MapInfo 標準のテーブル (MapInfo
.TAB)、リレーショナル データベース管理システム (RDBMS)、dBase、MS Access、ASCII ファイ
ル、ESRI ShapeFiles など、さまざまなソースのテーブルがサポートされています。また、ラス
タ、グリッド、シームレス、ビュー、WMS、ADO.NET などの特殊なテーブルもあります。テーブ
ルのタイプは、TableInfo クラスを通じて使用できます。テーブルを開いたり閉じたりするには、
Data 名前空間の Catalog を通じて行います。「第 8 章 : データでの作業」を参照してください。
タイル ハンドラ
Web アプリケーションからのマップ タイルの要求を処理する HTTP ハンドラ。「MapXtreme タ
イル ハンドラ」を参照してください。
URL (Uniform Resource Locator)
WWW 上の Web ページまたはファイルのアドレスが含まれるハイパーテキスト リンクまたはイ
メージ マップの元のインプリメント。URL には、使用するネットワーク プロトコルに関する情報
とページまたはファイルへのパスが含まれます。たとえば、
"http://www.mycompany.com/index.html" という URL は、"my company" Web サイトのインデック
ス ページを指しています。
UCS (Universal Character Set)
Universal Character Set (UCS) は国際規格 ISO 10646 によって定義されており、 他のすべての文
字セット規格のスーパーセットになっています。また、UTF-8 や UTF-16 など、文字列をバイトと
してエンコードするための方法もいくつか定義します。
UTF-8 (Unicode Transformation Format-8)
Unicode 文字のオクテット (8 ビット) ロスレス エンコード。MapXtreme は、ワークスペース保持
スキーマで示されているように UTF-8 のみをサポートします。
Web コントロール
ユーザが Web サーバにリクエストを送信するために操作する、Web ページ上の要素。
WMS (Web Map Service)
OGC 対応の Web サービス。マッピング アプリケーションのレイヤとして使用するマップ イメー
ジを提供します。WMS サーバとクライアントをホストして OGC 対応の (1.0.0、1.1.0、または
1.1.1) WMS にアクセスする場合、 MapXtreme は WMS の サーバ インプリメントを提供します。
WFS (Web Feature Service)
OGC 対応の Web サービス。マッピング アプリケーションで使用する地理参照マップ フィーチャ
を提供します。MapXtreme は、WMS サーバにアクセスするための WMS Basic、読み取り専用
サービス、およびクライアントを備えています。
Web サーバ
HTTP (Hypertext Transfer Protocol) と Web サーバ ソフトウェアを実行するコンピュータ システ
ム。Web サーバは、URL ベースの HTTP リクエストを Web ユーザのブラウザから受け取り、
HTML ページをブラウザに返します。1 つ以上の Web サイトを管理することができます。たとえ
ば、商用サーバについては、通常は多数の Web サイトがあります。
MapXtreme v7.2
661
開発者ガイド
付録 L: 用語集
用語
ワークスペース
XML ベースの永続的なファイル形式。このファイル形式を使用すると、MapXtreme のユーザが、
さまざまな環境で作成されたマップを共有できます。将来的にはすべての MapInfo 製品が準拠す
る予定です。ワークスペース作成の詳細については、「第 23 章 : ワークスペース マネージャ」を
参照してください。ワークスペースの構造の詳細については、「付録 C : MapInfo ワークスペース
について」を参照してください。
XY スキーマ
マップ作成不可テーブルに適用し、そのテーブルをマップ作成可能にするための空間スキーマ。
テーブルには X と Y の座標値が必要です。XY スキーマはこの値にアクセスしてテーブルに
Geometry フィールドを作成します。
MapXtreme v7.2
662
開発者ガイド
索引
索引
記号
.bil ファイル
サポートされているラスタ形式 339
.bmp ファイル
サポートされているラスタ形式 339
.dem ファイル
サポートされているグリッド形式 345
.emf ファイル
サポートされているラスタ形式 339
.gen ファイル
サポートされているラスタ形式 339
.grc ファイル
サポートされているラスタ形式 339
.grd ファイル
サポートされているラスタ形式 345
.mws
MapInfo ワークスペース形式 437
.NET オブジェクト モデル
COM 相互運用性 135
.sid ファイル
サポートされているラスタ形式 339
.TAB
サポートされているテーブルの種類 173
.wmf ファイル
サポートされているラスタ形式 339
Numerics
32 ビット
サポート対象のアーキテクチャ 30
64 ビット
サポート対象のアーキテクチャ 30
A
AddressCandidates クラス 359
ADO.NET
サポートされているテーブルの種類 175
ADO.NET インターフェイス
データの分析 209
ADO.NET のシリアライゼーション 188
ADRG
サポートされているラスタ形式 339
AJAXDemo
サンプル アプリケーション 99 ‐ 100
AppStateManager
インプリメント 126 ‐ 128
ASCII
サポートされているテーブルの種類 173
ASP.NET AJAX 99
MapXtreme v7.2
Web コントロール 99 ‐ 100
ASP.NET アプリケーション
ASP.NET テンプレートの使用 52 ‐ 53
MapXtreme テンプレートがない場合の作成 54
Web コントロール 54
セッション管理 214 ‐ 215
ASRP
サポートされているラスタ形式 339
AvoidList クラス 399
B
BaseGeocodeMatchCode クラス 359
BitmapPointStyleRepository クラス
カスタマイズ 508
Brush スタイル
リモート空間テーブル 256
C
CADRG
サポートされているラスタ形式 339
CalculateMissingMeasures
座標 (M) 値の決定 414
callbacks
拡張可能データ プロバイダ 550
CandidateAddress クラス
ジオコード化住所 359
Cartesian 座標
定義 655
Catalog
検索メソッド 204
データ アクセス 185 ‐ 186
データの分析 209 ‐ 210
テーブル レジストリ 172
Center ツール
デスクトップ 154
CIB
サポートされているラスタ形式 339
COM+ プール
定義 656
COM オブジェクト モデル
.NET 相互運用性 135
CoordSys オブジェクト
作成 331
CreateThemeWizard
Windows ダイアログ ボックス 146 ‐ 150
Curve
作成 327
663
開発者ガイド
索引
D
Data.Find 名前空間
UML 図 280
Data.Find 名前空間
概要 74
Data 名前空間
UML 図 166
概要 73
DateTime データ型 168
Date データ型 168
SQL 式 228
dBase
サポートされているテーブルの種類 173
DBMS データベース
リモート テーブルへのアクセス 233
空間テーブルのインポート 249
DropMeasures
座標 (M) 値の決定 414
DTED ファイル
サポートされているグリッド形式 345
E
ECW ファイル
サポートされているラスタ形式 339
EnableTranslucency プロパティ 454, 558
Engine 名前空間
概要 74
例外クラス 224
Envinsa Location Utility Service
結果コード 359
EPSG コード
MapXtreme への登録 333 ‐ 336
ExecuteFeatureCollection 201
F
FeatureCollection 204
FeatureGeometry 203
FeatureGeomety.Distance
線形リファレンス 414
FeatureLayer
定義 657
FeatureOverrideStyleModifier
カスタマイズ 505
グリッド 352
FeatureOverrideStyleModifier
スタイルのオーバーライド 274, 318
FeatureStyleModifier
UML 図 274
カスタマイズ 505
スタイルの変更 273
レイヤの外観の変更 505
MapXtreme v7.2
Find クラス
返されるオブジェクト 282, 284
要件 280
G
GDI+ による透過性とアンチエリアス処理 463 ‐
465, 558
GeocodeClientFactory クラス 359
GeocodeMatchCode クラス 359
GeocodeRequest クラス 362
ジオコード リクエストの送信 358
GeocodeResponse クラス
候補住所 358
GeocodingConstraints クラス 359
Geocoding World コンポーネント 361
Geocoding 名前空間
概要 76
GeoDictionary 194
定義 657
ユーティリティ 475, 477, 479
GeoDictionaryManager
定義 657
GeoDictionary マネージャ 479
Geometry オブジェクト
FeatureGeometry オブジェクトへの変換 327
Geometry クラス 321 ‐ 322
Geometry 名前空間
UML 図 322
概要 74
GeoTIFF ファイル
サポートされているラスタ形式 339
GIF ファイル
サポートされているラスタ形式 339
GIS ( 地理情報システム )
定義 657
GML
GML (Geography Markup Language) を参照
GML (Geography Markup Language) 418
定義 657
GmlFeatureCollection クラス 510
カスタマイズ 510
Grid
サポートされているテーブルの種類 175
GridInflectionCalculator クラス
グリッド の色調変化値および色の計算 351
GTOPO30 ファイル
サポートされているグリッド形式 345
H
HTML (Hypertext Markup Language)
定義 658
HTTP (Hypertext Transfer Protocol)
664
開発者ガイド
索引
定義 658
HTTP セッション
定義 111
拡張可能データ プロバイダ 531
IWorkspaceManagerNotifications
イベント処理 513
I
J
ICursorv インターフェイス
拡張可能データ プロバイダ 532
IDataProvider
拡張可能データ プロバイダ 531
IDataSource
拡張可能データ プロバイダ 536
IDW
逆距離加重補間クラスを参照
IFeatureAccessor インターフェイス
拡張可能データ プロバイダ 532
IInterpolator
プログラミング インターフェイス 349
IIS
定義 658
IIS 7.0
Web アプリケーションの開発 40
インストール要件 40
IIS のサポート
バージョン 6 と 7 30
InProc
開発モデル 116, 118
プールとの比較 116, 118
InProc 型開発モデル
Web アプリケーション 116, 118
定義 111
プールとの比較 116, 118
InteriorStyleRepository クラス
カスタマイズ 509
ISearchResultProcessor インターフェイス 504
ISessionEventHandlers
ワークスペース マネージャ機能拡張 513
ISession インターフェイス
UML 図 214
セッション管理 214
定義 658
isoChrone
運転時間 401
isoChronePreferences クラス 401
isoDistance
運転距離 404
isoDistancePreferences クラス 405
isogramPreferences クラス 401
ITableDefinition
拡張可能データ プロバイダ 531
ITableMetaData インターフェイス
拡張可能データ プロバイダ 531
ITable インターフェイス
JavaScript
Web ツール 89 ‐ 90, 94, 98
JPEG2000 ファイル
サポートされているラスタ形式 339
JPEG ファイル
サポートされているラスタ形式 339
MapXtreme v7.2
L
LabelLayer 267
LabelModifier 268
LabelProperties 268
LabelSource 268
Label ツール
デスクトップ 154
LayerControl 87
Windows コントロール 144
カスタマイズ 506
カスタム タブの作成 506
レイヤ ノード 507
LayerControl.Styles 317
LayerNodeHelper クラス
カスタマイズ 507
LegendControl 87
LineStrings
作成 325
LineStyleRepository クラス
カスタマイズ 509
LocateAlong
線形リファレンス操作 414
LocateBetween
線形リファレンス操作 414
LocateMeasure
線形リファレンス操作 414
M
MapAlias プロパティ
Web コントロール 92
MapCatalog
定義 659
MapControl 86
Web コントロール 82
Windows コントロール 139, 263
定義 659
テーブル セル内 108
MapControlModel
Web アプリケーション 90
MapExport
665
開発者ガイド
索引
イメージへのエクスポート 260
MapFactory
マップの作成 262
MapForm アプリケーション
MapForm テンプレートの使用 50 ‐ 52
Windows コントロール 54
MapInfo.Engine.Session.State
定義 112
MapInfo 3.0 Compatible フォント
ポイントの描画 316
MapInfo 3.0 互換フォント
VectorSymbolRepository クラス 316
MapInfo ADO.NET データ プロバイダ
MICommand 199 ‐ 200
MIConnection 198
データ アクセス 198
データ プロバイダ 185
MapInfoCoordinateSystemSet.xml ファイル
座標単位 616 ‐ 617
投影法 605
投影法の ID 番号 604
MapInfo Grid ファイル
サポートされているグリッド形式 345
MapInfo MapCatalog
定義 659
MapInfo_MapCatalog
行の追加 251, 253, 255 ‐ 256
作成 249
MapInfo SQL 言語 202
MIDataReader 201
定義 659
リファレンス 210
MapInfo SQL の関数
式内 227
日付と時刻 227
Mapinfow.abb ファイル
置き換えのキーワード 288
置き換えの方法 288 ‐ 291
道路略語の照合 278
編集 286 ‐ 288, 291
MapInfo コードスペース 597 ‐ 601
定義 659
MapInfo コードスペースの定義 597, 599
MapInfo ワークスペース形式 (.MWS) 437
MapLoader
データの読み込み 262
MapMarker サーバ
結果コード 359
Mapping.Legends 名前空間
概要 74
Mapping.Thematics 名前空間
UML 図 294 ‐ 295
概要 74
MapXtreme v7.2
Mapping 名前空間
UML 図 260
概要 74, 260
MapPrinting
クラス 560
MapStyleControl 559
MapToolBar
Windows コントロール 141 ‐ 143
MapTools
デスクトップ アプリケーション 151
MapView
ビューのリスト 262
MapX 5.0
MapXtreme への移行 634 ‐ 635, 637 ‐ 645
MapXtreme
Web コントロールのアーキテクチャ 88
アーキテクチャーの概要 72
アップグレード 46, 49
アプリケーションの作成 481
移行 24
インストール 43
オブジェクト モデル 73 ‐ 75, 635
機能の概要 22
サポート リソース 28
製品の概要 22
MapXtreme ASP.NET Web アプリケーション
テンプレートがない場合の構築 54
テンプレートの使用 52
MapXtreme JavaScript Web コントロール
MapXtreme ポスト バック コントロールからの
移行 106
MapXtreme Session インスタンス
クリーン 130
説明 131
MapXtreme Windows マップ アプリケーション
テンプレートの使用 50
MapXtreme アプリケーションからの印刷 556 ‐
560, 562 ‐ 567, 569
MapXtreme セッション
定義 111
MapXtreme タイル ハンドラ 101
キャッシュ 104
使用 102
使用可能なマップのリクエスト 102
MapXtreme へのアップグレード 46, 49
MapXtreme への移行 24, 634 ‐ 635, 637 ‐ 645
Map オブジェクト
座標系の調査方法 333
Map クラス
マップの内容 261
MatrixRouteRequest クラス 396
MatrixRoutingPreferences クラス 397
Microsoft Data Access Components (MDAC)
666
開発者ガイド
索引
アプリケーションの展開 62
MDAC 2.8
サポート対象のツール 30
MemTable
サポートされているテーブルの種類 174
MICommand 200
SQL ステートメント 199
データ アクセス 198
データの分析 209
MIConnection
MapInfo ADO.NET データ プロバイダ 198
データ アクセス 198
MIDataReader 201
MI_Geometry フィールド 171
MI_Key フィールド 170
MI_Style フィールド 171
MrSID ファイル
サポートされているラスタ形式 339
MS Access
サポートされているテーブルの種類 174
MSI インストーラ
インストーラの作成 58, 61
MultiPoint オブジェクト
作成 324
MWS
名前付きリソースが含まれるワークスペース
219 ‐ 220
MXTRunNCP.exe
ランタイム インストーラを参照
M カテゴリの一致
ジオコード化の結果コード 369 ‐ 370
N
NAD 83 測地系 619
NADCON
NAD 27 と NAD 83 の変換 619
National Transformation v.2 (NTv2) 624 ‐ 627
NITF
サポートされているラスタ形式 339
North American Datum Conversion (NADCON)
NADCON を参照
O
ODBC 接続文字列の形式 241
OGC クエリ インターフェイス
データの分析 209
OpenGIS Implementation Specification
Web Feature Service 418
Web Map Service 373
Oracle Spatial
ジオメトリ変換 234 ‐ 237
接続文字列の形式 242
MapXtreme v7.2
Oracle アプリケーション
トラブルシューティング 257 ‐ 258
P
Pan ツール
デスクトップ 154
PCX ファイル
サポートされているラスタ形式 339
Pen スタイル 586
リモート空間テーブル 256
PerpendicularOffset
線形リファレンス操作 415
Persistence 名前空間
概要 75
Photoshop ファイル
サポートされているラスタ形式 339
PNG ファイル
サポートされているラスタ形式 339
Point
作成 323
PointExclude クラス 399
PointPercentageSpeedUpdate クラス 409
PointRef スキーマ 195 ‐ 196
定義 660
PointRelativeSpeedUpdate クラス 408
PointSpeedUpdate クラス 408
Polygon
作成 328
Q
QueryDefinition
カスタマイズ 504
QueryFilters
カスタマイズ 504
R
Radius ツール
デスクトップ 154
Raster
サポートされているテーブルの種類 175
Raster 名前空間
UML 図 338
概要 75
RDBMS サーバ
サポートされているテーブルの種類 174
Rectangle ツール
長方形の描画 157
デスクトップ 154
REST-based タイル ハンドラ 101
ResultSet
サポートされているテーブルの種類 176
Reverse
667
開発者ガイド
索引
座標 (M) 値の決定 414
Ring
作成 328
RoadTypePercentageSpeedUpdate クラス 410
RoadTypeRelativeSpeedUpdate クラス 409
RoadTypeSpeedUpdate クラス 409
RouteInstructionsRequest クラス 397
RouteRequest クラス 394 ‐ 395
RouteSegmentDataRequest クラス 406
RoutingPreferences クラス 397
Routing 名前空間
UML 図 393
概要 76, 392
S
ScaleMeasures
座標 (M) 値の決定 414
SDK
拡張可能データ プロバイダ 525
SDK インストール 32
SDK ライセンス 33
Seamless
サポートされているテーブルの種類 176
SearchResultProcessor クラス
カスタマイズ 504
Search サンプル アプリケーション 206
SegmentExclude クラス 399
SegmentPercentageSpeedUpdate クラス 407
SegmentRelativeSpeedUpdate クラス 407
SegmentRoadTypeUpdate クラス 407
SegmentSpeedUpdate クラス 407
Selection クラス 220 ‐ 221
select ステートメント
MICommand 199 ‐ 200
結果セット 193
sessionState
定義 112
SetMeasures
座標 (M) 値の決定 414
SetMeasuresAsDistance
座標 (M) 値の決定 414
ShapeFile
サポートされているテーブルの種類 174
SimpleFeature
拡張可能データ プロバイダ ユーティリティ ク
ラス 533
SmoothingMode プロパティ 558
SpatialWare アプリケーション
トラブルシューティング 257 ‐ 258
Spot ファイル
サポートされているラスタ形式 339
SQL 言語
MapXtreme v7.2
MapInfo リファレンス 210
SQL ステートメント
MICommand 199 ‐ 200
SRID コード
MapXtreme への登録 333 ‐ 336
StateManager クラス
インプリメント 126 ‐ 128
定義 112
StyleRepository
スタイル ストレージ 316
StyleRepository クラス
アクセス、定義済みのスタイル 316
Styles 名前空間
UML 図 311
概要 75
Symbol スタイル
リモート空間テーブル 256
S カテゴリの一致
ジオコード化の結果コード 369
T
TableInfo
メタデータ 179
Targa ファイル
サポートされているラスタ形式 339
TIFF ファイル
サポートされているラスタ形式 339
Time データ型 168
SQL 式 228
TIN
不定形三角網を参照
Tools 名前空間
概要 76
TranslateMeasures
座標 (M) 値の決定 414
TravelTime クラス 400
TrueType フォント
StyleRepository クラス 316
U
UCS (Universal Character Set)
定義 661
UML 図
Data.Find 280
Data 名前空間 166
Geometry 322
Mapping 260
Mapping.FeatureStyleModifier 274
Mapping.Labels 267
Mapping.Layers 263
Mapping.Thematics.IModiferTheme 294
Mapping.Thematics.ObjectTheme 295
668
開発者ガイド
索引
Raster 338
Routing 393
Styles 311
URL (Uniform Resource Locator)
定義 661
URL リクエスト
MapControlModel 90
クライアント サイド 90 ‐ 91
サーバ サイド 90 ‐ 91
UserDrawLayer クラス 506
USGS DEM ファイル
サポートされているグリッド形式 345
UTF-8 (Unicode Transformation Format)
定義 661
ワークスペースでのサポート 520
V
VectorPointStyleRepository クラス
カスタマイズ 509
Vertical Mapper Classified Grid
サポートされているラスタ形式 339
Vertical Mapper Continuous Grid
サポートされているグリッド形式 345
サポートされているラスタ形式 339, 345
ViaPoint クラス 400
View
サポートされているテーブルの種類 176
Vista
Windows Vista を参照
Visual Basic .NET
ASP.NET アプリケーション テンプレート 52
‐ 53
MapForm アプリケーション テンプレート 50
開発フレームワーク 30
マップ アプリケーション テンプレート 50
Visual C# 30
Visual Studio
アプリケーションの作成 50 ‐ 51, 53
開発フレームワーク 30
W
web.config ファイル
事前に読み込んだワークスペース 92
セッション管理 125 ‐ 126, 215
設定 92
WebControls 名前空間
概要 75, 85
Web Map Service (WMS)
IIS6 でのサーバの構成 384
IIS7 でのサーバの構成 383
Web アプリケーション
ASP.NET AJAX コントロールの追加 99 ‐ 100
MapXtreme v7.2
MapXtreme Session インスタンス 130 ‐ 131
MapXtreme へのアップグレード 47
アーキテクチャ 77 ‐ 78
クライアント サイドのコマンド実行 90
クライアント サイドのマップ対話 90
計画 81 ‐ 83, 85, 111, 113 ‐ 120, 122, 485 ‐
487, 489, 491
サーバ サイドのコマンド アーキテクチャ 90
実行時画面 84
状態管理 84, 496
初期リクエスト 130
設計時画面 83
設計上の検討事項 81
チュートリアル 492 ‐ 497
ツール 84
バックグラウンド マップ 82
パッケージ化 497, 499 ‐ 500
パッケージ化のチュートリアル 497, 499 ‐ 500
プール 84
用語集 111, 113
Web コントロール 85 ‐ 86, 88, 92 ‐ 94, 106 ‐ 108
ASP.NET AJAX 99
ASP.NET Web アプリケーション 54
MapAlias プロパティ 92
MapXtreme ポスト バック コントロールからの
移行 106
アーキテクチャ 88
イベント処理 93
エラー処理 93
使用 86, 92 ‐ 94, 106 ‐ 108
状態管理 94
説明 86 ‐ 88
ソース コードの変更 96 ‐ 98
ツール 84
定義 661
ディレクトリ構造 86
配布 96 ‐ 98
フレーム内 107
ローカライズ 108
Web サーバ
定義 661
Web ツール
JavaScript 対応 86
MapControl での使用 108
MapControl との対話 89
アーキテクチャ 89
カスタマイズ 94, 98
使用 91
説明 86 ‐ 88
ページ全体のポストバックとの比較 86
Web ブラウザ
サポート対象
データベース
669
開発者ガイド
索引
サポート対象 30
WFS
WFS (Web Feature Service) を参照
WFS (Web Feature Service)
クライアント 429 ‐ 432
サーバの構成 423, 425 ‐ 427
サーバへのリクエスト 418 ‐ 420, 422
定義 661
マップ レイヤの作成 433
where 句 227
Windows.Controls 名前空間
概要 75
Windows.Dialogs 名前空間
概要 75
Windows 7
インストール要件
サポート対象のオペレーティング システム 30
Windows 8
サポート対象のオペレーティング システム 30
Windows Server 2003
サポート対象のオペレーティング システム 30
Windows Server 2008
サポート対象のオペレーティング システム 30
Windows Server 2008 インストール要件
Windows Server 2012
サポート対象のオペレーティング システム 30
Windows Vista
インストール要件 40
サポート対象のオペレーティング システム 30
Windows XP
サポート対象のオペレーティング システム 30
Windows 拡張メタファイル
サポートされているラスタ形式 339
Windows コントロール
LayerControl 144
MapControl 139
MapForm アプリケーション 54
MapToolBar 141 ‐ 143
デスクトップ アプリケーション 137
Windows ダイアログ ボックス
CreateThemeWizard 146 ‐ 150
アプリケーションへの追加 145
カスタマイズ 151
Windows ビットマップ ファイル
サポートされているラスタ形式 339
Windows メタファイル
サポートされているラスタ形式 339
WMS
WMS (Web Map Service) を参照
サポートされているテーブルの種類 175
WMS (Web Map Service)
クライアントを介するマップ リクエスト 376
サーバ上のレイヤ構成 387, 389 ‐ 390
MapXtreme v7.2
サーバの構成 378, 380 ‐ 381, 385 ‐ 386
サーバへのリクエスト 373 ‐ 375
定義 661
WorkSpaceLoader クラス
カスタマイズ 510
X
XML ファイル
GeoDictionary 475, 477, 479
フィーチャのインポート 510
ワークスペース形式 (.MWS) 437
XY スキーマ 195
定義 662
Z
Z カテゴリの一致
ジオコード化の結果コード 370
あ
アーキテクチャ
Web アプリケーション 77 ‐ 78
アプリケーション 76 ‐ 79
オブジェクト モデルのインプリメント 635
概要 72
サポート対象 30
デスクトップ アプリケーション 79
アセンブリ
新しいバージョンへのリダイレクト 48 ‐ 49
新規作成 96 ‐ 98
ソース コードからの作成 96 ‐ 98
アセンブリのリダイレクト 48 ‐ 49
アフィン変換
定義 655
アプリケーション
Web アプリケーションのパッケージ化 497,
499 ‐ 500
アーキテクチャ 76 ‐ 79
開始状態 121
計画、Web 81 ‐ 83, 85, 114 ‐ 115, 118 ‐ 120,
122, 485 ‐ 487, 489, 491
スタートアップ ワークスペース 121, 131‐132
デスクトップ、アーキテクチャ 79
デスクトップ アプリケーションの計画 135 ‐
136, 152
展開 492
パッケージ化、デスクトップ 492
ライセンス 32 ‐ 34
アプリケーション状態
主題図のサンプル 129 ‐ 130
定義 112
アプリケーションの計画
Web 485 ‐ 487, 489, 491
670
開発者ガイド
索引
アプリケーションの作成
Visual Studio 50 ‐ 51, 53
テンプレートがない場合 54
アプリケーションの展開
インストーラ 56 ‐ 57, 61
アプリケーションのテンプレート
ASP.NET 52 ‐ 53
MapForm 50 ‐ 52
アンチエイリアス処理
MapStyleControl 559
印刷時 558
定義 655
ワークスペース マネージャでの有効化 454,
463 ‐ 465
湾曲ラベル 459
い
一時更新
ルーティング 406
一致
ジオコード化 368
一致が存在しない
ジオコード化の結果コード 371
一般マップ
定義 659
緯度
定義 656, 658
イベント
ツール 159 ‐ 160
イベント処理
IWorkspaceManagerNotifications 513
イベント ハンドラ
Web コントロール 93
定義 657
陰影処理
グリッド パラメータ 314
定義 658
インストーラ
アプリケーションの展開 56 ‐ 57, 61
インストール
種類 31
手順 43 ‐ 46
要件 39
インストール済みビットマップ イメージ
アクセス 316
インターネット インフォメーション サービス (IIS)
定義 658
インポート
フィーチャ、XML ファイルからの 510
う
ウォーターマーク
MapXtreme v7.2
SDK ライセンス 33
試用版ライセンス 33
ランタイム ライセンス 34
運転用指示
ルーティング 397
え
永続化
情報の保存 510
定義 659
プロセスの説明 218
永続化プロバイダ
拡張可能データ プロバイダ 544
エクスポート
マップ、イメージへの 260
エラー処理
Web コントロール 93
円 (Circle) ツール
円の描画 157
円錐投影法
標準緯線 618
円の描画
円 (Circle) ツール 157
お
置き換え
Mapinfow.abb ファイル、キーワード 288
オブジェクト主題図
円グラフ 297
サイズ可変シンボル 295 ‐ 296
説明 295
棒グラフ 298
オブジェクトの選択
バッファ内 229
バッファに含まれない 229
オブジェクト モデル
MapXtreme と MapX 635
アーキテクチャ 73
インプリメント 635
データ アクセス 185 ‐ 186, 193, 195, 209 ‐
210, 212
名前空間 73 ‐ 75
オプションのインターフェイス
拡張可能データ プロバイダ 536
オペレーティング システム
サポート対象 30
折れ線
描画、スタイル 315
折れ線 (Polyline) ツール 156
折れ線の描画
折れ線 (Polyline) ツール 156
スタイル 315
671
開発者ガイド
索引
か
カーソル
拡張可能データ プロバイダ 528
開始状態
アプリケーション 121
定義 112
開発インストール 32
開発環境
サポート対象 30
開発フレームワーク 30
開発モデル
InProc 型 116, 118
プール型 119
拡大ツール
例 91
拡張可能
ワークスペース マネージャ 511
拡張可能データ プロバイダ
ICursor インターフェイス 532
IDataProvider インターフェイス 531
IDataSource 536
IFeatureAccessor インターフェイス 532
ITableDefinition インターフェイス 531
ITableMetaData インターフェイス 531
ITable インターフェイス 531
SimpleFeatue クラス 533
永続化プロバイダ 544
オプションのインターフェイス 536
カーソル 528
概要 526
作成 529
作成とテスト 537
座標系 542
ジオメトリの作成 541
シリアライゼーション 546
スタイル 542
スレッド セーフ機能 553
ソフトウェア開発キット 525, 554
抽象ベース クラス 533
データ ソース 528
データ プロバイダ 527
認証 550
必須コンポーネント 530
例外処理 543
拡張機能
ワークスペース マネージャ 511 ‐ 515
カスタマイズ
EngineCustomProperties クラス 503
FeatureOverrideStyleModifier 505
FeatureStyleModifier 505
GMLFeatureCollection 510
Web ツール 94, 98
MapXtreme v7.2
Windows コントロール 506 ‐ 507
Windows ツール 158
WorkSpaceLoader 510
検索機能 504
スタイル 508
ダイアログ ボックス 151
ツール 508
ワークスペース マネージャ 511 ‐ 515
UserDrawLayer 506
カスタム (Custom) ツール
動作 156
カスタム インストーラ
アプリケーションの展開 58, 61
カスタム ビットマップ
ポイント スタイル 313
関数
日付と時刻 227
き
キー
MI_Key フィールド 170
キーワード
Mapinfow.abb ファイル、置き換え 288
幾何学的中心点
定義 657
擬似偏東距離 618
擬似偏北距離 618
既存のアプリケーションのアップグレード 48
逆距離加重
グリッド補間機能 348
キャッシュ
MapXtreme タイル ハンドラ 104
キャッシュ管理
リモート テーブル 246
リモート テーブルへのアクセス 247 ‐ 248
曲線の順序
線形リファレンス操作 415
く
空間スキーマ
PointRef 195 ‐ 196
XY 空間 195
定義 660
クエリ
QueryDefinition クラスを使用したカスタマイ
ズ 504
クラス
定義 655
グリッド 345
GridInflectionCalculator クラス 351
Hillshade パラメータ 314
作成 347
672
開発者ガイド
索引
色調変化値および色の変更 349
色調変化点 314
スタイル 314, 349
スタイル ダイアログ 352
設定の変更 352
定義 657
データの取得 346
マップへの追加 346
メインのクラス 346
グリッド補間機能
逆距離加重 348
不定形三角網 349
グリッド補間クラス
プログラミング インターフェイス 349
グループ レイヤ
レイヤの設定 461
け
経緯度線
定義 657
レイヤの設定 462
ワークスペース マネージャでの有効化 472 ‐
473
計画
Web 81 ‐ 83, 85, 114 ‐ 115, 118 ‐ 120, 122
データ アクセス 195, 209, 212
デスクトップ アプリケーション 135‐136, 152
経度
定義 656, 659
経度 / 緯度
定義 659
結果コード 285 ‐ 286
クラス 359
ジオコード化 368, 370 ‐ 371
結果セット 193
select ステートメント 193
結果のプロパティ
検索結果 284
検索機能 204
Catalog メソッド 204
SearchInfo 205 ‐ 206
SearchInfoFactory 205 ‐ 206
カスタマイズ 504
こ
交差点
検索 277
交差点のジオコード化 364
コードスペース
定義 597 ‐ 601, 655
コードスペースの定義 597, 599
個別値主題図
MapXtreme v7.2
作成 302
個別値ラベル主題図
作成 304
コントロール
Web 85 ‐ 86, 88, 92 ‐ 94, 106 ‐ 108
さ
サーバ テーブル
データのキャッシュ 246
サーバ テーブル クエリ
マップ作成可能テーブルの定義 243 ‐ 244
サイズ可変シンボル主題図
作成 295 ‐ 296
作成
LineStrings 325
MapInfo_MapCatalog 249
MapXtreme アプリケーション 481
Web アプリケーション 81 ‐ 83, 85, 114 ‐ 115,
118 ‐ 120, 122, 485 ‐ 487, 489, 491
‐ 497
拡張可能データ プロバイダ 529
デスクトップ アプリケーション 135 ‐ 136,
152, 482 ‐ 484, 486, 489
作成 グリッド 347
座標
NAD 27 と NAD 83 の変換 619
定義 656
他の測地系への変換 619
座標 (M) 値の決定
CalculateMissingMeasures 414
DropMeasures 414
Reverse 414
ScaleMeasures 414
SetMeasures 414
SetMeasuresAsDistance 414
TranslateMeasures 414
座標系
CoordSysFactory オブジェクトへの登録 331
EPSG コードと SRID コードの登録 333 ‐ 336
Geometry オブジェクトの変換 332
MapXtreme への追加 333 ‐ 336
拡張可能データ プロバイダ 542
原点 617 ‐ 619
ジオメトリ 331 ‐ 333, 335 ‐ 336
調査方法 333
定義 656
ドキュメントとリソース 627
マッピング用語の解説 69
ラスタ イメージ 340
座標系の単位 616 ‐ 617
サポートされているファイル形式
グリッド 345
673
開発者ガイド
索引
ラスタ イメージ 339
サポート対象のアーキテクチャ 30
サポート対象のオペレーティング システム 30
サポート対象の環境
IIS 6 と 7 30
サンプル アプリケーション
AJAXDemo 99 ‐ 100
MapXtreme に付属 136
Search 206
線形リファレンス 416
サンプル コード
ワークスペース マネージャ機能拡張 514
し
シームレス ラスタ レイヤ 451
ジオコード
定義 657
ジオコード化
アプリケーションへのジオコード クライアン
トの追加 357
概要 69, 359, 362
結果コード 368, 370 ‐ 371
交差点 364
参照住所 361
住所候補 358
住所ディクショナリ 361
制約 365
制約設定 365
近い一致 368
定義 357
入力住所 360
番地 362
マップ上でのデータの表示 70
郵便番号 364
リクエストの送信 358
例 362
ジオコード化住所
CandidateAddress クラス 359
ジオコードのクラス 357
ジオメトリ
座標系 331 ‐ 333, 335 ‐ 336
ジオメトリの作成
Curve 327
LineStrings 325
MultiPoint オブジェクト 324
Point 323
Polygon 328
Ring 328
拡張可能データ プロバイダ 541
ジオメトリ フィールド
マップ作成可能テーブル 243
式
MapXtreme v7.2
AddColumns 229
関数 227
作成 226 ‐ 231
主題図 230
使用 227
情報チップ 231
バッファ内のオブジェクトの選択 229
バッファに含まれないオブジェクトの選択 229
フィーチャ検索 229
ブール 227
ラベル 231
ラベルの優先度 460 ‐ 461
例 228 ‐ 231
色調変化値
グリッド 349 ‐ 350
計算 350
色調変化点
グリッド 314
定義 658
子午線
定義 659
自動ラベル作成機能
ワークスペース マネージャ 458
斜軸方位角
ホティン斜軸メルカトル図法 618
住所
検索 277
検索結果コード 285
修飾
定義 655
マップ要素 271
修飾子主題図
個別値主題図 302
個別値ラベル主題図 304
説明 294
ドット密度主題図 305
レンジ 299
レンジ ラベル主題図 301
修飾スタイル
複合スタイル 313
住所候補
ジオコード レスポンス 358
住所ディクショナリ
カスタム 361
住所範囲
Find クラスの結果 282
住所番号
検索 279
主題図
Bin の再計算 149
CreateThemeWizard 146 ‐ 150
円グラフ 297
オブジェクト 295
674
開発者ガイド
索引
個別値主題図 302
個別値ラベル主題図 304
サイズ可変シンボル 295 ‐ 296
修飾子 294
ドット密度主題図 305
二変数 306
半透明効果の適用 468
凡例 307
棒グラフ 298
マッピング用語の解説 67
レンジ 299
レンジ ラベル主題図 301
ワークスペース マネージャ 443, 457
主題図の作成
円グラフ 297
個別値 302
サイズ可変シンボル 295 ‐ 296
ドット密度 305
棒グラフ 298
レンジ 299
主題図のサンプル
初期リクエスト 129 ‐ 130
小数度
定義 656
状態管理
Web アプリケーション 84, 496
Web アプリケーションの計画 111
Web コントロール 94
オプション 113
構成、手動 123
主題図のサンプル 124 ‐ 126, 129 ‐ 130
手動 120, 126 ‐ 128
手動、例 122 ‐ 124
セッション オブジェクト 215
定義 111, 113, 660
プール型のアプリケーション 120
用語 111, 113
自動 120
試用版ライセンス 33
情報チップ 157
シリアライゼーション
ADO.NET 188
ManualSerializer 128 ‐ 129
拡張可能データ プロバイダ 546
状態の復元 129
状態の保存 128 ‐ 129
定義 660
プロセスの説明 217, 546
シンボル凡例 307 ‐ 308
シンボル フォント セット 587
す
ズーム ツール
デスクトップ 154
スケールバー
修飾 271
スケール、パターン 564
スタイル
LayerControl 317
オーバーライド 274, 318, 451
カスタム ビットマップの作成 317
屈折 314
グリッド 314, 349
グリッド、陰影処理
サポートされるカスタム ビットマップ シンボ
ル 591
サポートされるフィル パターン 572
サポートされるベクトル シンボル 587
サポートされるライン スタイル 586
ストック 315
テキスト 315
フィル 313, 315
フォント 314
フォント ポイント 314
複合 313
ベクトル ポイント 316
変更 273
ポイント 313, 315
ライン 315
ラスタ 314
ラベル 459
リポジトリ クラスを使用したカスタマイズ
508
リモート空間テーブル 256
領域 312
ルックアップ テーブル 571
ワークスペース マネージャ 459
スタイル オーバーライド
レイヤの設定 461
スタイルのオーバーライド 318
ストック スタイル
デフォルト スタイル 315
ストック ダイアログ
MapXtreme にあらかじめ用意された 146
ストック ツール
Web 84, 89
デスクトップ 158
スレッド セーフ機能
拡張可能データ プロバイダ 553
せ
製品のアーキテクチャ 72
製品の機能
MapXtreme v7.2
675
開発者ガイド
索引
主要な機能 22
制約
ジオコード化 365
セグメント情報
ルーティング 406
セッション インスタンス
プール 119
セッション管理 215
ASP.NET 215
ISession インターフェイス 214
接続文字列の例 242
線形リファレンス 411 ‐ 416
CalculateMissingMeasures 414
DropMeasures 414
FeatureGeometry.Distance 414
LocateAlong メソッド 414
LocateBetween メソッド 414
LocateMeasure メソッド 414
PerpendicularOffset 415
Reverse 414
ScaleMeasures 414
SetMeasures 414
SetMeasuresAsDistance 414
TranslateMeasures 414
曲線の順序 415
座標 (M) 値の決定 414
サンプル アプリケーション 416
操作 414
選択 (Select) ツール
ポイントとリージョンの選択 154
線の描画
ライン (Line) ツール 156
グリッド スタイル 352
対応環境 30
タイル ハンドラ 101
キャッシュ 104
使用可能なマップのリクエスト 102
楕円
楕円の描画 157
多円錐図法 618 ‐ 619
楕円の描画
楕円 (Ellipse) ツール 157
ち
近い一致
Find クラスの結果 283
近い一致が 1 件存在
ジオコード化の結果コード 369
中心点
定義 655
チュートリアル
Web アプリケーションの作成 492 ‐ 497
Web アプリケーションのパッケージ化 497,
499 ‐ 500
アプリケーション 49
デスクトップ アプリケーションの作成 482 ‐
484, 486, 489
デスクトップ アプリケーションのパッケージ
化 492
調整領域テーブル
検索結果コード 285
番地の検索 279
長方形の描画
長方形 (Rectangle) ツール 157
そ
つ
操作
追加
線形リファレンス 414
ソース行 194
ソース コード
MapXtreme Web コントロール 96 ‐ 98
属性データ
アクセス 245
測地系
カスタムの定義 620 ‐ 623
座標の変換 619
投影法 607
リスト 607, 609 ‐ 615
た
ダイアログ ボックス
CreateThemeWizard 146 ‐ 150
アプリケーションへの追加 145
カスタマイズ 151
MapXtreme v7.2
グリッド イメージ、マップへの 346
ジオメトリ オブジェクト、マップへの 155
ダイアログ ボックス、アプリケーションへの
145
ラスタ イメージ、マップへの 341
追加 (Add) ツール
ジオメトリ オブジェクトのマップへの追加
155
ジオメトリ フィーチャの描画 156
ツール
Web アーキテクチャ 89
Web アプリケーション 84
カスタマイズ 158, 508
カスタム設計 156
ツール イベント 159 ‐ 160
デスクトップ アプリケーション 158
デスクトップ名前空間 76
676
開発者ガイド
索引
ワークスペース マネージャ 445 ‐ 447
て
定義済みのスタイル 316
データ
MapXtreme での使用 191
分析 209
データ アクセス
DataTable 187
ExecuteFeatureCollection 201
GeoDictionary マネージャ 194
IDBCommand 189 ‐ 190
MapInfo ADO.NET データ プロバイダ 198
MapInfo SQL language 202
MICommand 199 ‐ 200
MIConnection 198
MIDataReader 201
SQL コマンド 199 ‐ 200
計画 185 ‐ 186, 193, 195, 209 ‐ 210, 212
式 226 ‐ 231
ソース行 194
パフォーマンスの最適化 212
フィーチャ 203
データ アクセス ツール
サポート対象 30
データ アクセス
アプリケーションの配布 62
データ ソース
記述 528
サポート 184
データの対応付け
GeoDictionary 194
自動一致 194
データの分析 209
ADO.NET インターフェイス 209
Catalog 209 ‐ 210
MICommand 209
OGC クエリ インターフェイス 209
データの読み込み
MapLoader 262
データ バインド
GeoDictionary へのテーブルの登録 475
説明 191
定義 656
データ プロバイダ
拡張可能 525, 554
記述 527
選択 185
データベース、サポート対象 30
テーブル
Catalog 172
MI_Geometry フィールド 171
MapXtreme v7.2
MI_Style フィールド 171
MI_Key フィールド 170
圧縮 178
イベント 179
エイリアス 167
拡張可能データ プロバイダ
拡張可能データ プロバイダ
テーブル 528
関連付け 193, 195
結果セット 193
作成、一時 MemTable 182
作成、一時ネイティブ 182
作成、永久ネイティブ 181
サポートされている種類 173
式フィールドの追加 183
定義 661
閉じる 177
ビュー 193
開く 172
フィールド 168 ‐ 169
マッピング用語の解説 65
マップ作成可能 195 ‐ 196
マップ作成不可 167, 172, 186, 195 ‐ 196, 660,
662
テーブルの圧縮 178
テーブルの関連付け 193, 195
テーブルを閉じる 177
テーブルを開く
Catalog 172
テキスト
描画 314
描画、スタイル 315
テキストの描画
スタイル 315
フォント スタイル 314
テクニカル サポートへの問い合わせ 28
デシリアライゼーション
状態の復元 128 ‐ 129
プロセスの説明 217, 547
デスクトップ アプリケーション
MapControl 140
MapTools 151
アーキテクチャ 79
アップグレード 48
計画 135 ‐ 136, 152
セッション管理 215
チュートリアル 482 ‐ 484, 486, 489
パッケージ化 492
プロトタイプ作成 135
デスクトップアプリケーション
作成 482 ‐ 484, 486, 489
デスクトップ コントロール 137
デスクトップ ツール名前空間 76
677
開発者ガイド
索引
デフォルト スタイル
複合スタイル 313
展開インストール 32
展開ライセンス 34
テンプレート
MapForm 50 ‐ 52
MapXtreme プロジェクト 136
ASP.NET 52 ‐ 53
と
問い合わせ、テクニカル サポート 28
投影法
MapInfoCoordinateSystemSet.xml 605
MapInfoCoordinateSystemSet.xml の ID 番号
604
測地系 607, 609 ‐ 615
定義 660
ドキュメントとリソース 627 ‐ 628
マッピング用語の解説 69
透過性
MapStyleControl 559
印刷時 558
マップ フィーチャへの適用 465 ‐ 468
ワークスペース マネージャでの有効化 454,
463 ‐ 465
動的選択 154
投影法
パラメータ 603
道路名
検索 277
道路略語
検索 278
特殊文字
Mapinfow.abb ファイル、置き換え 291
ドット密度主題図
作成 305
凸包ポリゴン
定義 655
トラブルシューティング
Oracle アプリケーション 257
SpatialWare アプリケーション 257
ライセンス 37 ‐ 39
な
内部スタイル
BaseInterior クラス 315
SimpleInterior 313
リージョンの描画 313
名前空間 73 ‐ 75
定義 659
名前付き接続
種類 440
MapXtreme v7.2
名前付きリソース
ワークスペースを開いて保存する 219 ‐ 220
に
二変数主題図 306
認証
拡張可能データ プロバイダ 550
は
配布アプリケーション
ライセンス 34
バインド、データ 191
派生クラス
定義 656
パターンのスケール 564
バックグラウンド マップ
定義 112
パッケージ化
Web アプリケーション 497, 499 ‐ 500
デスクトップ アプリケーション 492
バッファ
内部のオブジェクトの選択 229
含まれないオブジェクトの選択 229
パフォーマンス
最適化、データ アクセス 212
パラメータ
投影法 603
番地
検索 277
検索結果コード 285
番地のジオコード化 362
凡例 307
修飾 271
シンボル 307 ‐ 308
フレームの配置 308
マッピング用語の解説 67
ひ
日付と時刻の関数 227
日付と時刻の式 231
ビットマップ
作成、カスタム 317
ビットマップ シンボル 591
ビュー
MapView 262
ビュー テーブル 193
表示ツール
マップ ビューの変更 154
標準緯線
円錐投影法 618
比率因数
横メルカトル図法 618
678
開発者ガイド
索引
ふ
ファイル形式
グリッド 345
ラスタ イメージ 339
フィーチャ
ExecuteFeatureCollection 201
FeatureCollection 204
FeatureGeometry 203
Selection クラス 220 ‐ 221
記述 203
検索 204, 206
修飾子主題図 294
定義 657
テーブルから取得 203
変更 203
マッピング用語の解説 66
フィーチャ ジオメトリ スタイル
拡張可能データ プロバイダ 542
フィーチャの取得 203
フィーチャの変更 203
フィールド
サポートされるデータ型 168 ‐ 169
式フィールドの追加 183
追加 229
フィールドの説明 630 ‐ 633
フィル スタイル 572
リージョンの描画 313
リモート空間テーブル 257
フィル パターン 572
プール
InProc との比較 116, 118 ‐ 119
定義 119
利点 120
プール型開発モデル
状態の保存 120
定義 111
プール型のアプリケーション
開発モデル 119
プール サイズ
構成 121, 131 ‐ 132
ブール式 227
プール、定義 660
フォント スタイル
テキストの描画 314
フォント ポイント スタイル
ポイントの描画 314
複合スタイル 313
複数の候補からの最適一致
ジオコード化の結果コード 369 ‐ 370
不定形三角網
グリッド補間機能 349
ブラウザ
MapXtreme v7.2
サポート対象 30
ブラウザ セッション
定義 111
プレース名 277
検索結果コード 286
プロジェクト テンプレート
MapXtreme に付属 136
プロトタイプ作成
すばやいデスクトップ アプリケーション開発
135
ほ
ポイント スタイル 587
BasePointStyle クラス 315
使用、ビットマップ イメージ 316
リモート空間テーブル 256
ポイントツーポイント ルーティング 393
ポイントの描画
MapInfo 3.0 互換フォント 316
カスタム ビットマップ スタイル 313
フォント ポイント スタイル 314
方位図法 618
棒グラフ主題図
作成 298
ホティン斜軸メルカトル図法
斜軸方位角 618
ま
マージ モジュール
インストーラの作成 58, 61
マッピングの用語と概念 65 ‐ 67, 69
マップ
シンボル凡例 307 ‐ 308
マッピングの用語と概念 65 ‐ 67, 69
マップ アプリケーション テンプレート
すばやいプロトタイプ作成 135
マップ作成可能テーブル
Map Catalog への行の追加 251, 253, 255
サーバ テーブル クエリでの定義 243 ‐ 244
テーブルをマップ作成可能にする 195
マップ作成可能テーブルの定義 243 ‐ 244
マップ作成可能テーブルへのアクセス 196
マップ作成不可データへのアクセス 503
マップ作成不可テーブルへのアクセス 167, 172,
186, 195 ‐ 196
マップ タイトル
修飾 271
マップ ツール
JavaScript 対応 89
アーキテクチャ 89
使用 91
プロセス図 91
679
開発者ガイド
索引
マップの作成
MapFactory 262
マップの凡例 307
フレームの配置 308
マップ ビュー
表示ツール 154
マップ フィーチャの検索
交差点 277
正しくない番地要素 291 ‐ 292
調整領域テーブル 279
番地 277 ‐ 278
プレース名 277
マトリックス ルーティング 395
マニュアル 28
マルチポイント ルーティング 394
め
メタデータ
TableInfo 179
TAB ファイル 180
も
文字エンコード
UTF-8、ワークスペース 520
定義 655
ゆ
ユーザ状態
管理 124
定義 112
ユーザ定義のメタデータ 630 ‐ 633
ユーティリティ
GeoDictionary マネージャ 194, 475 ‐ 476, 478
‐ 479
ワークスペース マネージャ 437, 473
郵便番号中心点の一致
ジオコード化の結果コード 370
郵便番号のジオコード化 364
よ
用語集 655 ‐ 662
Web アプリケーションの計画 111, 113
状態管理 111, 113
プール 111, 113
横メルカトル図法
比率因数 618
ら
ライセンス
アプリケーション 32 ‐ 34
既知の問題 39
MapXtreme v7.2
取得 33
種類 33, 35
トラブルシューティング 37 ‐ 39
ファイルの場所 35
ライン (Line) ツール 156
ライン スタイル 586
BaseLineStyle クラス 315
折れ線の描画 315
リモート空間テーブル 256
ラスタ イメージ
印刷、半透明 454
座標系 340
サポートされているファイル形式 339
スタイル 314
制限 341
マップへの追加 341
メイン クラス 339
ラスタ再投影 340, 454, 456
ラスタ ハンドラ 341, 343
ラベル
UML 図 267
概要 267
個別値主題図 304
スタイル 459
マッピング用語の解説 67
優先度の式 460 ‐ 461
レンジ主題図 301
ワークスペース マネージャ 458 ‐ 460
湾曲 271, 468, 470 ‐ 471
ラベル主題図
作成 301, 304
ラベル主題図の作成
個別値 304
レンジ 301
ラベル ツール
手動で追加されたラベルの削除 458
湾曲ラベルの再配置 471
ランタイム インストーラ
アプリケーションの展開 57
ランタイム インストール 32
ランタイム ライセンス 33 ‐ 34
り
リージョンの描画
スタイル 312
内部スタイル 313
リクエスト / レスポンス サイクル
Web ツール 91
リポジトリ クラス 508
リモート空間テーブル
DBMS データベースへのインポート 249
Map Catalog への行の追加 251, 253, 255 ‐ 256
680
開発者ガイド
索引
MapInfo_MapCatalog 248 ‐ 249
スタイル 256
スタイルの指定 256
レコードごとのスタイル 255 ‐ 256
リモート空間テーブルへのアクセス
スタイルの指定 256
リモート テーブル
.tab ファイルを使用 233
.tab ファイルを使用しない 233
DBMS サーバ 233
ODBC 接続文字列の形式 241
X/Y フィールドとのマッピング 234
キャッシュ管理 246 ‐ 248
属性データへのアクセス 245
パフォーマンス 246
マップ作成可能テーブル 243 ‐ 244
マップ作成可能テーブルの定義 243
リモート テーブルへのアクセス
.tab ファイルを使用 233
.tab ファイルを使用しない 233
DataTable 187
DBMS データベース 233
IDBCommand 189
MapInfo_MapCatalog 248 ‐ 249
ODBC 接続文字列の形式 241
X/Y フィールドとのマッピング 234
キャッシュ管理 246 ‐ 248
属性データ 245
パフォーマンス 212, 246
マップ作成可能テーブル 243 ‐ 244
マップ作成可能テーブルの定義 243
略語ファイル
置き換えのキーワード 288
置き換えの方法 288 ‐ 291
編集 286 ‐ 288, 291
る
ルーティング
アプリケーションへのルーティング クライア
ントの追加 392
一時更新 406
運転用指示 397
開始時間と終了時間 400
回避するポイント、フィーチャ、セグメント 399
概要 70
時間ベース 399
セグメント情報の取得 406
設定 396
定義 392
停止時間 400
ポイントツーポイント 393
マトリックス 395
MapXtreme v7.2
マルチポイント 394
ルート ジオメトリ 398
れ
例外クラス
Engine 名前空間 224
例外処理
拡張可能データ プロバイダ 543
レイヤ
UML 図 263
UserDrawLayer クラス 506
外観のカスタマイズ 505
種類 263
定義 658
半透明効果の適用 465 ‐ 466
マッピング用語の解説 66
レイヤ オーバーライド スタイル
複合スタイル 313
レイヤ管理
ワークスペース マネージャ 449 ‐ 450, 452 ‐
453, 455 ‐ 461
レイヤの作成
UserDrawLayer クラス 506
レイヤの種類
FeatureLayer 263
GroupLayer 264
MapLayer 264
ObjectThemeLayer 264
UserDrawLayer 264
レコードごとのスタイル 255 ‐ 256
列挙
定義 656
レリーフ色分け
陰影処理を参照
レンジ
投影法の 618
レンジ主題図
作成 299
配分方法 300 ‐ 301
レンジ ラベル主題図 301
作成 301
わ
ワークスペース
XML 形式 438
構造 519 ‐ 521
再投影されたイメージ 340
事前読み込み 82
定義 662
名前付きリソースが含まれる MWS を開く 219
‐ 220
プログラムによる作成 524
681
開発者ガイド
索引
読み込み 121, 131 ‐ 132
ワークスペースの作成
プログラムによる 524
ワークスペース マネージャ 437
ワークスペース マネージャ
LayerControl 450, 452, 458
LayerControl ツール 453, 455
XML として保存 437
カスタマイズ 511 ‐ 515
機能概要 437
グリッド スタイル ダイアログ 352
主題図 457
スタイルのオーバーライド 451
ツール メニューのコマンド 445
名前付き接続 440
メニュー コマンド 438 ‐ 440, 442 ‐ 443, 446
‐ 447
ラベル 459
ラベル ツール 458, 471
レイヤ管理 449, 456 ‐ 457, 459 ‐ 461
レイヤ管理ツール 449
拡張メニュー 448
ワークスペース マネージャ機能拡張
作成 511
サンプル コード 514
読み込み 513
湾曲ラベル 271, 468, 470 ‐ 471
MapXtreme v7.2
682
開発者ガイド