こちらは、ArcGIS アドベント カレンダー 2025 の 17 日目の記事です。他の記事もぜひご覧ください。
ArcGIS では、フィーチャが持っている属性データを確認する方法としてポップアップがあります。ポップアップではただ属性データを表示するだけではなく、さまざまな表現をすることができます。ポップアップで行える表現方法を 3 回に渡って紹介します。今回は第 2 弾として、ArcGIS Arcade を使用したポップアップの基礎について紹介します。ポップアップの基礎に関しては、「ポップアップの基礎」をご確認ください。本記事は、米国 Esri 社のブログ記事「Pop-ups: Arcade essentials」を翻訳したものを、一部加筆・変更したものです。
スタイルやエフェクトを超えて、レイヤーのポップアップは、地図情報体験を総合的に完成させるために不可欠な要素です。ポップアップを活用することで、単調な属性リストが、直感的で魅力的な情報を表示する、より意味のあるものへと変わります。Arcade は、計算やジオメトリー演算の実行、テキストの書式設定、他のレイヤーからのデータ アクセスなど、機能とロジックを活用して最高のポップアップを作成するために適用できる便利なツールの集合体と考えることができます。
以下のリンクから、関心のあるセクションにジャンプできます。以下の例に沿って進めるには、Arcadeのサンプル マップを開いてください。
Arcade はArcGIS全体でサポートされている式言語です。計算の実行、テキスト操作、論理式の評価に使用できます。Arcade はプロファイルまたはコンテキスト内に存在し、スクリプトがグローバル入力として利用できるパラメーターと、スクリプトから期待される出力を定義します。このブログ記事ではポップアップ プロファイルに焦点を当て、レイヤーのポップアップを作成するためにどのように使用されるかの概要を説明します。
Arcade はポップアップで 2 つの方法で使用できます。1 つは、フィールドのように評価できる要素で使う属性式を作成する方法、もう 1 つは、完成されたコンテンツのブロックを返す独立した Arcade コンテンツ要素として使用する方法です。
Arcade 式と要素を活用することで、ポップアップをさらに進化させられます。「ポップアップの基本」では、ポップアップの概要と設定方法について解説しています。
Arcade を使う理由
Arcade を使用すると、データを動的に操作して計算を実行し、即座にデータを操作できます。不適切な形式の属性がある場合や変換が必要な場合、数学的演算(値の合計やパーセンテージの計算など)を実行する必要がある場合、分岐のための論理式を使用する場合、またはジオメトリー演算(面積や交点の計算など)を実行する場合に活用できます。
Arcade は、ソースに戻ることなくデータを操作する簡便な方法を提供します。これはソースを所有していない場合に特に有用です。Arcade はレイヤーの所有者に関係なく、マップ内のあらゆるフィーチャ レイヤーに適用できます。
Arcade サンプル マップを開いて、ポップアップでの Arcade の使用例を確認しながら操作を進めてください。このマップにはグレート スモーキー山脈国立公園(GRSM)の山頂とトレイルが表示されており、以下のレイヤーが含まれています。
GRSM Final Pop-ups
完全に設定済みの Peaks レイヤーと Trails レイヤーのポップアップを含む、排他的な可視性グループ レイヤー。
GRSM Example Pop-ups
以下の例で説明するポップアップ設定を含む、排他的な可視性グループ レイヤー。
GRSM Boundary
このレイヤーはマップ コンテキストの表示専用であり、ポップアップは含まれません。
Counties
別のレイヤーからポップアップ属性情報を取得するために Arcade のインターセクト関数を使用する方法を示すマップ レイヤー。このレイヤーにはポップアップがなく、表示されていません。
ポップアップの設定方法の詳細を確認するには、レイヤーを選択し、設定(明るい)ツールバーからポップアップ ペインを開いてポップアップ要素を表示し、属性式を確認してください。
ヒント
Arcade 式の作成方法と使用方法についてさらに学ぶ優れた方法は、ArcGIS Living Atlas の任意のマップまたはレイヤーを開き、ポップアップと式を調べることです。
Arcade エディターは、属性式や Arcade 要素の作成・編集に使用されます。以下の機能を含みます。
プロファイル変数は、式内で使用できる特別なグローバル変数です。例えば、$feature はマップ上でクリックしてポップアップを開いたフィーチャを参照します。この変数は、フィーチャの特定の属性(フィールド)を取得するために使用されます。例えば、$feature.name はフィーチャの name フィールドの内容を返します。
関数は式内で値を計算するために使用されます。関数は定数、データ関数、フィーチャ関数、数学関数、テキスト関数などに分類、グループ化されています。例えば Round は数学関数であり、入力された数値を指定された桁数に丸め、丸められた新しい数値を返します。各関数には組み込みのヘルプが用意されており、使用方法を学ぶことができます。また、式内で使用するための独自のカスタム関数を作成することも可能です。
候補機能は既存の式の一覧を提供し、その一部または全部を新しい式にコピーできるようにします。
Arcadeアシスタントは、自然言語のプロンプトから式を作成するのを支援します。関数を思い出せない場合や、Arcade で実行したい複雑なタスクがある場合に非常に役立ちます。最も効果的なプロンプトは、データによって異なります。
ヘルプは Arcade のヘルプ ドキュメントにリンクします。
Arcade エディターにはインテリセンスも搭載されており、エラーの削減や式入力時の補完を支援します。エディターには警告も表示され、式に問題の可能性がある箇所や改善の余地がある箇所を理解するのに役立ちます。
スタイルやエフェクトを超えて、レイヤーのポップアップは、地図情報エクスペリエンスを総合的に完成させるために不可欠で重要な要素です。ポップアップを使うことで、単調な属性リストが、直感的で魅力的な情報を表示する、より意味のあるものへと変わります。
ポップアップは、ポップアップ情報の構成要素である 1 つ以上の要素で構成されます。Arcade は独自の要素タイプですが、他の要素も Arcade 式を含めることができます。Arcade 式は、フィートからメートルへの変換、大文字テキストを適切な大文字小文字のテキストへの変更、属性コードを読み取り可能な文字列への展開など、特定のタスクを実行します。
要素
すべてのレイヤーでは、タイトル、テキスト、フィールド リストなどの共通要素を使用できます。ただし、使用可能な要素のすべては、操作対象のレイヤーの種類と特性によって異なります。たとえば、添付ファイル要素は、フィーチャ レイヤーに添付ファイルが存在する場合にのみ利用可能です。
レイヤーのポップアップは、以下の1つ以上のポップアップ要素で構成されます。
タイトル
ポップアップの上部に表示されるタイトル。
フィールド リスト
フィーチャ レイヤーの属性から取得したフィールドの一覧。
チャート
数値属性フィールドの値をグラフィカルに表示するためにグラフを追加します。棒グラフ、折れ線グラフ、円グラフを追加できます。
画像
ポップアップに画像を含めるには、画像(PNG、JPEG、またはGIF形式)のURLを指定します。URLはフィールドから取得することも可能です。画像にはタイトル、キャプション、関連ウェブ サイトや拡大画像へのリンク、代替テキストを含めることができます。
テキスト
テキスト、フィールド、式を使用して説明文を表示します。書体や色を変更できます。フィールドやリンクはプレーン テキストや HTML と組み合わせて使用できます。
Arcade
ユニークなコンテンツ要素として、Arcade はポップアップ内に、チャートや HTML、Arcade で完全にフォーマットされたテキストなど、完成されたセクションを返すことができます。
添付ファイル
フィーチャ レイヤーのデータに添付ファイルが含まれる場合、それらの添付ファイルはレイヤーのポップアップに追加されます。添付ファイルはリスト形式またはギャラリー形式で表示できます。ポップアップ内の添付ファイルをクリックすると、新しいブラウザー タブで添付ファイルが開きます。
関連レコード
一部のレイヤーは、共通フィールドを介して他のテーブルやレイヤーとの事前に定義されたリレーションシップを含む場合があります。レイヤーにリレーションシップがある場合、それらは自動的に検出され表示されます。
マップに新しいフィーチャ レイヤーを追加すると、ポップアップはデフォルトで表示され、タイトルとフィールド リストの要素が含まれます。[コンテンツの追加] をクリックすると、追加のポップアップ要素を追加できます。
Arcade 属性式は、テキストやフィールドと同様に、あらゆるポップアップ要素で使用できます。式は評価され、使用された場所で結果が返されます。サイズ、色、フォント ファミリーなどを使用してスタイルを設定できます。
すべてのレイヤーの属性式は [属性式] パネルに一覧表示されます。既存の属性式をクリックすると Arcade エディターで開いて表示できます。または [式の追加] をクリックして新しい式の作成を開始します。
式は波括弧で囲まれて表示されます(例:{expression/expr0})、番号は 0 から始まります。式は、他のテキストやフィールドと同様に選択してスタイルを適用できます。
詳細と例については、Arcade 式の作成セクションを参照してください。
このセクションでは、2つの非常にシンプルな式を作成します。1 つは大文字のテキストを適切な大文字小文字のテキストに変換する式、もう 1 つはフィートをメートルに変換する式です。サンプル マップを開いて操作を再現できます。GRSM Example Pop-ups グループ レイヤーを開き、Peaks (Text element) レイヤーのポップアップを選択して表示し、Peaks (Expressions) レイヤーのポップアップと比較してください。
山頂名は適切な大文字表記に変更され、標高がメートル単位で追加されました。
実装方法を確認するには、Peaks(Text element) レイヤーを選択し、テキスト要素を表示して、Peaks(Expressions) レイヤーのテキスト要素と比較してください。
山頂名の式への置換と、標高をメートル単位で表示するための別の式の追加に注意してください。
大文字の名前を適切な大文字小文字に変換する最初の式を作成するには、次の手順に従ってください。
Step1. GRSM Example Pop-ups グループ レイヤーから Peaks (Default) レイヤーを選択します。これはデフォルトのポップアップ設定を持つ未構成のレイヤーです。
Step2. 設定(明るい)ツールバーからポップアップを選択すると、ポップアップ パネルが表示されます。
Step3. ポップアップ パネルの上部で、[属性式] をクリックします。
Step4. [式の追加] をクリックします。
Step5. Arcade エディターでは、まず以下の操作を行ってください。
Step6. フィールドの一覧をスクロールして PEAKNAME を見つけ、そのフィールドをクリックして式を開始します。使用するフィールドが既にわかっているため、単に $feature.PEAKNAME と入力して式を開始することも可能です。
Step7. 次の行に進みます。[関数] タブをクリックして利用可能な関数を表示します。テキスト関数カテゴリまでスクロールして該当する関数を検索するか、関数名を入力して候補を特定します。クリックして式に関数を追加します。
ヒント
関数の詳細を確認するには右側の矢印をクリックしてください。関数ヘルプ ドキュメントの全体を表示するには [詳細情報] をクリックしてください。
Step8. この関数はテキスト値を入力として受け取り、適切な大文字小文字のテキストを返します。式を編集して、$feature.PEAKNAME が関数の値入力となるようにしてください。
オプションのパラメーター ‘everyword’ はデフォルト設定のため不要です。ただし、これにより Arcade の理解が容易になります。もう 1 つのパラメーター ‘firstword’ は、文字列の最初の単語のみを大文字化するものです。
Step9. [実行]をクリックして、式が意図した結果を返すことを確認してください。完了したら [完了] をクリックして式を保存します。
Step10. テキスト要素内の式は、他のフィールドと同様に使用します。フィールドと式のリストを表示するには、テキスト要素内に {(左波括弧)を入力します。式はリストの上部に表示されます。
テキスト要素は現在、適切な大文字表記の山頂名を返します。
Step11. 上記で説明した同様の手順を使用して、フィート単位の標高をメートルに変換する別の式を作成します。
この式は、以下に示すようにテキスト要素内で使用できます。
式にフォーマットするには、Text 関数を使用して高さをメートル単位の文字列として返し、返されたテキストにハッシュ表記を使用して希望の書式設定を追加します。
式はフィールドとまったく同様に扱われるため、数値式もフィールド パネルで選択(式はフィールド リストの最下部にあります)し、他のフィールドと同様に書式設定を調整できます。FeetToMeters は文字列を返しますが、数値を返す場合、以下のように書式設定できます。
テキスト サイズ、太字や斜体、色などの追加のテキスト書式設定を式、テキスト、フィールドに適用することで、意図した結果を得ることができます。
Arcade アシスタントを使用すると、式作成を簡略化できます。詳細と例については、Arcadeアシスタントのセクションを参照してください。
ポップアップ コンテンツ ブロック(または要素)は、ポップアップ情報の構成要素です。詳細は「ポップアップ要素と式について」セクションを参照してください。
Arcade 要素は、Arcade 属性式とは異なり、完全にフォーマットされた情報のブロックを返します。Arcade 要素は単独で存在し、属性式のように他の要素に追加することはできません。
GRSM Final Pop-ups グループ レイヤーで、Peaks レイヤーを選択します。設定(明るい背景色)ツールバーで [ポップアップ] をクリックし、コンテンツ ブロックの一覧を表示します。Arcade 要素はコード記号 [ </> ] でリストされ、「Arcade」というタイトルが付いています。[式の編集] をクリックして Arcade エディターを開き、要素を表示または編集します。
サンプル マップを表示し、Example Pop-ups レイヤー グループを開いた後、Peaks (Arcade element) レイヤーを選択して表示することで、操作を追体験できます。この例では、Arcadeコンテンツ要素は前述の属性式で作成したポップアップと類似していますが、追加のHTMLスタイルが適用されています。Peaks (Expressions) と Peaks (Content Element) を比較することで、2つのアプローチを理解できます。
Arcade 属性式と Arcade コンテンツ要素の最大の違いの 1 つは、属性式がテキスト要素で使用されるのに対し、Arcade コンテンツ要素は、単独または他の要素と組み合わせて、ポップアップの完成された一部を返すことを目的としている点です。両者の背後にある Arcade は非常に似ていますが、Arcade コンテンツ要素は自己完結型であり、必要な処理はすべて要素内で行う必要があります。
新しい Arcade コンテンツ ブロックを追加するには、[コンテンツの追加] をクリックし、[Arcade] を選択してください。
Arcade エディターを開くと、作業を開始するのに役立ついくつかのテンプレートが表示されます。デフォルトでは、リッチ テキスト テンプレートが開きます。
最終的な結果は、以下のポップアップです。
これは Arcade コンテンツを使用した簡単な例ですが、基本を超える可能性はさらに多く存在します。Arcade の使用例については、GRSM Final Pop-up グループ レイヤー内の Peaks レイヤーを参照してください。
Arcade アシスタントは式と要素の両方に対して Arcade を生成できます。詳細と例については Arcade アシスタントのセクションを参照してください。
Arcade アシスタントは人工知能(AI)を活用し、自然言語で入力した指示から Arcade を生成します。このアシスタントは Arcade の属性式や Arcade コンテンツ要素の作成に使用できます。
Arcade アシスタントを使用するには、組織で AI アシスタントを許可する必要があります。有効化されている場合、Arcade エディターで以下の操作を行ってください。
直近のプロンプトは編集セッション中に保存され、再利用のためにコピー&ペーストしたり、将来の使用のために保存したりできます。効果的なプロンプトはデータによって異なります。以下は他のマップで使用された例です。
ヒント
プロンプトに提供する情報が多いほど、結果は良くなります。多くの場合、これは反復的なプロセスです。Arcade を生成し、結果を試してみて、必要に応じてプロンプトを修正し、結果を改善してください。
以下に示すすべてのサンプル プロンプトは、GRSM Example Pop-ups グループレイヤー内の Peaks(Default) レイヤーで使用できます。
プロンプト
{PEAKNAME} を適切な大文字小文字に変換したいです。
結果
プロンプト
単位名を適切な大文字小文字に変換したいです。
結果
プロンプト
山頂標高をメートル単位に変換する。
小数点以下1桁で、千の位区切りなしでメートル単位を返す。
末尾に「メートル」という文字列を追加する。
結果
プロンプト
山頂名と四分図名(Quad フィールドの値)を適切な大文字・小文字に変換してください。
山頂名で文章を始め、その山頂が位置する四分図名を追加し、最後に「quadrangle」という語で文章を完成させてください。
結果
Arcade コンテンツ要素は、要素内で定義されたすべてのフォーマット、変数、関数を含む、ポップアップ内の完成されたセクションを返します。
プロンプト
各山頂を説明するHTMLテーブルを作成してください。
すべての文字列は大文字小文字を正しく使用してください。
テーブルはポップアップの幅いっぱいに表示されるようにしてください。
結果
プロンプト
各山頂を記述し、ポップアップを埋めるHTMLテーブルを作成する。
すべての文字列は大文字小文字を正しく使用し、 数値フィールドは小数点以下2桁のみとする。 単位コードとパーク距離はテーブルから省略する。
最初の行の背景色を薄いオレンジ色にし、中央揃えの太字テキストを配置する。 列は薄い青色とする。
結果
さまざまなプロンプトを試してみて、反復と修正を重ねながら、望ましい結果を得るように調整してみてください。
以下は、ポップアップにおける Arcade の一般的な使用例です。これらの多くは、本ブログ記事で使用されている Arcade サンプル マップ内のポップアップ設定に使用されています。その他の例は、ArcGIS Living Atlas のマップやレイヤー、あるいは Arcade 関数リファレンスで確認できます。
この式は適切な大文字表記のテキストを返します。Proper 関数には2つのオプションがあります。すべての単語を大文字にするか、最初の単語のみを大文字にするかです。COUNTY に「SAN DIEGO COUNTY」という文字列が含まれる場合、式は「San Diego County」を返します。
var txtProper = Proper($feature.COUNTY, 'everyword')
return txtProperテキストを操作するためのその他のテキスト関数は多数あります。詳細については、「テキスト関数」を参照してください。
略語またはコード番号を理解可能な文字列に変換します。例えば、フィールド値が「CAC」の場合、式は「Cades Cove」を返します。
var distNam = $feature.PARKDIST
When (
distNam == "CAC", "Cades Cove",
distNam == "CAT", "Cataloochie",
distNam == "COS", "Cosby",
distNam == "DCR", "Deep Creek",
distNam == "LRI", "Little River",
distNam == "OCO", "Oconaluftee",
"Unknown")
この式は、単純な換算係数を用いてフィートをメートルに変換します。フィート単位のデータは ELEV フィールドにあります。
Text($feature.ELEV * 0.3048, "#,###")
この式は AFIELD の内容をチェックし、null の場合、フィールドにスペースが含まれる場合、またはフィーチャが空の場合に「Unknown」を返します。それ以外の場合は、フィールドの内容を返します。
var valField = $feature.AFIELD
var boolEmpty = IsEmpty($feature.AFIELD)
When(
valField == NULL, "Unknown",
valField == " ", "Unknown",
boolEmpty == true, "Unknown",
valField)
別の方法として、null との比較に DefaultValue を使用する方法があります。
DefaultValue($feature.AFIELD, 'Unknown')
スペースも対象とするには、Trim を追加してください。
DefaultValue(Trim($feature.AFIELD), 'Unknown')
フィーチャの属性値を文字列と組み合わせることで、別のウェブサイトを開くための URLリンクを作成したり、追加情報を取得したりできます。例えば、区画図には固有の区画 ID が記載されており、この情報を指す固有の URL を作成することで、評価者の記録にリンクできます。
// Return link to unique property record
var txtLink = "https://app1.pinal.gov/Search/Parcel-Details.aspx?Parcel_ID="+$feature.ParcelID
return txtLink
式を使用すると、同じマップ内の他のレイヤーの属性情報を単一のポップアップに統合できます。FeatureSetByName を使用して、レイヤー名を基にレイヤーを検索します。
// Get layer named "Counties" in the map
var fsetCounties = FeatureSetByName($map,"Counties")
フィーチャ セットには、Count や Intersect などのジオメトリー関数など、目的の情報を取得するための他の関数を適用できます。
var numCounties = Count(fsetCounties)
var feaCounty = (First(Intersects(fsetCounty, $feature)))
この場合、現在のマップ上に含まれていない別のレイヤーから、指定した ID のフィーチャ セットが返されます。これにより、現在の天気、人口統計情報、大気質など、Living Atlas のレイヤーから属性を取得できます。
var fsetStates = FeatureSetByPortalItem(Portal('https://www.arcgis.com/'),
"774019f31f8549c39b5c72f149bbe74e", 0)
テキスト ブロックでは、テキストや属性値に色を付けるのと同じ方法で式に色を付けることができます(式を選択し、カラー ピッカーを使用します)。この例では、{STATUS} フィールドを評価する2つの式が構築されています。このフィールドには 「Active」 または 「Inactive」 の2つの属性値のいずれかが含まれます。ここでのロジックは一見複雑に思えるかもしれませんが、実際には文字列値 「Active」 または 「Inactive」 を返す2つの式を作成しています。式が True と評価されない場合、Null が返され、テキスト ブロックには表示されません。
最初の式 「IsActive」 は、フィーチャのフィールドに 「Active」 という単語が含まれているかどうかを評価します。
2 つ目の式 「IsInactive」 は、フィーチャのフィールドに 「Inactive」 という単語が含まれているかどうかを評価します。
色は、テキスト エディター内でフィールドのように扱われる式に適用されます。結果は以下の通りです。