본 카테고리의 이전글(PostGIS를 이용한 격자 만들기)에서 사각형 그리드 격자를 만들었습니다. 격자를 제작한 목적은 이전글에서 설명했듯이 특정 데이터셋의 격자별 집계 수행을 통해 분석을 진행하기 위함입니다. 본 게시글을 통해 실제 집계를 설명합니다.

1. 데이터 준비

 

격자는 준비했습니다. 실제 집계의 대상이 되어야 하는 데이터가 필요합니다. 저는 "공공데이터포털(data.go.kr)"에 접근하여 "데이터셋 > 표준데이터"메뉴에서 "전국 CCTV 표준 데이터"를 선택했습니다. CSV형식으로 제공받았기에 실제 PostGIS에 적재하는 전처리 작업이 요구됩니다. 전처리 작업 절차는 아래와 같습니다.

  1. Qgis에서 "쉽표로 구분된 텍스트 레이어 추가" 후 형상을 확인합니다. 이 후 DB연결을 통해 PostGIS에 적재합니다.
  2. Qgis에서 Import된 레이어를 선택한 후 내보내기를 실시하여 Shp 형식으로 저장합니다.
  3. Qgis에서 데이터베이스 연결 후 "파일가져오기"를 실시하여 PostGIS에 적재합니다.
  4. 원본에 위도, 경도 속성이 존재하며, 좌표계는 4326입니다. 필자는 PostGIS에 적재 후 좌표계를 5179로 변환했습니다. 미리 제작된 격자가 5179좌표계이기 때문에 변환했습니다. 
  5. 마지막으로 공간인덱스를 생성합니다.

2. 집계 실행

실제 질의는 아래처럼 단순합니다. SQL의 세부사항을 설명하지는 않겠습니다. 격자개수만큼 박복하며 교차여부를 검사하여 CCTV를 격자별로 개수합니다. 즉 격자 개수가 많으면 많을 수록 실행 성능은 떨어질 수 밖에 없습니다. 집계하고자 하는 대상에 따라 격자크기가 결정되야 합니다.
또한 눈썰미가 있다면 "count()"함수를 대신하여 숫자 필드를 대상으로 sum, median 등 다양한 함수의 적용이 가능합니다. 개수가 아닌 양, 추세 등이 중요한 경우입니다.



CREATE TABLE tempsubtotal AS
SELECT count(*) AS cnt, bound.geom AS geom
FROM temp_20200206020231 bound
LEFT JOIN ms101_20200207020227 counted ON ST_Intersects(bound.geom, counted.geom)
GROUP BY bound.geom;

이 후 Qgis를 통해 PostGIS에 접속하여 새로이 생성된 집계 테이블을 레이어로 추가한 후 보게되면, CCTV가 많을 수록 짙은 빨간색으로 나타나는 것을 볼 수 있습니다. 이는 Qgis의 시각화 속성을 이용한 것으로 고정색이 아닌 특정 컬럼을 대상으로 시각화를 지정한 것 입니다. 

데이터 및 처리는 PostGIS 에서 수행하고, 시각화는 사용자가 가지는 도구를 이용합니다. 아마도 실제 프로젝트에 적용한다면 데이터 처리 영역과 시각화 영역은 특별한 경우를 제외하고 철저히 분리하는 것이 좋습니다. 

3. 맺으며

PostGIS 사랑스럽지 않습니까? DBMS에 SDE(Spatial Data Extension)를 추가하는 것만으로 GIS업무의 많은 부분을 처리할 수 있습니다. 시각화라는 부분을 제외하면 일반적 공공정보화사업에 무리없이 사용될 수 있습니다. 정의도 제대로 못하는 GIS엔진이 정말 필요할까요? 

 

+ Recent posts