毎年、GIS コミュニティフォーラムの前日には、技術セッションのみのプレフォーラム・セミナーを開催しています。本連載では、開発者向けのセッションを案内してまいります。
今回は「オフライン」をテーマにしたセッションの紹介です!

セッションの開催概要
日時:5月16日(火曜日) 16:00~16:40
場所:東京ミッドタウン 4F ルーム1-2
概要:通信が制限されている状況で地図を使用するためには、オフライン環境に対応したアプリが必要です。当セッションでは、オフライン地図の必要性や仕組み、地図の編集方法など、ArcGIS で開発することにより得られるメリットを含めてご紹介していきます。
オフラインでも地図上にデータが追加できる!
オフライン環境のアプリで地図を使うためには、ローカルに地図を表示するためのデータをあらかじめ作成しておきます。ArcGIS を使ってこのデータをローカルに作成すると、データベース構造を保ったファイルとしてダウンロードすることができます。ファイルを作成するコードを実装する必要はありません。

今回は、このダウンロードしたファイル操作について、サンプル コードを使ってご紹介します。下記のコードは、追加したいジオメトリ (ポイント) と、持たせたい属性情報を指定して、ローカルファイルにデータを追加しています。
テーブル定義は、あらかじめ ArcGIS Online または ArcGIS Server でフィーチャ レイヤーに必要な属性情報のカラムを定義しておきます。
実際の主要なコード (Android/Java) はこのようになります。
<SPAN class="comment token">/**
* 端末のローカルファイルを扱うオブジェクトを作成する
* */</SPAN>
Geodatabase geodatabase <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Geodatabase</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"*.geodatabaseまでのPath"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
GeodatabaseFeatureTable GdbFeatureTable <SPAN class="operator token">=</SPAN> geodatabase<SPAN class="punctuation token">.</SPAN><SPAN class="token function">getGeodatabaseFeatureTables</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">get</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">/**
* 更新データ(ポイントなどのジオメトリを含む)を作成する
* */</SPAN>
java<SPAN class="punctuation token">.</SPAN>util<SPAN class="punctuation token">.</SPAN>Map<SPAN class="operator token"><</SPAN>String<SPAN class="punctuation token">,</SPAN> Object<SPAN class="operator token">></SPAN> attributes <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">HashMap</SPAN><SPAN class="operator token"><</SPAN>String<SPAN class="punctuation token">,</SPAN> Object<SPAN class="operator token">></SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
attributes<SPAN class="punctuation token">.</SPAN><SPAN class="token function">put</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"address"</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"Esriジャパン"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// 追加したいポイントを第二引数に設定する</SPAN>
Feature addedFeature <SPAN class="operator token">=</SPAN> GdbFeatureTable<SPAN class="punctuation token">.</SPAN><SPAN class="token function">createFeature</SPAN><SPAN class="punctuation token">(</SPAN>attributes<SPAN class="punctuation token">,</SPAN> pPoint<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">/**
* 端末のローカルファイルを更新する
* */</SPAN>
<SPAN class="keyword token">final</SPAN> ListenableFuture<SPAN class="operator token"><</SPAN>Void<SPAN class="operator token">></SPAN> addFeatureFuture <SPAN class="operator token">=</SPAN> mGdbFeatureTable<SPAN class="punctuation token">.</SPAN><SPAN class="token function">addFeatureAsync</SPAN><SPAN class="punctuation token">(</SPAN>addedFeature<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
ポイントを追加するために必要な属性情報のオブジェクトは、HashMap を使って作成し、それと位置情報を含むポイントのオブジェクトの 2 つを引数にして、Feature オブジェクトを作成します。ここまでできたらローカルファイルを参照しているオブジェクトに addFeatureAsync するだけです。
※このコードを含むアプリは ESRIジャパンの GitHub で近日公開予定です。
当日はこの他にも素敵なトピックをそろえていますので、ご期待ください!
皆様のご来場をお待ちしております。
参加方法
本セッションへの参加登録は弊社サイトより、GISコミュニティフォーラムへの参加登録にてお願いします。(無料です)