マップ上のレイヤーのフィーチャを異なるシンボルで表示し、視覚的に区別できるようにすることはよくある要件です。例えば、樹木のフィーチャがあるレイヤーの場合です。特に設定をしなければ、マップ上のすべての樹木は同じシンボルで表示されます。しかし、Unique Value Symbologyを使うと、例えば各樹木の種類ごとに異なるシンボルを表示するようにレイヤーを調整できます。以下の画像をご覧ください:<\/P>
<\/P>
Unique Value Symbology<\/span><\/P>これは区別するパターン(組み合わせ)がそれほど多くない場合に推奨される解決策です。しかし、数百・数千単位になり、さらに複雑なシンボルが必要になる場合はどうでしょうか?<\/P>その場合は、Dictionary Symbologyの利用を検討すべきです。ここで最も有名な例は、数千もの多様で複雑なシンボルを持ち、軍事用の戦術マップに使われるMilitary Symbology Stylesです。<\/P> <\/P>
Dictionary Symbology 6 Military Symbology Styles<\/span><\/P>先にお伝えしておくと、Dictionary Symbologyを使ったレイヤーは、上記のUnique Value Symbologyのスクリーンショットのようにマップの凡例には表示されません。何百ものシンボルがある凡例はあまり意味がないからです。<\/P> <\/H4>Dictionary Symbology Styleについて<\/H4>Dictionary Symbology Stylesでは、入力値に基づいてシンボルが動的にランタイムで生成されます。さまざまなStyleタイプがありますが、このブログではMobile StylesとWeb Stylesに焦点を当てています。スタイルにはポイント、ライン、ポリゴンなど様々なジオメトリ用のシンボルが含まれます。入力値は通常、そのシンボルをマップ上で受け取るフィーチャの属性情報です。つまり、スタイルは事前に必要なコンポーネントや適用ロジック、設定オプションをすべて備えて作成されなければなりません。その実装方法はこのArcGIS Blogで詳しく説明されています。<\/P>結果として得られるのはMobile Styleであり、これは拡張子が.stylxのSQLiteデータベースファイルです。このファイルはそのままArcGIS ProやArcGIS Maps SDKs for native(別名ArcGIS Runtime)でオフライン利用できます。また、Web Style Serviceとして公開し、デスクトップアプリやウェブアプリケーションでも使用可能です。<\/P>理論はこれくらいにして、Dictionary Symbologyをより理解するためには実際に試してみることが有効です。そのために私は前述のArcGIS Blog著者によるレストラン用Mobile Styleを少し改変し提供しました:<\/P>ダウンロード可能なMobile Style(Stylxファイル)として<\/LI>ArcGIS Onlineで公開されたこのスタイルのWeb Style Service<\/LI>スタイルをテストするための対応するRestaurant-FeatureService<\/LI><\/UL>このレストラン用Mobile Styleは属性ベースで複雑なシンボルを生成し、一目で名前、レストランタイプ(ここではピッツェリア)、評価、営業時間など多くの情報がわかり、わざわざポップアップを開く必要がありません。<\/P> <\/P>
レストランシンボルの構成要素<\/span><\/P> <\/H4>Mobile Styles の作成または修正<\/H4>Mobile StylesはArcGIS Proで新規作成します。ただし既存のものも構造が同じなのでテンプレートとして新しいスタイル作成に利用可能です。もちろんMobile Stylesは修正も可能です。そのためにはArcGIS Proでシンボルのグラフィックやテキストコンポーネントを作成・調整し、SQLite DBエディタ(例:DB Browser for SQLite)でスタイルの適用ロジックや設定を編集します。<\/P>ArcGIS Proではレストラン用Mobile Styleファイルをカタログへドラッグ&ドロップするとStyles一覧に追加されます。右クリックするとスタイル管理オプションが表示されます。管理ウィンドウで該当スタイルをダブルクリックすると既存コンポーネントの編集や新規作成が可能です。<\/P>SQLite DBエディタでスタイルを開くと編集箇所はテーブルmeta内にあります。そこではdictionary_configurationに設定項目(今回のスタイルではシンボル内レストラン名表示ON/OFFのみ)があり、dictionary_scriptには適用ロジックがArcGIS Arcadeスクリプト形式で記述されています。我々の場合は評価値から星マークコンポーネントを計算しています。<\/P> <\/H4>Web Styles Services の公開方法<\/H4>Mobile StylesはArcGIS ProからArcGIS OnlineやArcGIS Enterpriseへ公開できます。カタログ内で対象スタイルを右クリックしShare as Web Styleを選択するだけです。私は既に準備済みですが誰でもこのレストラン用Mobile Styleから独自のWeb Style Serviceを公開可能です。公開時には複数JSONファイルからなる構造が生成され、その中にスタイル情報全てが含まれURL経由でアクセスされます。Web StyleはバックグラウンドでMobile Style自体を直接利用しません。<\/P>ここで小さなヒント:Web Stylesは独自Webサーバー上でもホスティング可能です。その場合AGOL Assistantを使ってJSONファイル群をDownload All(スタイルアイテム右端メニューからView Item Resources)し、その展開した構造ごと公開すればよいでしょう。ただしアクセスにはサーバー側設定が多少必要かもしれません。<\/P> <\/H4>ArcGIS Pro における Dictionary Symbology の活用法<\/H4>ArcGIS ProではLayerがMobile StylesとWeb Styles両方によるシンボロジー利用可能です。我々のレストランの場合以下手順となります:<\/P>マップを挿入する<\/LI>次へ Ribbon-ItemのAdd DataでData from Pathを使ってRestaurant-FeatureServiceをレイヤーとして追加するレイヤーを右クリックしてSymbologyを選択するSymbologyメニューのPrimary SymbologyでDictionaryを選択するドロップダウンメニューのMoreからAdd dictionaryオプションをクリックするここで、ファイルシステムからRestaurant Mobile Styleを選択するか、Web Style(Portal/ArcGIS OnlineでWeb Style名またはIDを検索)を選択できるSymbology FieldsとText Fieldsで、定義されたスタイル入力値と異なる場合は適切なフィーチャ属性のフィールド名を指定できる。今回の場合はそのままで問題ない。必要に応じて設定(テキストのオン/オフ)を変更する完了
ArcGIS ProにおけるDictionary Symbology
ArcGIS Maps SDKs for nativeにおけるDictionary Symbologyの活用
すべてのArcGIS Maps SDKs for nativeでは、ArcGIS Proと同様にレイヤーに対してMobile StylesおよびWeb Stylesの両方をシンボロジーとして使用できる。レストラン用にはドキュメント内に適切なサンプルがあり、例えば.NET向けがある。コードはほぼそのまま利用可能で、自分たちのスタイルへのパスやIDだけ差し替えればよい。各SDKのサンプルビューアでもライブで試せる。このビューアは対応するアプリストア(Microsoft、Apple、GoogleでArcGIS Samplesを検索)やJavaやQt向けにダウンロード可能。例はすべてCustom dictionary styleという名前になっている。
ArcGIS Maps SDKs for nativeにおけるDictionary Symbology
フィーチャ属性フィールド名が合わない場合の上書き方法や設定(テキストのオン/オフ)の指定方法は、それぞれ該当SDKのドキュメントに記載されている。ここでは例として再び.NET向けがある。
さらに興味深いのは、スタイルから直接マップなしでシンボルを取得できる機能だ。これは例えばRendererなしのGraphicsOverlays内の「単一グラフィック」用シンボルや、独自のシンボルピッカーによる編集、またはマップコントロール外のテーブルやボタンでシンボル画像を使う用途に最適な解決策となる。この方法もドキュメントに記載されており、ここでは.NET向けが例示されている。マップコントロール外で使う画像は、その後Symbol.CreateSwatchAsync()とRuntimeImageExtensions.ToImageSourceAsync()メソッドで生成できる。
ArcGIS Maps SDKs for JavaScriptにおけるDictionary Symbologyの活用
WebアプリケーションでDictionary Symbologyを使う場合はWeb Stylesのみ利用可能。ArcGIS Maps SDKs for JavaScriptではネイティブSDKと同様のことが基本的に可能だ。簡単にするため、レストラン例のJSコードをCodePenに公開している。
ArcGIS Maps SDKs for JavaScriptにおけるDictionary Symbology
ArcGIS Maps SDKs for JavaScriptでも、GraphicsLayer内で「単独使用」するためやマップ外の他コントロールで画像として使うためにスタイルのシンボルを取得できる。これについても小さな例をCodePenで提供している。ポイントは、DictionaryRendererのGetSymbolAsync()メソッドに属性テーブルだけ持つGraphicを渡すことだ。これが対応するシンボルを返し、新しいGraphicのシンボルとしてGraphicsLayerで使うか、またはマップ外でsymbolUtilsオブジェクトのメソッドを使って画像として利用できる。
このトピックについて質問や提案があればコメント機能をご利用ください。それ以外は試してみて楽しんで成功を祈ります!