중요

번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 100.00% 번역되었습니다.

11.2. 수업: WMS 서비스하기

이 예제에 쓰이는 데이터는 여러분이 다운로드한 교육 데이터qgis-server-tutorial-data 하위 디렉터리에 있습니다. 편의를 위해 그리고 발생할 수도 있는 권한 문제를 피하기 위해, 우리는 이 파일들이 /home/qgis/projects 디렉터리에 저장되어 있다고 가정할 것입니다. 따라서 여러분의 경로에 다음 지침을 적용하십시오.

이 시연 데이터는 이미 QGIS 서버를 통해 서비스될 준비가 되어 있는 world.qgs 라는 QGIS 프로젝트를 담고 있습니다. 여러분 자신의 프로젝트를 사용하고 싶거나 프로젝트를 어떻게 준비해야 하는지 알고 싶은 경우, 사용자 프로젝트 환경 설정하기 절을 참조하세요.

참고

이 강의에서는 독자들이 파라미터와 파라미터 값을 쉽게 구분할 수 있도록 URL을 보여줍니다. 즉 일반적인 서식이 다음과 같다면:

...&field1=value1&field2=value2&field3=value3

이 교재에서는 다음 서식을 사용합니다:

&field1=value1
&field2=value2
&field3=value3

이 내용을 모질라 파이어폭스에 붙여넣으면 제대로 작동할 것이지만, 크롬 같은 다른 웹 브라우저들의 경우 field:parameter 쌍 사이에 원치 않는 공백을 삽입할 수도 있습니다. 따라서 이런 문제가 발생하는 경우 파이어폭스를 사용하거나 또는 URL을 한 줄 서식으로 수정하면 됩니다.

웹 브라우저에서 또는 cURL 을 사용해서 WMS GetCapabilities 요청을 생성해봅시다:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetCapabilities
&map=/home/qgis/projects/world.qgs

이전 수업의 아파치 환경설정에서는 QGIS_PROJECT_FILE 변수가 기본 프로젝트를 /home/qgis/projects/world.qgs 로 설정했습니다. 하지만 앞의 요청에서는 map 파라미터를 명시적으로 사용해서 이 파라미터가 어떤 프로젝트라도 가리킬 수 있다는 것을 보였습니다. 앞의 요청에서 map 파라미터를 삭제하더라도 QGIS 서버는 동일한 응답을 산출할 것입니다.

어떤 WMS 클라이언트든 GetCapabilities URL을 가리키면, 예를 들어 해당 서버가 어떤 레이어들을 가지고 있는지, 지리적으로 커버하는 영역이 어떻게 되는지, 어떤 포맷인지, WMS의 버전은 무엇인지 등등의 웹 맵 서버의 정보의 메타데이터를 가진 XML 문서 형식의 응답을 받습니다.

QGIS도 WMS/WMTS 클라이언트 이기 때문에 앞의 GetCapabilities URL을 사용해서 새 WMS 서버 연결을 생성할 수 있습니다. 그 방법을 알고 싶다면 수업: WMS(Web Mapping Service) 또는 WMS/WMTS 서버 선택하기 절을 참고하세요.

여러분의 QGIS 프로젝트에 countries WMS 레이어를 추가하면 다음 그림과 같은 이미지를 얻게 될 것입니다:

../../../_images/qgis_getmap_request.png

그림 11.31 QGIS 서버의 WMS 서비스로부터 countries 레이어를 사용하는 QGIS 데스크탑

참고

QGIS 서버는 world.qgs 프로젝트에 정의되어 있는 레이어들을 서비스합니다. QGIS로 이 프로젝트 파일을 열면 countries 레이어의 스타일이 여러 가지 있다는 사실을 알 수 있습니다. QGIS 서버도 이 사실을 알고 있기 때문에 요청에서 원하는 스타일을 선택할 수 있습니다. 이 이미지는 classified_by_population 스타일을 선택한 것입니다.

11.2.1. 로그 작업

서버를 설정할 때, 로그 기록은 언제나 중요합니다. 어떤 일이 일어나고 있는지 보여주기 때문입니다. 이 프로젝트에서는 *.conf 파일에 다음 로그들을 설정했습니다:

  • QGIS 서버 로그: /logs/qgisserver.log

  • qgisplatform.demo 아파치 접근 로그: qgisplatform.demo.access.log

  • qgisplatform.demo 아파치 오류 로그: qgisplatform.demo.error.log

이 로그 파일들은 단순 텍스트 파일들이기 때문에 텍스트 편집기를 사용해서 확인할 수 있습니다. 터미널에서 tail 명령어를 다음과 같이 사용해도 됩니다: sudo tail -f /logs/qgisserver.log

이 명령어를 실행하면 터미널에 해당 로그 파일에 작성되는 내용을 계속 출력할 것입니다. 각 로그 파일에 대해 다음과 같이 터미널 3개를 열어놓을 수도 있습니다:

../../../_images/terminal_tail_log.jpg

그림 11.32 QGIS 서버 로그 출력을 가시화하기 위해 tail 명령어를 사용하기

QGIS 서버의 WMS 서비스를 사용하기 위해 QGIS 데스크탑을 사용할 때, 접근 로그에서 QGIS가 전송하는 모든 요청을 보게 될 것이고, QGIS 서버 로그에서는 QGIS 서버의 오류를 보게 될 것입니다.

참고

  • 다음 절들에 나오는 로그들을 살펴보면 어떤 일이 일어나고 있는지에 대해 더 잘 이해하게 될 것입니다.

  • QGIS 서버 로그를 살펴보면서 아파치를 다시 시작하면, 작동 방식에 대한 몇 가지 추가 정보를 얻을 수 있습니다.

11.2.2. GetMap 요청

QGIS 데스크탑은 다른 모든 WMS 클라이언트처럼 countries 레이어를 보기 위해 GetMap 요청을 사용합니다.

단순 요청은 다음처럼 보입니다:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries
&FORMAT=image/jpeg

이 요청은 다음 이미지를 출력할 것입니다:

그림: QGIS 서버에 전송된 단순 GetMap 요청

../../../_images/getmap_simple_request.jpg

그림 11.33 단순 GetMap 요청에 대한 QGIS 서버의 응답

11.2.3. ★★☆ 혼자서 해보세요: 이미지와 레이어 파라미터 변경하기

앞의 요청을 바탕으로, countries 레이어를 다른 레이어로 바꿔봅시다.

어떤 다른 레이어들을 사용할 수 있는지를 알아보려면 QGIS에서 world.qgs 프로젝트 파일을 열어 그 내용을 살펴보면 됩니다. 다만 WMS 클라이언트는 QGIS 프로젝트에 접근할 수 없다는 사실을 기억하십시오. WMS 클라이언트는 그저 케이퍼빌리티 문서의 내용만 볼 수 있을 뿐입니다.

또한 환경설정 옵션도 있기 때문에, WMS 서비스를 서비스할 때 QGIS가 QGIS 프로젝트에 있는 기존 파일 가운데 일부를 무시합니다.

따라서 QGIS 데스크탑에서 GetCapabilities URL을 가리킬 때 레이어 목록을 살펴보거나 또는 GetCapabilities XML 응답에서 다른 레이어 이름들을 찾아보면 됩니다.

여러분이 찾을 수 있고 또 작동하는 레이어 이름들 가운데 하나가 countries_shapeburst 입니다. 다른 이름들도 찾을 수 있겠지만, 이런 소축척에서는 가시화되지 않을 수도 있기 때문에 응답으로 비어 있는 이미지를 얻을 수 있다는 사실을 잊지 마십시오.

반환되는 이미지의 유형을 image/png 로 변경하는 등 앞의 요청에서 다른 파라미터들을 건드려봐도 좋습니다.

11.2.4. ★★☆ 따라해보세요: 필터, 불투명도 및 스타일 파라미터 사용하기

또다른 레이어, 몇몇 기본 파라미터들, FILTEROPACITIES 를 추가하는 또다른 요청을 생성해봅시다. 다만 표준 STYLES 파라미터를 사용해서 말이죠.

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&FORMAT=image/jpeg
&LAYERS=countries,countries_shapeburst
&STYLES=classified_by_name,blue
&OPACITIES=255,30
&FILTER=countries:"name" IN ( 'Germany' , 'Italy' )

이 요청은 다음 이미지를 출력할 것입니다:

../../../_images/getmap_filter_opacities.jpg

그림 11.34 FILTER와 OPACITIES 파라미터를 사용한 요청에 대한 응답

이 이미지에서 볼 수 있는 대로, QGIS 서버에 다른 것들도 있지만 무엇보다 countries 레이어에서 GermanyItaly 만 렌더링하도록 요청했습니다.

11.2.5. ★★☆ 따라해보세요: 레드라이닝 사용하기

레드라이닝(redlining) 기능과 기본 사항 절에서 자세히 설명하는 SELECTION 파라미터를 사용하는 또다른 GetMap 요청을 생성해봅시다:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries,countries_shapeburst
&FORMAT=image/jpeg
&HIGHLIGHT_GEOM=POLYGON((590000 6900000, 590000 7363000, 2500000 7363000, 2500000 6900000, 590000 6900000))
&HIGHLIGHT_SYMBOL=<StyledLayerDescriptor><UserStyle><Name>Highlight</Name><FeatureTypeStyle><Rule><Name>Symbol</Name><LineSymbolizer><Stroke><SvgParameter name="stroke">%233a093a</SvgParameter><SvgParameter name="stroke-opacity">1</SvgParameter><SvgParameter name="stroke-width">1.6</SvgParameter></Stroke></LineSymbolizer></Rule></FeatureTypeStyle></UserStyle></StyledLayerDescriptor>
&HIGHLIGHT_LABELSTRING=QGIS Tutorial
&HIGHLIGHT_LABELSIZE=30
&HIGHLIGHT_LABELCOLOR=%23000000
&HIGHLIGHT_LABELBUFFERCOLOR=%23FFFFFF
&HIGHLIGHT_LABELBUFFERSIZE=3
&SELECTION=countries:171,65

웹 브라우저에 이 요청을 붙여넣으면 다음 이미지를 출력할 것입니다:

../../../_images/getmap_redlining_selection.jpg

그림 11.35 REDLINING 기능과 SELECTION 파라미터를 사용한 요청에 대한 응답

이 이미지에서, SELECTION 파라미터를 사용해서 ID가 171과 65인 나라들을 (루마니아와 프랑스를) 노란색으로 강조했고 REDLINING 기능을 사용해서 QGIS Tutorial 이라는 직사각형 라벨을 중첩시켰다는 사실을 알 수 있습니다.

11.2.6. GetPrint 요청

QGIS 서버의 멋진 기능들 가운데 하나가 QGIS 데스크탑의 인쇄 조판(print layout)을 사용할 수 있다는 것입니다. GetPrint 절에서 이에 대해 배울 수 있습니다.

QGIS 데스크탑으로 world.qgs 프로젝트를 열어보면 Population distribution 이라는 이름의 인쇄 조판을 찾을 수 있습니다. 이 놀라운 기능을 보여주는 단순화된 GetPrint 요청은 다음과 같습니다:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?map=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0&
REQUEST=GetPrint
&FORMAT=pdf
&TRANSPARENT=true
&SRS=EPSG:3857
&DPI=300
&TEMPLATE=Population distribution
&map0:extent=-432786,4372992,3358959,7513746
&LAYERS=countries
../../../_images/getprint.jpg

그림 11.36 앞의 GetPrint 요청으로 반환된 PDF 화면

여러분이 GetMap, GetPrint 등등의 요청들을 작성하는 일은 당연히 어렵습니다.

QGIS 웹 클라이언트(Web Client) 줄여서 QWC는 QGIS 서버와 함께 사용할 수 있는 웹 클라이언트 프로젝트로, 여러분이 웹 상에 자신의 프로젝트를 공개하거나 또는 그 가능성을 더 잘 이해할 수 있도록 QGIS 서버 요청을 생성하는 데 도움을 줄 수 있습니다.

다음과 같이 설치하면 됩니다:

  • qgis 사용자로서, cd /home/qgis 명령어를 사용해서 홈 디렉터리로 가십시오.

  • 여기 에서 QWC 프로젝트를 다운로드해서 압축 해제하십시오.

  • /var/www/html 디렉터리를 가리키는 심볼릭 링크(symbolic link)를 생성하십시오. 이 디렉터리가 가상 호스트 환경설정에 설정한 DocumentRoot 입니다. 압축 파일을 /home/qgis/Downloads/QGIS-Web-Client-master 폴더에 압축해제 했다면 sudo ln -s /home/qgis/Downloads/QGIS-Web-Client-master /var/www/html/ 명령어로 심볼릭 링크를 생성할 수 있습니다.

  • 웹 브라우저에서 http://qgisplatform.demo/QGIS-Web-Client-master/site/qgiswebclient.html?map=/home/qgis/projects/world.qgs 에 접속하십시오.

이제 다음 그림과 같은 맵을 볼 수 있을 것입니다:

../../../_images/qwc.jpg

그림 11.37 world.qgs 프로젝트를 사용하는 QGIS 웹 클라이언트

QWC에서 인쇄 버튼을 클릭하는 경우 GetPrint 요청을 쌍방향 작업으로 생성할 수 있습니다. QWC에서 ? 아이콘을 클릭하면 QWC의 가능성을 더 잘 발견할 수 있게 해주는 도움말도 볼 수 있습니다.

11.2.7. 결론

QGIS 서버를 사용해서 WMS 서비스를 제공하는 방법을 배웠습니다.

11.2.8. 다음은 무엇을 배우게 될까요?

QGIS를 유명한 GRASS GIS의 프론트엔드로 사용하는 방법을 배울 것입니다.