QGIS 표현식을 이용하여 원하는 객체를 선택하는 방법을 알려드리겠습니다.

해당 기능은 QGIS를 이용하여 데이터 오픈 시, 원하는 객체를 별도로 저장하거나 확인하는데 유용합니다.

활용 데이터

    • 국가공간정보포털 > 오픈마켓 > 행정구역시군구_경계 데이터

시나리오

목적 : 행정구역시군구_경계(경북) 데이터에서 법정동 코드가 478로 시작되는 지역의 객체만 추출

    • QGIS를 통해 데이터의 속성테이블을 확인
    • 행정표준코드관리시스템 법정동 코드 조회를 통해 법정동 코드 및 위치 확인 (선택 객체 추출 후, 확인용)
    • 표현식을 이용한 객체선택 표현식으로 478로 시작하는 법정동 코드의 객체 추출 

 

1. 행정구역시군구_경계 데이터(경북)를 QGIS에서 오픈합니다. 

 

2. QGIS에서 속성테이블을 확인합니다.

    • 레이어 > 우클릭 > 속성 테이블 열기

 

    • 속성테이블의 법정동 코드 컬럼 확인

속성테이블을 보게되면 첫번째 컬럼 ADM_SECT_C가 법정동 코드로 확인됩니다. 법정동 코드가 맞는지 확인은 행정표준코드관리시스템 법정동 코드 조회를 통해 확인합니다 (https://www.code.go.kr/stdcode/regCodeL.do)

 

3. [표현식을 이용한 객체선택] 버튼 클릭 및 객체 선택 표현식 입력

    • 표현식을 이용한 객체선택 아이콘을 클릭

 

여기부터 핵심입니다 집중!!!!!!!!!!!!!!!!!!

첫 번째로 컬럼을 선택하기 위해 위 그림에 표시된 [필드와 값]부분을 선택하여 법정동 코드 등록되어있는 컬럼을 더블 클릭합니다!!

그러면 좌측화면에 "ADM_SECT_C"라고 표시됩니다.

두 번째로 [연산자]부분을 선택하여 LIKE를 더블 클릭합니다. 

"[필드명]" LIKE '찾을 값' 형태로 생각하시면 좋겠습니다. 

그리고!!! 중요한 부분!!!!!!!!! [필드명]부분은 "" 요렇게!!! 찾을 값은 '' 요렇게 작성합니다. 저도 이유는 잘 모르겠네요;;;;

뒤에 %표시는 전체를 의미합니다. 저는 법정동 코드가 478로 시작하는 모든 법정동 코드를 찾기 위해 '478%'이렇게 입력했습니다. 만약 '%478%' 이렇게 앞뒤로 넣게되면 중간부분에 478 숫자가 들어간 모든 값을 찾을겁니다.

 

마지막으로 우측 하단에 객체 선택이라는 버튼이 있습니다. [객체 선택]버튼을 클릭합니다.

3. 선택된 객체로 이동

화면 뒤쪽이 보이시나요??? 법정동 코드 478로 시작하는 데이터가 4개이고 속성테이블 뒤편 화면을 보시면 선택된 객체가 노란색으로 나타납니다.

선택된 객체 우클릭 시, 위 그림처럼 나타납니다. 3번째 [Zoom to Feature]를 클릭합니다. 그러면 선택한 객체의 위치로 이동합니다.

 

4. 확인

법정동 코드가 478로 시작하는 4개 지역이 선택되어 있고, 그 지역으로 이동하여 QGIS상에서 보여줍니다.

만약 선택한 객체를 별로의 shp파일로 저장을 원하신다면 아래 그림처럼 진행하시면 되겠습니다.

선택한 객체를 다른이름으로 저장(shp, dxf 등...) 방법은 국가공간정보포털 전문가iN에 있는 이미지를 이용하여 설명하겠습니다.

 

<이미지 출처 : 국가공간정보포털 전문가iN>

<이미지 출처 : 국가공간정보포털 전문가iN>

 

그리고 선택한 객체만 저장하기 위해 위 체크박스를 선택하시면 표현식을 이용해 선택한 객체를 별도의 shp파일로 저장할 수 있습니다.

 

 

Qgis를 이용한 shape 파일 dxf파일 변환

국가공간정보 포털에서 연속지적도를 다운로드 받아 shape파일을 dxf파일로 변환하는 작업을 하려고 합니다.

  • Qgis 버전 2.18 
  • 국가공간정보포털 연속지적도 서울 서초구 데이터

 

1. 국가공간정보포털에서 연속지적도_서울 서초구 데이터 취득

국가공간정보포털 오픈마켓에서 연속지적도_서울 데이터셋 중 서초구 데이터를 다운로드 받는다.

 

2. 서울 서초구 데이터 동단위로 저장하기

Qgis에 다운로드 받은 데이터를 추가한 후에 동단위 데이터로 저장하려고 합니다. 대상 동은 임의로 방배동으로 하고, 레이어 속성테이블에서 표현식을 통해 방배동의 데이터를 선택한후 내보내는 작업을 진행합니다.

표현식은 "pnu"  LIKE '1165010100%' 으로 방배동의 pnu코드에 해당하는 데이터를 선택하였습니다.

 

다음으로 선택한 객체내보내기를 통하여 방배동의 데이터만 저장하도록 하겠습니다.

빨간 박스에 있는 '선택된 객체만 저장' 을 체크하시고 저장하셔야 방배동 객체만 저장이됩니다.

 

 

3. DXF 내보내기

상단메뉴 > 프로젝트 > DXF 내보내기 선택

  • 심볼 유형 모드 : 심볼 레이어 심볼 유형 
  • 심볼 모드 스캐일 : 1:1,000
  • 인코딩 cp949
  • output layer attribute : jibun

 

4. DXF Import 하기

Qgis 플러그인 중 'Another DXF Importer / DXF2Shape Converter' 를 사용하여 새로 만든 DXF파일을 Import 하겠습니다.

상단메뉴 플러그인 > 플러그인 관리 및 설치 를 선택하여 DXF로 검색하시면 해당 플러그인이 검색됩니다.

 

플러그인 설치하기 버튼을 선택하여 플러그인을 설치하면 상단메뉴 벡터 > DXF Import / Convert 메뉴가 활성화되며 해당 버튼을 선택하시면

아래의 내용과같이 DXF 자료를 Qgis에 Import 하실 수 있습니다.

시각적 효과를 위해 국가공간정보포털에서 제공하는 수치지형도를 Import 하겠습니다.

수치지형도v1.0(1:5000)_Bessel_서울 자료 다운로드 

  • 도엽번호 : 37612010
  • Charset : cp949
  • 좌표계 : EPSG:5174 (투영체 계수 포함)

 

DXF Import 결과

수치지형도 등고선(SHP)을 이용하여 DEM 이미지 제작 과정

> 관련 글 바로가기 : 국가공간정보포털 DEM자료 활용하기

 

시나리오

국가공간정보포털 오픈마켓이 개방하는 DEM 이미지를 이용하여 3D 지형모델을 이전 글에서 작성했습니다. 그러나 배포하는 영상의 해상도가 90m급으로 제약이 있어 정교한 지형 모델을 만들기에는 애로가 있었습니다. 이에 DEM 파일을 찾고자 노력했지만 역시나 찾기 어려웠습니다. 저희는 언제나처럼 저희가 직접 해결하기로 결정하고, 방법을 생각했습니다.

수치지형도2.0의 등고선 레이어는 상당히 정교합니다. 저희는 이를 다운로드 받아 PostGIS에 적재하여 지점 별 높이 정보가 들어있는 벡터 데이터 셋을 제작합니다. 그 후 QGIS가 제공하는 RasterCreationTool을 이용해 DEM을 제작합니다.
제작과정에서 수치지형도를 다운받아 PostGIS에 적재하는 과정은 생략합니다. 각 과정의 결과물은 QGIS를 통해 확인합니다.

 

DEM 제작 과정 

1. 등고성 테이블의 단순화 (선택적 작업 : 작업PC의 성능 문제로 경량화 진행)

PostGIS가 제공하는 단순화 함수에는 ST_Simplfy 와 ST_SimplifyPreserveTopology가 있습니다. 후자를 이용하는 것이 좋습니다. 함수의 상세한 설명은 PostGIS 공식 매뉴얼을 참조하십시오. 요즘 Geo Processing을 진행하며 PC 성능의 한계를 느끼고 있습니다. 아직은 PC보다 제 생각이 빠르다는 것에 약간의 만족감을 가지며 위로합니다.

CREATE TABLE tmp_contour_sim_5179 as
    select cont, ST_SimplifyPreserveTopology(geom, 5) as geom from tmp_contour_5179;

2. 단순화된 등고선 Polygon의 Point 전환 (이후 시군구 추출을 위해 공간인덱스 생성)

ST_Dumppoints 함수를 이용하여 등고선 다각형을 구성하는 개별 점을 추출하고, 추출된 각 점에 다각형이 가지던 높이 정보를 그대로 넣어줍니다. 

CREATE TABLE tmp_alt_5179 AS
    select pts.alt as alt, (pts.geoms).geom as geom from
    (select ST_dumppoints(geom) as geoms, cont as alt from tmp_contour_sim_5179) as pts;

CREATE INDEX tmpalt_geom_idx ON public.tmp_alt_5179 USING gist(geom);  

3. 양양군 지역의 높이 추출

ST_Intersects 를 이용하여 양양군 지역 만을 추출합니다. 양양군의 경계를 그대로 이용할 수 있지만 ST_Envelope 함수를 통해 사각형 형식으로 추출했습니다. 향후 개별 시군구를 통합한 DEM을 제작하는 경우 래스터 영상은 영상 정합을 통해 겹치는 지역의 처리를 어렵지 않게 할 수 있습니다. "With"를 이용하는 이유는 성능입니다. 실행도 중요하지만 실행하는 속도 또한 프로그램으로 이행한다면 중요한 요소입니다.

create table tmp_alt_5179_42830 as
    with bound as (select ST_envelope(geom) as geom2 from sigungu_5179 where bjcd = '4283000000')
    select dem.alt, dem.geom from (select alt, geom from tmp_alt_5179) dem, bound
        where st_intersects (dem.geom, bound.geom2) = true;

4. QGIS 의 SAGA > Raster Creation > Natural Neighbor 를 이용한 DEM 이미지 제작

QGIS는 강력한 도구입니다. 우리가 흔히 다루는 벡터 형식(SHP 등) 말고도 Raster를 위한 강력한 도구를 제공합니다. QGIS의 "공간처리툴박스"는 다양한 공개SW 및 라이브러리를 쉽게 쓰도로 지원합니다. 저는 많은 도구 중 "SAGA"를 이용했습니다. "SAGA"에는 많은 도구가 존재하며 저는 그 중에서 "Raster Creation Tools"의 "Natural Neighbor"를 이용했습니다.

마치며

항상 대안은 존재합니다. 국가공간정보포털이 제공하는 90m급 DEM 이미지보다 정교한 50M급 DEM 이미지를 제작했습니다. 아래 그림을 통해 90m급 DEM 과 저희가 제작한 50m 급 DEM의 정교함을 비교할 수 있습니다. 


<50m 급 DEM>


<오픈마켓 배포 90m 급 DEM>


<50m 급 DEM 패턴 매칭>


<90m급 DEM 패턴 매칭>

QGIS를 활용한 폴리곤 병합

이번 시간에는 Qgis를 활용하여 폴리곤을 병합하는 방법을 공유하도록 하겠습니다. 

필자는 Qgis 3.4 버전에서 작업하였음을 알립니다.

 

데이터 제공 - 센서스경계(시도경계)  :  

Z_SOP_BND_SIDO_PG.zip
다운로드

데이터 기본 좌표계 - UTM-K

데이터 출처 - 국가공간정보포털 (오픈마켓)

 

Qgis에 데이터를 업로드 합니다. (좌표계를 EPSG:5181로 지정해주세요.)

 

 

매우 중요한 부분입니다. 폴리곤 병합에 앞서 데이터의 "무결성 검증"을 실시해야 합니다. 무결성 검증의 순서는 다음과 같습니다.

  * 메뉴 -> 벡터 -> 도형 도구 -> 무결성 검증

* Tip - "무결성 검증" 을 실시하는 이유는 데이터가 병합 또는 여타 작업 실행 전, 오류 및 적합성을 판단하기 위함입니다. 

 

무결성 검증 실시 후 데이터 오류 처리하기

"무결성 검증"을 완료하게되면 유효한 산출물, 유효하지 않은 산출물, 오류 산출물 이렇게 3가지의 레이어가 생성됩니다.

 

오류를 처리하는 방법은 다음과 같습니다.

  * 오류 처리 할 레이어 선택 -> 편집 모드 켜기 -> 버텍스 툴 (VertextTool) 활성화 -> 오류 처리 

오류 지점을 자유롭게 선택 후 키보드 "delete"를 눌러 삭제합니다. 이와 같은 방법으로 다른 오류 지점도 처리하여 보세요.

오류 지점을 다 처리하였다면 편집 모드 토글을 재클릭하여 작업을 저장합니다.

 

데이터 오류 처리 후 레이어 병합하기

데이터 오류를 처리한 후 2가지 레이어 (유효한 산출물, 유효하지 않은 산출물)를 병합합니다. 순서는 다음과 같습니다.

실행 버튼을 눌러 병합을 진행합니다.

 

폴리곤 병합하기 

먼저, 데이터 오류 처리 작업까지 완료한 데이터를 업로드 합니다.

다시 한번 편집 모드를 켜준 후 "객체 선택" 토글을 누릅니다. 

 

객체 선택 기능을 활용하여 병합 할 폴리곤들을 다중 선택 합니다. (ctrl버튼과 좌클릭을 통해 다중선택을 쉽게 할 수 있습니다.)

 

선택한 객체 병합하기

선택한 폴리곤들을 병합하는 방법은 다음과 같습니다.

  * 메뉴 -> 편집 -> 선택한 객체 병합

 

확인을 눌러 병합을 완료합니다.

사진과 같이 두개의 폴리곤이 하나의 폴리곤으로 병합된 것을 볼 수 있습니다.

* Tip - 폴리곤을 병합할 시 병합할 수 없다는 에러 메세지가 표출되면 현재의 데이터로 재차 무결성 검증을 실시하세요.

  각 폴리곤 속성 테이블의 속성값이 달라도 병합이 가능합니다.  

Qgis를 통한 데이터 좌표계 변환 및 저장

* 작업한 QGIS의 버전은 3.4 버전임을 알려드립니다.

 

* 원본 데이터 좌표계 확인

  • 원본 데이터의 좌표계를 확인합니다.

원본데이터의 좌표계가 EPSG:5179로 되어있습니다.

 

* 좌표계 변환 방법

- 레이어트리에서 좌표계를 변환하려는 데이터를 우클릭 합니다.- Set CRS 선택 후 원하는 좌표계 선택 및 확인을 클릭합니다.

 

* 데이터 저장 방법

- 레이어트리에서 데이터를 우클릭 후 내보내기/객체를 다른이름으로 저장하기를 선택합니다.

 

- 데이터를 저장할곳과 파일명을 지정합니다.

- 변환하고자하는 좌표계를 선택 후 확인을 눌러 저장합니다. 

 

* 좌표계를 변환하여 저장한 shp파일(데이터)을 QGIS로 불러옵니다.

좌표계가 WGS84(EPSG:4326)로 변환이 완료된 모습입니다.

 

-> 위와 같은 방법으로 다른 좌표계로 변환할 수 있습니다. 

 

 

 

 

 

단순화 작업 (벡터 > 도형도구 > 단순화)

geoserver에 읍면동 데이터(shp)를 등록하여 WFS서비스를 사용했다. 해당 데이터의 용량은 55MB로 전국레벨에서 벡터(WFS)서비스를 사용하기에 무리가 있어 QGIS를 사용하여 단순화 작업에 들어갔다.
 

 

단순화 작업이 끝난 후에 레이어의 단순화 모양이 예상과 다르게 나왔다.

다시한번 허용범위를 1m 지정하고 단순화 작업을 실행했지만 결과는 동일하게 나타났다.
이유는 투영좌표계에 따라서 QGIS가 사용하는 단위가 다르기 때문이다.
현재 읍면동데이터의 좌표계는 WGS84 EPSG:4326을 사용하고 있다.
(Proj4: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0)

 

QGIS는 계산시 CRS의 단위를 사용하는데 EPSG:4326와 같은 지리좌표체계(CRS)는 단위로 degrees를 사용한다. 계산을 위해서 meters, feet 단위를 가지는 투영좌표계를 사용해야한다.

 

데이터의 좌표계를 meters 단위를 사용하는 EPSG:5174로 변경하여 다시한번 단순화 작업을 실행하였다.
(Proj4: +proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs)

버텍스 개수가 줄어 들고 단순화작업이 정상적으로 이루어졌다.

 

국가공간정보포털 오픈마켓에서는 다양한 종류의 공간정보 관련 공공데이터를 제공한다. 

또한 국가공간정보포털에서 제공하는 데이터의 파일 포맷은 여러가지가 있지만 대부분의 데이터가 shp 포맷으로 제공된다.

QGIS를 이용하여 SHP 포맷의 데이터를 DXF 포맷으로 변환하는 방법에 대하여 알아보자.

 

1. 먼저 QGIS에서 SHP 포맷의 데이터를 오픈한다.

 QGIS : ver2.18.22

 활용 데이터 : 건물통합정보마스터_대구 (활용 데이터 출처 : 국가공간정보포털 오픈마켓)

 활용 데이터 좌표계 : Bessel/중부(200,000/500,000) EPSG : 5174

 

2. Layers Panel에서 DXF로 변환이 필요한 데이터 오른쪽 클릭

 

 - 데이터 오른쪽 클릭 후, 다른이름으로 저장 버튼 클릭

 

3. 새 이름으로 벡터 레이어 저장하기

 다른이름으로 저장 클릭 시, 새 이름으로 벡터 레이어 저장하기 화면이 나타난다.

- 형식 : 저장 파일 포맷을 선택하는 부분

 - File name : 파일의 이름 

 - 탐색(File name) : 저장 위치

 - 좌표계 : 파일의 좌표계 선택

 

4.  결과 

+ Recent posts