ArcGIS API for JavaScript
スタートアップ ガイド
目次
はじめに... 2
このスタートアップ ガイドについて ... 2
ArcGIS API for JavaScript とは ... 2
ArcGIS API for JavaScript の開発環境 ... 3
WEB マッピング アプリケーションの開発 ... 4
ArcGIS API for JavaScript によるアプリケーションの作成 ... 4
開発環境を起動し、HTML の基本部分を記述する ... 5
スタイルと API の参照を宣言する ... 6
マップを作成し、レイヤを追加する ... 8
HTML BODY コードを作成する ... 12
アプリケーションを実行する ... 13
ローカルの ArcGIS for Server サービスを追加する ... 16
ローカルの ArcGIS for Server サービスのプロパティを変更する ... 20
次のステップ ... 22
ArcGIS Resources:ArcGIS API for JavaScript ... 22
トピックス ... 25
マップ サービス レイヤの REST エンドポイント ... 28 フィーチャ レイヤ ... 30 フィーチャ レイヤの REST エンドポイント ... 31
はじめに
このスタートアップ ガイドについて
このスタートアップ ガイドは初めて ArcGIS API for JavaScript を使用して Web マッピング アプリケーションを構築する開発者の方に最も基本的な開発手 順の流れを紹介するものです。本書をお読みいただくことで、ArcGIS API for JavaScript を使用した Web マッピング アプリケーション開発の基礎を理解す ることができます。
ArcGIS API for JavaScript とは
ArcGIS API for JavaScript とは ArcGIS Web Mapping の一つであり、 ArcGIS for Server や ArcGIS Online などのオンライン GIS リソースやジオプロセシ ング モデルなどの GIS タスクを組み込んだブラウザベースの GIS アプリケー ションを公開したり、既に公開されている Web サイトの中に容易に地図や GIS 機能を埋め込んだりすることができる API です。
このガイドでは ArcGIS API for JavaScript を用いた Web マッピング アプリ ケーションの開発について紹介します。
ArcGIS Web Mapping の詳細は下記をご参照ください。
ArcGIS API for JavaScript の開発環境
ArcGIS API for JavaScript は JavaScript ベースの API であるため、テキスト エディタさえあれば Web マッピング アプリケーションを開発することができ ます。また JavaScript ベースのアプリケーションを開発するためのさまざまな統 合開発環境を利用することも可能です。 主な開発環境: テキストエディタ(例:Windows 付属のメモ帳) 無償で利用可能な JavaScript 統合開発環境 Aptana Studio
Visual Studio Expression Eclipse
ArcGIS API for JavaScript がサポートする最新の動作環境につきましては下記 をご参照ください。
http://www.esrij.com/products/arcgis/developer/arcgis-web-mapping/arcgis -api-for-javascript/environments/
Web マッピング アプリケーションの開発
ArcGIS API for JavaScript によるアプリケーションの作成
ここでは、ArcGIS API for JavaScript を使用して、Web マッピング アプリケー ションを作成する手順を解説します。作成するアプリケーションには 1 つのマッ プの中に 2 つのレイヤが追加され、さらにレイヤのプロパティを設定します。開 発環境は Windows に付属するメモ帳を使用します。
開発環境を起動し、HTML の基本部分を記述する まず、開発環境であるメモ帳を起動することから開始します。 1. Windows の [スタート] > [すべてのプログラム] > [アクセサリ] > [メモ 帳] とたどり、メモ帳を起動します。 2. テキスト入力部分に以下のコードを記述します。これは HTML ページの基本 部分です。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html> <head>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7" /> <title>はじめての Web マッピング アプリケーション</title> </head>
<body> </body> </html>
スタイルと API の参照を宣言する
HTML ページの基本部分を記述したら、スタイル シートおよび API への参照設 定を行います。
1. <HEAD> タグ内の <TITLE> タグの下に以下のコードを記述して、スタイ ル シートを参照します。
<link rel="stylesheet" type="text/css"
href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.0/js/dojo /dijit/themes/tundra/tundra.css">
参照するスタイル シートは Dojo のテーマ で、主にマップの <DIV> タグ 内に配置するグラフィック エレメントのために使用されますが、HTML ペー ジのいたるところで使用することもできます。”tundra” スタイルに加え て、”claro”, ”soria”, “nihilo” スタイルを使用することもできます。この場 合、”tundra” の部分を希望のスタイルに置き換えます。
2. 以下のコードを記述して、ArcGIS API for JavaScript ファイルの場所を参照 します。
<script type="text/javascript"
src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0"> </script>
末尾に記述されているバージョン番号は ArcGIS API for JavaScript の現在 のバージョン(最新バージョン)に更新する必要があります。
マップを作成し、レイヤを追加する 次にマップやタスクとともに動作する JavaScript コードを記述します。このサン プルでは、マップが初期化され、レイヤが追加されています。記述するコード量 にかかわらず、このスクリプトは常に以下の 3 つのセクションを順番に含みます。 A) パッケージを参照する B) 初期化およびその他関数を追加する C) ready イベント中に実行する関数を指定する 1. 以下のコードを記述して、”esri.map” パッケージを参照します。 <script type="text/javascript"> dojo.require("esri.map"); </script>
“dojo.require()” は <script> タグのインクルードに相当し、JavaScript ペ ージ内にリソースをインポートします。マップを表示する際に必要となるパ ッケージは “esri.map” です。パッケージ名は常に小文字となります。
2. 次に、dojo.require(“esri.map”) の下に以下のコードを記述して 2 つの変数 を初期化し、続いて ”init” という名前の初期化関数を作成します。変数は初 期化関数の中でマップとレイヤを定義するために使用します。
var myMap, myTiledMapServiceLayer; function init() {
}
3. 次に、初期化関数の中で Map クラスおよびそのコンストラクタを使用して 新規マップを作成します。
“esri.Map” は Map クラスへの参照です。クラス名は常に先頭が大文字 です “mapDiv” は HTML ページ内のマップを含む <DIV> タグ内の参照名 です 4. 次に、ArcGISTiledMapServiceLayer コンストラクタを使用して、ArcGIS Online から提供されている世界道路地図サービスを参照するキャッシュ マ ップ サービス レイヤを作成します。引数として指定する URL はこのサービ スの REST エンドポイントです。このエンドポイントは ArcGIS for Server の Services Directory を使用して生成できるサービスへの固有の参照です。 myTiledMapServiceLayer = new
esri.layers.ArcGISTiledMapServiceLayer
("http://server.arcgisonline.com/ArcGIS/rest/services/World_Stre et_Map/MapServer");
※Services Directory についてはトピックス「マップ サービスの REST エ
5. レイヤが初期化されたら、addLayer メソッドを使用してマップに追加します。 myMap.addLayer(myTiledMapServiceLayer);
これで初期化関数が完成しました。このサンプル コードには init() という名 前のただ一つの関数のみが含まれていますが、別の HTML ページでは init() 関数に加えていくつかの関数を含んでいる可能性があります。
6. 最後に ready イベントを初期化関数の後に for Server 指定します。そのイ ベントへ渡す引数は初期化関数の名前で、今回の場合は “init” になります。 dojo.ready(init);
この関数は HTML が完全にロードされるまでスクリプトの実行を保留しま す。これは重要なコンセプトです。なぜなら、マップはそのプロパティを取 得したりイベントを正しく動作させたりさせる前にそのオブジェクトを取得 しておく必要があるためです。 HTML BODY コードを作成する 処理の部分が完成したら、次に HTML ページの 外観を作成します。この例では、 マップの表示のみが行われます。 1. <BODY> タグ内に以下のコードを記述してマップを定義します。 <div id="mapDiv" class="tundra" style="width:900px; height:600px; border:1px solid #000;"></div>
<DIV> タグの id である “mapDIV” は Map コンストラクタ内で設定した 同じ変数を参照します。また class=”tundra” への参照も <DIV> タグ内に 追加されていることが分かります。これは <HEAD> セクションから
アプリケーションを実行する 以上でアプリケーションが完成しました。実際に Web ブラウザを起動して実行 してみます。 1. メモ帳の [ファイル] > [名前をつけて保存] をクリックし、拡張子を “.html” としてファイルを保存します。その際にファイルの種類を ”すべてのファイ ル” 、文字コードを “UTF-8” に変更します。 2. 保存したファイルを Web サーバのルートディレクトリ(IIS の初期設定で は「C:\inetpub\wwwroot」-フォルダ)に配置します。
3. Web ブラウザを起動し、http://<サーバ名>/<ファイル名>.html と入力し てアプリケーションを実行します。 4. Web マッピング アプリケーションが正常に開始します。 この時点でマウスによるドラッグやマウス ホイール、およびキーの組み合わ せで地図の操作が可能です。また左端にあるスライダ バーで表示縮尺を変更 することもできます。
マップ操作に関する主なショートカット機能: ドラッグ 移動 マウス ホイールを前方に回転 拡大 マウス ホイールを後方に回転 縮小 SHIFT + ドラッグ 拡大 SHIFT + CTRL + ドラッグ 縮小 SHIFT + クリック クリックした位置を中心に表示 ダブル クリック クリックした位置を中心に拡大 矢印キー(上下左右) キーの方向へ移動 5. Web マッピング アプリケーションが正常に実行されていることが確認でき たら Web ブラウザを閉じます。
ローカルの ArcGIS for Server サービスを追加する
ArcGIS for Server ユーザは、ArcGIS Online から提供されている背景地図のマ ップ サービスの上に、自身で公開している ArcGIS for Server マップ サービス を重ね合わせることができます。ここでは、ローカルの ArcGIS for Server マッ プ サービスを追加する手順を説明します。
ローカルの ArcGIS for Server サービスを追加するにはまず ArcGIS for Server の REST サービスにアクセスする必要があります。
1. Windows の [スタート] メニューから [すべてのプログラム] > [ArcGIS] > [ArcGIS 10.1 for Server] とたどり、 [Services Directory] をクリック します。
2. [サービス:] セクションに、公開している GIS サービスが一覧表示されま す。この中からダイナミック マップ サービスとして公開しているものを選 択します。今回のサンプルでは “japan_web” をクリックします。 選択したマップ サービスに関する情報が表示されます。 3. ここでアドレス バーの URL に着目します。この URL が現在公開している マップ サービスの REST サービスのエンドポイントとなります。この URL をクリップボードにコピーします。 4. URL をクリップボードにコピーしたら、HTML ファイルのソースコードに戻 ります。
5. 「マップを作成し、レイヤを追加する」のステップ3, 4と同様に、レイヤ変 数(この例では myDynamicMapServiceLayer)を宣言し、宣言した変数に 新規 ArcGISDynamicMapServiceLayer コンストラクタを割り当てます。引 数にはステップ 3 でコピーした REST サービスのエンドポイントの URL を指定します。そしてレイヤが初期化されたら、addLayer メソッドを使用し てマップに追加します(赤字がコード追加部分です)。 dojo.require("esri.map");
var myMap, myTiledMapServiceLayer, myDynamicMapServiceLayer; function init() {
myMap = new esri.Map("mapDiv");
myTiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer ("http://server.arcgisonline.com/ArcGIS/rest/services/World_Stre et_Map/MapServer"); myDynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer ("http://ej000388/ArcGIS/rest/services/japan_web/MapServer"); myMap.addLayer(myTiledMapServiceLayer); myMap.addLayer(myDynamicMapServiceLayer); }
公開しているマップ サービスの種類によっては別のレイヤ クラスを使 用する必要があります。公開できるマップ サービスの種類およびクラス
については、後述の「マップ サービス レイヤ」をご覧ください。
6. HTML ファイルを上書き保存し、再度実行します。ArcGIS Online の世界道 路地図サービスと、ローカルの ArcGIS for Server で公開されたマップ サ ービスが重ね合わさって(マッシュアップされて)表示されます。
7. ローカルの ArcGIS for Server で公開されたマップ サービス レイヤ付近を 拡大表示します。
8. 2 つのレイヤが重なって表示されていることが確認できたら Web ブラウザ を閉じます。
ローカルの ArcGIS for Server サービスのプロパティを変更する
次にローカルの ArcGIS for Server マップ サービス レイヤのプロパティを変更 します。ここではレイヤの透過率を変更します。 1. myDynamicMapServiceLayer を定義している行を以下のように変更します (赤字がコード追加部分です)。 myDynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer ("http://ej000388/ArcGIS/rest/services/japan_web/MapServer", {opacity:0.3}); 2. HTML ファイルを上書き保存し、再度実行します。ローカルの ArcGIS for Server で公開されたマップ サービス レイヤ付近を拡大表示すると、指定し た透過率でレイヤが透過表示されているのが確認できます。
以上でサンプル アプリケーションの開発は終了です。より高度なアプリケーショ ンの開発に関する参考ドキュメントやサンプルの詳細については次のステップを ご参照ください。
次のステップ
本スタートアップ ガイドでは ArcGIS API for JavaScript を用いた Web マッ ピング アプリケーションを開発するための最も基本的な開発手順について紹介 しました。今後、より高度なアプリケーションを開発するためにはまず ArcGIS Resources をご参照ください。ArcGIS Resources には API の開発に必要とな る参考ドキュメントやサンプルがすべて集約されています。
ArcGIS Resources:ArcGIS API for JavaScript
Concepts API の概要、地図の追加や ArcGIS サービスの利用方法などの各種開発手法をま とめた開発者ヘルプです。 Samples API を用いたライブ サンプルとその開発コードです。はじめて API による開発 を行う場合はまずこのサンプルと同じ Web マッピング アプリケーションを作 成してみることをお勧めします。
API Reference API のリファレンスです。API に含まれるクラスの各種プロパティ、メソッド等 を確認することができます。 Code Gallery Esri 社の開発チームや全世界のユーザが公開したサンプル コードをダウンロー ドしたり、公開されている Web アプリケーションにアクセスし実際に使用した りすることができます。
トピックス
レイヤの種類
Map に追加できるレイヤはそのデータ ソースの違いから、マップ サービス レ イヤとフィーチャ レイヤの 2 種類に分けることができます。 Map 内のレイヤのデータ ソースの多くは、GIS サーバが提供するマップ サービ スです。マップ サービス自身もほとんどの場合、複数のレイヤから構成されてお り、あらかじめサーバ管理者によって各マップ サービス内のレイヤがどのような シンボルや色を使用して地図上に表示されるかが定義されています。マップ サー ビスはこの定義に従い、サーバ上で地図画像を生成しクライアントに配信します。 マップ サービス レイヤではこのサーバ側で生成された地図画像をデータ ソー スとして Map に表示します。 Map GIS サーバ マップ サービス 地図画像の生成 地図画像の配信マップ サービス レイヤでは、あらかじめサーバ側で生成された地図画像をデー タ ソースとして使用するため、サーバ側で定義されたシンボルや色と異なる方法 で地図を表現することができません。一方で、フィーチャ レイヤではクライアン ト アプリケーション上で動的にシンボルや色を設定することができます。フィー チャ レイヤはマップ サービスを構成する複数のレイヤの 1 つに直接アクセスし、 そのレイヤ内の地物の座標および属性情報を取得して、アプリケーション上で動 的に描画を行います。
ArcGIS API for JavaScript のアプリケーションでは多くの場合において、シンボ ル情報等の変更が必要ない背景地図にマップ サービス レイヤを使用し、ユーザ の操作に応じて表示を対話的に変更する必要がある主題図にフィーチャ レイヤ を使用します。 GIS サーバ マップ サービス Map フィーチャ レイヤ 特定のレイヤから、 座標、属性情報を取得 クライアント側で 動的に描画
マップ サービス レイヤ
マップ サービス レイヤが利用する GIS サーバのマップ サービスは、REST 形 式で公開されており、マップ サービス レイヤはこの REST サービスのエンドポ イントにアクセスすることで、GIS サーバが生成したマップ サービスの画像を表 示することができます。マップ サービス レイヤには、ArcGIS for Server が公 開する様々なマップ サービス や Bing Maps サービスなど様々なサービスに対 応するために、以下のようなマップ サービス レイヤ クラスが用意されています。 マップ サービス レイヤ クラス:
ArcGISTiledMapServiceLayer ArcGIS for Server のキャッシュ マップ サービスをデータ ソースとして使用します。
ArcGISDynamicMapServiceLayer ArcGIS for Server のダイナミック マップ サービスをデー タ ソースとして使用します。
ArcGISImageServiceLayer ArcGIS for Server のイメージ サービスをデータ ソースとし て使用します。
VETiledLayer Microsoft Bing Maps のマップ イメージ サービスをデータ ソースとして使用します。 OpenStreetMapLayer OpenStreetMap のマップ イメージ サービスをデータ ソー スとして使用します。 マップ サービス レイヤ クラスのデータ ソースを指定するには、クラスの URL 属性にマップ サービスの REST エンドポイントを指定します。本スタートアッ プ ガイドで紹介したコードでは、新規作成した ArcGISTiledMapServiceLayer の URL 属性に、Esri 社がホストしている ArcGIS Online の世界道路地図サー ビスの REST エンドポイントを指定しています。
マップ サービス レイヤの REST エンドポイント
マップ サービス レイヤが利用する ArcGIS for Server のマップ サービスの REST エンドポイントは ArcGIS for Server をインストールするとサーバに構成 される ArcGIS REST Services Directory と呼ばれる簡易 Web アプリケーショ ンから確認することができます。以下の URL より Esri 社が公開している ArcGIS for Server のマップ サービスの REST エンドポイントを確認すること ができます。
ArcGIS Online ArcGIS Services Directory
http://server.arcgisonline.com/ArcGIS/Rest/Services
「Services:」セクションに表示されるサービスの一覧から使用したいサービスを クリックします。例えば世界道路地図の REST エンドポイントを確認するには、 Home ページにて、[World_Street_Map] をクリックします。
World_Street_Map サービスの詳細が表示されます。サービスの REST エンド ポイントはブラウザに表示される URL です。
ローカルの ArcGIS for Server の ArcGIS REST Services Directory は Windows の [スタート] メニューより [すべてのプログラム] > [ArcGIS] > [ArcGIS 10.1 for Server] とたどり、 [Services Directory] を選択することで アクセスできます。
フィーチャ レイヤ 前述した通り、フィーチャ レイヤはマップ サービス レイヤと異なり、マップ サ ービス内の 1 つのレイヤから座標と属性情報を取得し、クライアント側で動的に 描画を行います。以下は衛星写真(Bing Maps) のマップ サービス レイヤ上にポ イント フィーチャ レイヤを描画した例です。 フィーチャ レイヤを使用することで、上図のようなグラフィック表現に加えて、 レイヤ上の地物の動的な選択、ArcGIS for Server のサービスと連携した Web 編 集、時間遷移によるアニメーション表現などを実装することができます。以下は マップ サービス レイヤ上のフィーチャ レイヤの選択された地物(ポリゴン)の シンボルを動的に変更した例です。
フィーチャ レイヤの REST エンドポイント
フィーチャ レイヤもマップ サービス レイヤと同様に ArcGIS for Server の REST サービスを利用します。しかしマップ サービス レイヤと異なり、サービ ス内の個別のレイヤをリソースとして指定します。以下では、Esri 社が公開して いるサンプル サーバからマップ サービスの個別のレイヤの REST エンドポイ ントを確認します。 1. Esri 社のサンプル サーバに接続し、[Specialty] フォルダをクリックします。 http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/
2. Specialty フォルダ内の [ESRI_StatesCitiesRivers_USA] マップ サービ スをクリックします。
3. ESRI_StatesCitiesRivers_USA のマップ サービス詳細が表示されます。こ のマップ サービスには、Cities (都市)、Rivers (河川)、States (州)の 3 つのレイヤが含まれていることがわかります。[Cities] レイヤをクリックし ます。
4. Cities レイヤの詳細が表示されます。Cities サービスの REST エンドポイン トはブラウザに表示される URL です。マップ サービス レイヤが使用する REST エンドポイントと異なり、URL の最後にマップ サービス内のレイヤ ID (/0)が指定されている点に注目してください。
5. 以下の例では、上記手順で確認した、Cities レイヤを ArcGIS Online の世界 道路地図の上に重ねています。フィーチャ レイヤ クラス(FeatureLayer) の Url 引数に REST エンドポイントを指定しています。その他に、
FeatureLayer の setDefinitionExpression プロパティを使用して Cities レ イヤの POP1990 列の値が 100000 よりも大きいレコード(人口が 10 万 人以上)のみを取得するという条件句を設定しています。
var map = new esri.Map("map");
var baseMapLayer = new
esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonli ne.com/ArcGIS/rest/services/World_Street_Map/MapServer");
map.addLayer(baseMapLayer);
var featureLayer = new
esri.layers.FeatureLayer("http://sampleserver1.arcgisonline.com/ ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapSe rver/0");
featureLayer.setDefinitionExpression("POP1990 > 100000"); map.addLayer(featureLayer);
FeatureLayer クラスにはその他にもサーバからのデータの取得方式を設定 する mode プロパティや、個別値分類や数値分類などレイヤを色分け表示す るための renderer プロパティなどが用意されています。詳細は API Reference をご参照ください。 API Reference:FeatureLayer http://help.arcgis.com/en/webapi/javascript/arcgis/help/jsapi/feat urelayer.htm
ローカルの ArcGIS for Server の ArcGIS REST Services Directory は Windows の [スタート] メニューより [すべてのプログラム] > [ArcGIS] > [ArcGIS 10.1 for Server] とたどり、 [Services Directory] を選択することで アクセスできます。
・ 本書の一部または全部を無断で転用または複製することを禁じます。
・ 本書に記載されている社名、商品名は、各社の商標および登録商標です。
・ 本書に記載されている内容は改良のため、予告なく変更される場合があります。
・ 本書の内容は参考情報の提供を目的としており、本書に含まれる情報はその使用
ArcGIS API for JavaScript スタートアップ ガイド ArcGIS API for JavaScriptTM 用
2012 年 11 月 第 5 版 発行/編集所 ESRI ジャパン株式会社