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 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=""" 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=""" 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 開発者ガイド
© Copyright 2024 Paperzz