블루닷 스쿨

[큐지아이에스, QGIS]② 콜레라지도 실습으로 QGIS 기본 기능 배우기

2024-09-12
조회수 359
데이터 활용 역량 강화를 위한 블루닷 스쿨 🙋
📌<현장의 변화를 위한 GIS(매핑) 함께 공부하기>를 위한 교육자료입니다.
이 교육은 아름다운재단 지원으로 진행합니다. 


존 스노우의 콜레라 지도를 만들어 보겠습니다.

실습을 위한 자료와 데이터는 GeoDa Data and Lab(링크 클릭) 에서 구했습니다.

이 사이트에서 공개하는 데이터셋의 문서를 보면 아래와 같이 브로드가의 펌프 주변으로 거리에 따른 콜레라 사망 밀도를 시각화한 지도가 있습니다. 실습 데이터를 이용해서 아래와 같은 지도를 만들면서 QGIS의 기초적인 사용법을 배워보겠습니다. 이 데이터에 대한 설명을 번역한 것은 오른쪽 텍스트와 같습니다.

💾 Broad Street 펌프 고리에 의한 콜레라 사망자 집계 (‘deaths_by_bsrings’)

 

이 데이터셋은 이전의 두 데이터셋을 결합한 것입니다: 개별 콜레라 사망자 (deaths 참조)와 6개의 펌프 데이터셋에서 추출된 Broad Street 펌프 (pumps 참조).  Broad Street 펌프의 위치에서 시작하여 펌프 주위로 5미터 간격으로 진행하는 60개의 폴리곤을 만들었습니다. 이러한 고리는 QGIS에서 만들어 콜레라 사망자 수를 비교하기 위해 사용되었습니다; 따라서 데이터셋에는 각 고리별 사망자 수가 포함되어 있습니다. 외부 고리가 내부 고리보다 더 넓은 면적을 차지하기 때문에, 우리는 고리 면적을 제곱미터로 포함시켰습니다. 이 변수는 아래에 표시된 것처럼 사망 밀도, 즉 제곱미터당 사망자 수를 계산하기 위해 사용되었습니다.

(DeepL 번역기 사용)

출처 : 시카고대학. (2023). John Snow & the Cholera Epidemic in Mid-19th Century London: 8 Datasets With Documentation for Use in GeoDa. p.10.


1.  QGIS 프로젝트 생성하기

작업을 시작할 때 프로젝트를 생성하면 좋습니다. 일종에 프로젝트 파일을 만드는 것인데요. 작업한 여러 개의 레이어(지도)를 다시 불러오지 않아도 프로젝트의 마지막 저장 상태로 볼 수 있습니다. 컴퓨터에 작업 폴더를 하나 만들고 그 안에 프로젝트를 저장하는 것이 좋습니다. 


2. 플러그인 설치

QGIS는 기능을 추가할 수 있는 다양한 플로그인이 있습니다. 매우 유용하죠. 우선 이번 실습에서 배경지도로 오픈스트리트맵을 사용할 건데요. 이 배경지도를 위해 OpenLayers Plugin을 설치해보겠습니다.

  • 플러그인 > 플러그인 관리 및 설치 > 설정 > 실험 플러그인도 표시하기 체크 > 모두 > 'openlayer 검색 > 플러그인 설치하기


3. 오픈스트리트 맵 열기

  • 웹 > 오픈레이어 플러그인(OpenLayer plugin) > 오픈스트리트맵(OpenStreetMap) 열기


4. SnowMap(TIF형식) 열기 : 이미지로된 존스노우지도(영국 런던 브로드가 주변) 열기

  • 레이어 > 레이어 추가 > 래스터 레이어 추가 > 소스-파일 찾아서 열기 > SnowMap(TIF파일) 열기 > 추가

  • 좌표계 > QGIS에서 디폴트된 것으로 확인
  • 오른쪽 상단의 그림처럼 전세계 지도(오픈스트리트맵) 위에 레이어 추가됨. (너무 작아서 안보임)
  • 영국 런던으로 확대하면 우측 하단의 그림처럼 오픈스트리트맵 위에 존스노우지도(레이어)가 추가된 것을 확인 할 수 있음.


4. 우물, 사망자 데이터 불러오기

  • 레이어 > 레이어 추가 > 벡터 레이어 추가 > 파일찾기 > Cholera_Deaths.shp 파일 열기

아래 그림처럼 콜레라 사망자 레이어가 점으로 표시되었습니다.

콜레라 사망자의 정보를 확인해 보겠습니다. 속성 테이블 보기인데요.

  • 콜레라 사망자 레이어에 마우스 오른쪽 클릭 > 대화창에서 속성 테이블 열기
  • 오른쪽 그림에 속성 테이블이 보입니다. Count가 콜레라 사망자 수 입니다.


이번에는 펌프 파일을 불어오겠습니다.

  • 레이어 > 레이어 추가 > 벡터 레이어 추가 > 파일찾기 > Pumps.shp 파일 열기


콜레라 사망자와 펌프의 심볼이 구분이 잘 안가네요.

펌프의 심볼 색과 모양, 크기를 바꿔보겠습니다.

  • 펌프 레이어 마우스 오른쪽 클릭 > 대화창에서 속성 클릭 > 심볼 > 단일심볼 > 색상, 크기, 모양 선택하기


5. 문제의 브로드가 펌프로 부터 다중고리 버퍼 생성하기

6개의 펌프 중 브로드가 펌프만 선택을 합니다.

  • 영역 또는 단일 클릭으로 피처 선택 > 브로드가에 있는 펌프 선택



여러개의 고리가 있는 버퍼 만들기

  • 툴바에서 공간처리 > 툴박스 > 다중 고리 버퍼 검색하여 선택

다중고리버퍼 값(파라미터) 입력하기 : 실습용으로 아래 값을 입력, 다른 프로젝트에서는 상황에 맞게 값 입력

  • 입력레이어 > 펌프 선택 + 선택한 피처만 체크
  • 고리개수 : 60
  • 고리사이 거리 : 5미터

아래 그림처럼 브로드가의 펌프를 중심으로 5미터 간격의 60개 고리가 있는 버퍼가 만들어 졌습니다.

레이어의 위치를 마우스로 옮겨 펌프와 사망자 포인트가 잘 보이도록 합니다.

다중고리버퍼의 속성테이블을 보면 중심점에서의 거리(distance) 값을 확인 할 수 있습니다.


6. 펌프와의 거리에 따른 사망밀도 계산하기

먼저 5미터 간격의 60개 고리가 있는 다중고리에 포함된 사망자 수를 다중고리 속성 테이블의 열로 추가해야 합니다.

이를 위해 폴리곤에 포함하는 포인트 개수 계산을 이용합니다.

  • 벡터 > 분석도구 > 폴리곤에 포함된 포인트 개수 계산

입력값은 아래 그림처럼 포인트를 포함 할 폴리곤 파일을 선택하고, 포인트 파일을 선택합니다.

  • 폴리곤 : 다중고리 버퍼 선택
  • 포인트 : Cholera_Deaths 선택
  • 가중치 필드로 Count(사망자 수) 선택 : 가중치를 선택하지 않으면 폴리곤에 포함된 포인트의 개수만 계산됩니다. 그러나 가중치를 선택하면 폴리곤에 포함된 포인트의 사망자 수의 합으로 계산됩니다.

각고리에 포함된 포인트의 사망자수의 합계가 새로운 필드 값으로 만들어 졌습니다.

사망밀도 = 사망자수 / 각고리의 면적 입니다.

각 고리의 면적 값이 없기 때문에 이를 만들어 보겠습니다.

  • 속성테이블 > 필드계산기 열기 

  • 새로운 필드 생성 체크
  • 산출 필드 이름 : '면적' 입력
  • 산출 필드 유형 : '정수' 선택 => 면적을 소수점까지 필요 없으니.
  • 면적계산함수 선택 : 도형 > $area


면적 필드가 생성되었습니다.


이제 사망밀도(사망자/면적) 필드를 만들어야 합니다.

필드계산기를 열어 필드 값을 이용해서 계산합니다.

  • 필드계산기 > 산출필드 이름 입력, 산출 필으 유형 선택(소수점으로 나오니 실수로)
  • 필드 값을 이용해서 사망밀도 계산


사망밀도 필드가 만들어졌으니 이제 편집모드를 끕니다.


7. 단계구분도 그리기
사망밀도 값의 크기를 5분위로 분류하여 값이 큰 경우 빨간색, 값이 낮은 경우 파란색 계열로 표시하는 단계구분도를 그립니다.

  • 레이어 속성 > 심볼 > 단계구분 선택 > 값 선택(사망밀도) > 색상표 선택 (그레이디언트 반전 선택)
  • 분류 모드 등개수(분위수) 선택 > 범주 선택(5개)


아래 그림처럼 브로드가 펌프를 중심으로 거리별 사망밀도를 나타내는 단계구분도가 만들어졌습니다.

펌프와 가까울 수록 사망밀도가 높음을 직관적으로 알 수 있지요? 😀


8. 저장하기
이렇게 작업이 끝난 레이어는 임시파일이기 때문에 저장을 해야 합니다.

  • 레이어 오른쪽 마우스 클릭 > 대화창에서 내보내기 > 피처를 다른 이름으로 저장
  • 포멧(파일형식) 세이프(shp) 파일 선택 > 저장위치 찾아서 > 파일이름 입력하고 저장


지도를 이미지로 내보내기

  • 툴바에서 프로젝트 > 가져오기/내보내기 > 지도를 이미지로 내보내기
  • 저장할 이미지 범위 정하기 > 캠버스에 그리기



작업과정에서 생긴 불필요한 레이어는 삭제합니다.


마지막으로 프로젝트를 저장합니다.


여기까지 콜레라 지도를 통해

레이어 불러오기, 버퍼 만들기, 필드 계산하기, 단계구분도 그리기를 해봤습니다.  금방 익숙해 집니다. 😉