ArcGISについて¶
米ESRI社が開発・販売しているGIS製品の総称がArcGISです [1] 。 GISの世界ではシェアがもっとも高い製品のようです。
ArcGISにはいろいろな製品がありますが、デスクトップPC上(Windows OS/Linux OS)で、専用ソフトウェアに組み込んで開発・使用する場合には、以下のいずれかを使います。
- ArcGIS Engine
- ArcGIS Runtime (ArcGIS 10.1で新登場)
ArcGIS Engineは、地図を扱うための様々な機能が詰まったソフトウェア・コンポーネント集であるArcObjectsと、各種開発環境からArcObjectsを使ってアプリケーション開発を行う際に使用するAPI、開発者向けガイド文書、サンプルコードを提供する開発キットとで構成されます。
ArcObjects自体はC++で開発・提供され [2] 、Engine Developer Kit(開発キット)はC++、.NET Framework、Java版が用意されています。
ArcGIS Runtimeは、Engineより機能を絞って、OSネイティブで実行可能なライブラリです。Windows版は.NET Framework(WPF)とJava版、Linux版はJava版が用意されています。
[1] | 本ページは、2012年中頃時点の情報です。 |
[2] | Windows版では、Microsoft COMライブラリとして提供されています。UNIXでは、Wineコンポーネント上でWindows COMライブラリを動かすようですが詳細は確認未。 |
ArcGIS Engineについて¶
ArcGIS Engineは、以下の2つから構成されています。

Developer kitは単体では販売されておらず、EDN(Esri Developer Network)と呼ばれる年間単位のサブスクリプション契約を購入することによって入手します。
Runtimeは、Developer Kitを用いて開発したアプリケーション・ソフトウェアを実行するために必要となる製品(いわゆるランタイム)です。
ArcObjects¶
ArcObjectsの規模¶
- 70個超のライブラリ
- 3000個超のクラス
- 20000個超のプロパティおよびメソッド
ArcObjectsの構造¶
- COM の部品として実装されている
- (COMの)インタフェースを持つ
- 互換性の方針として一度提供したプロパティ・メソッドは変更せず、新しいインタフェースを追加する
- そのため、末尾に数値のついたインタフェースが多数存在(例:ISpatialReference3)
Engine Developer Kitの開発環境¶
ArcGIS 10 Engine Developer Kitが要求する開発環境は次のとおりです。
.NET環境の場合¶
- ArcGIS 10
- Visual Studio 2008 SP1(C#またはVB.NET)
- Visual Studio 2010 (C#またはVB.NET) ただし、.NET Framework 3.5 SP1のみ
- ArcGIS 10.1
- Visual Studio 2010 (C#またはVB.NET) ただし、.NET Framework 3.5 SP1のみ
いずれも、ArcObjectsが32bitモードで提供されているため、.NETアプリケーションも32bitモードでの開発となります。
GUIは、Windows.Formコンポーネントとして提供され、実際の描画はC++(COM)の中で行われます。
Java環境の場合¶
- ArcGIS 10
- Java Development Kit(JDK) version 6 update 16以上(32bit)
- ArcGIS 10.1
- Java Development Kit(JDK) version 6 update 20以上(32bit)
GUIは、Swingコンポーネントとして提供されますが、実際の描画はC++(COM)の中で行われます。JNI経由で32bit DLLを利用するため、JavaVM側は32bitである必要があります。
統合開発環境向けプラグインとして以下が含まれています。
- ArcGIS 10
- Eclipse Ganymede (3.4)
- Eclipse Galileo (3.5)
- ArcGIS 10.1
- Eclipse Helios (3.6)
- Eclipse Indigo (3.7)
なお、Engine Developer kitのプラグインは、別途Visual Editorプラグインに依存しているため、先にVisual Editorプラグインをインストールしておく必要があります。
著者はNetBeans 7.0上で開発していますが、それほど不便なく開発しています。
ArcGIS Runtime¶
WindowsおよびLinuxで2次元地図アプリケーション作成に必要な機能を提供するライブラリです。 ArcGISサーバーやArcGIS Onlineと接続しクライアントとして振る舞うアプリケーションや、独立して動作するアプリケーションを作成することができます。
開発言語は、Windows上では.NET Framework(GUIはWPFを使用)またはJava、Linux上ではJavaを使用します。
ArcGIS EngineとDesktop併用のすすめ¶
ArcGIS Engine Developer Kitをもって、すべての機能をコーディングするのは非常に手間がかかります。そこで、あらかじめ地図データの設定、地図上に重畳表示するデータの設定などを、ArcGIS Desktop製品を使って構築しておくとプログラム作成量が大きく減ります。
EDNを購入していると、ArcGIS Desktop製品のいずれかのエディションが利用できるので、それを使います。なお、ArcGIS Desktop(2次元)のエディションについては以下の種類があります。
- ArcView (10.1から、Basic)
- ArcEditor (10.1から、Standard)
- ArcInfo (10.1から、Advanced)
あらかじめ、ArcGIS Desktop製品で、使用する地図データを集めてジオデータベースを構築し、そこに重畳する各種情報のレイヤーとシンボル表示を定義しておき、その情報をマップドキュメントファイル(.mxd)として保存しておきます。
このマップドキュメントファイルを、デスクトップ上の専用アプリケーションで読み込むことによって、表示に関する大半の設定がコーディングせずに反映されます。あとはアプリケーションの必要に応じた制御ロジックを実装していきます。
ArcObjectsとJavaについて¶
デスクトップ向けのArcObjectsは、COMライブラリ [3] として提供されています。 Developer kitの.NETおよびJava版はいずれもCOMラッパーを介してArcObjectsを呼び出します。Java版では内部にJIntegraというJava-COMブリッジ・ライブラリが使用されているようです。

[3] | 32bit版のみ。ただし、64bit Windows上でwow64による32bitモードでの動作となる。 |
スレッドモデル¶
Microsoft COMのスレッドモデルは以下の3つがあり、ArcObjectsでは1.のSTAを採用しています。
- STA(Single Thread Apartment) 単一スレッドがアパートメント内のCOMオブジェクトを呼び出す。アパートメント外からの呼び出しは標準Windowsのメッセージキューを用いてマーシャリングされる。
- MTA(Multi Thread Apartment)
- NA
このため、Java側でマルチスレッドでArcObjects(のラッパー)オブジェクトを呼び出しても、ArcObjects内部ではシングルスレッドで実行されます。
開発環境設定¶
- 32bit版 Java SE 6 u26 SDK
- ArcGIS Desktop 10
- ArcGIS Engine Runtime
- ArcGIS Engine Developer Kit