Arcade を使用してレイヤースタイルの設定
Arcade 式を作成し、その式を使用して、マップ内のレイヤーをスタイル設定します。 この Arcade 式では、1 人当たりの年間電力消費量を算出します。 まず、各国の年間電力消費量を計算し、算出された値をその国の総人口で除算します。 世界各国の多様な人口を考慮すると、この計算は、電力消費量の有意義な比較を行う上で非常に重要です。 次に、算出された 1 人当たりの年間電力消費量の値を使用して、World Countries レイヤーをスタイル設定します。
最初に、このレイヤーをマップに追加し、別のベースマップを選択します。
レイヤーの追加とベースマップの変更
Map Viewer で新しいマップを作成します。 次に、[Global Power Plants] および [World Countries Electricity Consumption] という 2 つのレイヤーを新しいマップに追加し、ベースマップを変更します。
注意:
Map Viewer は、ArcGIS Online 向けの次世代のマップ作成ツールです。 このツールは、主要なマップ作成ワークフローの拡張機能を提供し、実験と創造力に刺激を与えることを目指しています。
- 「ArcGIS の組織アカウント」にサイン インします。
注意:
組織アカウントがない場合は、ソフトウェア アクセスのオプションをご参照ください。
- リボンの [マップ] をクリックします。
注意:
組織とユーザーの設定によっては、Map Viewer Classic が開いている場合があります。ArcGIS Online には、マップの表示、使用、作成のための 2 つの Map Viewer があります。 利用可能で使用する Map Viewer の詳細については、こちらの「FAQ」をご参照ください。
このチュートリアルでは Map Viewer を使用します。
- 必要に応じて、ポップアップ ウィンドウで [Map Viewer で開く] をクリックします。または、リボンで [Map Viewer で開く] をクリックします。
Map Viewer を開きます。
ここでは、最初のレイヤー [Global Power Plants] をマップに追加します。
- [レイヤー] ウィンドウの [追加] をクリックします。
- [マイ コンテンツ] をクリックし、[ArcGIS Online] を選択します。
- 検索バーに「global power plants owner:Learn_ArcGIS」と入力します。
[Global Power Plants] レイヤーが検索結果に表示されます。
- [Global Power Plants] の検索結果で [追加] ボタンをクリックします。
レイヤーがマップ上に表示されます。
このレイヤーは世界中の発電所の包括的な一覧であり、電力の種類でシンボル表示されています。 ここでは、このワークフローで使用する 2 つ目のレイヤーを追加します。
- 検索バーに「electricity consumption owner:Learn_ArcGIS」をコピーして貼り付けます。
- [World Countries Electricity Consumption] の検索結果で [追加] をクリックします。
レイヤーがマップ上に表示されます。
このレイヤーには、世界各国の人口と電力消費量に関する情報が含まれています。
このレイヤーは [Global Power Plants] レイヤーの上に描画され、一部が覆っているため、レイヤーの順序を変更します。
- [レイヤーの追加] ウィンドウで、[戻る] ボタンをクリックして [レイヤー] ウィンドウに戻ります。
- [レイヤー] ウィンドウで、[World Countries Electricity Consumption] レイヤーを [Global Power Plants] レイヤーの下までドラッグします。
これで、発電所のレイヤーが世界各国のレイヤーの上に表示されます。
世界の一部の国では、多数の発電所が互いに近接して配置されています。 発電所の分布をさらに見やすくするために、レイヤーに対してクラスタリングを有効にします。
- [レイヤー] ウィンドウで、[Global Power Plants] レイヤーをクリックして選択します。
- [設定] (明るい背景の) ツールバーの [集約] をクリックします。
- [集約] ウィンドウで [集約の有効化] をオンにします。
[クラスタリング] はデフォルトで有効化されています。
- [クラスタリング] で [オプション] をクリックします。
[クラスタリング] ウィンドウが表示されます。
- [クラスタリング] ウィンドウの [クラスターの半径] で、スライダーをドラッグして [低] に近づけます。 [サイズ範囲] で、右のスライダーを左にドラッグします。
これで、発電所のレイヤーにクラスターがシンボル表示されます。 拡大表示/縮小表示すると、現在の縮尺に合わせてクラスターが再構成されます。 クラスターごとに、そのクラスターで表された発電所の数のラベルが表示されます。
ここでは、別のベースマップを選択して、発電所フィーチャがマップ上でもっと目立つようにします。 このレイヤー内のポイントは明るいシンボルで表されているので、暗いベースマップまたは無彩色のベースマップに配置して、コントラストをつけることができます。
- 戻るをクリックし、[集約] ウィンドウを閉じます。
- [コンテンツ] (暗い背景の) ツールバーにある [ベースマップ] をクリックします。 [ベースマップ] ウィンドウで、[キャンバス (ダーク グレー)] を選択します。
ベースマップがマップ上で更新されます。
- [ベースマップ] ウィンドウを閉じます。
ここでは、マップの表示スペースをさらに確保するために、[コンテンツ] ツールバーを折りたたみます。
- [コンテンツ] ツールバーの下部にある [折りたたみ] をクリックします。
次に、マップを保存します。
- 折りたたまれた [コンテンツ] ツールバーで、[保存して開く] をクリックして [名前を付けて保存] を選択します。
- [マップの保存] ウィンドウで、次の情報を入力します。
- [タイトル] に「Global Power Generation and Consumption」と入力し、その後に自分のイニシャルを入力します。
- [タグ] に「electricity consumption」および「power plants」と入力し、タグを入力するたびに Enter キーを押します。
- [サマリー] に「This map shows power plants around the world, categorized by electricity type.」と入力します。
- [保存] をクリックします。
データおよび Arcade 式エディターの操作
次に、Arcade 式エディターを操作して、[World Countries Electricity Consumption] レイヤーのスタイル設定に使用します。 この目的は、各国の年間電力消費量を簡単に比較できるようにすることです。 このためには、年間電力消費量 (キロワット時単位) を総人口で除算して求められた 1 人当たりの年間電力消費量を返す Arcade 式を構築します。 これにより、多様な人口を考慮して、各国の電力消費量の有意義な比較を行うことができるようになります。
注意:
この種の計算は正規化と呼ばれています。国ごとに、電力消費量を総人口別に正規化します。
Arcade 式の構築を開始する前に、レイヤーの属性テーブルを確認します。
- [コンテンツ] ツールバーにある [レイヤー] ボタンをクリックします。
- [レイヤー] ウィンドウの [World Countries Electricity Consumption] レイヤーで、[オプション] ボタンをクリックしてから [テーブルの表示] をクリックします。
属性テーブルが表示されます。
注意:
画面上のスペースをさらに確保するために、[プロパティ] ウィンドウを閉じてもかまいません。
このテーブルは、国名のリストを含む [COUNTRY] フィールド、キロワット時 (kWh) 単位の値を含む [Annual Electricity Consumption] フィールド、各国の総人口を含む [Pop] フィールドで構成されています。 これらの属性は、Arcade 式で使用します。
注意:
キロワット時は、経時的に消費される電力量の一般的な計測単位です。 毎月の電気料金を詳しく確認すると、月々の使用量がキロワット時で示されていることがあります。
これで、Arcade について十分に理解できるようになります。 これは、ArcGIS で使用するために作成された簡易かつ安全な式言語です。 他の式言語と同様に、数学演算を実行し、テキストを操作し、論理ステートメントを評価することができます。 Arcade は、主に ArcGIS でのカスタム ビジュアライゼーションの作成とリアルタイムのラベリングを目的として設計されています。 これにより、ユーザーは ArcGIS Pro、ArcGIS Runtime、ArcGIS Online、ArcGIS Enterprise、および ArcGIS API for JavaScript でカスタム式を作成、共有、実行して、既存のデータを操作したり、新たな見識を得たりすることができます。
Map Viewer では、Arcade は、ポップアップやラベルのデータを操作する場合とレイヤーをスタイル設定する場合に有用です。 Arcade 式エディターを使用すると、Arcade 式を構築して適用することができます。 ここでは、式エディターを開いて操作します。 [World Countries Electricity Consumption] レイヤーのスタイル設定が目的であるため、このレイヤーの [スタイル] ウィンドウから式エディターを開きます。
- [レイヤー] ウィンドウで [World Countries Electricity Consumption] レイヤーが選択されていることを確認し、[設定] ツールバーの [スタイル] をクリックします。
- [スタイル] ウィンドウの [属性の選択] で [式] をクリックします。
Arcade 式の編集ウィンドウが開きます。
- 展開アイコンをクリックし、サイド タブを表示します。
編集ウィンドウのそれぞれのセクションを確認します。 式を構築する場所は式ウィンドウです。 [プロファイル変数] タブおよび [関数] タブには、式で使用するエレメントがあります。 [ヘルプ] タブに Arcade のヘルプ ページが開きます。
- [プロファイル変数] タブを確認します。
このタブには、レイヤー フィーチャの属性フィールドやジオメトリなど、あらかじめ定義された変数が一覧表示されています。
- [関数] タブをクリックします。
このタブには、すべての Arcade 関数が一覧表示されています。 各関数の右にある情報ボタンをクリックして、その関数のパラメーター、構文、および使用方法に関する統合ヘルプにアクセスすることができます。
- [ヘルプ] タブをクリックします。
このタブは、Arcade ドキュメントにリンクしています。
- [実行] ボタンをクリックします。
[出力] タブ、[コンソール] タブ、[ログ] タブが [null] という結果とともに表示されます。 式を作成したら、[実行] ボタンを使用して、式の出力をテストすることができます。 この時点では、Arcade コードをまだ作成していないので、[出力] タブと [ログ] タブにはあまり多くのデータが含まれていません。
1 人当たりの電力消費量の Arcade 式を作成
ここでは、Arcade 式を構築して、[World Countries Electricity Consumption] レイヤーをスタイル設定します。 まず、[Annual Electricity Consumption (KwH)] 属性フィールドにアクセスする変数を定義します。
- 式ウィンドウの 行 1 に「var annualConsumptionKwh =」と入力します (またはコピーして貼り付けます)。
[AnnualConsumptionKwh] は新しい変数の名前です。 var <variableName> を使用すると、後から式で利用できるようにメモリ内の変数が初期化されます。 次のステップで変数の値を指定します。
- [プロファイル変数] タブをクリックします。 [プロファイル変数] ウィンドウで、[$feature] の横の矢印をクリックします。
- [値] で [$feature.Annual_Electricity_Consumption_] 変数をクリックします。
この文字列が式ウィンドウにコピーされ、最初のコード行が完成します。
注意:
[Annual_Electricity_Consumption_] は属性名ですが、[Annual Electricity Consumption] は、この属性をもっとわかりやすく言い表したエイリアスです。
- 式ウィンドウで、Enter キーを押して、式の次の行を開始します。
これ以降に annualConsumptionKwh 変数を参照すると、このレイヤー内の各フィーチャ (この場合は世界各国) の [Annual Electricity Consumption (KwH)] 属性の値にアクセスします。
ここでは、式の最初の行をテストします。 変数をテストする簡単な方法は、その変数の値を返すように Arcade に指示することです。 この操作を実行するには、return ステートメントを使用します。
- [式] ウィンドウで「return annualConsumptionKwh」と入力して Enter キーを押します。
- [実行] ボタンをクリックします。
[出力] タブで、値 [157200000] が表示され、データ タイプは [数値] になります。
注意:
式のテストを簡単に実行できるようにするには、Arcade 式エディターでレイヤーの最初のフィーチャ (オブジェクト ID の順) を使用して、属性にサンプル値を入力します。 [World Countries Electricity Consumption] レイヤーの最初のフィーチャは米国領サモアであり、年間電力消費量は 157,200,000 kWh、人口は 46,366 人です。
実際に、この式から返される結果は、米国領サモアの年間電力消費量の値 (157,200,000 kWh) です。 この値は予想どおりの値であるため、コードは正常に機能しています。
次に、人口フィールドにアクセスする変数を定義します。
- 式ウィンドウで、最初のコード行の末尾に移動し、Enter キーを押して、新しい行を追加します。 「var population =」と入力します。
- 必要に応じ、[プロファイル変数] タブで [$feature] タブの横にある矢印をクリックします。 [値] の下で [$feature.POP] を選択し、人口属性値を式に追加します。
ここでは、return ステートメントを使用して、新しい変数をテストします。
- return 行で、annualConsumptionKwh を population に置換します。
注意:
前の属性にはアンダースコアが含まれていたため、["field"] 表記が使用されました。 POP フィールドにはアンダースコアが含まれていないので、より単純な表記が Arcade で使用されます。 [プロファイル変数] タブを使用して属性を追加する利点は、入力する代わりに、正確な形式が選択される点です。 また、スペルミスを防止することもできます。
- [実行] をクリックします。
[出力] は [46366] になります。この値は、米国領サモアの実際の人口値です。 コードは引き続き正常に動作します。
次のステップでは、1 人当たりの電力消費量を算出します。 このためには、2 つの変数に格納されている値を使用し、年間電力消費量を人口で除算します。 この結果を consumptionPerCapita という 3 つ目の変数に格納します。
- 式ウィンドウで、Enter キーを押して、return population 行の前に新しい行を追加します。 「var consumptionPerCapita = annualConsumptionKwh / population」と入力します。
- return 行で、population を consumptionPerCapita に置換します。
- [実行] をクリックします。
[出力] は [3390.415390587931] になります。この値は 157,200,000 を 46,366 で除算して求められた実際の計算結果です。
さらに多くのケースをテストするには、変数 population をリテラルの数値とともに再割り当てできます。
- 式ウィンドウで、Enter キーを押して、var population = $feature.POP 行の後に新しい行を追加します。 「population = 40000」と入力します。
- [実行] をクリックします。
結果が [3930] に更新されます。この値は 157,200,000 を 40,000 で除算して求められた計算結果です。
- 同様に、年間電力消費量フィールドと人口フィールドに別の値を指定して、式をテストすることができます。
- コードの「population = 40000」行を削除します。
注意:
return ステートメントの使用目的はテストだけではありません。つまり、式の最終結果をマップ内で使用できるようにします。 たとえば、式から最終結果が返されたら、その結果を使用して、世界各国のレイヤーをスタイル設定することができます。
最終的な式を次に示します。
// Set variables var annualConsumptionKwh = $feature["Annual_Electricity_Consumption_"] var population = $feature.POP // Calculate the electricity consumption per capita var consumptionPerCapita = annualConsumptionKwh / population // Return the consumption per capita return consumptionPerCapita
コードをわかりやすくするために、コメントが追加されています。
注意:
コードをわかりやすくして、今後の保守を簡単にするために、行の先頭に // を指定してコメントを追加することをお勧めします。 コメントは Arcade で無視されるので、そのコードを参照するユーザーだけを対象として記述します。
ここでは、式の名前を指定します。 式の名前は通常、レイヤー内の新しいフィールドの名前のような役割を果たすので、意味のある名前を付けることが重要となります。 この名前はマップの凡例で使用され、式を参照する場合や式を編集する必要がある場合に後から式を特定するのに役立ちます。
- [新しい式] の横にある [編集] ボタンをクリックします。
注意:
式を直接クリックして、タイトルを編集することもできます。
- [新しい式] テキスト ボックスに「Electricity consumption per capita (kWh)」と入力して、テキスト ボックスの外側をクリックします。
- [完了] をクリックします。
Arcade 式の編集ウィンドウが閉じ、新しい式が属性リストに追加され、[World Countries Electricity Consumption] レイヤーのスタイル設定に使用できるようになります。
- [コンテンツ] ツールバーで [保存して開く] をクリックして [保存] を選択します。
マップを保存すると、作成した式など、マップで行った作業がすべて保存されます。
レイヤーのスタイルの設定
これで、作成した Arcade 式を使用して、[World Countries Electricity Consumption] レイヤーをスタイル設定できる状態になりました。
- [スタイル] ウィンドウで、現在の設定を確認します。
[スタイル] ウィンドウで、新しい式 [Electricity consumption per capita (kWh)] が、[World Countries Electricity Consumption] レイヤーをシンボル表示するために自動的に適用されています。 デフォルトは、[数と量 (色)] という描画スタイルで、これがレイヤーの最終的なスタイル設定方法になります。 ここでは、スタイル設定を [数と量 (サイズ)] に変更して違いを見ていきます。
- [スタイルの選択] で [数と量 (サイズ)] をクリックします。
レイヤーが見えづらいため、[Global Power Plants] レイヤーを一時的にオフにします。
- [レイヤー] ウィンドウで、[Global Power Plants] の表示設定ボタンをクリックして、このレイヤーをオフにします。
各国の 1 人当たりの電力消費量は、サイズの異なるドットで表されます。
注意:
合計電力消費量フィールドと総人口フィールドの値は国によって異なるため、Arcade 式が同じであっても、1 人当たりの電力消費量の結果は国ごとに異なります。 この場合に、Arcade はより効果を発揮します。つまり、特定のフィーチャのフィールド値を確認して、リアルタイムでフィーチャごとに新しい値を返すことができます。 ここに示された Arcade の別の機能では、新しく取得した情報を生成する際に元のデータ レイヤーを所有していなくてもかまいません。
世界各国のレイヤーと発電所のレイヤーの組み合わせをもっと見やすくするには、別のシンボルを使用します。
- [スタイル] ウィンドウで、[数と量 (色)] 描画スタイルを選択します。
[数と量] スタイルでは、暗い背景に適した直感的な色覚多様性対応のカラー ランプが自動的に選択されます。 1 人当たりの電力消費量が少ない国は暗い青色で表示され、1 人当たりの電力消費量が多い国は明るい青緑色で表示されます。
注意:
マップの背景が暗い場合、最小値は暗い色で表示され、最大値は薄い色または明るい色で表示されます。 これによって、最大数を目立たせることができます。
- [完了] をクリックして [スタイル] ウィンドウを閉じます。
- [レイヤー] ウィンドウで、[Global Power Plants] レイヤーをもう一度オンにします。
これで、新しいスタイル設定を使用して、両方のレイヤーを同時に視覚化できるようになりました。
世界各国のレイヤーの情報ポップアップを無効にして、ユーザーが発電所フィーチャを簡単に選択できるようにします。
- [レイヤー] ウィンドウで [World Countries Electricity Consumption] レイヤーが選択されていることを確認し、[設定] ツールバーの [ポップアップ] をクリックします。
- [ポップアップ] ウィンドウで [ポップアップの有効化] をオフにして、[ポップアップ] ウィンドウを閉じます。
- マップを保存します。
これで、マップが視覚的で直感的なスタイルになり、世界各国の 1 人当たりの電力消費量と発電量のパターンが表示されます。
- マップのコンテンツを確認します。
自分の国とそれ以外の国を見比べることができます。 西ヨーロッパおよび北米の高度工業国と発電能力のある主要な沿岸諸国で 1 人当たりの電力消費量が高くなっています。 当然のことながら、1 人当たりの電力消費量が高い国ほど、発電所の数が多いことがわかります。 発展途上国では、発電所の数が少なく、1 人当たりの電力消費量も低くなっています。
マップを作成し、クラスターのシンボル化を使用して発電所を視覚化しました。 次に、Arcade 式を使用して、世界各国の 1 人当たりの年間電力消費量を視覚化しました。
Arcade を使用してポップアップを構成
すでに Arcade についての理解を深め、Arcade 式を使用して世界各国のレイヤーをシンボル表示しました。 次に、Arcade 式を使用して、発電所レイヤーから取得したデータを情報ポップアップに表示します。 これにより、発電所の発電量を十分に把握できるようになります。
Global Power Plants 属性およびポップアップの操作
まず、[Global Power Plants] 属性を操作し、そのレイヤーのポップアップを表示します。
[Global Power Plants] レイヤーには、各発電所の年間推定発電量をギガワット時 (gWh) 単位で示す属性があります。 この属性には [estimated_generation_gwh] という名前が付けられています。 これも有用ではありますが、発電量の値を、発電所が 1 年間に電力を供給できる 60 ワットの電球の数など、一般的にわかりやすく表現してもかまいません。 Arcade 式を使用してこの変換を行い、新しい値をレイヤーのポップアップのセンテンス内に表示します。 一部の発電所で [estimated_generation_gwh] 属性の値が欠落しているため、これらの欠損値を Arcade 式で処理することも必要となります。
まず、発電所レイヤーの属性テーブルを確認します。
- 必要に応じて、ArcGIS Online にサイン インします。 ツールバーの [コンテンツ] をクリックして、モジュール 1 で作成した [Global Power Generation and Consumption] マップを参照します。
- [Global Power Generation and Consumption] Web マップの横にあるオプション メニューをクリックして [Map Viewer で開く] を選択します。
- [レイヤー] ウィンドウの [Global Power Plants] レイヤーで、[オプション] ボタンをクリックしてから [テーブルの表示] を選択します。
- [Global Power Plants] 属性テーブルの各フィールドを確認します。 水平スクロール バーを使用して、すべてのテーブルを表示します。
このレイヤーのいくつかの属性から、次の点に注目してください。
- [country_long] フィールドに、発電所が所在する国の名前が表示されています。
- [name] フィールドに、発電所の名前が表示されています。
- [fuel] フィールドに、発電所の種類が表示されています。
注意:
属性フィールドのエイリアス全体を表示させるために、列幅を広げることが必要な場合があります。
- テーブルの最後の列である [estimated_generation_gwh] までスクロールします。
上記のとおり、このフィールドには、発電所の年間推定発電量がギガワット時 (gWh) 単位で示されています。 ギガワット時はキロワット時の 100 万倍の電力になります。
- [Global Power Plants] 属性テーブルを閉じます。
次に、レイヤーのポップアップを操作します。
- マップ上で、対象地域を拡大表示します。
注意:
[Global Power Plants] レイヤー上でクラスタリングを有効にしているため、クラスターが単一のフィーチャにディゾルブして個々のフィーチャのポップアップが表示されるまで、マップをズームする必要があります。
- マップ上で、[Global Power Plants] フィーチャを選択して、レイヤーの元のポップアップを表示します。
このポップアップには、発電所の種類や電力容量といった有効な情報がすでにいくつか表示されていますが、 発電所の年間発電量という追加情報を補足します。
Arcade を使用して発電量の単位を変換
Arcade 式の編集ウィンドウを開き、新しい式を作成します。 目的がポップアップのカスタマイズであるため、[ポップアップ] 構成ウィンドウから式エディターを開きます。
- [レイヤー] ウィンドウで、[Global Power Plants] レイヤーが選択されていることを確認します。
- 必要に応じて、[設定] (明るい背景の) ツールバーの [ポップアップ] をクリックします。 [ポップアップ] ウィンドウで [属性式] をクリックします。
ここでは、新しい Arcade 式を作成します。
- [式の追加] をクリックして、Arcade 式の編集ウィンドウを開きます。
エディター ウィンドウが表示されます。
注意:
[Global Power Plants] レイヤーには、[Pop-up color] という式がすでに用意されています。 この式は、燃料タイプに基づいてシンボル色を生成する場合に使用します。
式に名前を付けます。
- 式のタイトルを「Estimated Annual Generation in Lightbulbs」に編集します。
ここでは、Arcade 条件式の作成を開始します。 はじめに、1 年間に 60 ワットの電球に電力を供給するのに必要なキロワット時単位の発電量を含む yearLightbulbPower 変数を作成します。
60 ワットの白熱電球では、点灯状態の 1 時間ごとに 60 ワット時または .06 キロワット時の電力が消費されます。 1 年間に 60 ワットの電球に電力を供給するのに必要なキロワット時単位の発電量を特定するために、.06 キロワット時に 24 時間を乗算してから 365 日を乗算します。
- 式ウィンドウの最初の行に、「var yearLightbulbPower = 0.06 * 24 * 365」と入力します (またはコピーして貼り付けます)。
次に、return ステートメントを追加して、この変数をテストします。
- Enter キーを押して return yearLightbulbPower を追加します。
次に、コードを実行します。
- [実行] ボタンをクリックします。
[出力] タブで、値が [525.6] になります。 実際、この結果は 0.06 x 24 x 365 で求められた値であるため、このコードは正常に機能しています。
次に、[Global Power Plant] レイヤーの [name] フィールドを使用して、発電所の名前を含む変数を作成します。
- 式ウィンドウで、return ステートメントの前に新しい行を追加して、「var plantName =」と入力します。
- [プロファイル変数] タブで、[$feature] の横の矢印をクリックします。
発電所レイヤーの属性のリストが表示されます。
注意:
[プロファイル変数] タブの表示は、前のモジュールで世界各国のレイヤーのシンボルを構成した場合とは少し異なります。 この理由は、ポップアップでは、[FeatureSets] など、他のプロファイル変数も使用できるためです。
- [値] リストの下で、下方向にスクロールして、[$feature.name] をクリックしてコード行を完成させます。
- return ステートメントで、yearLightbulbPower を plantName に置換して、2 番目の変数をテストします。
- [実行] ボタンをクリックします。
[出力] テーブルで、値が [Kajaki Hydroelectric Power Plant Afghanistan] になります。 これは属性テーブルの先頭に表示されている発電所の名前であり、デフォルトでサンプル データとして割り当てられています。
次のステップでは、年間発電量の属性値を含む annualGenerationGwh 変数を作成します。
- 式ウィンドウで、return ステートメントの前に新しい行を追加して、「var annualGenerationGwh =」と入力します。
- [プロファイル変数] ウィンドウで、[$feature.estimated_generation_gwh] をクリックします。
- return ステートメントで、plantName を annualGenerationGwh に置換して、最新の変数をテストします。
- [実行] ボタンをクリックします。
[出力] タブで値が表示されず、[Null] としてリストされます。 これは予想どおりの結果ではないため、さらに調査します。
この属性の現在のサンプル値が、空であるかどうかを確認します。 変数が空であるかどうかをテストする Arcade 関数は [IsEmpty] です。 指定された値が NULL または空のテキスト (" など) の場合、[IsEmpty] 関数は true を返します。 空の配列やディクショナリを含む、その他すべての場合は false を返します。
- 式ウィンドウの var annualGenerationGwh = $feature["estimated_generation_gwh"] で、$feature["estimated_generation_gwh"] を「IsEmpty($feature["estimated_generation_gwh"])」に置き換えます。
- [実行] をクリックします。
[出力] タブで、値が [ブール値] で表示され、[True] となります。
Kajaki Hydroelectric Power Plant Afghanistan には [estimated_generation_gwh] 属性の値が存在しないことを示しています。 以前のテストで空の結果が生成されたのは、そのせいです。
注意:
Arcade 式を使用して、このようにデータが欠落している特殊なケースを処理する必要があります。 この処理については、このチュートリアルで後から実行します。 ここでは、属性値が存在する正常なケースのコードを完成させます。
Arcade 式の作成を続けるには、10 gwh のサンプル値を手動で設定します。
- 式ウィンドウの var annualGenerationGwh = IsEmpty($feature["estimated_generation_gwh"]) で、IsEmpty 関数と、開き括弧と閉じ括弧を削除します。
式は前の形式に戻ります。
- Enter キーを押し、var annualGenerationGwh = $feature["estimated_generation_gwh"] 行の後に新しい行を追加します。 「annualGenerationGwh = 10」と入力します。
- もう一度 [実行] ボタンをクリックします。
[出力] タブで、値が予想どおり [10] になり、データ タイプが [数値] になります。
次に、Arcade コードで、annualGenerationGwh 変数の値に基づいて、60 ワットの電球での年間発電量を算出します。 最初のステップでは、値をキロワット時 (kWh) からギガワット時 (gWh) に変換し、その結果を新しい変数に挿入します。 gWh 単位で 100 万 kWh が存在するため、annualGenerationGwh 変数に 100 万を乗算して、値を kWh に変換する必要があります。
- return ステートメントの上に新しい行を追加して、「var annualGenerationKwh = annualGenerationGwh * 1000000」と入力します。
- return ステートメントで、annualGenerationGwh を annualGenerationKwh に置換します。
- [実行] をクリックし、式を評価します。
この結果は 10,000,000 になります。これは、サンプル値が 10 であるため、予想どおりの結果です。
このセクションでは、2 番目の Arcade 式の作成を開始しました。 複数の変数を定義し、年間発電量の値を gWh から kWh に変換しました。
Arcade での計算およびテキストの書式設定
ここでは、Arcade 式で主要な計算を実行します。 その後、計算結果を書式設定し、テキストとして表示します。
はじめに、kWh 単位の年間発電量 (annualGenerationKwh) を、1 年間に 60 ワットの電球に電力を供給するのに必要な kWh 単位の発電量 (yearLightbulbPower) で除算して、該当する発電所が 1 年間に電力を供給できる 60 ワットの電球の数を算出します。
注意:
yearLightbulbPower 変数には、0.06 x 24 x 365 の計算結果 (525.6) が示されます。
- return ステートメントの上に新しい行を追加して、「var annualGenInLightbulbs = annualGenerationKwh / yearLightbulbPower」と入力します。
- return ステートメントで、annualGenerationKwh を annualGenInLightbulbs に置換します。
- [実行] をクリックし、式を評価します。
[結果] 値は 19025.87519025875 になります。この値は 10000000 ÷ 525.6 で求められた予想どおりの結果です。 この結果は、約 19,025.87 個の電球を示します。
ただし、電球の数を小数ではなく整数として返した方が理解しやすくなります。 Arcade は、[Round] 関数を使用してこの処理を実行する場合に役立ちます。
- return ステートメントの上に新しい行を追加して、「var annualGenInLightbulbsRounded =」と入力します。
ここでは、[関数] タブで [Round] 関数を検索します。
- [関数] タブをクリックします。 検索テキスト フィールドに「round」と入力します。
[Round] 関数が表示されます。
- [Round] 関数をクリックして式ウィンドウに挿入します。
括弧内に示されたプレースホルダー パラメーターとともに、[Round] 関数が式に追加されます。
アプリ内のヘルプでこの関数に関する情報を確認して、予想されるパラメーターを十分に把握します。
- [関数] タブで、[Round] 関数の横にある矢印をクリックします。
- [Round] 関数に関する情報を確認します。
最初のパラメーターは、丸められる数値です (このケースでは、annualGenInLightbulbs 変数)。 2 番目のパラメーターは、数値を丸める小数点以下の桁数を示します。 デフォルト値 0 をそのまま使用して、19025.87519025875 が 19026 に丸められ、小数点以下の桁数が 0 になるようにします。
- [Round] 関数に関する情報を確認したら、[関数] の横にある矢印をクリックして、アプリ内のヘルプを閉じます。
- 次のように annualGenInLightbulbsRounded 行を変更します。
var annualGenInLightbulbsRounded = Round(annualGenInLightbulbs, 0)
注意:
関数のパラメーターは常に括弧で囲み、カンマで区切る必要があります。
- return ステートメントで、annualGenInLightbulbs を annualGenInLightbulbsRounded に置換します。
- [実行] をクリックし、式を評価します。
結果は予想どおり 19026 になります。 この結果は、19,026 個の電球を示します。
各発電所が 1 年間に電力を供給できる 60 ワットの電球の数を正しく算出しました。 しかし、まだ処理は終了していません。 次に、わかりやすくするために数値を書式設定し、センテンスを作成してコンテキストにその数値を挿入します。
他のプログラミング言語と同じく、Arcade にも、数値をテキストに変化する方法があります。 この関数は [Text] と呼ばれています。 電球の数をテキスト形式で保持する新しい変数を作成します。
- return ステートメントの上に新しい行を追加して、「var annualGenInLightbulbsText =」と入力します。
ここでは、[関数] タブで [Text] 関数を検索します。
- [関数] タブで「text」を検索します。 [Text 関数] リストの下で、[Text] 関数をクリックして式ウィンドウに挿入します。
新しい行が次のように表示されます。
var annualGenInLightbulbsText = Text(value)
アプリ内のヘルプでこの関数に関する情報を確認して、予想されるパラメーターを十分に把握します。
- [関数] タブで、[Text] 関数の横にある矢印をクリックします。
最初のパラメーターは、テキストに変換される数値です (このケースでは、annualGenInLightbulbsRounded 変数)。 2 番目のパラメーターは、目的の形式を表すテンプレートです。 たとえば、デフォルトの '#,###' テンプレートでは、桁区切り記号としてカンマが追加されます。 つまり、9563 と記述された数値は 9,563 になります。
- この情報を確認したら、戻る矢印をクリックし、アプリ内のヘルプを終了します。
- 次のように annualGenInLightbulbsText 行を変更します。
var annualGenInLightbulbsText = Text(annualGenInLightbulbsRounded, '###,###,###,###')
注意:
'###,###,###,###' テンプレートでは、デフォルトの '#,###' よりも多くの区切り文字が追加されます。 100 万以上の値を予想しているため、さらに長いマスクが必要となります。 たとえば、735790325 と記述された数値は 735,790,325 になります。
- return ステートメントで、annualGenInLightbulbsRounded を annualGenInLightbulbsText に置換します。
- [実行] をクリックし、式を評価します。
[出力] は、予想どおり ["19,026"] になり、カンマが挿入されます。 また、タイプは [テキスト] になります。
次のステップでは、テキスト形式の数値が含まれ、その意味を説明する完全なセンテンスを作成します。 この操作を実行するには、テンプレート リテラルを使用します。
注意:
テンプレート リテラルは、Arcade で変数値と式を文字列に挿入する手段です。 テンプレート リテラルはバッククォート (`) で囲み、構文 ${variableName} を使用して、変数、式、または他の文字列以外の値を文字列に挿入します。 テンプレート リテラルの詳細については、「ArcGIS Arcade: 構造およびロジック」ヘルプ トピックをご参照ください。
- [式] ウィンドウで、return ステートメントの前に新しい行を追加し、次の行をコピー/貼り付けします。
var popupSentence = `It's estimated that ${ plantName } generates enough electricity to power ${ annualGenInLightbulbsText } 60-watt incandescent light bulbs for a year.`
注意:
次の行に移動すると複数行の出力が生成されるため、Arcade エディターでテンプレート リテラルを単一の行に配置しておく必要があります。
- return ステートメントの行で、annualGenInLightbulbsText を popupSentence に置換して、最新の変数をテストします。
- [実行] ボタンをクリックします。
[出力] タブで、値がセンテンス全体になります。${plantName} および ${annualGenInLightbulbsText} 変数が現在の値に置換されています。
- 式ウィンドウで、コード「annualGenerationGwh = 10」を削除します。
- [終了] をクリックして式を保存し、Arcade 式の編集ウィンドウを閉じます。
- 折りたたまれた [コンテンツ] ツールバーにある [保存して開く] をクリックし、[保存] をクリックしてマップの変更内容全体を保存します。
このセクションでは、各発電所が 1 年間に電力を供給できる 60 ワットの電球の数を算出しました。また、わかりやすくするためにその数値を書式設定し、センテンスを作成してコンテキストにその数値を挿入しました。
Arcade 式をポップアップに追加
ここでは、保存した Arcade 式をポップアップに追加し、マップ上の [Global Power Plants] レイヤーに対してテストします。
- [属性式] ウィンドウの戻るボタンをクリックします。
- [ポップアップ] ウィンドウで、[テキスト] をクリックし、[テキストの編集] をクリックします。
ポップアップ テキスト エディターが開き、[Global Power Plants] レイヤーのポップアップに現在表示されるテキストが示されます。 Arcade 式の結果を既存のテキストに追加します。
- ポップアップ テキスト エディターで、既存のテキストのすぐ下にある行にカーソルを合わせます。 単一の中括弧 ({) を入力します。
使用可能なフィールドと Arcade 式のリストが表示されます。
- 先ほど作成した式 ([Estimated Annual Generation in Lightbulbs]) を検索して選択します。
注意:
使用可能な他の属性フィールドと同様に、作成した Arcade 式がリストに表示されていることを確認できます。 意味のある名前をすでに設定しているため、この式を簡単に見つけることができます。
- この式は、{expression/expr1} という一意の識別子で追加されます。
- [OK] をクリックします。
ポップアップのプレビューが、構成したカスタム Arcade 式で更新されます。
ここでは、特定の発電所のポップアップをマップ上で開き、Arcade 式がどのように表示されるかを確認します。
- マップの垂直方向のツールバーで、[検索] ボタンをクリックします。
- 検索ボックスに「Kitzingen, Bayern, Germany」と入力して Enter キーを押します。
マップ上でドイツのキッツィンゲンが拡大表示されます。
- [Kitzingen] ラベルの西にある発電所をクリックします。 この発電所は太陽光発電施設であるため、薄緑色でシンボル表示されています。
ポップアップが開き、作成したメッセージが表示されます。 その発電所が 1 年間に電力を供給できる 60 ワットの電球の数 (146,258 個) がセンテンスに示されています。
- ポップアップを閉じます。
Arcade 式を正しく作成し、その式が Global Power Plants レイヤーのポップアップに表示されました。 ただし、発電所の値が estimated_generation_gwh フィールドに存在しない特殊なケースをまだ処理していません。 この処理は次のセクションで実行します。
欠落データの特殊なケースをテスト
ここでは、属性データが欠落しているケースを処理します。 まず、このようなケースでポップアップがどのように表示されるかを確認します。
- [検索] ボタンをクリックします。 検索ボックスに「Antananarivo, Analamanga, Madagascar」と入力して Enter キーを押します。
マップ上でマダガスカルのアンタナナリボが拡大表示されます。
- [Antananarivo] ラベルの北西にある発電所をクリックします。 この発電所は石油火力発電施設であるため、赤色でシンボル表示されています。
ポップアップが開き、作成したメッセージが表示されます。 しかし、前述の 60 ワットの電球の数が 0 になっています。
この記述は誤解を招きます。これは、この発電所の年間推定発電量が 0 gWh であることを意味しているのではなく、年間発電量のデータが存在しないことを意味しています このような場合には、利用可能なデータが存在しないことを明確に伝える別のメッセージを作成することをお勧めします。 Arcade 式に戻って、より正確な動作を実現します。
- ポップアップを閉じます。
- [レイヤー] ウィンドウで、[Global Power Plants] レイヤーが選択されていることを確認します。
- [設定] ツールバーの [ポップアップ] をクリックします。 [ポップアップ] 構成ウィンドウで [属性式] をクリックします。
- [Estimated Annual Generation in Lightbulbs] 式をクリックして、この式をエディター ウィンドウで開きます。
- エディター ウィンドウの [実行] ボタンをクリックして、ポップアップと同じ動作を取得できることを確認します。
[出力] タブで、ポップアップと同じセンテンス (つまり、電球の数が 0 個という誤解を招く内容のセンテンス) が値に含まれています。
注意:
デフォルトでは、Arcade エディターで [Kajaki Hydroelectric Power Plant Afghanistan] レイヤー内の最初の発電所が使用されることを思い出してください。また、この発電所には [estimated_generation_gwh] フィールドの値が存在しないことをすでに確認しました。
欠落データを処理するコードを追加
ここでは、欠落データが存在するケースを適切に処理するコードを式に追加します。
欠落データが存在するケースを適切に処理するには、[estimated_generation_gwh] フィールドの値が空であるかどうかを Arcade 式でテストする必要があります。
- 空の場合は、欠落しているデータに関するメッセージを返します。
- 空でない場合は、60 ワットの電球に関するメッセージの作成に進みます。
[IsEmpty] 関数を再度使用します。 このテストの結果を新しい変数 generationCheck に格納します。 このテストはできるだけ早い段階で実行し、[estimated_generation_gwh] フィールドの値を読み取った直後に新しいコードを追加します。
- [式] ウィンドウで、var annualGenerationGwh で始まる行の後に行を追加します。
- 「var generationCheck =」と入力します。
- [関数] タブをクリックし、[IsEmpty] 関数を検索します。
- [IsEmpty] 関数をクリックしてコード行に追加します。
- [関数] タブで、[IsEmpty] 関数の横にある矢印をクリックして、その動作を確認します。
[IsEmpty] では、単一のパラメーターが考慮されます (このケースでは、[estimated_generation_gwh] フィールドが評価されます)。 値が NULL または空の文字列の場合は、この関数から [true] が返され、それ以外の場合は [false] が返されます。 [IsEmpty] の出力を変数に格納し、その変数を評価して、true か false かを確認します。
- [isEmpty] に関する情報を確認したら、[関数] の横にある戻る矢印をクリックします。
- [式] ウィンドウで、プレースホルダー テキスト value を annualGenerationGwh に置換します。 行全体は次のようになります。
var generationCheck = isEmpty(annualGenerationGwh)
次に、generationCheck 変数の値に基づいて実行する内容を決定するコードを追加します。 この操作を実行するには、if ステートメント (条件ステートメントとも呼ばれています) を使用します。 このステートメントの構文は if (条件が true である) {実行する内容} です。 条件ステートメントの詳細については、「ArcGIS Arcade: 構造およびロジック」をご参照ください。
- var generationCheck で始まる行の後に新しい行を追加します。
- 新しい行に「if (generationCheck) {」と入力します。 Enter キーを押します。 1 行空けて、インデントされていない閉じ括弧「}」を追加します。
注意:
generationCheck 変数には true または false が含まれているため、通常は、Arcade に if(true) または if(false) を問い合わせます。 括弧内の指示が実行されるのは、generationCheck が true の場合に限ります。
ここでは、[estimated_generation_gwh] が空の場合に目的の操作を実行するコードを記述します。 表示するメッセージを括弧内に作成します。 前回と同様に、テンプレート リテラルを使用し、そのテンプレート リテラルを新しい変数に格納します。
- 括弧内に次のテキストを (1 行にすべて) 入力するか、コピーして貼り付けます。
var noGenerationTL = `${ plantName } does not have estimated annual generation data. Unable to return electricity generation in 60w incandescent light bulbs.`
この式では、先にコード内に設定した plantName 変数が使用されます。
最後に、return ステートメントを追加して、そのメッセージを返します。
- 閉じ括弧の上に新しい行を追加して、「return noGenerationTL」と入力します。
- [実行] をクリックして、スクリプトをテストします。
この時点では、メッセージは 0 個の電球に関して誤解を招く内容を通知しません。 その代わりに、Kajaki Hydroelectric Power Plant Afghanistan 発電所に関して欠落データが存在することが通知されます。
注意:
Arcade で return ステートメントを実行する場合は、この実行がコード実行の終わりと見なされるため、このステートメントの後に続く残りのコードがすべて無視される点を認識しておく必要があります。 残りのコードは年間推定発電量のデータを含むフィーチャにしか適用されないので、この動作は予想どおりの動作です。
コンソール ステートメントでさらにテストを実行
ここでは、Arcade 式の編集ウィンドウでの最後の作業として、Arcade 式をテストする別の方法を確認します。 これまでは、スクリプトの出力を表示する場合に、return ステートメントを使用してきました。 一方、コード全体で変数の値を視覚化したい場合もあります。 これらの値を表示するには、対象となる変数の値を [コンソール] タブに記述する console ステートメントを使用します。 たとえば、generationCheck 変数の値を表示することができます。
- [式] ウィンドウで、var generationCheck で始まる行の後に新しい行を追加します。
- 新しい行に「console("generationCheck value:", generationCheck)」と入力します。
最初のパラメーターは、コンソールに記録するオブジェクトの説明を示します。 2 番目のパラメーターはオブジェクト自体です。
- [実行] ボタンをクリックします。
[出力] タブの表示内容は前と同じであり、Arcade 式の最終結果が示されます。
- [コンソール] タブに切り替え、コンソールに記録された変数の値を表示します。
generationCheck 変数に保持されている値は true です。これは、[estimated_generation_gwh] の値が空であるためです。
- [$feature["estimated_generation_gwh"]] の他のサンプル値も試し、値ごとに式をテストして、[出力] タブと [コンソール] タブの表示内容を確認します。 generationCheck の値として true または false を生成する例を含めます。
注意:
console ステートメントを必要な数だけ追加して、Arcade 式の作成とデバッグに使用することができます。 ただし、式が完成したら、これらのステートメントを削除またはコメントアウトすることをお勧めします。
このコード行はテストを目的としたものであったため、ここでコンソール ステートメントをコメント アウトします。
- コンソール ステートメントの先頭で、「//」と入力します。
これで、コンソール ステートメントがコメントになり、コマンドとして実行されなくなります。
次の例は、最後の式がどのように表示されるかを示します。 各ステップを説明するコメントが追加されています。
// Calculate the kilowatt-hours (kWh) required to power a // 60w light bulb for a year var yearLightbulbPower = 0.06 * 24 * 365 // Save the power plant name and annual generation to a variable // for later use var plantName = $feature.name var annualGenerationGwh = $feature["estimated_generation_gwh"] // Check if there is a value in the estimated annual generation // attribute field. isEmpty(fieldOrValue) returns true if empty var generationCheck = isEmpty(annualGenerationGwh) // Write to the generationCheck value to the Message tab for // testing purposes (commented out) // console("generationCheck value:", generationCheck) // If there is not annual generation data, return a sentence for use // in the pop-up that informs the user about this. if (generationCheck) { var noGenerationTL = `${ plantName } does not have estimated annual generation data. Unable to return electricity generation in 60w incandescent light bulbs.` return noGenerationTL } // If the annual generation data is present, continue with the remainder of the script. // Convert the annual generation attribute from // gigawatt-hours to kilowatt-hours var annualGenerationKwh = annualGenerationGwh * 1000000 // Compute the annual electricity generation in light bulbs var annualGenInLightbulbs = annualGenerationKwh / yearLightbulbPower // Round the number var annualGenInLightbulbsRounded = Round(annualGenInLightbulbs, 0) // Format the number to add thousand separators var annualGenInLightbulbsText = Text( annualGenInLightbulbsRounded, '###,###,###,###') // Build the sentence for use in the pop-up // (Create a string using a template literal) var popupSentence = `It's estimated that ${ plantName } generates enough electricity to power ${ annualGenInLightbulbsText } 60-watt incandescent light bulbs for a year.` // Return the value return popupSentence
注意:
欠落データを処理するセンテンスは if ステートメントの中にあるため、必要に応じて、残りの Arcade 式を else {<rest of expression>} に含めることができます。 ただし、else {} を明確に記述しないと、上記のとおり、if ステートメント内の条件に一致しない場合でも、残りの式が引き続き実行されます。
ここでは、Arcade 式エディターを閉じて、マップ上でポップアップをテストします。
- [終了] をクリックして、式を保存し、エディター ウィンドウを閉じます。
これで、Mandroseza のポップアップ プレビューに適切なメッセージが表示されます。
- [ポップアップ式] ウィンドウの戻るボタンをクリックします。 [ポップアップ] ウィンドウを閉じます。
- マップを保存します。
- マップ上の複数の発電所をクリックして、Arcade 式が正常に動作していることを確認します。
注意:
前回と同じ 2 か所 (「Kitzingen, Bayern, Germany」および「Antananarivo, Analamanga, Madagascar」) を検索できます。 新しい場所を試してみてもかまいません。
1 年間に 60 ワットの電球に電力を供給するのに必要な発電量と各発電所が 1 年間に電力を供給できる 60 ワットの電球の数を算出しました。 値を整数に丸めて、桁区切り記号を追加しました。 ポップアップに返すことができる 2 つの異なるセンテンス (発電所の年間発電量データが存在するシナリオ用のセンテンスとデータが存在する場合の別のセンテンス) を作成しました。 if ステートメントを使用して、マップ上の発電所フィーチャに適切なセンテンスが表示されることを確認しました。
このチュートリアルでは、Arcade 式エディターについて十分に理解しました。 Arcade を使用して、1 人当たりの電力消費量別に世界各国をシンボル表示しました。 Arcade を使用して、各発電所が 1 年間に電力を供給できる 60 ワットの電球の数を算出し、その結果をポップアップに表示しました。 元のデータに影響を与えることなく、すべての Arcade コードをリアルタイムで実行しました。
このチュートリアルでは、Arcade を使用して実行できる操作の一部しか取り上げていません。 Arcade でのラベル式やフィールド演算の詳細については、「Arcade FeatureSets と Living Atlas でポップアップを拡張」および「Bring Colors From Your Map Into Your Pop-up Using Arcade」をご参照ください。
他のチュートリアルについては、チュートリアル ギャラリーをご覧ください。