일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- PostgreSQL
- Cesium
- GDAL
- DXF
- css
- Line Dashed
- WMTS
- extent linestring
- attribute Selector
- gdal2tiles
- GeoServer
- raster2pgsql
- jupyternotebook
- 3DTiles
- Potree
- GIS
- PDAL
- georeferrencing
- PostGIS
- CesiumJS
- 3D tiles
- publish/subscribe
- anotherdxfimporter
- QGIS
- threejs
- line width
- pg_notify
- PointCloud
- display:flex
- VWORLD
- Today
- Total
코드조각 저장소
OGR2OGR을 이용한 DXF2GPKG 본문
현업에서 사용하는 파일포멧중에 dxf는 건축/토목 분야에서 많이 사용되고 있습니다. 설계 업무에서 많이 사용하는 CAD 프로그램에서 만들어진 도면등을 다른 프로그램에서 사용 할 수 있도록 제공되는 파일 포멧으로 에코시스템 또는 서드파티 프로그램 등에 지원하는 포멧으로 제공되는 경우가 많습니다.
이번에 운영 중인 시스템의 기능 개선으로 수행했던 작업 내용을 정리해 봤습니다.
* 예제 화면이 미흡합니다 양해 바랍니다.
QGIS 플러그인으로 제공되는 dxf importer 플러그인에는 AnotherDXFImporter가 있습니다. QGIS에서 많이 사용하고 있는것 같습니다.
https://plugins.qgis.org/plugins/AnotherDXF2Shape/
AnotherDXFImporter — QGIS Python Plugins Repository
(130) votes Loading... Features: - Other elements than the standard import are displayed - Display of text (Labeling) - Categorization by Layer - Group by Layer - Separate representation by layers possible - support (ESRI) World files for CAD datasets - s
plugins.qgis.org
이 plugin에서는 dxf의 속성들을 추출하고 ogr style로 변환하고 qgis layer 정의 로직이 들어 있어서 dxf의 도형 종류에 따라 색상, 선타입, 텍스트등에 대한 스타일 변환, 적용가지 해주고 있어 유용하게 이용했으며 이를 바탕으로 shape변환, GeoTiff 생성, WMS tiles 생성을 통해 어플리케이션에서 사용하고 있습니다.
이번 작업의 목적중에 GeoServer와 연계된 DXF 레이어 자동 발행이 있었는데 그중에 DXF에서 도형을 추출하고 스타일 관련된 부분을 정리해 보려 합니다.
제가 분석한 프로세스로 보면
위와 같은 프로세스가 존재하는 것으로 확인 했습니다. 프로그인 방식이기 때문에 QGIS가 기본적으로 필요하며 결과물 또한 QGIS Layer/지도 뷰어창에서 표출됩니다. 하지만 기본적으로 파일 데이터를 생성하고 진행되는 부분이고, 이후 추가적인 Qgis 플러그인 작업을 통해 rasterize/ tillig 작업을 이용하여 어플리케이션과 통합 될 수 있습니다.
여기서 제가 했던 작업은 PyQGIS Developer 라이브러리를 이용하여 QGIS processing을 이용한 자동화 작업이었습니다.
https://docs.qgis.org/3.22/en/docs/pyqgis_developer_cookbook/index.html
PyQGIS Developer Cookbook — QGIS Documentation documentation
© Copyright 2002-now, QGIS project. Last updated on Jun 18, 2022 13:00.
docs.qgis.org
이전에는 DXF parser등의 오픈소스를 활용한 도형 추출등을 이용했었는데
https://ezdxf.readthedocs.io/en/stable/
Quick-Info — ezdxf 0.17.2 documentation
© Copyright 2011-2021, Manfred Moitzi Revision 41320907.
ezdxf.readthedocs.io
이번에는 ogr2ogr을 이용해서 추출하고 스타일링 작업과 추가 도형 추출 변환 작업 GeoServer 통합까지의 작업해 보았습니다.
소스를 분석하던 중 AnotherDXFImporter에서도 ogr2ogr을 이용해서 도형을 추출하고 있었는데
ogr2ogr -append -update ^
".\\output\\test.gpkg" ".\\data\\test.dxf" ^
--config DXF_ENCODING "UTF-8" ^
--config DXF_INCLUDE_RAW_CODE_VALUES TRUE ^
--config DXF_TRANSLATE_ESCAPE_SEQUENCES FALSE ^
--config DXF_MERGE_BLOCK_GEOMETRIES TRUE ^
--config DXF_INLINE_BLOCKS TRUE -dim 2 ^
-nlt POINT ^
-sql "select *, ogr_style from entities where OGR_GEOMETRY LIKE '%POINT%' " ^
-nln "e986663f-065e-4f25-aaed-d3238a8ca41eeP"
위와 같은 스크립트가 만들어 지고 수행되었습니다.
ogr2ogr에 대한 상세 기능 설명은 공식문서를 참고하시면 될것 같습니다.
각 도형(OGR_GEOMETRY) 에 대해서 각 레이어(점:label, 선(Line+MultiLine), 면 )가 생성되고 QGIS에서는 이 레이어들을 확인 할 수 있습니다.
레이어 스타일에 대해서는 소스코드에서 확인 할 수 있었는데,
layer.CreateField(ogr.FieldDefn('font', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('angle', ogr.OFTReal))
layer.CreateField(ogr.FieldDefn('size', ogr.OFTReal))
layer.CreateField(ogr.FieldDefn('size_u', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('anchor', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('color', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('underline', ogr.OFTInteger))
layer.CreateField(ogr.FieldDefn('plaintext', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('fcolor', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('flnum', ogr.OFTInteger))
layer.CreateField(ogr.FieldDefn('bold', ogr.OFTInteger))
layer.CreateField(ogr.FieldDefn('italic', ogr.OFTInteger))
각 요소들에 대한 레이어 필드를 생성하고 dxf에 작성된 속성들을 추가해 주고 qml 파일로 레이어 스타일이 적용되었습니다.
제가 작업 할 때는 기본적으로 gpkg 포멧으로 레이어 테이블로 작업을 진행 했는데 geoServer 통합과정에서 스타일에 대한 작업이 추가되었습니다.
GeoServer에서 제공하는 레이어 스타일 정의는 몇가지 지원 포멧이 있는데 그중에서 제가 사용한 방식은 CSS 방식입니다.
https://docs.geoserver.org/stable/en/user/styling/webadmin/index.html
Styles — GeoServer 2.21.x User Manual
This section will detail how to work with the styles pages in the Web administration interface. For more information on styles and syntax, please see the main section on Styling. Styles are used to control the appearance of geospatial data. Styles for GeoS
docs.geoserver.org
CSS 스타일의 레이어 스타일 정의 포멧을 보면 레이어 속성 값을 사용해서 스타일을 지정할 수 있는 기능이 있는데 원본 DXF 스타일을 그대로 적용할 수 있었습니다. - 색상, 기울기, 두께 등
이후 GeoServer 통합과정은 geoserver에서 제공하는 RestFull API를 통해서 진행했으며 공식 문서 및 사용 사례등을 검색해서 진행 했습니다.
https://docs.geoserver.org/stable/en/user/rest/
REST — GeoServer 2.21.x User Manual
REST GeoServer provides a RESTful interface through which clients can retrieve information about an instance and make configuration changes. Using the REST interface’s simple HTTP calls, clients can configure GeoServer without needing to use the Web admi
docs.geoserver.org
https://docs.geoserver.org/latest/en/api/#
GeoServer API Docs
docs.geoserver.org
GeoServer Web UI에서 수행했던 기본 적인 부분들의 작업을 Rest API 방식으로 구현하여 마무리 할 수 있었습니다.