당분간 진행을 바꾸려고 합니다

당초엔 나중에 책으로 만들고 싶은 마음에 모델빌더라는 주제로 디테일하게 내용을 점차 채워나가려고했으나...

생각보다 제 시간이 빠듯하게 흘러가고, 글쓰는데 예상 이상의 에너지가 소모되고, 현재 프로세싱모델 보다 다른 공부에 가중치를 두고싶어요.

그래서 글이 '이런저런 문제를 해결하고 싶으면 이렇게하면 되요!' 에서 '난 이 문제를 이렇게 해결했어요!'로 바뀔 것 같네요.




0. 

아파트를 평가하는 내용의 작은 부동산 관련 프로젝트에 참여하면서 작업한 내용입니다.

제가 해결해야되는 문제는 '아파트에서 통학하게 되는 초등학교들까지의 거리를 구하는 것' 입니다. 아파트와 초등학교를 매칭하는 작업 및 거리를 구하는 작업을 수행해야합니다.


초등학교는 무조건 가까운 곳에 가는 것이 아니고 학군개념이 존재합니다. 그 학군에 존재하는 거주자들은 지정된 초등학교에 통학하게 됩니다. 학군자료를 구해왔습니다. 아래 그림의 예시를 보면 저 범위에 포함된 거주자들은 서울세검정초등학교에 다니게 됩니다.


그리고 필요한 아파트 정보와 서울시의 초등학교 위치정보를 구해옵니다. 각 아래와 같이 분포하고 있고, 초등학교의 경우 데이터가 멀쩡하다면 한 학군에 한 개씩 배정되어 있겠지요.(실제로는 공동학군이 존재해서 조금 더 머리아픕니다.) 


'초등학교 통학 구역'의 폴리곤 데이터와 '아파트', '초등학교'의 포이터 데이터를 통해 각 아파트에 매칭되는 초등학교를 구하고, 그 거리를 계산하는 것이 목적입니다.




1. 

초등학교 통학 구역, 즉 학군을 key로 사용해서 아파트와 초등학교의 정보를 엮었습니다.

i. 각 초등학교에 매칭되는 학군 ID를 부여합니다.

ii. 각 학군을 iteration 하며, 학군 내에 존재하는 아파트와 ID와 매칭되는 초등학교를 매칭시킨 뒤, 거리를 구했습니다. 


 i - 초등학교에 학군id 부여

각 학군 id 마다 iteration을 하며, 'Select Layer by Location'을 통해 학군 위에 존재하는 학교를 선택하고 그 id를 부여합니다. 

학군 id를 부여하기 위한 expression은 "%Value%" 을 사용하면 됩니다.


* 혹여나 의문이 있으실까봐. 학군을 굳이 초등학교 이름을 매칭하는 속성기반의 방법이 아닌 location 기반으로 넣어준 것은.. 학군과 초등학교 데이터의 갱신일이 달라 생기는 결함을 줄이기 위함이었고, 내용에 다루진 않지만 이렇게 하는 것이 공동학군을 처리하기 편했습니다.




 ii - 아파트와 학교간 매칭 및 거리 계산

학군 id 마다 iteration을 하며, 학군 위에 존재하는 아파트들과 id와 매칭되는 초등학교를 선택한 뒤, point distance를 통해 매칭과 거리계산을 한꺼번에 수행했습니다.

학군 파일을 iteration row selection을 통해 학군id 마다 iteration하고, 이를 이용해 아파트 포인트에 select by location을 수행하여 학군 위에 존재하는 아파트들을 선택합니다. 동시에 초등학교는 속성정보인 학군id를 통해 매칭합니다. 속성정보 매칭을 위한 expression은 "학구도" LIKE '%Value%' 입니다.

* arc 내에서 ""과 '' 사용이 헷깔립니다. 저는 파이썬 관련 문법이면 "", 쿼리 관련은 '' 은 사용한다는 방식으로 기억하고있습니다.


2. 

쨘! 아파트마다 초등학교와의 매칭 및 초등학교까지의 거리를 계산했습니다. 결과는 각 학군id가 이름인 테이블들로 추출됩니다. 이를 하나의 파일로 append 한 뒤, FID를 통해서만 매칭된 형태(Point Distance의 추출결과)에 필요한 정보를 각 아파트 및 초등학교와 join해서 가져오면 됩니다.

직접 구현해서 활용하고 싶으시면 주황색육각형으로 표시되는 Iteration과 노란색 네모로 표시되는 Tool들을 위주로 살펴보시면 전체 흐름 따라가실수 있습니다.



Iteration은 정말 편리하고 강력한 도구입니다. 모델빌더의 다른 기능들은 노다가를 하기 귀찮아서 사용할 때가 많지만, iteration이 필요한 부분은 모델빌더가 아니면 안되거든요. 물론 arcpy를 통해 같은 기능을 사용할 수도 있지만, 직관적이고 간편하게 flow를 짤수 있는 것은 모델빌더의 큰 장점입니다. 경험상 iteration을 편하게 다루기 위해서는 iteration마다 활용되는 Value의 값을 잘 활용해야 되더군요. 고로 각 부분의 expression을 유의해서 살펴보시면 좋을 것 같습니다.

반응형

+ Recent posts