Python を使って一歩進んだラベルをつくってみよう!

ArcGIS ブログの記事の中でも特に人気のキーワードが「Python」です。ArcGIS で Python を使うというと、Esri が開発した API である ArcPy を利用した開発が主ですが、ArcMap(ArcGIS for Desktop)ではラベルの表示設定にも Python を使用することができます。
そこで今回は Python を使った、より高度なラベルの設定方法についてご紹介します!

0

 

準備

Python を使用したラベルの表示設定であっても、通常通りレイヤー プロパティの [ラベル] タブから行います。[ラベル] タブに移動したら、ダイアログ中ほどの [条件式] ボタンをクリックしましょう。

1


[ラベル条件式] ダイアログが表示されましたら、[高度な設定] にチェックを入れ、[形式] が Python となっていることを確認しましょう。

2

Python によるラベル表示設定の基礎

ここまでは何も設定をしていませんが、[条件式] の中にはすでに FindLabel 関数の宣言と、戻り値(return)が用意されています。
この関数の引数に、使用するフィールドを指定し、戻り値にラベルとして表示する文字列を設定します。もちろん戻り値には、様々な処理を行った結果を指定することもできるので、コーディングの工夫次第でより高度なラベルの設定をすることができます。

3


それでは、いくつかの例をご紹介しながら、Python によるラベルの設定方法を見ていきます。

複数の属性を表示したい

まずは、複数の属性をラベルに表示させてみましょう。
複数の属性を表示させる場合、たとえば以下のようなコードを設定します。

#複数の属性を表示したい
def FindLabel ([fruit], [animal]):
  return [fruit] + u" と " + [animal]

FindLabel 関数の引数(使用するフィールド)には、「fruit」と「animal」のフィールドをカンマで区切って指定し、戻り値でそれらを足し合わせています。

4


また、改行文字(\n)を使用することで、改行を組み込んだラベルを設定することもできます。

#改行文字の使用
def FindLabel ([fruit], [animal]):
  return [fruit] + u"\n" + [animal]

5

条件にあったラベルだけを表示したい(個別値編)

FindLabel 関数内で if 文を使って、戻り値に指定する文字列をつくることで、指定した条件にあったラベルのみを表示させることができます。たとえば以下のようなコードを設定します。
※「fruit」フィールドの属性値が「みかん」である場合にのみラベルを表示させます。

#条件にあったラベルだけを表示(個別値編)
def FindLabel ([fruit]):
  label = ""
  if [fruit] == u"みかん":
    label = label + [fruit]
  return label

6

条件にあったラベルだけを表示したい(数値編)

ラベル条件式では、ラベルとして利用しやすくするために、もとのフィールドの型に関わらず、すべてテキスト文字列に変換して条件式内に出力されます。そのため、「人口が 50 万人以上の都市のみラベルを表示させたい」といった、数値を使用した条件を設定したい場合、コードの中で属性値のテキスト文字列を数値に変換しなおす必要があります。
たとえば、以下のコードのように設定します。
※ESRIジャパンがサンプル データとして提供している「全国市区町村界データ」を使用して、人口 50 万人以上の都市のみ、ラベルを表示させています。

#条件にあったラベルだけを表示したい(数値編)
def FindLabel ([P_NUM], [SIKUCHOSON]):
  #数値型に変換
  pop = int([P_NUM])
  label = ""
  if pop >= 500000:
    label = label + [SIKUCHOSON]
  return label

7

ラベルのシンボルを変更したい


ラベルの色やフォントといったシンボルはレイヤー プロパティの [ラベル] タブから変更をすることができますが、「テキスト書式設定タグ」を使用することで、Python のコード内でも設定することができます。たとえば以下のコードのように設定します。
※より詳細な設定についてはヘルプ「テキスト書式設定タグ」をご参考ください。

#ラベルのシンボルを変更したい
def FindLabel([color]):
  label = ""
  if [color] == u"あか":
    label = "<clr red = '255'>" + [color] + "</clr>"
  elif [color] == u"あお":
    label = "<clr blue = '255'>" + [color] + "</clr>"
  else:
    label = "<clr red ='139' blue = '139'>" + [color] + "</clr>"
  return label

8


いかがでしたでしょうか。
これまでご紹介してきたコードを組み合わせる
だけでも、GUI での設定では実現できないより細かなラベル設定をすることができます。
また、今回は Python を使用した方法をご紹介しましたが、ラベル条件式では Python のほかに、VBScript、JScript(JavaScript)も使用できます。この記事を参考に、ぜひ、みなさんの理想のラベルを作り上げてください。


関連項目