ラベルのテキストの指定

ラベル テキスト文字列は、1 つ以上のフィーチャ属性から作成されます。 ラベルは動的なので、フィーチャの属性値の変化に応じてラベルも変化します。 ラベリングを表示すると、まず 1 つのフィールドに基づいてラベリングが実行されます。たとえば、気象マップの場合は、観測所に毎日の降水量を示すラベルを付けることができます。 単一フィールドベースのラベルを設定するには、[コンテンツ] ウィンドウでフィーチャクラスを右クリックして [ラベル] ラベルの有効化 をクリックします。

注意:

ラベル フィールドは、デフォルトでは、名前に「Name」を含む (大文字と小文字は区別されません)、文字列タイプの最初のフィールドです。 名前にそのテキストが含まれるフィールドが存在しない場合は、デフォルトでは、最初は文字列タイプの最初のフィールド、次に整数タイプの最初のフィールド、次に任意のタイプの最初のフィールドになります。

ラベルには、属性フィールドを追加できます。 たとえば、毎日の降水量と最大風速の両方を示すラベルを観測所に付けることができます。 ラベルに使用する属性フィールドが 1 つであっても、あるいは複数であっても、ラベル テキストを決定するステートメントはラベル式と呼ばれます。 ラベル クラスごとに固有のラベル式があります。

ラベル式にテキストを挿入し、それをマップ上のラベルに表示することができます。 たとえば、天気図の場合は、各ラベルに略記した測定単位を追加することができます (インチを表す「in」、時速マイルを表す「MPH」など)。 ラベル条件式で ArcadePython、VBScript、または JScript を使用して、テキストの表示方法を変更することもできます。 たとえば、テキストの 1 行目に降水値を表示し、2 行目に風速値を表示する関数を挿入することができます。

テキスト書式設定を使用し、マップ上でのテキストの表示方法をより詳細に制御できます。 テキスト書式タグを使用して、ラベル テキストのさまざまな部分に、さまざまなテキスト表示プロパティを指定できます。

ラベル式

高度なラベル条件式を使用すると、条件付きのロジックやループを含め、任意の ArcadePython、VBScript、または JScript ロジックをラベル条件式に追加できます。 たとえば、高度なラベル式を使用して、テキスト文字列が属性フィールドにどのように保存されているかにかかわらず、各単語の 1 文字目だけを大文字にしたラベルを作成できます。 書式タグを使用すると、ラベル条件式を使用して、ラベルの書式を調整することもできます。 これらは、ラベルの全体または一部の外観を変更するための特殊文字です。 たとえば、太字の書式タグを使用して、改行された複数行のラベルの 1 行目を太字にすることができます。

ヒント:
Arcade 条件式は ArcGIS プラットフォーム全体で使用されます。 他の言語とは異なり、Arcade 条件式は ArcGIS Runtime、ArcGIS Pro、および ArcGIS Runtime SDK で正常に機能します。

ラベル条件式は、単純な一行の式、またはコードを複数の行に拡張し、パーサーのプログラミング ロジックを利用するより複雑な式のいずれかです。 Arcade は、デフォルトで複雑な式を有効にします。 Python、VBScript、または JScript を使用する場合は、[高度な設定] チェックボックスをオンにし、コードを関数にまとめて、複数行の式を有効にする必要があります。

データにコード値の説明がある場合は、[コード値の説明を使用] オプションを使用して、ラベルにコード値の説明 (コードではない) を表示できます。

フィールド値はテキスト文字列に自動的にキャストします。 算術演算で数値を使用する場合や、比較するときには、これをもう一度キャストして数値データ タイプに戻す必要があります。

注意:

NULL 値はテキスト文字列にキャストされません。 NULL として式に渡されます。

Arcade を使用する場合は、フィールド値がそのデータ タイプを保持します。

次の例では、2 つの整数フィールドを追加しています。

Arcade
$feature.FIELD1 + $feature.FIELD2
Python
int([FIELD1]) + int([FIELD2])
VBScript
cint([FIELD1]) + cint([FIELD2])
JScript
parseInt([FIELD1]) + parseInt([FIELD2])

その他の Maplex ラベル エンジン のオプション

Maplex ラベル エンジン には、ラベルで使用される空白サードパーティを制御する追加機能があります。

[余分なスペースを削除] オプションは、ラベルのテキストから余分なスペース文字を削除します。 この余分なスペースには、テキストの前後と内部にあるすべてのスペース文字が含まれます。 このオプションを使用できない場合は、スペースが書式設定に使われます。たとえば、改行のあるラベルでテキストをインデントすることができます。

[余分な改行を削除] オプションは、ラベルのテキストから余分な改行を削除します。 このオプションを使用できない場合は、改行のあるラベル内で複数行の間隔を空けることができます。

ラベル条件式の作成

ラベル条件式を記述するには、次の手順に従います。

  1. [コンテンツ] ウィンドウでレイヤーを右クリックし、[ラベリング プロパティ] ラベリング プロパティ をクリックします。

    [ラベル クラス] ウィンドウが表示されます。

  2. [言語] メニューから言語を選択します。
  3. ArcadePython、VBScript、または JScript の条件式を入力します。 また、フィールドをダブルクリックして条件式に追加するか、フィールドを選択し、右クリックしてから [追加] を選択すると、クリックした位置にフィールドを追加することができます (スペースで区切られます)。 入力されたテキスト関数を式に追加するには、ダブルクリックして使用します。

    Python、VBScript、および JScript を使用する場合、フィールドはレイヤーのデータ ソースのデータ タイプに関係なく角括弧 ([ ]) で囲まれます。 Arcade では、別の方法でフィールドを指定します。

    フィールドの構文
    $feature.fieldname
    結合フィールドの構文
    $feature['tablename.fieldname']
    コード値ドメイン フィールドの構文
    DomainName($feature, 'fieldname')

    注意:

    Arcade を使用する場合は、フィールド名と重複する変数名を使用しないでください。 そのような場合は、ラベルが作成されません。

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

    必要に応じて、ラベル テキスト部分に書式を適用する ArcGIS Pro テキスト書式タグを [式] ボックスに入力します。

    注意:

    Arcade を使用する場合は、レイヤーのフィールド書式設定がラベルに取り込まれません。 Arcade の書式設定方法を使用する必要があります。

    式が複数行のコードにわたる場合は、[高度な設定] チェックボックスをオンにしてから、ラベル式を入力します。 Arcade を使用する場合、これは不要です。

  4. [確認] をクリックして、構文エラーがないことを確認し、[適用] をクリックします。

    構文エラーがある場合、行番号と理由がエラーに記されます。 これらの番号を表示するには、ラベル式の入力ボックスを右クリックし、[行番号の表示] を選択します。

    標準および高度なラベル式は、他のレイヤーまたはマップにロード可能なラベル式ファイル (.lxp) としてエクスポートできます。

条件式の例

次に、ラベル式の例を示します。

  • 文字列をフィールド内の値に連結します。たとえば、次の条件式により、PARCELNO フィールドの値の前にテキスト "Parcel no:" が置かれたラベルが作成されます。
    Arcade
    "Parcel no: " + $feature.PARCELNO
    Python
    "Parcel no: " + [PARCELNO]
    VBScript
    "Parcel no: " & [PARCELNO]
    JScript
    "Parcel no: " + [PARCELNO]
  • 小数を設定された桁数に丸めます。たとえば、次の条件式により、小数点以下 1 桁に四捨五入された AREA フィールドが表示されます。
    Arcade
    round(number($feature.AREA), 1)
    Python
    round(float([AREA]), 1)
    VBScript
    Round ([AREA], 1)
    JScript
    function FindLabel ( [AREA] )
    {
    var ss;
    var num= parseFloat([AREA]);
    ss =  num.toFixed(1);
      return (ss);
    }
  • テキスト ラベルをすべて大文字または小文字に変換します。たとえば、次の条件式により、NAME フィールドはすべて小文字になります。
    Arcade
    lower($feature.NAME)
    Python
    def FindLabel ( [NAME] ):
      S = [NAME]
      S = S.lower()
      return S
    VBScript
    LCase ([NAME])
    JScript
    [NAME].toLowerCase()
  • テキスト ラベルを適切な大小文字に変換します。たとえば、次の条件式により、大文字の NAME フィールドは、適切な大小文字の組み合わせになります。
    Arcade
    Proper($feature.NAME, 'firstword')
    Python
    def FindLabel ( [NAME] ):
      S = [NAME]
      S = S.title()
      return S
    VBScript
    Function FindLabel ( [NAME] )
    FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1))
    End Function
    JScript
    function FindLabel ( [NAME] )
    {
    var str = [NAME];
    var iLen = String(str).length;
    var upper = (str.substring(0,1)).toUpperCase();
    var lower = (str.substring(1, iLen)).toLowerCase()
    return upper + lower;
    }
  • 複数行のテキストを作成します。たとえば、次の条件式により、NAME フィールドと 2 つの住所フィールドをそれぞれ別の行に表示するラベルが作成されます。
    Arcade
    "Name: " + $feature.NAME + TextFormatting.NewLine + $feature.ADDRESS_1 + TextFormatting.NewLine + $feature.ADDRESS_2
    Python
    "Name: " + [NAME] + '\n' + [ADDRESS_1] + '\n' + [ADDRESS_2]
    VBScript
    "Name: " & [NAME] & vbCrLf& [ADDRESS_1] & vbCrLf& [ADDRESS_2]
    JScript
    "Name: " + [NAME] + "\r" + [ADDRESS_1] + "\r" + [ADDRESS_2]
  • 1 つのフィールドのテキストを基にして、複数行のテキストを作成します。たとえば、次の式により、カンマを使用して改行の位置を指定します。
    Arcade
    replace($feature.LABELFIELD, ', ', '\n')
    Python
    def FindLabel ( [LABELFIELD] ):
      S = [LABELFIELD]
      S = S.replace(', ', '\n')
      return S
    VBScript
    Function FindLabel ( [LABELFIELD] )
    FindLabel = replace([LABELFIELD], ", ", vbnewline)
    End Function
    JScript
    function FindLabel ( [LABELFIELD] )
    {
    var r, re;
    var str = [LABELFIELD];
    re = /,/g;
    r = str.replace(re, "\r");
    return r;
    }
  • ラベルの形式を指定します。たとえば、次の式では、ラベルを通貨として表示します。
    Arcade
    "Occupancy Revenue: $" + round($feature.MAXIMUM_OC * $feature.RATE, 2)
    Python
    def FindLabel ( [MAXIMUM_OC], [RATE] ):
      import locale
      locale.setlocale(locale.LC_ALL, '')
      S = locale.currency(float([MAXIMUM_OC]) * float([RATE]))
      return S
    VBScript
    "Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])
    JScript
    function FindLabel ( [MAXIMUM_OC], [RATE] )
    {
    var ss;
    var num1 = parseFloat([MAXIMUM_OC]);
    var num2 = parseFloat([RATE]);
    var num3 = num1 * num2
    ss =  num3.toFixed(2);
      return ("$" + ss);
    }
  • フィールドの一部のみをラベルとして使用します。たとえば、次の式では、3 番目から 5 番目までの文字を表示します。
    Arcade
    mid($feature.LABELFIELD, 2, 3)
    Python
    def FindLabel ( [LABELFIELD] ):
      S = [LABELFIELD]
      return S[2:5]
    VBScript
    Mid([LABELFIELD], 3, 3)
    JScript
    function FindLabel ( [LABELFIELD] )
    {
    var S;
    var str = [LABELFIELD];
    S = str.substring(2, 5);
    return S;
    }
  • if-else 条件ステートメントを指定します。 これらの関数は、人口が 250,000 人以上の場合は赤い大きなフォントで都市名をラベリングし、250,000 人未満の場合はデフォルトのラベル フォントで都市名をラベリングします。
    Arcade
    if ($feature.POPULATION >=250000) {
        return "<CLR red='255'><FNT size = '14'>" + $feature.NAME + "</FNT></CLR>"
    }
    else {
        return $feature.NAME
    }
    Python
    def FindLabel ( [NAME], [POPULATION] ):
      if int([POPULATION]) >= 250000:
        return "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"
      else:
        return [NAME]
    VBScript
    Function FindLabel ([NAME], [POPULATION])
      if (cLng([POPULATION]) >= 250000) then
       FindLabel = "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"
      else
    	 FindLabel = [NAME]
      end if
    End Function
    JScript
    function FindLabel ( [NAME], [POPULATION]  )
    {
    if (parseFloat([POPULATION]) >= 250000){
    return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>");
    }
    else
    return ([NAME]);
    }
注意:
フィールドの値に基づいてフィーチャのサブセットにラベリングするには、ラベル式を使用する代わりに、ラベル クラスに SQL クエリを作成します。