21.2.4. 라벨 항목

Label 항목은 사용자의 맵을 이해할 수 있도록 돕는 텍스트로 장식할 수 있는 도구입니다. 라벨은 제목, 작성자, 데이터소스 또는 기타 모든 정보를 담을 수 있습니다. 항목 생성 지침 을 따라 label Add Label 도구를 이용해서 라벨을 추가하고 대화형 조판기 항목 작업 에서 설명한 내용과 동일한 방법으로 수정할 수 있습니다.

라벨 항목은 기본적으로 라벨의 Item Properties 패널에서 사용자 지정할 수 있는 기본 텍스트를 제공합니다. 이 항목은 공통 속성 이외에도 다음과 같은 기능을 가지고 있습니다(그림 21.24 참조):

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

그림 21.24 라벨 항목 속성 패널

21.2.4.1. 주요 속성

Main properties 그룹이 라벨 텍스트를 제공하는 장소입니다. 텍스트는 정적 텍스트일 수도, 표현식 함수 및 변수를 사용하는 동적 텍스트일 수도, 그리고/또는 HTML 서식일 수도 있습니다. 라벨의 동적 부분을 동적 텍스트로 해석하고 평가하려면 [%%] 로 감싸야 합니다.

  • 라벨에서 표현식을 사용하려면 Insert/Edit Expression… 버튼을 클릭한 다음 평소와 같이 공식을 작성하면 됩니다. 그리고 대화창을 적용하면, QGIS가 감싸는 괄호 문자들을 자동으로 추가합니다.

    힌트

    텍스트란에서 어떤 선택도 하지 않고 Insert/Edit Expression… 버튼을 클릭하면 기존 텍스트에 새 표현식을 추가할 것입니다. 기존 표현식을 수정하고자 하는 경우, 먼저 관심 있는 부분을 선택해야 합니다.

    일반적으로 맵은 몇몇 공통적인 텍스트 정보(날짜, 제작자, 제목, 페이지 번호 등등)로 채워지기 때문에, QGIS에서는 대응하는 표현식 또는 변수에 직접 접근할 수 있습니다: 이런 표현식 또는 변수를 선택해서 사용자 라벨에 삽입하려면 Dynamic text 버튼을 누르십시오.

    최상위 메뉴 Add Item ► Add Dynamic Text ► 를 사용하면 선택한 사전 정의 표현식으로 채워진 새 라벨을 생성할 수 있습니다.

    동적 텍스트를 정적 텍스트로 변환할 수도 있습니다: Insert/Edit Expression… 버튼 옆에 있는 드롭다운 화살표를 눌러서 Convert to Static 를 선택하십시오. 라벨 내용 가운데 모든 동적 부분을 평가해서 현재 값으로 대체할 것입니다. 그 다음 필요한 경우 산출 텍스트를 직접 조정할 수 있습니다.

  • 라벨을 HTML 코드로 해석할 수 있습니다: checkbox Render as HTML 체크박스를 체크하십시오. 이제 HTML 태그 또는 스타일, URL, 웹페이지를 가리키는 링크를 가진 클릭할 수 있는 이미지, 또는 좀 더 복잡한 HTML 코드 등등을 삽입할 수 있습니다.

다음 코드는 고급 라벨 작업을 위해 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. 모양

  • Font 버튼을 눌러 텍스트의 글꼴과 스타일을 정의하십시오. Label Font 메뉴에서 라벨 텍스트 서식 설정 에 대한 몇몇 설정을 사용할 수 있습니다.

  • 서로 다른 수직 및 수평 여백을 mm 단위로 지정할 수 있습니다. 조판 항목의 경계로부터의 여백입니다. 라벨 경계 바깥쪽에 ─ 예를 들어 라벨 항목을 다른 항목과 정렬시키기 위해 ─ 라벨을 배치할 수 있습니다. 이 경우 여백에 음의 값을 사용해야 합니다.

  • 텍스트 alignment 옵션은 사용자 라벨을 배치하기 위한 또다른 방법입니다. 다음 가운데 하나를 선택할 수 있습니다:

    • Horizontal alignment 의 경우 Left, Center, Right 또는 Justify

    • Vertical alignment 의 경우 Top, Middle, Bottom

21.2.4.3. 라벨 항목에서의 표현식 탐구

다음은 사용자가 라벨 항목을 흥미로운 정보로 채우는 데 사용할 수 있는 몇몇 표현식 예시입니다. Main properties 프레임에서 코드를, 또는 적어도 계산식 부분을 [%%] 로 둘러싸야 한다는 점을 기억하십시오.

  • 제목을 “field1” 에 있는 현재 지도책 피처값과 함께 표시합니다:

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

    또는 Main properties 부분에서 작성하면:

    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 항목에 있는 레이어명들을 추출해서, 한 줄 서식으로 표시합니다:

    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 ) )