「ArcGIS Online & ArcGIS Field Maps で使えるフォームを活用しよう!!」でフォームを活用した場合のメリットについてお伝えしました。今回のブログでは ArcGIS Arcade (以下「Arcade」) を使用した条件分岐や自動入力によるフォームの定義をご紹介します。
なお、フォームには「日時 (Date)」「調査員 (String)」「管理番号 (Integer)」「所在地域_町丁・字 (String)」「調査結果_緊急度 (String)」「緊急度_詳細 (String)」「備考 (String)」が事前に追加されているものを利用していきます。
条件分岐を定義
フォームで条件分岐を定義することで属性情報の入力を最適化できます。
ここでは「調査結果_緊急度」の項目で「危険度‐高」を選択した場合、より詳細な情報を入力する項目が表示される設定を行います。
設定方法は以下のとおりです。
- Map Viewer の [フォーム] を選択し、[フォームの構成] ウィンドウを開きます。
- 「緊急度_詳細」の [プロパティ] ウィンドウを開きます。
- [ロジック] セクションの [表示] ボタン右側にある [式] ボタンをクリックし、[+ 新しい式] から [式の設定] ウィンドウを起動します。
- [式の設定] ウィンドウで以下のような条件式を設定し、右下の [終了] をクリックします。
条件式: 「調査結果_緊急度」「に等しい」「緊急度‐高」
- この設定で「調査結果_緊急度」で「緊急度‐高」が選択された場合のみ、「緊急度_詳細」の調査項目が表示できるようになります。
このように本来複雑な設定が必要となる条件分岐も GUI ベースで簡単に設定することができます。
日時の自動入力
調査日時の整合性を保つために、デバイスのタイムゾーン (日本標準時 (JST)) を使用して、日時を自動入力する仕組みを構成します。
- Map Viewer の [フォーム] を選択し、[フォームの構成] ウィンドウを開きます。
- 「日時」を選択し、[プロパティ] ウィンドウを開きます。
- [ロジック] セクションで [計算される式] の右側にある [式] ボタンを選択し、[計算式] ポップアップを表示します。
- [+ 新しい式] を選択し、[Arcade エディター] を起動します。
※手順 1 ~ 4 は「取得するポイントと重なるエリアの情報を自動入力」と共通です。
- 起動した [Arcade エディター] に以下のコードを記述し、右下の [完了] をクリックします。
ToLocal(Now())
※ 正しく設定されると「読み取り専用」「</>計算済み」と表示されます。
- これでフォーム入力時に日本標準時 (JST) が自動入力できるようになりました。
取得するポイントと重なるエリアの情報を自動入力
今回は新しくポイントを取得した時に、そのポイントが重なるエリアの町丁・字名を自動的に入力する仕組みを提供します。今回はエリアの情報として「平成 27 年国勢調査 町丁・字等界 – Japan Block Boundaries ECM」を使用します。
- 「所在地域_町丁・字」の [Arcade エディター] を起動します。
※ [計算される式] で [+ 新しい式] から起動 - 起動した [Arcade エディター] に以下のコードを記述し、右下の [完了] をクリックします。
// 平成 27 年国勢調査 町丁・字等界のポリゴン レイヤーから大字・町名を取得します。
var TownBlocks = FeatureSetByName($map, "平成 27 年国勢調査 町丁・字等界 - Japan Block Boundaries ECM", ["OAZA_NAME"]);
// 新規で取得するポイントが町丁・字のポリゴンと交差した時に、交差する大字・町名を取得します。
var TownBlock = First(Intersects($feature, TownBlocks));
// 取得するポイントがポリゴンと交差した時に、交差する大字・町名を返し、そうでなければ null を返します。
if (!IsEmpty(TownBlock)){
return TownBlock["OAZA_NAME"];
} else {
return null;
}
- 上記のコードの意味は以下のとおりです。
- FeatureSetByName 関数でマップ内のレイヤーから属性情報を取得します。
- First 関数で Intersects 関数で交差する最初のフィーチャを取得します。
- Intersects 関数 で $feature (新規ポイント) と 変数 TownBlocks (町丁・字のポリゴン) が交差するかを確認します。
- IsEmpty 関数で TownBlock が空でないこと (= 交差するポリゴンが存在) を確認します。
- if – else 関数で、IsEmpty 関数が空でない場合に、OAZA_NAME (= 大字・町名) を返します。空であった場合、null を返すようにします。
- この設定で新規取得するポイントが存在するエリアの町丁・字が自動的に取得できます。
その他にも関連レコードから属性情報を取得したり、ジオメトリを属性として保存したりなど、フォームでさまざまな入力設定を実現できます。
おわりに
今回のブログではフォームを活用した条件分岐や自動入力に焦点を当ててお伝えしました。ArcGIS Arcade を使用して作成する部分もありますが、簡単な設定でより高度なフォームを実現できますので、ぜひ試してみてください。