하이 리스크, 하이 리턴?
(아파트엔지수를 통해 본 수도권 아파트 단지 가격 동향)

 

들어가며

투자의 관점에서 최근 몇 년의 아파트시장을 한 줄로 요약하기에 딱 좋은 말입니다. 더 정확하게 서울을 포함한 수도권에 해당하는 말입니다. 최근 몇 년 수도권에서 아파트를 매입하신 분은 꽤 훌륭한 시세 차익을 얻었습니다.
호가 상승 시류에 편승하지 못하신 분은 속상할 수 밖에 없는 안타까움이 있습니다.

<나우앤서베이, 설문조사>

흔히 수도권이라고 하는 지역 중 일부 단지의 가격 상승을 "아파트엔"을 가지고 얼마나 상승했는지 비교하겠습니다. 비교되는 단지는 임의로 선정했습니다. 

가장 선호도가 높은 중소형 단지를 기준으로 비교를 진행했습니다. "아파트엔"은 아파트 단지를 전용 면적에 따라 아래와 같이 5가지 유형으로 분류합니다. 

  • 초소형(40㎡이하) : 공급면적 기준 21평 이하
  • 소형(40㎡초과60㎡이하) : 공급면적 기준 21평 초과 25평 이하
  • 중소형(60㎡초과85㎡이하) : 공급면적 기준 25평 이상 32평 이하
  • 중대형(85㎡초과135㎡이하) : 공급면적 기준 32평 이상
  • 대형(135㎡초과)

단일 면적의 평균 금액과는 차이가 존재합니다. 이렇게 하는 이유는 면적 그룹 유형 별 비교 대상을 확대하여 지수 산출의 객관성을 부여하기 위함입니다. 또한 다른 단지와 비교를 통해 인사이트를 얻게 하기 위함입니다.
전용 면적을 기준으로 하는 이유는 공급 면적의 경우 건설 시기, 서비스 면적 등 다양한 요인에 따라 단지 별 차이가 존재합니다. 또한 아파트의 공급 면적을 알려주는 국가 공인의 자료는 없습니다. 건축물 대장에 관련 정보가 포함되어 있지만 단지 별로 작성된 형식이 달라 일관되게 적용되기 어려운 문제점이 있습니다.
관련 기관에 문의하니 아파트 분양사에 직접 전화해서 알아보는 것이 가장 빠르다고 하더군요^^

 

호가상승비교

결론을 먼저 말하자면 "비싼 단지가 많이 올랐다" 입니다. 일부 상승하지 못한 단지도 있습니다. 

 

지역 단지 연도 별 평균금액 (억원)  아파트엔지수변동
(거래가격지수)
상승률
(%)
상승호가
(억원)
2016년 2017년 2018년 2019년 2020년
서울시 강남구 은마아파트 (94) 11.12 13.13 16.81 18.51 19.66 94 ~ 95 (99) 76.80 8.54
서울시 마포구 공덕삼성래미안3차(88) 7.23 8.10 10.80 11.92 14.27 86 ~ 88 (96) 97.37 7.04
성남시 분당구 시범단지삼성한신 (91) 6.39 7.17 9.27 9.90 11.39 89 ~ 91 (94) 78.25 5.00
하남시 풍산아이파트1단지 (84) 4.71 4.98 5.79 6.19 7.09 84 ~ 85 (86) 50.53 2.38
고양시 일산동구 강촌마을(동아) (75) 4.04 4.27 4.51 4.38 4.52 75 ~ 80 (75) 11.88 0.48
시흥시 엘에이치네이처하임 (76) 2.91 3.42 4.37 4.55 5.14 68 ~ 76 (80) 76.63 2.23

< 주요 단지 전용면적 중소형: 60㎡초과85㎡이하 아파트 호가상승비교>

은마아파트의 경우 2020년 6월 기준 2016년 대비 무려 8.5억 정도 가격이 상승했습니다. 아파트의 노후화에 따라 아파트엔지수가 95에서 94로 하락했지만 절대적 가격지수는 유지되며 지속적으로 현가 가치가 상승했음을 알 수 있습니다. 역시 강남불패입니다.

대치동 은마아파트

< 대치동 은마아파트>

공덕동 삼성래미안3차의 경우 거의2배에 가까운 가격이 상승했습니다. 아파트엔지수도 86에서 88로 상승한 것을 볼 수 있습니다. 아파트엔지수를 보면 2020년 6월 해당 아파트 거주자는 전국의 아파트가 100개라면 88개의 아파트에 입주할 수 있다라고 할 수 있습니다. 가격으로만 보게되면 100개 중 96개를 선택할 수 있다는 것을 의미합니다.
공덕역 인근 아파트단지의 경우 3개 노선의 환승역인 공덕역 등 교통편의, 초등학교를 품은 아파트, 
여의도로 이어지는 금융 인프라 등 무엇하나 빠지지지 않습니다.

<공덕동 삼성래미안3차>

성남시 분당구, 하남시, 시흥시 등도 가격이 크게 상승한 것을 볼 수 있습니다. 그에 따라 아파트엔지수도 상승했습니다. 시흥시는 수도권에서 비교적 호가가 낮은 곳이었지만 신규 아파트의 경우 아파트엔지수가 68에서 76으로 무려 8단계 정도 상승했습니다.
신안산선 전철 목감역 신설의 영향이 큰 것 같습니다. 역시 전철역 개통만한 호재가 없네요.

 

 
시흥시 조남동 엘에이치네이처하임

 <하남시 풍산아이파크1단지>  <시흥시 엘에이치네이처하임>

특이하게 고양시의 경우 아파트엔지수가 80에서 75로 하락했습니다. 실제 가격 상승도 타지역 대비 크지 않습니다. 가격은 올랐지만 아파트의 가치로 환산했을 때 오히려 선택지가 좁아졌음을 알 수 있습니다.
일산을 놓고 봤을 때 3호선 전철, 경의선 전철이 있습니다.  또한 호수공원, 종합병원 등 거주 인프라도 그리 나쁜 편이 아닙니다. 서울 중심으로 접근이 훨씬 좋은 은평구 대단지 개발, 고양시 원흥마을 개발 등 경쟁 단지의 영향을 받았을 것이라 보입니다. 어쩌면 저평가일 수 있습니다.

 
일산동구 강촌마을(동아)

 <분당구 시범한신>  <일산동구 강촌마을(동아)>

대부분의 수도권은 서울의 배후도시입니다. 정확하게 서울 어느 지역의 배후도시인지가 가격에 큰 영향을 끼칩니다.
성남시(분당)의 경우 강남구 및 서초구와 접근성이 좋습니다. 고양시(일산)의 경우 최초 강서구, 마포구, 종로구, 영등포구 등의 배후 도시로 계획되고 만들어졌지만 다른 지역의 개발을 통해 직접 접근성이 과거보다 불편해 졌습니다.

마치며

수도권단지의 가격 상승을 아파트엔지수와 비교했습니다. 아파트 호가는 다른 단지의 가격 변동과 비교하여 상대적으로 판단해야 합니다.
아파트엔지수는 상대적 가격변화를 반영하는 지수입니다. 아파트엔지수를 통해 우리 단지의 가격이 다른 단지만큼 상승했는지 또는 다른 단지보다 호가가 상승하여 실질적 보유가치가 상승했는지를 알 수 있습니다. 혹시 호가가 떨어지더라도 아파트엔지수가 유지된다는 것은 아파트의 현가 가치는 유지되고 있다는 것을 의미합니다.

혹시 아파트엔지수가 떨어졌다고 속상할 필요도 없습니다. 아파트엔지수는 아파트를 평가하는 수많은 방법 중 한가지 일뿐입니다. 대한민국은 개인 자산의 약 80% 정도가 부동산에 편중된 나라입니다. 결국은 우상향할 수 밖에 없습니다.

 

'아파트' 카테고리의 다른 글

아파트 인텔리전스! 아파트엔  (6) 2020.08.21

아파트 인텔리전스! 아파트엔

 

서비스를 개설하며...

20년, 제가 공간정보 분야에서 일한 시간입니다. 20년을 일하고 보니 아쉬운게 있습니다. 공간정보에 종사하는 것은 대부분 공공 부문의 정보화용역 사업을 하는 것이라 열심히 했지만 남는 것이 없습니다. 용역은 용역일 뿐, 갑의 행복만이 존재하니까요.
그래서 무엇인가 남기고 싶었습니다. 호랑이가 아니어서 가죽을 남길 수도 없고 배움이 짧아 이름을 남길 수도 없습니다. 그래서 인터넷에 서비스라도 남겨보자고 마음먹었습니다.

누구나 관심을 가지는 주제와 모두를 대상으로 하는 서비스를 기획했습니다. 그리고 탄탄한 설계를 통한 제작이 아닌 프로토타입(베타서비스)을 공개하고 사용자 인터뷰를 통해 지속적으로 보완해가는 방법론을 적용합니다.
기술적으로 상용 클라우드서비스(IaaS) 환경에서 PostGIS 등 공개SW를 이용하고 공공개방되는 데이터를 적극 활용합니다.

아파트엔 서비스는 ...

아파트엔서비스는 호갱노노 등 요즘 관심을 받는 프롭테크(Property + Technology) 분야의 서비스입니다.
여타 부동산 앱과 구분되는 차이점은 매물을 중개하는 서비스가 아니라는 것과 아파트의 위치, 주변 학교 등 물리적 특징을 소개하는 서비스가 아니라는 것입니다.
아파트엔 서비스는 아파트의 가격을 결정하는 원인요소의 지수화를 통해 아파트의 투자가치를 평가하는 서비스 입니다.

아파트엔 개요

 

아파트엔 서비스는 아파트를 대상으로 제공되는 BI (Business Intelligence : 비즈니스 인텔리전스) 서비스 입니다.  위키피디아를 인용하면 비즈니스 인텔리전스는 데이터를 수집하고, 이 데이터를 가공하여 올바른 의사결정을 내릴 수 있도록 지원하는 시스템 및 기술입니다.
아파트엔 서비스는 아파트를 투자 자산 측면에서 바라보고 개별 아파트의 보유 가치를 평가합니다.

 

아파트 신호등! 아파트엔

빨간색, 노란색 녹색으로 아파트의 가치를 요약합니다.
누구라도 한 눈에 지도 위에 표시되는 색상으로 아파트의 가치를 구분할 수 있도록 합니다. 혹시 아파트 마커를 클릭한다면 좀더 상세한 정보를 볼 수 있습니다.
아래 4분면 그래프에서 점이 오른 쪽에 있을 수록 투자가치가 좋다는 것, 위에 있을 수록 실거주 가치가 좋다는 것을 의미합니다. 베타 기간이라 현재 틀릴 수도 있습니다.

실거주/투자가치 평가


아파트엔지수아파트엔 서비스는 투자 또는 보유 가치 평가를 위한 기준으로 아파트엔지수를 정의합니다. 아파트엔지수의 시간적 흐름에 따른 분석으로부터 아파트의 자산 가치 변화를 추적하게 합니다. 아파트엔지수는 아파트 가격을 결정하는 여러 원인인자를 종합하여 부여되는 점수입니다. 점수가 높을 수록 좋고, 1 ~ 100 까지의 숫자로 나타납니다.아파트엔지수가 전달하는 인사이트(Insights)는 다음과 같습니다.아파트엔지수가 시간의 흐름에 따라 변동이 없다면, 다른 아파트의 가치가 변한 비율만큼 가치가 유지됨을 의미합니다.
만일 아파트엔지수가 상승했다면 우리 아파트의 절대적 가치가 상승했다는 것을 의미합니다. 가격은 상승했더라도 아파트엔지수가 하락했다면 상대적으로 보유가치가 하락했다는 것을 나타냅니다.

아파트엔지수

 

앞으로는...

Fun & Joy 또는 사용자의 관심을 위하여 아파트 관련 사회적 이슈나 분석 정보를 게시할 예정입니다.

전국의 모든 아파트를 아파트엔지수라는 점수를 부여한 것에 대한 부담이 있습니다.
하지만 보통의 부동산서비스가 실거래가만으로 이미 서열을 매기고 있습니다. 오히려 가격을 포함한 다른 요인으로부터 지수를 부여했기에 좀 더 객관적이라고 생각합니다.

베타이기에 평가를 위한 모델 부분에 지속적 개량이 수행될 예정입니다.
저희 프로그웍스를 아껴주시는 많은 분들께 작은 응원과 격려 부탁드립니다. 또한 격려와 응원에 보답하고자 서비스 제작 중 터득한 노하우도 본 블로그를 통해 점차로 공개하겠습니다.




 

 

 

 

'아파트' 카테고리의 다른 글

하이 리스크, 하이 리턴?  (0) 2020.08.24

본 카테고리의 이전글(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엔진이 정말 필요할까요? 

 

개요

스마트시티, 디지털 트윈 등 실세계를 가상공간으로 구현하고자 하는 다양한 시도가 이루어지고 있습니다. 그러나 정교한 가상공간을 만드는 일은 상당한 자원과 시간이 소요됩니다. 물론 구축 후 얻게되는 가치는 추정하기 어려울 정도로 클 것으로 예상됩니다. 

프로그웍스는 현재 개방되는 데이터를 가지고 제한적이지만 이의 구현이 가능할 지 확인해 봤습니다. 그래서 국가공간정보포털 오픈마켓을 통해 "건물통합정보"를 다운받아 특정 지역(경기도 성남시 중원구 성남동)의 3D 건물모델을 만들었습니다. 그러나 역시 문제는 원본 데이터의 품질 문제 입니다. 예를 들면 건물의 고도 값이 0 인 것도 많이 존재하고, 층수도 0인것, 지하층수가 0인 것도 있습니다. 신뢰성에 큰 문제가 있습니다.

당연히 제작되는 결과물도 원본 품질에 종속적일 수 밖에 없습니다. 제작한 결과물의 정교함이 아닌 PostGIS를 이용하는 한 가지 사례로써 봐주십시오.

제작 과정

 1. 대상 지역 추출 (경기도 성남시 중원구 성남동)

읍면동코드를 이용하여 성남동 경계에 포함되는 건물을 추출합니다. 이 때 ST_GeometryN 함수를 이용하여 멀티폴리곤에서 첫 번째 폴리곤만을 추출합니다. (멀티폴리곤이지만 대부분 하나의 폴리곤만 존재합니다)
PostGIS 3d 변환 함수는 단일파트 형식 Geometry만을 지원합니다.

create table tmp_m41130_002_01 as
  with bound as
   (select geom as geom2 from n3a_g0110000 where bjcd = '4113310100')
  select bd.bld_nm, bd.dong_nm, bd.grnd_flr, bd.ugrnd_flr, bd.height, bd.geom from  
  (select bld_nm, grnd_flr, ugrnd_flr, height, ST_GeometryN(geom, 1) as geom from m41130_002_1) bd, bound  

    where st_intersects (bd.geom, bound.geom2) = true;

2. 3D 데이터 생성을 위한 투영좌표계 변환

x, y, z 로 표현되는 형식의 단위 값을 같아야 합니다. Degree 형식의 경위도 좌표는 정확한 높이 값 적용이 어렵습니다. 이에 Linear Unit이 m (미터)를 이용하는 투영좌표계(TM)를 이용하고, 저희는 구글좌표계로 변환했습니다.
( 참고 바로가기 : PostGIS에서 공간테이블 좌표 변환 )

ALTER TABLE tmp_m41130_002_01
  ALTER COLUMN geom TYPE geometry(Polygon,3857) USING ST_Transform(ST_SetSRID(geom,4326), 3857);

3. 3D 건물데이터 생성

ST_Extrude 함수를 이용하여 3D 형식 Geometry로 변환합니다. 이 때 Z(높이 값) 적용을 위하여 건물통합 데이터의 "height"속성을 이용하려 했으나 0인 것이 많아 임의로 "grnd_flr(지상층)" 속성에 3.5m 를 곱한 것으로 대체했습니다. 물론 "grnd_flr"속성에도 0인 것이 많아 정확하게 만들어지지는 않습니다.
실제 Query 수행 후 생성된 ST_GeometryType 함수를 이용하여 생성된 Geometry가 "ST_PolyheralSurface" 형식으로 변경된 것을 볼 수 있습니다.

-- 3D 테이블 생성
create table m41130_002_3d as

  select bld_nm, grnd_flr, ugrnd_flr, height,  ST_Extrude(geom, 0, 0, grnd_flr * 3.5) as geom from tmp_m41130_002_01;

-- Geometry 형식 검사
select ST_GeometryType(geom) as gtype from m41130_002_3d limit 1;

4. 데이터 조회

QGIS 에서 PostGIS를 연결한 후 생성된 테이블을 레이어로 추가합니다. 레이어는 "보기 > 새 3D 맵뷰"에서 볼 수 있습니다. 

<QGIS를 이용한 3D 건물 조회>

맺음 말

저희가 게시하는 사용 팁은 오랜 기간의 경험을 통해 얻어진 지식입니다. 정말 자신의 것이 되기 위해서는 공개SW 제작사의 공식 매뉴얼을 통해 함수를 사용하기 위한 제약조건 등의 확인이 필요합니다. 또한 눈으로 얻어지는 것은 없습니다. 실제 해보는 것이 중요합니다. 저희가 게시하는 주제 및 샘플은 공개SW와 공공 개방되는 데이터를 이용하여 제작됩니다. 약간의 수고를 통해 필자의 오랜 노하우를 쉽게 가질 수 있습니다.

언제가는 좋아지겠지만 개방되는 공간정보의 품질이 좋아지기를 간절히 바랍니다. 이 부분이 해결된다면 얻을 수 있는 것이 참 많을 것 같습니다. 

시나리오

좋은 서비스를 위하여 데이터의 품질을 높이는 것은 무엇보다 중요합니다. 품질을 높이는 가장 좋은 방법은 육안으로 점검하여 오류를 수정하는 것이지만 이는 많은 비용을 요구합니다. 

1. 간단하게 할 수 있는 방법으로 PostGIS를 이용하여 도형의 무결성을 검증하고, 오류가 있는 도형을 수정하도록 합니다.
2. SQL 을 통해 도형형상을 수정하고 QGIS에서 이를 검증합니다.

 

수행 절차

1. ST_IsValid 함수를 이용하여 유효하지 않은 지형객체 추출 (울주군 추출)

with testdata as
(select ufid, bjcd, name, ST_IsValid(geom) as validflag, geom  from sigungu_5179)
select ufid, bjcd, name, geom from testdata where validflag = 'f';

2. ST_MakeValid 함수를 이용하여 유효한 도형으로 수정

create table sgg_tmp_5179_31710 as
select ufid, bjcd, name, ST_MakeValid(geom) as geom  from sigungu_5179  where bjcd = '3171000000';

3. ST_IsValid 함수를 이용하여 수정된 도형의 무결성 검증 (TRUE: 유효한 도형임)

select ST_IsValid(geom) from sgg_tmp_5179_31710;
 

맺음말

이 전 게시글에 비하면 쉬운 주제입니다. 그러나 이 전 주제에 비하여 무엇보다 중요한 일입니다.

일반적으로 원시 데이터가 품질 문제를 가지고 있는 경우도 있지만, 서비스 이행을 위하여 단순화(Simplify) 과정을 거치게 되면 거의 대부분 무결성 오류가 발생합니다. 따라서 단순화를 진행했다면 꼭 무결성을 검증하여 발생한 오류를 수정해야 합니다. 귀찮더라도 데이터를 이용하는 사용자의 편의를 위하여 데이터의 무결성 오류를 제거하는 습관을 가져야 합니다.

수치지형도 등고선(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 패턴 매칭>

개요

공공개방되는 공간정보에는 건물도 포함됩니다. 건물 데이터는 수치지형도, 건물통합데이터, 도로명주소 건물 등 정보소스가 있습니다. 실제 데이터를 보게되면 건물 형상 등에 차이가 존재합니다. 필자는 단순히 형상이 틀립니다가 아닌 틀린 정도를 수치로 표현하려 합니다. 

본 게시글의 이해를 위하여 Hausdorff Distance에 대한 이해가 필요합니다. Hausdorff Distance는 점으로 이루어진 두 집합(포인트세트) 간의 거리를 결정하는 방법입니다. 두 집합 사이의 근접점에서 떨어진 가장 먼 지점을 찾습니다. 일반적으로 두 점(Point)간의 거리는 최단거리가 정의되는 거리입니다. 그러나 다각형의 경우 모든 점이 최단거리일 수 없습니다.

 

이를 적용하여 개별 공간 객체의 Hausdorff Distance를 구하여 객체 형상의 유사성을 검사할 수 있습니다. 거리 값이 작을수록 건물의 형상은 유사하다라고 정의할 수 있습니다. 

> 바로가기 : Hausdorff Distance (위키피디아)
> 바로가기 : Computing Geometric Similarity

 

본문

1. Hausdorff Distance의 이해

아래의 질의를 실행하여 객체의 좌표를 변경해가며 산출되는 거리를 보면 이해가 쉽습니다.
SELECT ST_HausdorffDistance('MULTIPOINT (0 0, 1 0)'::geometry, 'MULTIPOINT (0 2, 1 2, 2 2)'::geometry);

2. 검사 대상 데이터 준비

QGIS를 이용하여 건물통합 건물과 도로명주소 건물에서 여의도 지역만을 추출하여 4326좌표계로 전환한 후 PostGIS에 적재합니다. 실제 중첩한 형상을 보면 형상이 상당 부분 일치하지 않는 것을 볼 수 있습니다.

 

3. 거리 산출 수행 : ST_HausdorffDistance 함수 실행

수행 과정은 단순합니다. 그저 공간위상관계가 교차(ST_Intersects)하는 객체를 찾아 객체간 거리 산출(ST_HausdorffDistance) 함수를 적용하게 되면 두 건물간의 거리가 산출이 됩니다. 이를 통해 산출된 거리 값이 작을수록 두 건물은 유사한 형상을 가지고 있다라고 정의할 수 있습니다. 

SELECT DISTINCT ON(TEST_BD_1.bd_mgt_sn) TEST_BD_1.bd_mgt_sn, TEST_BD_1.bld_nm, TEST_BD_2.buld_nm, 
    CAST(ST_HausdorffDistance(TEST_BD_1.geom, TEST_BD_2.geom) as numeric) as hdist1
    FROM TEST_BD_1 INNER JOIN TEST_BD_2 ON ST_Intersects(TEST_BD_1.geom, TEST_BD_2.geom)
    ORDER BY TEST_BD_1.bd_mgt_sn, ST_HausdorffDistance(TEST_BD_1.geom, TEST_BD_2.geom);

 

맺음말
저는 단순히 거리만을 산출했습니다. 건물유형 별 산출된 거리의 평균값과 표준편차를 구한다면 전체 수준에서 데이터 유사성 수준을 평가할 수 있습니다. 필자가 전하고자 하는 메시지는 한결같습니다. 공간DBMS의 올바른 활용만으로 가성비좋은 앱을 제작할 수 있습니다.
즐 코딩 하십시오~~
 

 


개요

필자는 흔히 현장에서 GIS엔진이라고 말하는 미들웨어의 도입을 강력히 반대하는 입장입니다. 대부분의 2D GIS 사이트에서 GIS엔진은 성능을 떨어뜨리는 원인이기 때문입니다.
정보시스템은 정보저장 및 조회의 편의를 위하여 DBMS와 함께 동작합니다.(일부 예외는 존재합니다) 꽤 오래전부터 DBMS는 SDE(Spatial Data Extension)를 통해 공간데이터에 특화된 기능 및 함수를 제공합니다. SDE은 강력한 공간분석도구 입니다. 이의 활용을 통해 별도 미들웨어 없이 SQL만으로 Geo Processing을 수행할 수 있고 수행결과는 DBMS에 테이블 형식으로 정의함으로써 데이터 저장구조를 전체 시스템 수준에서 동일하게 가져갈 수 있는 장점이 있습니다.

공개SW인 PostGIS를 이용하여 경계분할을 진행합니다. 별도의 솔루션이 아닌 오직 DBMS가 지원하는 함수만을 이용합니다. 과정별 생성되는 데이터는 Qgis에서 확인했습니다.

본 글에서는 "보로노이다이어그램"을 이용하여 경계를 나누어 각각이 동일 면적에 근접하도록 분할하는 기법을 설명합니다. 이해를 위해 "보로노이 다이어그램"을 이해하셔야 합니다.

> 보로노이다이어그램 1 : 위키피디아
> 보로노이다이어그램 2 : 네이버캐스트

또한 K-Means 알고리즘에 대한 기반 지식 또한 요구됩니다.

> K-평균 알고리즘 : 위키피디아
> K-평균 군집화 : 티스토리(untitledblog)

이하 기술되는 SQL의 실행을 위하여 PostGIS의 GEOS 버전이 2.3.0 이상 이어야 합니다. 아래의 질의를 통해 PostGIS의 버전을 확인하고, 만일 기준을 충족하지 않을 경우 PostGIS를 업그레이드 하십시오. 간단한 설치 명령어만으로 쉽게 업그레이드 할 수 있습니다. 별도 설명하지 않겠습니다.

 select postgis_full_version();
POSTGIS="2.4.6 r17068" PGSQL="96" GEOS="3.7.0-CAPI-1.11.0 673b9939" SFCGAL="1.2.2" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 1.11.4, released 2016/01/25" LIBXML="2.9.1" LIBJSON="0.11" RASTER

 

본문

본 게시글에서 사용하는 PostGIS 함수는 다음과 같습니다. 상세 설명은 공식 사이트의 도큐먼트를 참조하십시오.(필독)

경계 분할 시행

1. 경계준비 : 시도경계 테이블에서 서울시 경계만을 추출한 별도 테이블 생성 (생략가능 과정)
CREATE TABLE seoul AS
    SELECT * FROM ngii_cdm_4326 WHERE bjcd = '1100000000';

2. 서울 경계 내에 존재하는 랜덤 포인트 셋 생성 : 포인트 개수가 많을 수록 최종 생성되는 분할 경계의 면적은 동일 값에 수렴
CREATE TABLE seoul_pts AS
    SELECT (ST_Dump(ST_GeneratePoints(geom, 10000))).geom AS geom FROM seoul WHERE bjcd = '1100000000';

3. K-Means 알고리즘을 이용한 군집화
CREATE TABLE seoul_pts_clustered AS
    SELECT ST_ClusterKMeans(geom, 10) over () AS cluster_id, geom FROM seoul_pts;

4. 클러스터 별 중심점 생성
CREATE TABLE seoul_pts_clustered_center AS
    SELECT cluster_id, ST_Centroid(ST_collect(geom)) AS geom FROM seoul_pts_clustered
    GROUP BY cluster_id;

5. 중심점을 기준으로 보로노이 다각형 생성
CREATE TABLE seoul_voronoi AS
    SELECT (ST_Dump(ST_VoronoiPolygons(ST_collect(geom)))).geom AS geom FROM seoul_pts_clustered_center;

6. 서울 경계와 보로노이 경계의 폐합 폴리곤 경계 생성
CREATE TABLE seoul_divided_result AS
    SELECT ST_Intersection(a.geom, b.geom) AS geom FROM seoul a
    CROSS JOIN seoul_voronoi b;

 

마치며

본 블로그의 카테고리 중 "꿀팁-PostGIS"가 상대적으로 빈약했습니다. 카테고리의 빈부격차를 줄이고자 임의의 시나리오를 만들어 게시글을 작성했습니다. 하지만 전하고자하는 메시지는 명확합니다.

공개SW가 보여주는 기능 및 성능은 필자를 많이 놀라게 합니다. 본 게시글에서 설명한 류의 Geo-Processing을 수행해야 한다면 저는 Shell Script를 만들어서 이를 호출하는 것으로 개발 코드를 많이 줄일 것 같습니다. 기능을 이행하는 수단은 한가지가 아니겠지만 가장 좋은 것은 이미 존재하여 검증된 것을 잘쓰는 것입니다. PostGIS는 이미 시장에서 검증되어 기술성숙도가 높은 공개SW입니다.

GIS엔진, 오라클이라는 굴레만 벗어난다면 가성비 좋은 아주 훌륭한 앱을 제작할 수 있습니다.

정부, 공공기관이 생산한 대부분의 공간정보는 생산주체 및 제작시기에 따라 적용된 좌표계에 차이가 존재한다. 개별적으로 운영되는 정보시스템에서 이 들 공간정보의 사용은 큰 문제가 없지만, 서로 다른 공간정보와의 매쉬업, 융합 등을 위해 필수적으로 서비스 좌표계를 통일하는 것이 어플리케이션의 관리 편의성, 서비스 응답 성능 개선, 공개SW의 효율적 사용을 위해 요구된다.
GIS 기반 서버로써 지오서버를 사용한다면 서비스 타일을 생성하는 경우 EPSG:4326, EPSG:3857(EPSG:900913)만을 지원한다. 

따라서 본 글을 통해 PostGIS에 등록된 공간테이블을 EPSG:4326좌표계를 가지도록 변환하는 과정을 설명한다.

1. Table Copy

사용하려는 데이터의 좌표계는 EPSG:5181이고 위내용과 같이 지오서버를 사용하여 서비스 타일을 생성하기 위해 좌표계를 변경해야 한다.

이를 위해 기존 데이터를 복사하는 작업을 진행한다.

Query

 CREATE TABLE NEW_TABLE AS SELECT * FROM Z_NGII_UNSPT;


2. 좌표계 정보 업데이트

해당 테이블의 공간정보컬럼의 타입정보를 확인해 보면


geometry(MultiPoint,5179) 으로 되어 있다. 따라서 해당 좌표계정보 변경 쿼리를 아래와 같이 실행한다.

Query

 ALTER TABLE NEW_TABLE

ALTER COLUMN geom TYPE geometry(MultiPoint,4326) USING ST_Transform(ST_SetSRID(geom,5179), 4326);

위의 쿼리 내용은 https://postgis.net/2013/08/30/tip_ST_Set_or_Transform/ 에서 확인 할 수 있다.


최종적으로 해당 좌표가 변경된 것을 알 수 있다.


EPSG:5179                                                                                                                                                        EPSG:4326

Query

SELECT ST_ASText(GEOM) from NEW_TABLE;




개요

며칠 전 리얼타임테크의 카이로스를 데이터 프로바이더로 설정하여 지도서비스를 발행하고, Disk 기반 DBMS 대비 응답 속도가 확실히 빠른 것을 확인할 수 있었다. 이에 동일한 환경에서 각각 어느정도 성능을 보이는지 Apache JMeter를 이용하여 시험을 진행

> 이전 포스트 확인 : 메인 메모리 기반 고성능 웹 맵 서비스 (WoW! Kairos)


목적

메인메모리 DBMS와 일반 DBMS가 보이는 성능 차이를 정량적으로 확인함


환경구성

1. Server : Linux Container, 가상서버 위에 설치되는 DBMS
2. DBMS : Kairos (제조사:리얼타임테크),  PostGIS
3. WAS(Web Application Server) : Linux Container(메모리 512M 할당) 에 설치된 Apache Tomcat

4. Test 대상 App : 자체 제작한 간단한 WMS
5. 테스트 도구 : Apache JMeter
6. 테스트 방법 : 동사시용자를 1명에서 10명까지 늘려가며 각 10번씩 호출하고 나온 계측 값을 평가


시험결과

1. 메인메모리 DBMS가 빠른 처리 성능으로 단일 테이블에 접근하는 WMS의 경우 동시에 수용할 수 있는 사용자가 더 많음을 확인 
2. 제한적인 경량 컨테이너 환경에서 카이로스와 공개SW인 PostGIS 모두 만족할 만한 성능을 보임
3. 경량컨테이너로 구성되는 개별 서비스를 Proxy로 웹서버 계층에서 통합한다면 저비용으로 고성능 서비스가 가능함
4. PostGIS의 경우 동시사용자 7명을 기준으로 초당 쓰루풋이 감소하여, 성능향상을 위한 확장이 요구되었고, Kairos의 경우 9명을 기준으로 성능향상을 위한 확장이 요구됨





서비스 바로가기 (Kairos 맵 서비스)

서비스 바로가기 (PostGIS 맵 서비스)

+ Recent posts