Map Viewer のフォームを活用して属性の入力を ArcGIS Arcade を使ってやってみよう! (応用編)

Map Viewer のフォームを活用して属性の入力を ArcGIS Arcade を使ってやってみよう! (応用編)

アイキャッチ画像 (ArcGIS Online)

ArcGIS Online & ArcGIS Field Maps で使えるフォームを活用しよう!!」でフォームを活用した場合のメリットについてお伝えしました。今回のブログでは ArcGIS Arcade (以下「Arcade」) を使用した条件分岐や自動入力によるフォームの定義をご紹介します。

なお、フォームには「日時 (Date)」「調査員 (String)」「管理番号 (Integer)」「所在地域_町丁・字 (String)」「調査結果_緊急度 (String)」「緊急度_詳細 (String)」「備考 (String)」が事前に追加されているものを利用していきます。

条件分岐を定義

フォームで条件分岐を定義することで属性情報の入力を最適化できます。
ここでは「調査結果_緊急度」の項目で「危険度‐高」を選択した場合、より詳細な情報を入力する項目が表示される設定を行います。

設定方法は以下のとおりです。

  1. Map Viewer の [フォーム] を選択し、[フォームの構成] ウィンドウを開きます。
  2. 「緊急度_詳細」の [プロパティ] ウィンドウを開きます。
  3. [ロジック] セクションの [表示] ボタン右側にある [式] ボタンをクリックし、[+ 新しい式] から [式の設定] ウィンドウを起動します。
  4. [式の設定] ウィンドウで以下のような条件式を設定し、右下の [終了] をクリックします。

条件式: 「調査結果_緊急度」「に等しい」「緊急度‐高」

  1. この設定で「調査結果_緊急度」で「緊急度‐高」が選択された場合のみ、「緊急度_詳細」の調査項目が表示できるようになります。

このように本来複雑な設定が必要となる条件分岐も GUI ベースで簡単に設定することができます。

日時の自動入力

調査日時の整合性を保つために、デバイスのタイムゾーン (日本標準時 (JST)) を使用して、日時を自動入力する仕組みを構成します。

  1. Map Viewer の [フォーム] を選択し、[フォームの構成] ウィンドウを開きます。
  2. 「日時」を選択し、[プロパティ] ウィンドウを開きます。
  3. [ロジック] セクションで [計算される式] の右側にある [式] ボタンを選択し、[計算式] ポップアップを表示します。
  4. [+ 新しい式] を選択し、[Arcade エディター] を起動します。

※手順 1 ~ 4 は「取得するポイントと重なるエリアの情報を自動入力」と共通です。

  1. 起動した [Arcade エディター] に以下のコードを記述し、右下の [完了] をクリックします。
ToLocal(Now())

※ 正しく設定されると「読み取り専用」「</>計算済み」と表示されます。

  1. これでフォーム入力時に日本標準時 (JST) が自動入力できるようになりました。

取得するポイントと重なるエリアの情報を自動入力

今回は新しくポイントを取得した時に、そのポイントが重なるエリアの町丁・字名を自動的に入力する仕組みを提供します。今回はエリアの情報として「平成 27 年国勢調査 町丁・字等界 – Japan Block Boundaries ECM」を使用します。

  1. 「所在地域_町丁・字」の [Arcade エディター] を起動します。
    ※ [計算される式] で [+ 新しい式] から起動
  2. 起動した [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 が空でないこと (= 交差するポリゴンが存在) を確認します。
    • ifelse 関数で、IsEmpty 関数が空でない場合に、OAZA_NAME (= 大字・町名) を返します。空であった場合、null を返すようにします。
  1. この設定で新規取得するポイントが存在するエリアの町丁・字が自動的に取得できます。

その他にも関連レコードから属性情報を取得したり、ジオメトリを属性として保存したりなど、フォームでさまざまな入力設定を実現できます。

おわりに

今回のブログではフォームを活用した条件分岐や自動入力に焦点を当ててお伝えしました。ArcGIS Arcade を使用して作成する部分もありますが、簡単な設定でより高度なフォームを実現できますので、ぜひ試してみてください。

フォローする