ArcGIS Arcadeは、ArcGIS Pro、ArcGIS AllSource、ArcGIS Knowledge Studio、Map Viewer、Dashboards、Experience Builderなど多くのArcGISアプリケーション内のカスタムポップアップやリンクチャートから直接ArcGIS Knowledge Graphsをクエリするために使用できます。これにより、アナリストは既存のマップやリンクチャートのワークフローを離れることなく、選択したフィーチャー、エンティティ、または関係性に企業のナレッジグラフから接続されたコンテキストを付加できます。
このパターンは、フィーチャーレイヤーが運用上の一部の情報のみを含み、より広範なコンテキストがナレッジグラフに存在する場合に有用です。ポップアップは選択したフィーチャーを一意のIDでグラフエンティティに一致させたり、選択したフィーチャーのジオメトリを空間グラフクエリに使用したり、接続されたエンティティを要約したり、Knowledge Studioで関連エンティティを開くURLを生成したりできます。
この文脈で「サイドローディングコンテキスト」とは、グラフ由来の属性をフィーチャーレイヤーにコピーするのではなく、クリック時に関連するグラフ情報を取得してポップアップに表示することを意味します。
一般的なパターンは2つあります。1つ目はフィーチャーレイヤーポップアップが共有ID、属性、またはジオメトリを使ってナレッジグラフ内の関連エンティティを見つける方法。2つ目はナレッジグラフレイヤーポップアップが選択されたエンティティや関係性から始めて同じグラフから追加の接続コンテキストをクエリする方法です。
学べること
- カスタムポップアップからArcGIS ArcadeでArcGIS Knowledge Graphsをクエリする方法。
- 共有ID、属性、またはジオメトリを使ってフィーチャーレイヤーポップアップとグラフエンティティを一致させる方法。
- $graphを使ってKnowledge Graphレイヤーやリンクチャートから同じグラフをクエリする方法。
- グラフクエリ結果をポップアップのテキスト、表、リンク、または要約としてフォーマットする方法。
- Arcade式からKnowledge StudioのURLを生成する方法。
Arcadeグラフポップアップを使うタイミング
マップレイヤーが運用上のフィーチャーを示しながらも関連コンテキストがArcGIS Knowledge Graphに存在するときにこのパターンを使います。一般的な例としては、選択したフィーチャーに関連するサプライヤー、資産、施設、区画、お客様、ドキュメントなど他の接続されたエンティティを見つける場合です。
- 選択したポリゴン、ルート、施設、またはインシデント領域から空間グラフクエリを実行します。
- 上流および下流の関係性を要約します。
- それら関連する上流または下流のエンティティからプロパティ(合計、平均など)を要約します。
- 選択または関連エンティティをArcGIS Knowledge Studioで開きます。
- URLパラメータを使って選択または関連エンティティについてArcGIS Knowledge Studioで追加質問します。
- グラフ由来の属性をフィーチャーレイヤーに重複して追加せずに既存のマップやアプリを強化します。
前提条件
- Webマップ/リンクチャートポップアップでArcade knowledge graph機能を使うにはArcGIS Enterprise 11.3以降が必要です。
- ArcGIS Pro 3.3以降、ArcGIS AllSource、Map Viewer、ArcGIS Knowledge Studioまたは他の対応マップ・リンクチャート環境が必要です。
- ArcGIS Knowledge Graphへのアクセス権限が必要です。
- クエリ入力として使用できる共有識別子、選択ジオメトリまたはKnowledge Graphレイヤーのエンティティが必要です。
- フィーチャーレイヤー、Knowledge Graph、およびKnowledge Studioプロジェクトへの適切なアクセス権限が必要です。
- ArcGIS Enterprise 12.1ではポップアップからKnowledge Studio内の保存済みクエリ、新しいリンクチャート、およびその他高度なワークフローへの動的URLが利用可能になります。
標準的なワークフロー
- KnowledgeGraphByPortalItem() または $graph を使ってナレッジグラフを特定します。
- 選択されたフィーチャー、エンティティ、関係性、属性またはジオメトリを取得します。
- querygraph() を使って接続されたエンティティや関係性、空間的な一致情報を取得します。
- クエリ結果を読みやすいポップアップ内容としてフォーマットします。
- ArcGISがポップアップでレンダリングする辞書型データとして返します。
完全な例:最初から最後までのArcadeスクリプト
例をご紹介しましょう。ハリケーン予測コーンが主要サプライヤー施設の地図上に重ねて表示されているフィーチャーレイヤーがあるとします。また別途管理しているサプライヤーとそのサプライヤー先について詳細情報がArcGIS内の別個のナレッジグラフにあります。この状態で気象関連フィーチャーをクリックすると、そのナレッジグラフに対して即座に空間クエリが実行されます。その結果、その影響範囲内にあるすべての一次サプライヤーだけでなく、その上流サプライヤーやハリケーン準備として事前配置(早期出荷)が必要な部品も特定できます。
カスタムポップアップでは複数クエリも同時実行可能です。同じポップアップで下流製品全体の要約や主要顧客、それら製品が今後30日間で受ける可能性のある収益影響も表示できます(もしそのサプライヤー施設がハリケーンで被害を受けた場合)。
以下の例示的なArcadeスクリプトは マップ 内で独立した Feature Service と並んで空間Knowledge Graphレイヤーと共存している場合やマップ内にグラフ自体が存在しない場合にも参照用として使えます! Arcade式内のグラフクエリは選択された気象フィーチャー内に位置するサプライヤー群を返します。
以下スクリプトはいくつか便利なパターンも示しています:
- Arcadeジオメトリ関数 - generalize - を使い選択されたポリゴン形状を単純化し空間openCypherクエリ性能向上させています。
- Knowledge Studio URL生成例も示し、選択されたフィーチャーや一致した“ツイン”エンティティをKnowledge Studioで開くことができます。また他関連エンティティ探索用URLも生成可能です。
例コード:独立したKnowledge Graphサービスへのグラフクエリ付き完全なArcadeスクリプト例
// Knowledge Graphサービス(pid)のポータルアイテムIDとサーバーポータルURL(変更してください)
var pid = "d03d80ca35c94cadb963f845acbd0de1";
var portal_url = "https://[YOUR_ORG_PORTAL_URL].com/portal/";
var kg = KnowledgeGraphByPortalItem(Portal(portal_url), pid);
// パフォーマンス向上のためポリゴン単純化にはGeneralize関数使用中
var gen = Generalize($feature, 5000, true, 'meters');
var results = querygraph(kg, "MATCH (s:Supplier) WHERE esri.graph.ST_Contains($feature_geom, s.shape) RETURN s.Name, s.globalid", {'feature_geom': gen});
var final_str = "";
var cnt = 0;
for (var r in results) {
var name = results[r][0];
var g_id = StandardizeGuid(results[r][1],'digits-hyphen');
var studio_url = '<a href=' + server_url + '/apps/knowledge-studio/main?id=' + pid + '&selectedContentId=dataExplorer&selectedContentElement=%7B' + g_id + '%7D&selectedContentInstruction=entity>';
final_str += studio_url + " " + name + "</a><br>";
}
return { type: 'text', text: final_str };
Arcadeグラフポップアップの仕組み
詳細な手順説明
ArcGIS Enterprise 11.3およびArcGIS Pro 3.3以降では、 Arcade式 によってマップやリンクチャート内のカスタムポップアップからArcGIS Knowledge Graphsへクエリできます。このポップアップはArcGIS Pro、ArcGIS AllSource、ArcGIS Knowledge Studio、Map Viewer、およびWebマップアプリケーション内でフィーチャーレイヤーまたはナレッジグラフレイヤー向けに設定可能です。
ポップアップはArcadeグラフ関数で選択されたフィーチャー・エンティティ・関係性情報をグラフクエリへ送信し、その結果として接続されたエンティティ・関係詳細・計算済み要約・空間的マッチ・フォーマット済み出力などが直接表示されます。
Step 2 — Identify the Feature, Entity or Geometry You Want to Query
Next, decide what the pop-up will pass into the graph query: a feature attribute, the selected feature’s geometry, or the selected graph entity or relationship.
For feature-layer pop-ups, this usually means:
- Choosing a shared identifier, such as a GUID, asset ID, facility ID, parcel ID, or other unique attribute.
- Using that value to find the corresponding entity or connected context in the knowledge graph.
Query Patterns | Description | Example Use Cases |
|---|
Match by a Unique ID | Match a selected feature to a graph entity using a shared ID such as a GUID, asset ID, facility ID, or parcel ID. | · Fetch connected entities and properties · Aggregate statistics about groups of connected entities · Aggregate statistics about properties of those connected entities · Find employees matching open roles, proximity, and skill criteria. |
Match by Intersecting Shape | 選択したフィーチャのジオメトリを空間グラフクエリの入力として使用し、その形状と交差、包含、または関連するエンティティを返します。 | · 選択したポリゴン内のサプライヤーの下流サプライヤーを見つける。 · 接続されたエンティティやリレーションシップのプロパティから統計を集計する。 |
例コード:選択した入力を取得する
// 選択したフィーチャからの属性ベースの入力
var selectedId = $feature.[SHARED_ID_FIELD];
var params = { id: selectedId };
// 選択したエンティティからのグラフレイヤー入力
var selectedGuid = $feature.globalid;
グラフレイヤーのポップアップでは、選択されたエンティティがすでに開始点なので、通常はそのエンティティのGUIDを直接使用できます。
グラフクエリは、上記のサプライチェーン例のように、選択したフィーチャのジオメトリを使って結果を空間的にフィルタリングすることもできます。
// 選択したフィーチャからのジオメトリベースの入力
var selectedGeom = Generalize($feature, 5000, true, 'meters');
var spatialParams = { feature_geom: selectedGeom };
querygraph (kg, "MATCH (s:Supplier) WHERE esri.graph.ST_Contains($feature_geom, s.shape) RETURN s.Name, s.globalid", {'feature_geom': $feature}
このステップは、ユーザーが選択したフィーチャ、エンティティ、リレーションシップ、またはジオメトリにクエリを固定します。
ステップ3 — グラフクエリロジックを書く
ポップアップが返すべきインサイトを定義します。一般的なクエリ操作には以下があります:
- サプライヤー、資産、施設、人、ドキュメントなど隣接するエンティティを取得する。
- 上流サプライヤーや下流顧客など、多段階のリレーションシップをたどる。
- ステータス、期間、カテゴリ、リレーションシップタイプ、空間的関連性でフィルタリングする。
- カウント、合計、ランキング、リスクスコア、カテゴリリストなどの集計を計算する。
- 複数のグラフクエリを1つのポップアップ応答にまとめる。
目的は接続されたグラフデータをユーザーが一目で理解できる簡潔な答えに変えることです。
例コード:リレーションシップと空間グラフクエリを実行する
var results = querygraph(
kg,
"MATCH (start:EntityType {globalid: $id})-[:RELATIONSHIP_TYPE]->(related:EntityType) RETURN related.Name, related.globalid LIMIT 10",
{ id: selectedGuid }
);
var spatialResults = querygraph(
kg,
"MATCH (e:EntityType) WHERE esri.graph.ST_Contains($feature_geom, e.shape) RETURN e.Name, e.globalid",
{ feature_geom: selectedGeom }
);
ステップ4 — ポップアップ用に結果をフォーマットする
クエリが結果を返した後、それらをポップアップ用にフォーマットします。ほとんどの式は:
- 名前付きセクションやフォーマット済み出力で辞書を作成します。
- 結果をテキスト、リスト、小さな表、リンクとしてフォーマットします。
- ArcGISポップアップエンジンがレンダリングできる構造化されたオブジェクト1つを返します。
ここで生のグラフ結果が選択されたマップフィーチャ、エンティティ、またはリンクチャート要素に対して読みやすいコンテキストになります。
例コード:表示用にグラフ結果をフォーマットする
var finalText = "";
for (var r in results) {
var name = results[r][0];
var guid = results[r][1];
finalText += "<b>" + name + "</b><br>";
}
if (IsEmpty(finalText)) {
finalText = "関連するグラフ結果が見つかりませんでした。";
}
ステップ5 — 最終辞書を返す
最後に辞書を返します。ArcGISは返されたオブジェクトを読み取り、ポップアップ内でフォーマット済みテキスト、セクション、表、リンクまたはコントロールをレンダリングします。
例コード:ポップアップコンテンツを返す
return {
type: 'text',
text: finalText
};
ArcGIS Knowledge Graph クエリ結果をポップアップでフォーマットする方法
Arcade式はグラフクエリ結果をいくつかのポップアップ向け形式でフォーマットできます。一般的なパターンには以下があります:
- パターンに一致する関連エンティティの展開可能なリストや表でセクションを生成する。
- クエリで作成された結果エンティティと統計の表を生成する。
- 'Knowledge Studio'ウェブアプリ内でエンティティ(11.4以降)や保存済みクエリ(12.0以降)への動的リンクを生成するには 'URL Parameters' を使用します。 .
'例はこちら: 'Arcade_Graph_Pop-ups.mp4'
'完全な例:最初から最後までのArcadeスクリプト'
'単純な例(上記繰り返し)では、Arcade式内のグラフクエリが選択された気象フィーチャ内のポリゴンに位置するサプライヤーを返します。このスクリプトはまたArcadeジオメトリ関数 - 'generalize' を使い、選択ポリゴン形状を単純化して空間openCypherクエリのパフォーマンス向上に役立てています。' 'generalize' ' - 選択したポリゴン形状を単純化して空間openCypherクエリのパフォーマンス向上に役立てています。'
'// Knowledge Graphサービス(pid)のポータルアイテムIDとサーバーポータルURL(これらは変更してください)'
'var pid = "d03d80ca35c94cadb963f845acbd0de1"'
'var portal_url = " https://[YOUR_ORG_PORTAL_URL].com/portal/"'
'var kg = KnowledgeGraphByPortalItem(Portal(portal_url), pid)'
' '
'// パフォーマンス向上のためポリゴン形状単純化にGeneralize関数使用'
'var gen = Generalize($feature, 5000, true, 'meters')'
' '
'var results = querygraph(kg, "MATCH (s:Supplier) WHERE esri.graph.ST_Contains($feature_geom, s.shape) RETURN s.Name, s.globalid", {'feature_geom': gen});'
' '
'var final_str = "";'
'var cnt = 0'
' '
'for (var r in results) {'
' var name = results[r][0]'
' var g_id = StandardizeGuid(results[r][1],'digits-hyphen')'
' var studio_url = '<a href = ' + server_url + '/apps/knowledge-studio/main?id=' + pid + '&selectedContentId=dataExplorer&selectedContentElement=%7B' + g_id + '%7D&selectedContentInstruction=entity>';'
' final_str = final_str + studio_url + " " + name + "</a><br>";'
' }'
'return {'
' type : 'text','
text : final_str
}
This is an example of a query you could use in a Map with an independent Feature Service there for reference alongside a spatial Knowledge Graph layer, or the graph could not be present in the map at all!
I plan follow this blog with some additional full sample queries, along with AI prompts to help you leverage LLMs to help you build your own Arcade + Graph queries. You can also go deeper by reviewing the Arcade Knowledge Graph function documentation.