ラベル テキスト文字列は、1 つ以上のフィーチャ属性から作成されます。 ラベルは動的なので、フィーチャの属性値の変化に応じてラベルも変化します。 ラベリングを表示すると、まず 1 つのフィールドに基づいてフィーチャのラベリングが実行されます。たとえば、2D マップでは、地上コントロール ポイントにラベルを付けて、その場所をわかりやすく示すことができます。 単一フィールドベースのラベルを設定するには、[コンテンツ] ウィンドウでフィーチャクラスを右クリックして [ラベル] をクリックします。
注意:
ラベル フィールドは、デフォルトでは、名前に「Name」を含む (大文字と小文字は区別されません)、文字列タイプの最初のフィールドです。 名前にそのテキストが含まれるフィールドが存在しない場合は、デフォルトでは、最初は文字列タイプの最初のフィールド、次に整数タイプの最初のフィールド、次に任意のタイプの最初のフィールドになります。
ラベルには、属性フィールドを追加できます。 たとえば、毎日の降水量と最大風速の両方を示すラベルを観測所に付けることができます。 ラベルに使用する属性フィールドが 1 つであっても、あるいは複数であっても、ラベル テキストを決定するステートメントはラベル式と呼ばれます。 ラベル クラスごとに固有のラベル式があります。
ラベル式にテキストを挿入し、それをマップ上のラベルに表示することができます。 たとえば、天気図の場合は、各ラベルに略記した測定単位を追加することができます (インチを表す「in」、時速マイルを表す「MPH」など)。 ラベル条件式で Arcade、Python、VBScript、または JScript を使用して、テキストの表示方法を変更することもできます。 たとえば、テキストの 1 行目に降水値を表示し、2 行目に風速値を表示する関数を挿入することができます。
テキスト書式設定を使用し、マップ上でのテキストの表示方法をより詳細に制御できます。 テキスト書式タグを使用して、ラベル テキストのさまざまな部分に、さまざまなテキスト表示プロパティを指定できます。
ラベル式
高度なラベル条件式を使用すると、条件付きのロジックやループを含め、任意の Arcade、Python、VBScript、または JScript ロジックをラベル条件式に追加できます。 たとえば、高度なラベル式を使用して、テキスト文字列が属性フィールドにどのように保存されているかにかかわらず、各単語の 1 文字目だけを大文字にしたラベルを作成できます。 書式タグを使用すると、ラベル条件式を使用して、ラベルの書式を調整することもできます。 これらは、ラベルの全体または一部の外観を変更するための特殊文字です。 たとえば、太字の書式タグを使用して、改行された複数行のラベルの 1 行目を太字にすることができます。
ヒント:
Arcade 条件式は ArcGIS プラットフォーム全体で使用されます。 他の言語とは異なり、Arcade 式は ArcGIS Runtime、ArcGIS Pro、および ArcGIS Runtime SDK で正常に機能します。ラベル式は、単純な一行の式、またはコードを複数の行に拡張し、パーサーのプログラミング ロジックを利用するより複雑な式のいずれかです。 Arcade は、デフォルトで複雑な式を有効にします。 Python、VBScript、または JScript を使用する場合は、[高度な設定] チェックボックスをオンにし、コードを関数にまとめて、複数行の式を有効にする必要があります。
データにコード値の説明がある場合は、[コード値の説明を使用] オプションを使用して、ラベルにコード値の説明 (コードではない) を表示できます。
フィールド値はテキスト文字列に自動的にキャストします。 算術演算で数値を使用する場合や、比較するときには、これをもう一度キャストして数値データ タイプに戻す必要があります。
注意:
NULL 値はテキスト文字列にキャストされません。 NULL として式に渡されます。
Arcade を使用する場合は、フィールド値がそのデータ タイプを保持します。
次の例では、2 つの整数フィールドを追加しています。$feature.FIELD1 + $feature.FIELD2
int([FIELD1]) + int([FIELD2])
cint([FIELD1]) + cint([FIELD2])
parseInt([FIELD1]) + parseInt([FIELD2])
その他の Maplex ラベル エンジン のオプション
Maplex ラベル エンジン には、ラベルで使用される空白サードパーティを制御する追加機能があります。
[余分なスペースを削除] オプションは、ラベルのテキストから余分なスペース文字を削除します。 この余分なスペースには、テキストの前後と内部にあるすべてのスペース文字が含まれます。 このオプションを使用できない場合は、スペースが書式設定に使われます。たとえば、改行のあるラベルでテキストをインデントすることができます。
[余分な改行を削除] オプションは、ラベルのテキストから余分な改行を削除します。 このオプションを使用できない場合は、改行のあるラベル内で複数行の間隔を空けることができます。
ラベル式の作成
ラベル式を記述するには、次の手順に従います。
- [コンテンツ] ウィンドウでレイヤーを右クリックし、[ラベリング プロパティ] をクリックします。
[ラベル クラス] ウィンドウが表示されます。
- [言語] メニューから言語を選択します。
- Arcade、Python、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 を使用する場合、これは不要です。
- [確認] をクリックして、構文エラーがないことを確認し、[適用] をクリックします。
構文エラーがある場合、行番号と理由がエラーに記されます。 これらの番号を表示するには、ラベル式の入力ボックスを右クリックし、[行番号の表示] を選択します。
標準および高度なラベル式は、他のレイヤーまたはマップにロード可能なラベル式ファイル (.lxp) としてエクスポートできます。
式の例
次に、ラベル式の例を示します。
文字列をフィールド値に連結する
文字列をフィールド内の値に連結します。たとえば、次の式により、PARCELNO フィールドの値の前にテキスト "Parcel no:" が置かれたラベルが作成されます。
"Parcel no: " + $feature.PARCELNO
"Parcel no: " + [PARCELNO]
"Parcel no: " & [PARCELNO]
"Parcel no: " + [PARCELNO]
小数を丸める
小数を設定された桁数に丸めます。たとえば、次の式により、小数点以下 1 桁に四捨五入された AREA フィールドが表示されます。
round(number($feature.AREA), 1)
round(float([AREA]), 1)
Round ([AREA], 1)
function FindLabel ( [AREA] )
{
var ss;
var num= parseFloat([AREA]);
ss = num.toFixed(1);
return (ss);
}
大文字および小文字に変換する
テキスト ラベルをすべて大文字または小文字に変換します。たとえば、次の式により、NAME フィールドはすべて小文字になります。
lower($feature.NAME)
def FindLabel ( [NAME] ):
S = [NAME]
S = S.lower()
return S
LCase ([NAME])
[NAME].toLowerCase()
適切な大文字と小文字への変換
テキスト ラベルを適切な大小文字に変換します。たとえば、次の式により、大文字の NAME フィールドは、適切な大小文字の組み合わせになります。
Proper($feature.NAME, 'firstword')
def FindLabel ( [NAME] ):
S = [NAME]
S = S.title()
return S
Function FindLabel ( [NAME] )
FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1))
End Function
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 フィールドと ADDRESS フィールドをそれぞれ別の行に表示するラベルが作成されます。
$feature.NAME + TextFormatting.NewLine + $feature.ADDRESS
[NAME] + '\n' + [ADDRESS]
[NAME] & vbCrLf& [ADDRESS]
[NAME] + "\r" + [ADDRESS]
1 つのフィールドのテキストを改行する
1 つのフィールドのテキストを基にして、改行されたテキストを作成します。たとえば、次の式により、カンマを使用して改行の位置を指定します。
replace($feature.LABELFIELD, ', ', '\n')
def FindLabel ( [LABELFIELD] ):
S = [LABELFIELD]
S = S.replace(', ', '\n')
return S
Function FindLabel ( [LABELFIELD] )
FindLabel = replace([LABELFIELD], ", ", vbnewline)
End Function
function FindLabel ( [LABELFIELD] )
{
var r, re;
var str = [LABELFIELD];
re = /,/g;
r = str.replace(re, "\r");
return r;
}
ラベルの形式を指定する
ラベルの形式を指定します。たとえば、次の式では、ラベルを通貨として表示します。
"Occupancy Revenue: $" + round($feature.MAXIMUM_OC * $feature.RATE, 2)
def FindLabel ( [MAXIMUM_OC], [RATE] ):
import locale
locale.setlocale(locale.LC_ALL, '')
S = locale.currency(float([MAXIMUM_OC]) * float([RATE]))
return S
"Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])
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 番目までの文字を表示します。
mid($feature.LABELFIELD, 2, 3)
def FindLabel ( [LABELFIELD] ):
S = [LABELFIELD]
return S[2:5]
Mid([LABELFIELD], 3, 3)
function FindLabel ( [LABELFIELD] )
{
var S;
var str = [LABELFIELD];
S = str.substring(2, 5);
return S;
}
if-else 条件ステートメントを作成する
if-else 条件ステートメントを指定します。 これらの関数は、人口が 250,000 人以上の場合は赤い大きなフォントで都市名をラベリングし、250,000 人未満の場合はデフォルトのラベル フォントで都市名をラベリングします。
if ($feature.POPULATION >=250000) {
return "<CLR red='255'><FNT size = '14'>" + $feature.NAME + "</FNT></CLR>"
}
else {
return $feature.NAME
}
def FindLabel ( [NAME], [POPULATION] ):
if int([POPULATION]) >= 250000:
return "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"
else:
return [NAME]
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
function FindLabel ( [NAME], [POPULATION] )
{
if (parseFloat([POPULATION]) >= 250000){
return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>");
}
else
return ([NAME]);
}