21.4. 보고서 생성 작업

QGIS에서 보고서를 설정하는 방법에 대해 설명합니다.

21.4.1. 보고서란?

GIS 보고서란 당연히 서술적인 방식으로 정리된 정보를 맵, 텍스트, 그래픽, 표 등과 함께 담고 있는 문서를 말합니다. 즉석에서, 주기적으로, 반복적으로, 규칙적으로, 또는 필요할 때마다 보고서를 준비할 수 있습니다. 보고서는 특정한 기간, 사건, 출현, 주제 또는 위치를 참조할 수도 있습니다.

QGIS에서 Report조판기 의 연장입니다.

보고서는 사용자가 자신의 GIS 프로젝트를 간결하고 구조적인 방식으로 출력할 수 있게 해줍니다.

Project ► New Report 메뉴 또는 Project ► Layout Manager 대화창에서 보고서를 생성할 수 있습니다.

참고

QGIS 보고서에 있는 맵도 인쇄 조판기와 지도책에 있는 맵과 동일한 방식으로 동작합니다. 여기에서는 QGIS 보고서의 세부 사항에 집중할 것입니다. 맵 처리에 대한 자세한 내용은 인쇄 조판기지도책 을 참조하십시오.

21.4.2. 시작하기

Layout Manager 대화창에서 New from template 드롭다운 목록의 Empty Report 를 선택한 다음 Create… 버튼을 클릭하면 보고서를 생성할 수 있습니다.

이 예시에서는 자연 지구(Natural Earth) 데이터셋 (1:10,000,000)의 몇몇 행정 경계, 인구 밀집 지역, 항구 및 공항을 사용합니다.

../../../_images/project-1.png

Project ► New Report 메뉴 옵션을 선택하면, 비어 있는 보고서를 생성합니다. 처음에는 별로 볼 것도 없습니다 ─ 이 대화창은 왼쪽에 있는 Report Organizer 패널을 제외하면 인쇄 조판 설계자와 매우 비슷합니다:

../../../_images/report-2.png

21.4.3. 조판기 보고서 작업 공간

QGIS 보고서는 여러 개의 내포된 부분들로 이루어질 수 있습니다. 비어 있는 새 보고서는 처음에 주요 보고서 부분만 가지고 있습니다. 이 보고서 부분을 위한 옵션은 Include report headerInclude report footer 뿐입니다. 이 옵션들을 활성화하면, 헤더가 보고서의 첫 번째 페이지(들)로 포함되고, 푸터가 마지막 페이지(들)를 구성할 것입니다. (필요한 경우 보고서의 개별 부분들을 여러 페이지로 만들 수 있습니다.) 헤더를 활성화하고 (Include report header) 옆에 있는 Edit 버튼을 클릭하십시오:

../../../_images/report_header.png

몇 가지 일이 일어납니다. 먼저, 설계자의 보고서 부분이 현재 편집중이라는 사실을 나타내는 편집 연필이 Report OrganizerReport 옆에 표시됩니다. 또 작은 Report Header 제목을 가진 새 페이지도 추가됩니다. 이 페이지는 기본적으로 랜드스케이프 방향이지만, 페이지를 오른쪽 클릭하고 Page properties 를 선택하면 이 속성을 (그리고 페이지의 다른 속성도) 변경할 수 있습니다. 이렇게 하면 페이지 Item properties 탭을 불러와서 페이지의 Size, Width, Height 는 물론 더 많은 속성을 설정할 수 있습니다.

QGIS 보고서에서, 보고서의 모든 구성 요소는 개별 조판으로 만들어집니다. 표준 인쇄 조판과 동일한 도구를 사용해서 보고서의 모든 항목을 생성하고 수정할 수 있습니다. 즉 사용자가 원하는 모든 라벨, 그림, 맵, 표 등을 조합해서 사용할 수 있습니다. 예시를 위해 보고서 헤더에 몇몇 항목을 추가해봅시다:

../../../_images/header.png

Include report footer 옵션을 활성화하고 Edit 버튼을 클릭해서 보고서에 간단한 푸터도 생성하겠습니다.

../../../_images/footer.png

다음 단계로 넘어가기 전에, 이 보고서를 내보내서 어떤 산출물이 나오는지 봅시다. Report 메뉴에서 내보내기를 할 수 있습니다 ─ 이 경우 Export Report as PDF… 메뉴를 선택해서 전체 보고서를 PDF 파일로 렌더링하겠습니다. 다음은 헤더와 푸터로 이루어진, 그리 인상적이지도 않은 산출물인 두 페이지짜리 PDF입니다:

../../../_images/headerfooter.png

좀 더 재미있는 보고서를 만들어볼까요. Report Organizer 에서 symbologyAdd Add Section 버튼을 클릭하면, 보고서에 추가할 새로운 부분을 선택할 수 있습니다.

../../../_images/add_section.png

Static Layout SectionField Group Section 옵션 가운데 하나를 선택할 수 있습니다.

Add Static Layout Section 옵션은 정적인 단일 본문(body) 조판을 추가합니다. 보고서 중간에 정적인 조판을 삽입하는 데 사용할 수 있습니다.

Field Group Section 옵션은 레이어의 모든 피처에 대해 필드 그룹의 본문 조판을 반복합니다. 선택한 그룹화 피처로 피처들을 정렬합니다. (오름차순/내림차순 정렬 옵션이 있습니다.) 필드 그룹 부분이 (예를 들어 다른 필드를 가진 또다른 필드 그룹 부분 같은) 자식 부분을 가지고 있는 경우, 그룹 피처에 대해 유일값을 가진 피처들만 반복 작업합니다. 이렇게 하면 내포된 보고서를 만들 수 있습니다.

이제 보고서에 Field Group Section 을 추가하겠습니다. 가장 기초적인 수준에서, Field Group Section지도책 생성 과 동등하다고 생각할 수 있습니다. 반복 작업할 레이어를 선택하면, 발견된 피처 각각에 대해 보고서가 필드 그룹 부분을 삽입할 것입니다. 새 Field Group Section 을 선택하면 관련된 새로운 설정 여러 개를 볼 수 있습니다:

../../../_images/field_group.png

이 경우 adm1name 필드의 값을 사용해서 ‘Admin Level 1’ 레이어의 모든 주(州)를 반복 작업하도록 필드 그룹을 설정했습니다. 헤더 및 푸터를 포함시키는 기존 옵션은 물론 이 부분에 body 를 포함시키는 새 옵션도 있습니다. 이 옵션으로 본문을 추가하고 편집해보겠습니다:

../../../_images/edit_group_body.png

이제 맵과 주의 이름을 표시하는 라벨로 본문을 구성합니다. 주의 이름을 포함시키기 위해, Add Item ► Add Label 메뉴 옵션을 선택한 다음 Insert or Edit an Expression… 을 통해 Main Properties 아래에서 텍스트를 데이터 정의했습니다.

다음 표현식을 사용했습니다(‘name’ 은 주의 이름을 담고 있는 ‘Admin Level 1’ 레이어 속성의 이름입니다.):

[% "name" %]

맵이 현재 보고서 피처를 따르도록 설정합니다(Controlled by Report 옵션을 체크해서 활성화합니다 ─ 지도책으로 제어 를 활성화하면 지도책이 현재 지도책 피처를 따르는 것과 동일합니다):

../../../_images/controlledbyreport.png

이제 보고서를 내보내면, 다음과 같은 산출물이 나옵니다:

../../../_images/report1.png

그림 21.68 보고서 헤더, 각 주에 대한 페이지와 보고서 푸터

헤더와 푸터 페이지가 있긴 하지만 이제 조금 지도책다워졌군요.

주(州) 그룹에 하위 부분을 추가해서 보고서를 좀 더 재미있게 만들어봅시다. 먼저 Report Organizer 에서 ‘Admin Level 1’ 필드 그룹을 선택한 다음, symbologyAdd Add Field 버튼을 클릭해서 새 Field Group Section 을 추가합니다:

../../../_images/subsection.png

Field Group Section 의 피처들을 반복 작업할 때, 상위(부모) 그룹의 정의 필드(이 경우 adm1name)와 일치하도록 피처들을 필터링할 것입니다. 이때, 추가한 하위 부분이 Populated Places 레이어를 반복 작업하면서 일치하는 각 지역에 대한 본문 부분을 추가할 것입니다. 주목할 점은 Populated Places 레이어가 adm1name 상위 레이어의 정의 필드와 동일한 이름을 가진 속성을 보유하고 있다는 것입니다. 즉 각 지역을 해당 지역이 있는 주에 태그한다는 뜻입니다. (운이 좋다면 사용자 데이터가 이미 이런 구조로 되어 있을 겁니다. 그렇지 않다면, 위치로 속성 결합 공간 처리 알고리즘을 실행해서 사용자 고유의 필드를 생성하세요.) 이 보고서를 내보내면, QGIS는 Admin Level 1 레이어의 첫 번째 주를 가져온 다음 모든 Populated Places 레이어를 일치하는 adm1name 값으로 반복 작업할 것입니다. 다음은 그 결과물입니다:

../../../_images/report3.png

여기까지, 인구 밀집 지역 그룹에 대한 기초적인 본문을 지역의 맵과 일부 지역의 속성 테이블을 포함해서 생성했습니다. 이제 보고서는 보고서 헤더, 첫 번째 주에 대한 페이지, 해당 주에 있는 인구 밀집 지역 전체에 대한 페이지, 그 다음 주에 대한 페이지와 해당 주의 인구 밀집 지역 페이지, 그리고 마지막으로 보고서 푸터로 구성됐습니다. 인구 밀집 지역 그룹에 헤더를 추가하고자 했다면, 아래에 있는 그림과 같이 각 주의 인구 밀집 지역 페이지들 앞에 삽입되었을 것입니다.

마찬가지로, 인구 밀집 지역 그룹에 푸터를 추가했다면 각 주의 마지막 지역 뒤에 삽입되었을 것입니다.

내포된 하위 부분 이외에도, 보고서에 하위 부분을 연속해서 포함시킬 수 있습니다. ‘Admin Level 1’ 그룹에 Airports 를 위한 두 번째 하위 부분을 추가하는 경우, (Airports 레이어가 상위 그룹에 링크할 수 있는 adm1name 속성을 가지고 있는 경우) 보고서는 먼저 각 주별로 모든 인구 밀집 지역을 목록화한 다음, 다음 주로 넘어가기 전에 해당 주에 있는 모든 공항도 목록화할 것입니다.

../../../_images/report_consec.png

여기서 중요한 점은 Airports groupPopulated Places group 의 하위 부분이 아니라 Admin Level 1 group 의 하위 부분이라는 사실입니다.

이 경우 보고서는 다음과 같이 구성될 것입니다(주기(州旗)도 추가됐다는 사실을 기억하십시오. 이런 방식으로 피처 특화 그림을 추가하는 방법을 이 다음에 설명합니다):

../../../_images/report_all_img.png

21.4.3.1. 보고서에 그림 포함시키기

그림은 보고서에 매우 유용할 수 있습니다. QGIS는 그림을 보고서의 정적인 일부와 동적인 일부, 양쪽으로 사용할 수 있습니다. 표준적인 인쇄 조판의 경우와 동일한 방법으로 그림을 추가합니다. 정적인 보고서의 일부인 경우 (그리고 동적인 부분의 정적인 그림인 경우) 더 설명할 것은 없습니다.

그러나 보고서 피처에 맞게 다듬어진 그림을 원한다면, 사용자 레이어가 포함시킬 그림을 정의하는 데 사용할 수 있는 속성을 가지고 있어야만 합니다.

QGIS는 보고서 이미지에 대해 절대 파일명에 의존합니다.

동적인 그림의 경우, 먼저 그룹의 본문 부분에 그림을 동일한 방법으로 추가하십시오. 그림 Item properties 패널에서 dataDefine Data defined override 버튼으로 Image Source 를 설정한 다음 이미지의 절대 경로를 담고 있는 속성을 선택하거나, 또는 Edit… 버튼을 클릭한 다음 이미지의 절대 경로를 생성하는 표현식을 입력하십시오.

다음 예시 표현식은 프로젝트 파일이 위치한 디렉터리와 (@project_path) 파일명 생성 기반이 되는 속성을 (adm1name) 사용해서 그림을 가리키는 절대 경로를 지정하기 위해 문자열을 연결합니다. (이 경우 adm1name 속성의 문자열을 대문자로 변환한 다음 그 뒤에 '_flag.png' 를 붙여서 파일명을 생성합니다.)

concat(@project_folder, '/naturalearth/pictures/' ,
       upper("adm1name"), '_flag.png')

즉 그림이 프로젝트 파일 디렉터리의 naturalearth/pictures 하위 디렉터리에 위치한다는 뜻입니다.

../../../_images/report_dynamic_picture.png

21.4.3.2. 맵에서 현재 보고서 피처를 강조하기

앞의 보고서에서, 맵에 있는 보고서 피처를 강조하는 데 (주의 경우) 강조(highlight)를, (인구 밀집 지역의 경우) 원을 사용했습니다. 맵에 있는 보고서 피처를 (맵 중앙에 배치하는 것을 제외하고) 강조하려면, 피처의 @id 와 지도책의 @atlas_featureid 를 비교해서 스타일을 데이터 정의해야만 합니다.

예를 들어, 보고서 피처에 다른 피처보다 더 두꺼운 라인/경계선을 사용하고자 하는 경우 라인 너비를 데이터 정의할 수 있습니다:

if($id=@atlas_featureid, 2.0, 0.1)

보고서 피처의 폴리곤 외곽선의 너비는 2단위가 되는 반면, 다른 모든 피처의 외곽선 너비는 0.1단위가 될 것입니다. 색상도 데이터 정의할 수 있습니다. 다음 예시는 보고서 피처에는 불투명한 진한 마젠타 색상을, 다른 피처에는 반투명한 연한 회색을 지정하는 표현식입니다:

if($id=@atlas_featureid, '#FF880088', '#88CCCCCC')

21.4.3.3. 더 많은 1레벨 그룹

부분 헤더 및 푸터와 함께 내포 부분과 연속 부분을 결합하면, 엄청난 유연성을 얻을 수 있습니다. 예를 들어, 다음 보고서에서 Ports 에 대한 또다른 필드 그룹을 주 보고서의 자식으로 추가하십시오. 이제 인구 밀집 지역과 공항과 함께 주들을 나열한 다음, 해당 지역에 있는 항구를 요약해서 나열할 것입니다:

../../../_images/report_flex.png

이렇게 내보내면 보고서의 마지막 부분에 다음과 같이 산출됩니다:

../../../_images/ports.png

21.4.4. 내보내기 설정

보고서를 내보낼 때 (Report ► Export Report as Images… / SVG… / PDF…) 파일명을 입력하라는 요청을 받을 것입니다. 그 다음 내보내기 설정을 가장 적절한 산출물을 얻기 위해 미세 조정할 수 있습니다.

이제 알겠지만, QGIS의 보고서는 대단히 강력하고 유연하답니다!

참고

이 정보들은 GIS 소프트웨어 회사인 노스로드(North Road)의 블로그 게시글, Exploring Reports in QGIS 3.0 - the Ultimate Guide! 를 손본 것입니다.