이 글은, 높이 정보가 있는 건물 GIS 파일로 Rhino에서 Extrusion Surface를 만드는 라이노파이썬 스크립트를 설명한다. 미터 단위로 된 높이와 건물 밑면의 해발고도 두 가지 정보를 토대로 미터 좌표계로 된 GIS 폴리곤 파일에 높이를 주어 건물 모양을 만들고 해발고도만큼 바닥에서 띄울 수 있다. 둥근 지구가 아닌 평평한 대지를 가정하고 모델링할 것이다.




라이노와 간단한 파이썬라이노스크립트 사용법을 알고 있다는 전제에 설명할 것이며, 추가적으로 GIS 파일에 대한 기본적인 지식과 좌표계 및 파일형식변환(shp에서 geojson으로) 을 할 수 있어야 한다. 해당 내용들은 여기서 설명하지 않는다.


이 곳에서 Geojson2Rhino.py 를 바탕으로 수정했으며, 수정한 코드는 이 곳으로 가지를 쳐서 연결시켜놓았다.




1. 건물 GIS 파일 구하기


현재 공개된 전국 건물 GIS 파일은 두 곳에서 구할 수 있다.

하나는 행정안전부에서 관리하는 도로명주소지도. 아래 링크에서 신청하면 승인 후 다운로드 받을 수 있다. 참고로 시도나 시군구 단위를 신청하면, 각기 다른 전국의 담당자들이 확인을 잘 하지 않아 며칠이 걸려도 승인받기가 힘들다. 작은 지역이 필요하더라도 전국을 신청하면 경험상 가장 빠르게 승인이 된다. 

https://www.juso.go.kr/addrlink/devLayerRequestWrite.do

도로명주소와 우편물배달을 염두에 두고 만든 듯 하며, 미터 단위로 된 건물 높이는 없고, 건물 층수가 있다. 일괄적으로 3~4m 등을 곱하여 높이로 변환해야 한다.


다른 하나는 국토교통부에서 관리하는 GIS건물통합정보

수치지도를 바탕으로 건축물대장 정보를 통합시켰다. 미터로 된 높이 정보가 있다. 단, 특정 건물들에 대해 수치지도가 잘 업데이트 되지 않아 5년이 지난 대단지 아파트가 전부 누락된 경우도 종종 있다.

http://openapi.nsdi.go.kr/nsdi/eios/ServiceDetail.do





2. shp을 geojson으로 변환하기


건물 GIS 파일을 구했다면, QGIS에서 필요한 건물을 추출하고 geojson형식으로 변환하여 저장한다. 이름은 sample.geojson정도로 하자.

도로명주소지도를 사용할 경우에는 미터 단위 높이로 된 속성을 새로 만들어주어야 한다.

저장하는 좌표계는 경위도좌표계(EPSG:4326)가 아니면 대부분 미터단위이므로 상관없다. 여기서는 UTMK(EPSG:5179, Korea 2000 Unified CS)를 사용하기로 한다.

인코딩은 system으로 둔다. 기본값인 UTF-8의 경우 라이노에서 읽지 못하는 경우가 있다.





3. 라이노에서 스크립트 셋팅하기


변환 작업을 하려면 아래의 세 개의 파일이 필요하다.

runGeojson.py   

GeoJson2Rhino.py

sample.geojson


위 두 개 py 파일은 라이노 스크립트 폴더에 저장한다. 일반적인 경우 [라이노 설치 경로]\Plug-ins\IronPython\Lib\rhinopythonscripts 에 두면 된다.


건물 geojson파일은 적절한 곳에 두고 경로를 기억한다.

우선 runGeojson.py는 아래와 같다. 8번째 줄에 있는 경로를 자신이 저장한 파일의 경로로 바꾸어준다.




GeoJson2Rhino.py 파일은 아래와 같다.



148번 줄에 jsonToRhinoCommon 함수를 보면 몇 가지의 주석을 달아놓았다. 자신이 가지고 있는 파일의 필요한 속성 이름으로 해당 부분들을 수정해주어야 한다.

GIS건물통합정보의 경우 BLDG_H_GRD 대신 A16으로 써주어야 한다. 건물높이 정보가 있는 필드의 이름이 A16이기 때문이다.

건물 바닥면의 높이 정보를 알고 있지 않다면 건물을 모두 해발고도 0위에 놓을 수 밖에 없다.161번줄에 elevation으로 되어 있는 부분을 0으로 대체한다. 변수값 대신 상수를 함수에 태워보내는 것이다.


아래의 샘플 파일을 사용할 경우, 수정 없이 그냥 사용하면 된다.


sample.geojson




4. 변환하기


Rhino의 명령줄에서 RunPythonScript를 실행시킨다.

대화창이 뜨면, 위에서 저장한 runGeojson.py를 선택하여 실행시킨다.

zoom Extent all 하여 변환이 제대로 되었는지 확인한다.






-------------------------------


기본적인 사용법에 대한 질문에 대해서는 하나하나 답변해드리기 어렵습니다. 대부분의 내용은 간단한 검색을 통하여 찾을 수 있습니다.


저는 라이노, 파이썬, 라이노파이썬스크립트에 대해 익숙하지 않습니다.

따라서, 오류에 대한 지적이나, 좀 더 편리한 인터페이스로 바꿀 수 있는 댓글은 환영합니다.






COMMENT : 3 TRACKBACK : 0

  • 이장희 2018.09.09 23:37 신고

    안녕하세요!
    Message: No module named rhinopythonscripts
    라는 오류가 계속 뜹니다. 폴더 위치를 바꿔야 할까요?

    • 안녕하세요.
      개별적으로 발생한 상황에 대해 정확한 원인을 파악하여 답변드리기는 어렵습니다. 메시지 그대로 해석해보면, 있어야 하는 것이 없다는 것이니 기본적으로 위의 글을 꼼꼼히 확인하신 후 폴더 위치나 스펠링 등을 다시 확인하시기 바랍니다. 그래도 문제가 해결되지 않는다면 주변의 사용자들에게 문의하시길 권해드립니다.
      문제의 원인과 해결을 파악하셨고, 그것이 일반적으로 발생할 수 있는 문제라면 다른 사용자들을 위해 이 곳에 그러한 내용을 남겨주시면 감사하겠습니다.

  • 이장희 2018.09.11 21:11 신고

    답장주셔서 정말 감사합니다. 저 그런데 제가 주변에 라이노를 잘 할 줄 아는 친구가 없어 이렇게 댓글로 한 번 더 여쭤봅니다.

    *위 두 개 py 파일은 라이노 스크립트 폴더에 저장한다. 일반적인 경우 [라이노 설치 경로]\Plug-ins\IronPython\Lib\rhinopythonscripts 에 두면 된다.

    이 부분에서 문제가 있는 것 같습니다.. 라이노 5와 6 모두 해보았는데 rhinopythonscripts 폴더가 원래부터 있지가 않고 새로 생성해서 폴더를 만들었습니다. rhinopythonscripts 라는 이름의 모듈이 없다는 오류가 계속 뜹니다. 죄송하지만 혹시 답변해주실 내용이 있으면 부탁드리겠습니다ㅠㅠ!!

Category

Etc.

Date

2018.03.24 00:16

위로가기