<\/HEAD>
要求は変化しています。以前はデジタルデータ処理がオフィスに限定されていましたが、現在では外出先でもこの作業を行う機会が増えています。<\/SPAN><\/P><\/P>多くのシナリオでそれは必要です。例えば、道路管理事務所による道路損傷の検査では、紙に記録された情報の後処理は不要です。その代わりに、位置情報に基づくデータ収集が行われ、損傷の画像が添付され、ディスパッチャーが即座に対応できる情報フローが実現します。<\/SPAN><\/P><\/P>また、森林管理の例では、住所データが利用できない場合、木材置き場を管理し見つけるためにGPSデータが必要です。これにより、その地域を知らないトラック運転手にも位置説明や経路案内を提供できます。<\/SPAN><\/P><\/P>この技術は数年前から存在し、Esriは要件に応じて最適なさまざまな製品で提供しています。この製品ファミリーの最新メンバーの一つがArcGIS Runtime SDK for .NET<\/A>です。これはMicrosoftプラットフォーム向けの開発ツールで、Windows Desktop、Windows Store、Windows Phone向けのアプリケーションを作成できます。つまり、電話からタブレット、従来のデスクトップまで全範囲をカバーし、一つのフレームワークで実現します。<\/SPAN><\/P><\/P>
すべての「ArcGIS Runtime」SDKに共通するのはオフライン機能です。10.2.3で導入されたこのコア機能は、ネットワーク接続なしでローカルにデータを管理し、その後中央データベース(例えば
ArcGIS Online Cloud<\/A>)と同期するためのすべてのツールを備えています。異なるArcGIS製品を組み合わせたアーキテクチャも可能です。Esri Deutschlandが実現したCollector Light Demo<\/A><\/STRONG>では、.NetクライアントとJavaクライアントがそれぞれArcGIS Runtime SDKに基づいてオフラインでデータ管理できることを示しています。このデモはさらに進んでおり、オフラインキャッシュが統一的に構築されているため両クライアントで同様に利用可能です。<\/SPAN><\/P><\/P>
.NETデモの例でいくつかのプロセスを説明し、自分自身のアプリケーションを実現する際に役立つヒントを紹介します。示されたコード部分やスクリーンショットは、このデモプロジェクトで同様に見つけられます。<\/SPAN><\/P><\/P>このデモプロジェクトはMVVMコンセプトに基づいて構築されており、「MVVM Light」というサードパーティツールキットを使用しています。コンセプトはUIとビジネスロジックの分離を目指しており、その結果インターフェースは交換可能となり、ロジック層は異なるプラットフォーム上のさまざまなアプリケーションで再利用可能になります。<\/SPAN><\/P><\/P>デモアプリケーションのアイデアについて簡単に説明します:ArcGIS OnlineアカウントでEsri Cloudにログインし、その後オフライン利用用に設定されたマップを検索できます。組織内でアカウントを使用すると、自分自身のマップだけでなく同僚と共有されているすべてのマップも表示されます。任意のマップを選択してそのバージョンをオフライン利用可能にでき、それをネットワーク接続なしでも使用できます。また、データ編集も可能です。<\/SPAN><\/P><\/P>
誰か地図持ってますか?<\/SPAN>
これまで準備段階でしたのでユーザーアカウントとクライアントIDがあります。しかしまだオフライン利用可能な地図がありません。このままデモ操作するとログイン成功しても検索結果はゼロになります。<\/SPAN>
そこで新たに地図、正確にはWeb Mapを作成します。「マイコンテンツ」に移動してください。ここには既に登録済みのアプリケーションがあります。<\/SPAN>

新しい地図は「作成->地図」で作成します。次の入力画面ではタイトル(統一スキームとして「My cool Map」)とタグを設定します。タグもここでも必須であり、キーワードによって後から地図検索できます。「offline」や「Munich」のようなテーマや場所に関するキーワードがおすすめです。<\/SPAN>
最後に「OK」で地図作成すると空白の世界地図が表示されます。この画面ではベースマップ変更や特に地図レイヤーへのデータ追加が可能です。それらは自分自身のデータでも公開されているデータでも構いません。<\/SPAN>
「追加->レイヤー検索」に進んでください。「 「Schadensmeldung Freising」を検索し、場所に「ArcGIS Online」を入力します。結果が得られない場合は、「Innerhalb der Kartenausdehnung」のチェックを外してください。これらのデータを「Hinzufügen」でマップに追加します。損傷レイヤーを選択し、「Zoomen auf」をクリックすると、現在および将来の開始マップ範囲が変更されます。マップを保存し、「Eigene Inhalte」ビューに戻ります。<\/SPAN><\/P>
<\/P>
新たに作成したマップであるWeb Mapタイプのエントリが表示されます。マップ名をクリックすると、プロパティビューに移動します。そのプロパティの一つに「Offline-Modus」があり、すでに「Aktiviert」と表示されています。マップをオフラインで使用するにはこの設定が必要です。「Deaktiviert」と表示されている場合は、「Bearbeiten」をクリックし、「Offline-Modus aktivieren」にチェックを入れてください。<\/SPAN><\/P><\/P>私は誰?<\/SPAN><\/H1>必要な準備はこれで完了しましたので、デモアプリケーションに取り掛かりましょう。初めて起動すると、App IDの入力を求められます。ここには、アプリケーション登録時に取得したClient IDを入力してください。<\/SPAN><\/P>
<\/SPAN><\/P>App IDを保存すると、スタート画面に移動します。<\/SPAN><\/P><\/P>最初のステップはログインで、ここが最も興味深い部分です。ログインページが表示されます:<\/SPAN><\/P>
<\/SPAN><\/P>何が興味深いかというと、このログインページはブラウザコントロール内で表示される動的に読み込まれるWebコンテンツであることです。要求されたURLによって、アプリケーションタイトル、作者、言語などの内容がスクリーンショットと多少異なる場合があります。しかし基本的な構造は同じです。<\/SPAN><\/P><\/P>ここでは標準的なログイン手順が使われており、これはArcGIS開発者サイトで詳しく説明されています。ArcGISのURLのみが要求されます:<\/SPAN><\/P>https:\/\/www.arcgis.com\/sharing\/oauth2\/authorize?client_id=P61TE38ydg2L7y30&response_type=code&redirect_uri=urn:ietf:wg:ooob<\/SPAN><\/P><\/P>これはユーザーをArcGISに対して認証するRESTエンドポイントです。このためにClient IDが必要で、これは最初にアカウントで登録したものでURIの一部として渡されます。URLの残りの部分は固定されており、開発者サイトで説明されています。<\/SPAN><\/P><\/P>この方法にはいくつかの利点があります。この手順は多くの開発作業を省略でき、ページは自動的にサーバー側で生成され設定に合わせて調整されます。またログイン領域も含まれており、開発者は誤ったログイン試行のエラーハンドリングを行う必要がなく、ArcGIS CloudまたはPortalソリューションどちらへの認証でも問題ありません。<\/SPAN><\/P><\/P>認証が完了すると、ArcGISプラットフォームから返されたトークンは中央集約された(静的シングルトン)オブジェクトIdentityManagerに保存されます:<\/SPAN><\/P>
<\/SPAN><\/P>名前の通り中央のアイデンティティ管理として機能します。ArcGISサービスへのリクエスト時には、このサービス用の権限情報が既に保存されているか自動的に確認します。もしなければ、または権限が期限切れの場合、そのサービスへのアクセスは許可されません。<\/SPAN><\/P><\/P>持っているものを見せてください<\/SPAN><\/H1>これでアプリケーションへのログインが可能になりました。次にアプリケーションの本来の目的であるオフラインでマップを利用する機能について見ていきましょう。<\/SPAN><\/P><\/P>まず最初に、アプリケーションで利用可能なオブジェクトを検索する必要があります。これはクラスArcGisPortalWebMapItemsViewModelのメソッドSearchArcgisOnline()内で行われます。最初にArcGIS Portalインスタンスが作成されます。これは一般的にArcGISプラットフォーム(ArcGIS OnlineまたはPortal for ArcGIS)へのリクエスト用です:<\/SPAN><\/P>
ステートメント実行後に _arcGisPortal オブジェクトを見ると、先ほど使用したログインで認証済みであることがわかります: < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> < img __jive_id = " 55830 " alt = " 8.png " class = " image-8 jive-image " src = " https : // us.v-cdn.net / 6038851 / uploads / legacyfs / online / 55830_8.png " style = " height : auto ; " /> < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> この割り当ては IdentityManager によって行われました。この IdentityManager は ArcGIS Online に対するリクエスト用の適切な認証情報を見つけました。 < / span > < / p > < p > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> 次にアプリケーション内でオフライン保存可能なすべてのマップを見ることにします。以下のクエリはオフライン保存対象となるすべてのマップ(= Web Maps)を検索します。また検索条件をさらに絞る方法を示すため、自組織内のみでそのようなマップを検索しています。「 SearchText 」はアプリケーションUIから取得した検索テキストであり、検索条件をさらに絞るために使います: < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> < img __jive_id = " 55831 " alt = " 9.png " class = " image-9 jive-image " src = " https : // us.v-cdn.net / 6038851 / uploads / legacyfs / online / 55831_9.png " style = " height : auto ; " /> < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> 最後にいくつか検索設定を指定して検索リクエストを送信します: < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> < img __jive_id = " 55832 " alt = " 10.png " class = " image-10 jive-image " src = " https : // us.v-cdn.net / 6038851 / uploads / legacyfs / online / 55832_10.png " style = " height : auto ; " /> < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> 最初に「My cool Map」という名前のWeb Mapを作成したので、「cool」というキーワードで検索してみます。この場合検索結果はちょうど1件でした: < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> < img __jive_id = " 55833 " alt = " 11.png " class = " image-11 jive-image " src = " https : // us.v-cdn.net / 6038851 / uploads / legacyfs / online / 55833_11.png " style = " width : 620px ; height : 477px ; " /> < / span > < / p > < p > < span style = " font-family : trebuchet ms, geneva ; "> なぜちょうど1件なのか?もちろん、自分たちが作成したマップだけが表示されています。他にも多くの人々が ArcGIS を「cool」と感じているでしょうから、おそらく複数の「coolなマップ」が存在するでしょう。しかし検索では、自分たちの組織内のみという制限条件があるため、それ以外は表示されません。我々は大企業ではなく「1人」企業ですが、それでも自分たち自身の組織として扱われています。< / span > < / p > < p >
さあ!さあ始めましょう。このWeb Mapをローカルにダウンロードします。そのためにはマップオブジェクト内の「Get the map offline」ボタンをクリックし、新しいページへ移動してすぐにWeb Mapの内容が表示されます。3ステップでオフラインマップへ進みます: まず、将来のCacheに一意の名前を付け、次にオフラインで利用可能にしたい(部分的な)エリアをマークし、「Export Map」ボタンでダウンロードを開始します:<\/SPAN><\/P>
<\/SPAN><\/P>別のページ遷移により、自動的にすべてのオフライン利用可能なCachesのビューに移動します。このコレクションは、アプリケーションをどれだけ使ったかによって多かれ少なかれ豊富であり、私の場合はいくつかのCachesがあります。CachesはWeb Mapsごとにグループ化されて表示されます。同じWeb Mapに対して異なるCaches(例えば異なる地図範囲)を読み込むことが可能だからです。グループは最小化でき、Web Mapに関するいくつかの情報だけが見えるようになります。<\/SPAN><\/P><\/P>現在ダウンロード中の新しいCacheはプログレスバーでアクティブとしてマークされ、さらにCacheオブジェクト内のステータスバーが現在の処理状況を示します。各Cacheオブジェクトには削除、同期、読み込み用のボタンもあります。<\/SPAN><\/P>
<\/SPAN><\/P>Cacheを待つ間に、コード内で実際に何が起きているかを簡単に見てみましょう。<\/SPAN><\/P><\/P>主に機能しているのは CreateOfflineMapViewModel<\/SPAN> クラスです。これはCachesの生成を担当しています。中心となるエントリーポイントは「Export Map」クリック時に呼び出される ExportMap()<\/SPAN> メソッドです。ここにはWeb Mapから重要なものを保存する中心的な機能があります:#_msocom_1<\/A> <\/SPAN>地理データ、つまりベースマップとフィーチャーデータです。<\/SPAN><\/P>
<\/SPAN><\/P>Esri Offlineデータ(例:ArcGIS for Windows MobileSDKやCollector for ArcGISアプリ)を使ったことがある方なら、このプロセスは基本的に既知でしょう。ベースマップとベクターデータは別々に保存されます。これは一つにはラスターデータとフィーチャーデータの処理方法の違いによりますが、もちろんデータ構造の違いにも起因します:ベースマップはTiled Packageという構造化されたタイル画像フォルダとして圧縮された形で存在します。一方ベクターデータはデータベース構造であり、具体的にはSQLiteフォーマットです。我々の場合、SQLiteデータベースはファイルシステム上では「geodatabase」で終わりますが、これは自由に選択可能です。<\/SPAN><\/P>
<\/SPAN><\/P>しかし実際の地理データエクスポートが始まる前にもう一つ別のことが行われます:<\/SPAN><\/P>
<\/SPAN><\/P>ここではWeb Mapの情報がローカルに保存されます。知っておくべきことは、Web Mapは基本的には
JSON形式の設定ファイルであり、自身にはデータを含まず、むしろどこにデータがあるかという情報を持っています。またID、タイトル、所有者、作成日など地図定義自体の情報も保存されます。これら2つの情報はオンラインで定義されたオブジェクトであるWeb Mapから取得しますが、オフライン作業時にはアクセスできません。そのため、この情報もオフラインで利用可能にするために、このデモではエクスポート時にWeb Map定義をローカル保存し、どんな状況でも利用できるようにする仕組みが組み込まれています。<\/SPAN><\/P><\/P>アプリがすべて新しくする<\/SPAN><\/H1>さて、その間にCacheは完全に読み込まれました。これで3つのことができます:地図上で表示すること、同期すること、そして削除することです。<\/SPAN><\/P><\/P>まず読み込んだCacheの表示に集中し、「Load map」をクリックします。<\/SPAN><\/P>
<\/SPAN><\/P>「Map」という新しいタブが開き、表示には地図と編集可能なレイヤー一覧が見えます。レイヤーを選択すると地図上でポイントをクリックしてそのレイヤー内に新しいオブジェクトを作成できます。簡単化のためデモでは属性入力は省略し、ジオメトリのみ生成していますが、本格的なアプリケーションでは次のステップとなります。<\/SPAN><\/P><\/P>レイヤー上で変更があった場合、それら該当レイヤーの後ろに編集数が表示されてわかるようになっています。Cacheに変更があれば同期する意味があります。それがこのデモで最後に示すステップです。<\/SPAN><\/P><\/P>それを行うため再び「Config」タブへ戻り、自分のCacheで「Sync」機能を選択します。再度プログレスバーが表示されますが今回はエクスポート説明ではなく同期タイトルです。エクスポートとの違いは同期ではどんな変更があったか比較し、それらを中央サーバーへ反映させることです。ローカル変更はアップロードされ、他クライアントの変更はダウンロードされます。<\/SPAN><\/P>
\n
フィナーレ、おおお\
\n
この文章の目的は何だったのでしょうか?一つには典型的なオフラインアプリケーションの質問や流れを示すことでした。「Collector Light Demo」アプリへの参照と合わせて、一つずつ手順を見ることや理解することが可能です。それによって疑問解決のお手伝いになり得ますし、少なくとも特定課題への取り組み方についていくつかアイデアを提供します。
\n
デモについて補足すると:開発はArcGIS Runtime for .NET Betaバージョンを基盤として既に始まっていました。そのためEsri Deutschlandでは早期から開発状況を見ることができ経験も積めました。その後多くの新バージョンがリリースされ、多数の価値ある変更点があります。また追加のToolkitsやサンプルもあり、多様な解決策例があります。同じ問題でも複数解決策が見つかることがあります。それらは同等の場合もあれば、それぞれ利点が異なる場合もあります。
\n
これら情報以上に質問や個別相談をご希望の場合はEsri Deutschlandまでお気軽にお問い合わせください。当社コンサルティングチームがお手伝いいたします。
\n<\BODY>\n<\HTML>