ラベル テキスト文字列は、1 つ以上のフィーチャ属性から作成されます。ラベルは動的なので、フィーチャの属性値の変化に応じてラベルも変化します。ラベリングを表示すると、まず 1 つのフィールドに基づいてラベリングが実行されます。たとえば、気象マップの場合は、測候所に毎日の降水量を示すラベルを付けることができます。単一フィールドに基づくラベルは、[ラベリング] タブで設定します。
メモ:
ラベル フィールドは、デフォルトでは、フィールド名に「Name」を含む (大文字と小文字は区別されません)、文字列タイプの最初のフィールドです。フィールド名にその名前を含むフィールドが存在しない場合は、文字列タイプの最初のフィールド、整数タイプの最初のフィールド、任意のタイプの最初のフィールドという順でラベル フィールドとなります。
ラベルには、属性フィールドを追加できます。たとえば、毎日の降水量と最大風速の両方を示すラベルを測候所に付けることができます。ラベルに使用する属性フィールドが 1 つであっても、あるいは複数であっても、ラベル テキストを決定するステートメントはラベル式と呼ばれます。ラベル クラスごとに固有のラベル式があります。
ラベル式にテキストを挿入し、それをマップ上のラベルに表示することができます。たとえば、天気図の場合は、各ラベルに略記した測定単位を追加することができます (インチを表す「in」、時速マイルを表す「MPH」など)。また、ラベル式で Arcade、Python、VBScript、または JScript を使用して、テキストの表示方法を変更することもできます。たとえば、テキストの 1 行目に降水値を表示し、2 行目に風速値を表示する関数を挿入することができます。これらの例を、次の図に示します。
ArcGIS Pro のテキスト書式タグを使用して、マップ上でのテキストの表示方法をより詳細に制御できます。テキスト書式タグを使用して、ラベル テキストのさまざまな部分に、さまざまなテキスト表示プロパティを指定できます。たとえば、次の図に示すように、降水値を斜体の青いテキストで表示し、風速値を標準の黒いテキストで表示することができます。
ラベル式
高度なラベル式を使用すると、条件付きのロジックやループを含め、任意の Arcade、Python、VBScript、または JScript ロジックをラベル式に追加できます。たとえば、高度なラベル式を使用して、テキスト文字列が属性フィールドにどのように保存されているかにかかわらず、各単語の 1 文字目だけを大文字にしたラベルを作成できます。ArcGIS Pro の書式タグを使用すると、ラベル式を使用して、ラベルの書式を調整することもできます。これらは、ラベルの全体または一部の外観を変更するための特殊文字です。たとえば、太字の書式タグを使用して、改行された複数行のラベルの 1 行目を太字にすることができます。
ヒント:
Arcade 式は ArcGIS プラットフォーム全体で使用されます。Arcade 式はランタイム、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 Label Engine オプション
Maplex Label Engine には、ラベルで使用される空白スペースを制御する追加機能があります。
[余分なスペースを削除] オプションは、ラベルのテキストから余分なスペース文字を削除します。この余分なスペースには、テキストの前後と内部にあるすべてのスペース文字が含まれます。このオプションをオフにすると、スペースが書式設定に使われます。たとえば、改行のあるラベルでテキストをインデントすることができます。
[余分な改行を削除] オプションは、ラベルのテキストから余分な改行を削除します。このオプションをオフにすると、改行のあるラベル内で複数行の間隔を空けることができます。
ラベル式の作成
- [ラベル別にリスト] で [コンテンツ] ウィンドウの表示を利用すると、非常に効果的です。[ラベル別にリスト] をクリックします。
- コンテンツ ウィンドウでラベル クラスを選択して、[ラベリング] タブをクリックします。
- [ラベリング] タブの [ラベル クラス] グループで、[式] をクリックします。
- [言語] メニューから言語を選択します。
- Arcade、Python、VBScript、または JScript の式を入力します。また、フィールドをダブルクリックして式に追加するか、フィールドを選択し、右クリックしてから [追加] を選択すると、クリックした位置にフィールドを追加することができます (スペースで区切られます)。入力されたテキスト関数を式に追加するには、ダブルクリックして使用します。
Python、VBScript、および JScript を使用する場合、フィールドはレイヤーのデータ ソースのデータ タイプに関係なく角括弧 ([ ]) で囲まれます。Arcade は別の方法を使用してフィールドを指定します。
フィールドの構文 $feature.fieldname
結合フィールドの構文 $feature['tablename.fieldname']
コード値ドメイン フィールドの構文 DomainName($feature, 'fieldname')
ヒント:
Arcade を使用する場合、コンソール機能を使用してラベル式のデバッグを支援できます。コンソール機能が式に含まれている場合、[確認] をクリックすると、[コンソール メッセージを表示] というリンクが表示されます。このリンクをクリックして、[コンソール メッセージ] ウィンドウを開きます。Arcade を使用する場合は、式のタイトルを指定することもできます。
注意:
Arcade を使用する場合は、フィールド名と重複する変数名を使用しないでください。そのような場合は、ラベルが作成されません。
名前が特殊文字を含んでいるか、数字で始まるフィールドにラベルを付けるとき、Arcade は結合フィールドの構文と同じ構文 (たとえば、$feature['33field']、$feature['acres²']、$feature['st_area(SHAPE)']) を使用します。
必要に応じて、ラベル テキスト部分に書式を適用する [式] ボックスに ArcGIS Pro のテキスト書式タグを入力します。
メモ:
Arcade を使用する場合は、レイヤーのフィールド書式設定がラベルに取り込まれません。Arcade の書式設定方法を使用する必要があります。
式が複数行のコードにわたる場合は、[高度な設定] チェックボックスをオンにしてから、ラベル式を入力します。Arcade を使用する場合、これは不要です。
- [確認] をクリックして、構文エラーがないことを確認し、[適用] をクリックします。
構文エラーがある場合、行番号と理由がエラーに記されます。これらの番号を表示するには、ラベル式の入力ボックスを右クリックし、[行番号の表示] を選択します。
標準および高度なラベル式は、他のレイヤーまたはマップにロード可能なラベル式ファイル (*.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 クエリを作成します。次のようなリソースもあります。
- Arcade Language Reference
- Python Language Reference
- Microsoft の VBScript Language Reference
- Microsoft の JScript Language Reference
(一部の情報は、Esri が作成、所有、管理のいずれも行っていない Web ページにあります。Esri は、これらのページの利用状況を保証できません。またはページの内容についても責任を負いません。)