以前のブログ記事でもご紹介したように、ArcGIS Online には Arcade という ArcGIS 独自の軽量スクリプト言語が存在します。ArcGIS Online だけでなく、ArcGIS Pro や開発者製品等、ArcGIS プラットフォーム上で共通して利用できる言語であり、Excel にあるような関数を利用して処理を定義します。ArcGIS Online で Arcade が利用できる機能の中に、ポップアップの設定画面の「属性条件式」があります。「属性条件式」は元のフィーチャレイヤーに変更を加えずに、新たな属性項目を属性条件式に基づいて動的に生成できる機能です。今回は Arcade を使ってポップアップをカスタマイズする手順をご紹介します。
日付の書式設定
ArcGIS Online のポップアップの日付 (Date) 型の書式設定については、標準で図 1 のような選択肢が提供されていますが、日本で一般的に利用されている 2019/09/03 (yyyy/mm/dd)という書式はサポートされていませんでした。
図1 Date 型の標準書式設定のリスト
Arcadeを利用すれば、別のフィールドを動的に作成する形で図 2 のように yyyy/mm/dd 書式の表示を実現できます。
図2 Arcade で独自書式での表示を実現
現在時刻を用いたシンボル設定
ArcGIS Online には、フィーチャ レイヤーに対する機能として新規作成日時 (CreationDate) と最終編集日時 (EditDate) を自動的に記録する機能が用意されています (図 3)。
図3 新規作成日時 (CreationDate) と最終更新日時 (EditData)
これらの時刻と現在時刻を比較して、「直近 3 ヶ月間に入力されたデータと 3 ヶ月よりも前に入力されたデータを区別して表示できます (図 4) 。
図4 現在時刻を用いたシンボル設定の例
属性条件式の定義方法
レイヤーの [ポップアップの構成] を開きます (図 5)。
図5 ポップアップの構成
次に「属性条件式」の [追加] をクリックします (図 6)。
図6 属性条件式
スクリプトの編集画面が開きます (図 7)。
図7 属性条件式の設定画面
この画面で条件式を設定します。1 行目の「カスタム」が新しく定義するフィールド名です。変更も可能です。その下「スクリプト」には属性条件式のスクリプトを記述します。図7 では現在の日時を表示する now() 関数を記述しています。この状態で [テスト] をクリックすると「結果」の「値」で関数の出力値を確認できます。
条件式のサンプルを紹介します。
■日付型のカスタム書式
var lt;
lt= $feature.EditDate;
Year(lt)+”/”+ (Month(lt)+1)+”/”+day(lt);
※9/4注: 式に誤りがありましたので、上記の通り訂正してお詫びいたします。
■現在時刻を用いた属性条件式(3 ヶ月以内の入力の区別)
IIF(DateDiff(now(),$feature.CreationDate,”months”)>3, “3ヶ月より前”,”3ヶ月以内”);
■入力日の曜日と時刻の表示
var wd, lt;
wd = [“日”,”月”,”火”,”水”,”木”,”金”,”土”];
lt =$feature.CreationDate;
Year(lt)+”/”+(Month(lt)+1)+”/”+Day(lt)+”(“+wd[Weekday(lt)]+”) “ +hour(lt)+”:”+minute(lt)+”:”+second(lt);
※9/6注: 式に誤りがありましたので、上記の通り訂正してお詫びいたします。
■条件による表示の変更
var d;
d = ($feature.人口2010 – $feature.人口2000);
When(d<0,”人口減”, d>0,”人口増”,”変化なし”);
Arcade 今後の展開
Arcade のメリットは、データベースにフィールド追加やフィールド演算をしなくても、利用側で柔軟にカスタムのフィールドを定義できることです。一般的に ArcGIS Online 上に配置されるフィーチャ サービスは多数のユーザーで共用されることが想定されます。あらゆるユーザーの希望に応じてフィールド定義を調整することは現実的ではありませんが、Arcade の登場により個別のユーザーが必要に応じてカスタムのフィールドを定義できるようになりました。これにより、標準的に定義されたフィールドを組合わせて新しいフィールドを作るという柔軟な運用が実現しました。データベース設計もあらゆる利用を想定した設計をしなくても良く、システム全体の運用効率が向上しています。