21.2.4. ラベルアイテム

ラベル アイテムは、地図をテキストで装飾して地図の理解を助けるためのツールです。ラベルテキストにはタイトル、作成者、データソースやその他の情報などが考えられます。 label ラベルを追加 ツールを使用して、 アイテムの作成手順 に従いラベルを追加し、 レイアウトアイテムの操作 と同じ方法でラベルアイテムを操作します。

デフォルトでは、ラベルアイテムにはデフォルトのテキストが入っていますが、これは アイテムプロパティ パネルを使用して変更できます。 アイテムの共通プロパティ の他に、ラベルアイテムには以下の機能があります( 図 21.24 参照)。

../../../../_images/label_mainproperties.png

図 21.24 ラベルアイテムプロパティパネル

21.2.4.1. メインプロパティ

メインプロパティ グループはラベルのテキストを与える場所です。テキストは静的なもの、 関数や変数を使用した動的なもの、HTMLで整形したものがあります。ラベルの動的な部分は解釈と評価のために [%%] で囲み必要があります。

  • ラベルで式を使用するには、式を挿入/編集... ボタンをクリックし、通常通りに式を記述し、ダイアログが適用されると、QGISは自動的に前後の文字を追加します。

    ヒント

    テキストボックスで何も選択せずに 式を挿入/編集... ボタンをクリックすると、既存のテキストに新しい式が追加されます。既存の式を修正したい場合は、まず目的の部分を選択する必要があります。

    通常、地図には一般的なテキスト情報(日付、著者、タイトル、ページ番号など)が含まれているため、QGISでは対応する式や変数に直接アクセスすることができます: 動的テキスト ボタンを押すと、それらを選択してラベルに挿入することができます。

    Tip

    トップメニュー 追加 ► 動的テキストを追加 ► は、選択された定義済みの式で満たされた新しいラベルアイテムを作るのに使うことができます。

    動的ラベルを静的に変えるには: 式を挿入/編集... ボタンの横にあるドロップダウンの矢印を押して、静的テキストに変換 を選択してください。ラベルの内容の動的な部分が評価され、現在の値に置き換えられます。その後、必要に応じて結果テキストを手動で微調整することができます。

  • ラベルはHTMLコードとして解釈できます: check checkbox HTMLとしてレンダリングする をチェックしてください。HTMLタグやスタイル、URL、ウェブページにリンクするクリック可能な画像、あるいはもっと複雑なものを挿入できるようになります。

次のコードはHTMLレンダリングと式を組み合わせたもので、高度なラベリングを行い、 図 21.25 を出力します:

<html>
 <head>
   <style>
      /* Define some custom styles, with attribute-based size */
      name {color:red; font-size: [% ID %]px; font-family: Verdana; text-shadow: grey 1px 0 10px;}
      use {color:blue;}
   </style>
 </head>

 <body>
   <!-- Information to display -->
   <u>Feature Information</u>
   <ul style="list-style-type:disc">
     <li>Feature Id: [% ID %]</li>
     <li>Airport: <name>[% NAME %]</name></li>
     <li>Main use: <use>[% USE %]</use></li>
   </ul>
   Last check: [% concat( format_date( "control_date", 'yyyy-MM-dd'), ' by <b><i>', @user_full_name, '</i></b>' ) %]

   <!-- Insert an image -->
   <p align=center><img src="path/to/logos/qgis-logo-made-with-color.svg" alt="QGIS icon" style="width:80px;height:50px;"</p>
 </body>
</html>
../../../../_images/label_htmlexpression.png

図 21.25 HTMLスタイリングを使用したラベルの活用

21.2.4.2. 外観

  • フォント ボタンをクリックして、テキストのフォントとスタイルを定義します。ラベルフォント メニューでは、 ラベルテキストの書式設定 のオプションのいくつかを使うことができます。

  • 水平方向や垂直方向のマージンを mm 単位で別々に指定できます。これは、レイアウトアイテムの端からの余白です。例えばラベルアイテムを他のアイテムと位置を揃える場合など、ラベル境界の外側にラベルを配置することもできます。この場合には、マージンに負の値を使用します。

  • テキスト配置の使用は、ラベルを配置するもう一つの方法です。これには、以下の設定があります:

    • 水平方向配置 については、 中央部正当化する

    • 垂直方向配置 については、 上部中央部Bottom

21.2.4.3. ラベルアイテムの式の探究

以下は、ラベルアイテムに興味深い情報入力するために使用できる式のいくつかの例です。コード、あるいは少なくとも計算式の部分は、 メインプロパティ フレームで [%%] で囲む必要があります。

  • 現在の地図帳地物の "field1" の値を使ったタイトルを表示する:

    'This is the map for ' || "field1"
    

    メインプロパティ セクションに書く場合には、以下のようにします:

    This is the map for [% "field1" %]
    
  • 現在の地図帳地物に関するページ番号を追加する(例 Page 1/10 ):

    concat( 'Page ', @atlas_featurenumber, '/', @atlas_totalfeatures )
    
  • 共通の属性に基づいて、現在の地図帳領域地物に対する空港の名前を返す:

    aggregate( layer := 'airports',
               aggregate := 'concatenate',
               expression := "NAME",
               filter := fk_regionId = attribute( @atlas_feature, 'ID' ),
               concatenator := ', '
             )
    

    属性リレーション が設定されている場合には、次のようにもできます:

    relation_aggregate( relation := 'airports_in_region_relation',
                        aggregate := 'concatenate',
                        expression := "NAME",
                        concatenator := ', '
                      )
    
  • 空間関係に基づいて、現在の地図帳領域地物に含まれる空港の名前を返す:

    aggregate( layer := 'airports',
               aggregate := 'concatenate',
               expression := "NAME",
               filter := contains( geometry( @parent ), $geometry ),
               concatenator := ', '
             )
    

    または:

    array_to_string( array:= overlay_contains( layer := 'airports',
                                               expression := "NAME" ),
                     delimiter:= ', '
                   )
    
  • Map 1 アイテムの範囲のX座標の最小値を返す:

    x_min( map_get( item_variables( 'Map 1' ), 'map_extent' ) )
    
  • 現在のレイアウトの Map 1 アイテムのレイヤの名前を取得し、1行に1つのレイヤ名となるよう整形する:

    array_to_string(
     array_foreach(
      map_get( item_variables( 'Map 1' ), 'map_layers' ), -- retrieve the layers list
      layer_property( @element, 'name' ) -- retrieve each layer name
     ),
     '\n' -- converts the list to string separated by breaklines
    )
    
  • レイヤのリストとライセンス文字列(使用権)をレイアウト Map 1 アイテムに表示します。最初にレイヤの アクセス メタデータ プロパティを入力する必要があります。

    array_to_string( map_credits( 'Map 1', true ) )