シンボルのカスタム式の設定

Arcade スクリプト言語で、データ内の 1 つ以上のフィールドを使用して式を記述し、フィーチャ シンボルの表示設定を変更または指定できます。

式には、1 行のコードでも複数行のコードでも指定できます。 式は [式の設定] ダイアログ ボックスで作成、またはインポートして変更できます。 フィーチャの属性が変更された場合、[シンボル] ウィンドウの [詳細] ドロップダウン メニューから [値の更新] を選択して、シンボル値を更新します。

注意:

単一シンボルチャート シンボルは、Arcade 式の使用をサポートしていません。

フィーチャ レイヤーのシンボル フィールドへの式の適用

フィーチャ レイヤーのシンボル フィールドに式を適用するには、次の手順を実行します。

  1. 必要に応じて、[コンテンツ] ウィンドウでフィーチャ レイヤーを選択します。
  2. [フィーチャ レイヤー] タブの [描画] グループで、[シンボル] ウィンドウが開いていない場合は [シンボル] シンボル表示 をクリックして開きます。
  3. プライマリ シンボルを選択します。
  4. [フィールド] ドロップダウン メニューの横にある [式の設定] ボタン 式の設定 をクリックします。
  5. [式の設定] ダイアログ ボックスで、次の手順を実行します。
    1. 必要に応じて、カスタム式の [タイトル] テキストを追加します。
    2. [フィールド] で、フィールドの名前をダブルクリックして、式に追加します。 データのフィールド数が多い場合は、[高度な設定] ボタン Advanced をクリックしてリストをフィルター処理し、必要なフィールドを検索します。
    3. [関数] で、数学、テキスト、および日付ベースの関数のライブラリを表示します。 [ヘルパー タイプ] ボタン Helper Type をクリックして、関数のリストをフィルター処理し、関数をダブルクリックして式に追加します。
    4. フィールドが選択されている場合は、[値の挿入] ドロップダウン メニューをクリックし、特定の値を参照して式に追加できます。
    5. [式] で、Arcade 言語の構文を使用してカスタム式を記述します。
      注意:

      名前が特殊文字を含んでいるか、数字で始まるフィールドをシンボル表示するとき、Arcade は結合フィールドの構文と同じ構文 (たとえば、$feature['33field']$feature['acres²']$feature['st_area(SHAPE)']) を使用します。

    6. [確認] 確認 をクリックして式の整合性をチェックします。

      式が無効である場合、整合性エラー メッセージにガイダンスが表示されます。 [インポート] Import をクリックしてインポートしたり、[エクスポート] エクスポート をクリックして ArcGIS Pro の外部に式をエクスポートしたりすることもできます。

  6. [OK] をクリックすると、そのフィールドに式が設定されます。

    シンボルが更新され、変更内容が反映されます。

シンボルにカスタム式を使用した場合、式のタイトルが [コンテンツ] ウィンドウと [フィールド] ドロップダウン メニューに表示されます。 レイヤーのプライマリ シンボルが同じである限り、式は保存されます。

シンボル式の基礎

式を使用したシンボルの定義は、Arcade を十分に理解していることを前提としています。Arcade は ArcGIS ソフトウェア全体で一貫した機能を提供します。 これには、ArcGIS ProArcGIS API for JavaScript、およびその他の関連アプリケーションが含まれます。

シンボル Arcade 式は、ビジュアライゼーション プロファイルを使用します。 各プロファイルには、定義済みのグローバル (プロファイル) 変数セットが含まれます。 これにより、式の変数と返された値をコンテキスト化します。 立ち上げ式も、ビジュアライゼーション プロファイルを使用します。 詳細については、「ビジュアライゼーション」をご参照ください。

シンプルな式には、フィールド値の定義と数学演算が含まれます。 たとえば、$feature グローバル変数を使用して、フィーチャ レイヤーの属性テーブルのフィールド (2020 年のある地域の人口など) を参照し、そのフィールドから 2010 年の総人口を減算して差を求めることができます。 式の結果の値が返され、そのフィーチャのシンボルの決定に使用されます。

$feature.2020POP - $feature.2010POP

より複雑な式では、変数が使用され、複数のコード行におよぶ場合があります。 たとえば、現在の時間とフィールドに表された日付の差を表す変数を設定することができます。

var days_from_today = DateDiff(Now(), date_field, “days”);

ビジュアライゼーション プロファイル変数

[シンボル] ウィンドウからアクセスできる [式の設定] ダイアログ ボックスでは、マップ、プロジェクト、およびその他のアプリケーション間の一貫性を保つために Arcade のみが使用されます。 追加情報については、Arcade のドキュメントをご参照ください。

  • Arcade グローバル変数 $view.scale は、ビュー (マップ、シーン、またはレイアウト) の現在の縮尺への参照を作成します。 シンボル式の一部として変数を $view.scale に設定すると、シンボルをビューの現在の縮尺に応じて変化させることができます。 導入事例を以下に示します。

    var mapscale = $view.scale;
    var weight = $feature.STROKEWGHT;
    var size;
    var normal = 1000000;
    
    size = normal/mapscale*weight
    return size

    この式では、mapscale 変数が作成され、縮尺値が格納されます。 この式は、縮尺に STROKEWGHT フィールドの値から取得したストローク weight を乗算し、この積をカスタム値 normal で除算します。 この結果、ビューの拡大/縮小に合わせてシンボルのストローク ウェイトが変化します。 これは、シンボル クラスのスケーリングの代替方法として便利です。

  • $view.timeProperties グローバル変数を使用すると、マップでタイム スライダーが有効な場合にタイム スライダー設定にアクセスできるようになります。 変数を使用した式は、タイム スライダーが有効になっていない場合に対応する必要があります。 HasKey ステートメントで始まる次の出力は、$view にタイム スライダーが存在することを確認します。 true が返された場合は、else ステートメントが読み取られます。
    if (HasKey($view, 'timeProperties') == false || $view.timeProperties.currentEnd == null)
      return -1
    else
      return (
        DateDiff($view.timeProperties.currentEnd, $view.timeProperties.currentStart, 'days') 
        -
        DateDiff($view.timeProperties.currentEnd, $feature.Date_time, 'days') 
      )
  • $feature グローバル変数は、シンボルで使用されるフィーチャ レイヤーのフィールドを参照します。

    ヒント:

    フィールド名にドット表記でアクセスできない文字が含まれる場合、括弧内に名前を配置します (例: $feature.["joinKey.fieldName"])。

ビジュアライゼーション プロファイルの例

以下のプロファイル例は、利用可能な変数を使用して特定のタイプのシンボルを作成する方法を示しています。

シンボル クラスの作成

ほとんどの場合、等級シンボルまたは等級色シンボルを使用するよう、レイヤーを手動で設定することができます。 ただし、頻繁に変更される別のソースからの情報 (例: 商品の全国平均価格) を参照する場合、毎回シンボル設定を更新またはリセットする必要があります。 これを回避するには、式を設定して計算を実行し、その結果を既存の分類方法で使用します。

	var stationID = $feature.stationID; //ID number for gas station
var stationPrice = $feature.stationPrice; //Price at gas station
var avgPrice = '4.164' //National average price of gas

var priceDiffUL = Round(avgPrice - stationPrice, 2); //Calculate the difference

return priceDiffUL;

この例では、2 つのフィールド (stationIDstationPrice) から結果の値を決定しています。

個別値の分類

特に値が明確に定義され、シンボルが複数のプロジェクトにわたって使用されている場合に、個別値シンボルを構築するカスタム式を記述できます。 個別値シンボルに対して記述される多くの式では、変数をクラスに割り当て、if-else または when 論理関数を適用してシンボル クラス ラベルを定義しています。 以下の例で返される個別値は、配列例のメンバーかどうかによって異なります。

var example_array = [1, 2, 3, 4];
if (IndexOf(example_array, $feature.VALUE) > -1) {
return “Value is 1, 2, 3 or 4”;
} else {
return “Other value”;
}

別の例では、竜巻の強さを表す改良藤田スケールに基づいて値がグループ化されています。 この例は、上記の縮尺ベースのシンボル例に似ていますが、この式は $view.scale 変数を使用していません。

var WindSpeed = $feature.WINDSPEED
when (
WindSpeed > 261, “F5”,
WindSpeed > 207, “F4”,
WindSpeed > 158, “F3”,
WindSpeed > 113, “F2”,
WindSpeed > 73, “F1”, 
“F0”
)

縮尺ベースのシンボル

最初の例で、変数 vs には現在の縮尺値が格納されます。 wind 変数には、シンボルの正確なサイズの決定に使用されるフィーチャの風速値が格納されます。 この値は windSize として格納され、マップの縮尺に応じてサイズが変更されます。

var vs = $view.scale
var wind = $feature.WINDSPEED

var windSize = When(
    wind > 136, 24, //Category 5
    wind > 112, 23, //Category 4
    wind > 95, 22, //Category 3
    wind > 82, 21, //Category 2
    wind > 63, 20, //Category 1
    wind > 33, 18, //Tropical Storm
    16) //Tropical Depression

when(
    vs >=37000000, windSize,
    vs >=18500000, 1 + windSize,
    vs >=9300000, 2 + windSize,
    vs >=4700000, 4 + windSize,
    vs >=2000000, 6 + windSize, 8 + windSize)

2 つ目の例では、現在の縮尺が 1:30000 より大きい場合にのみ、EXAMPLE フィールドからフィーチャがシンボル表示されます。

Var scale = $view.scale
var feature = $feature.EXAMPLE
if(scale > 30000 && feature == 10){
return 'Feature equals 10'
}
return 'Feature is not equal to 10'

カスタム式は、特にシンボルがテンプレートに基づいていない場合に、シンボルのスケーリングを計測し、動的に調整する柔軟性の高い方法です。 詳細については、「縮尺ベースのシンボル サイズ設定」をご参照ください。

関連トピック