DWG 도면을 QGIS로,
읽을 수 있는 상태 그대로
CAD 레이어·색·선종류·선폭·문자를 살려서 가져옵니다. 전부 사용자 컴퓨터에서 처리하고, 도면은 어디로도 올라가지 않습니다.
두 가지 판이 있습니다
무료판은 도면을 QGIS에서 보이게 합니다. 도면 수 제한도 기한도 없고, 한 번에 한 장씩 가져옵니다. Pro는 폴더째 들어온 도면을 질의하고 분석할 수 있는 데이터로 바꿉니다. 도면을 읽는 부분은 두 판이 완전히 같은 코드입니다 — 무료판을 일부러 나쁘게 만들지 않았습니다.
| 기능 | 무료 | Pro |
|---|---|---|
| 도면 가져오기, 색·선종류·해치·문자 | 있음 | 있음 |
| 한 번에 처리하는 도면 수 | 한 장씩 수동 | 폴더 통째로 |
| 도면 문자를 도형 속성으로 | — | 있음 |
| 일괄 변환 + 파일별 CSV 리포트 | — | 있음 |
| 납품 한 건을 GeoPackage 하나로 합치기 | — | 있음 |
| 꺼 두거나 얼려 둔 레이어 건너뛰기 | 있음 | 있음 |
| 열린 폴리라인을 면으로 | — | 있음 |
| 기준점 두 개로 실좌표에 맞추기 | — | 있음 |
| 높이(Z) 값 유지 | — | 있음 |
| 매핑 프로파일 — 여러 CAD 레이어를 한 피처 클래스로 | — | 있음 |
| 블록 속성(ATTRIB)을 질의 가능한 필드로 | — | 있음 |
| 공간 처리 도구상자·모델에서 실행 | — | 있음 |
| 변환기 준비 | 버튼 한 번 (인터넷 필요) | 동봉 — 인터넷 없이도 |
무료판 — 도면을 QGIS에서 보이게
플러그인 → EchoCad → DWG 가져오기로 창을 엽니다. 도면 파일을 고르고, 좌표계를 확인하고, 가져오기를 누릅니다. 도면 한 장이 그것으로 끝납니다. 도면 수 제한도 기한도 없습니다.
- CAD 레이어마다 QGIS 레이어 하나를 만들고 점·선·면으로 나눕니다. 한 레이어에 섞여 들어와 심볼을 못 주는 일이 없습니다
- 객체 색·선종류(실선·파선·일점쇄선)·선폭을 유지합니다. 도면이 원래 갖고 있던 구분이 QGIS에서도 그대로 보입니다
- 문자를 원래 크기·회전·색으로 배치합니다. 표제란·주기·치수 문자가 제자리에 남습니다
- 해치를 도면의 정의대로 다시 그립니다. 각도·간격·파선 패턴을 도면에서 읽어 재현합니다 — 단색 덩어리로 뭉개지 않습니다
- 한글이 깨지지 않습니다. 도면이 선언한 인코딩이 아니라 실제 바이트를 보고 판정하므로, 인코딩이 잘못 적힌 도면에서도 글자가 살아납니다
- 좌표계는 프로젝트에서 받아 채웁니다. 이미 작업 중인 데이터와 같은 좌표계로 들어오고, 바꾸고 싶으면 창에서 고르면 됩니다
- GeoPackage로 저장할 수 있습니다. 저장하지 않으면 메모리 레이어라 QGIS를 닫으면 사라집니다
- 실패하면 이유를 말합니다. 미지원 형식(R13 이하), 빈 도면, 시간 초과를 구분해서 알려 줍니다
- 도면에서 꺼 두거나 얼려 둔 레이어는 건너뛸 수 있습니다. 기본은 다 가져오는 것입니다 — 안 보이게 해 둔 것이 곧 필요 없다는 뜻은 아니라, 데이터를 조용히 잃는 것보다 목록이 긴 편이 낫습니다
DWG를 읽는 변환기는 버튼 한 번으로 준비됩니다. 설치 후 처음 가져오기를 누르면 창이 뜨고, 자동으로 준비하기를 누르면 받아서 설치까지 끝납니다. 그 변환기(LibreDWG)는 GPL-3이라 저희가 함께 넣어 드릴 수는 없고, 받는 것은 사용자 컴퓨터입니다. 인터넷이 안 되는 곳이면 직접 지정하셔도 됩니다.
Pro — 도면을 데이터로
무료판으로도 도면은 얼마든지 보실 수 있습니다. Pro가 바꾸는 것은 그다음입니다 — 도면에 적혀 있던 값을 필드로 꺼내고, 선을 면으로, 도면좌표를 실좌표로 바로잡고, 그 전부를 폴더 단위로 자동 반복합니다.
아래 숫자는 하나도 지어내지 않았습니다. 실제 납품 도면과 공개 표본을 돌려서 잰 값이고, 재는 데 쓴 스크립트도 저장소에 함께 있습니다.
도면이 그림으로 남느냐, 데이터가 되느냐
납품 도면 9장에서 문자 2,836개가 도형의 속성이 됐습니다. 이 일을 손으로 하는 곳은 없습니다. 수천 번을 읽고, 맞는 도형을 찾고, 옮겨 적는 대신 대개 그냥 포기하고 도면을 배경 그림으로 씁니다. 그러면 거기 적혀 있던 실 번호도, 관경도, 규격도 GIS에서는 없는 값입니다.
Pro가 바꾸는 것은 작업 시간이 아니라 그 값이 데이터가 되느냐 아니냐입니다. 한 번 설정해 두면 다음 달 납품에도 그대로 돌아갑니다.
1. 도면 문자를 도형의 속성으로
현장 도면은 정보를 블록 속성이 아니라 그냥 문자로 적어 둡니다. 저희가 실제 납품 도면 9장을 세어 봤더니 블록 속성은 0개, 문자는 3,558개였습니다. 그 문자를 GIS가 떠다니는 글자로 받으면 질의도 조인도 집계도 못 합니다. 눈으로만 보입니다.
Pro는 문자마다 주인 도형을 하나씩 찾아 label 필드에 넣습니다.
면 안에 있는 문자는 그 면의 것이 되고, 면 밖이면 허용거리 안에서 가장 가까운 도형으로 갑니다.
허용거리는 도면 크기에서 자동으로 잡습니다 — 도면마다 단위와 축척이 달라 고정값을 쓰면
어떤 도면에서는 전부 붙고 어떤 도면에서는 하나도 안 붙습니다.
label 속성으로 옮겼습니다. 이제 대장과 조인이 됩니다.
주인을 못 찾은 도형은 NULL로 남습니다 — 없는 값을 지어내지 않습니다.
실측 — 납품 도면 9장에서 문자 5,640개 중 2,836개(50%)가 도형에 붙었습니다. 배관 아이소메트릭은 64~88%, 배치도는 22~31%입니다. 나머지를 못 붙인 것이 아니라 안 붙인 것입니다. 표제란·범례·주기처럼 어느 도형의 것도 아닌 문자는 그대로 둡니다. 한 도형이 문자를 여덟 개 넘게 가져가면 라벨 관계가 아니라고 보고 비웁니다 — 회사명과 개정이력이 뒤섞인 한 덩어리는 없느니만 못하기 때문입니다.
2. 폴더 일괄 변환과 파일별 리포트
도면은 한 장이 아니라 폴더째 옵니다. 무료판은 한 번에 한 장이라 창을 열고 파일을 고르고 좌표계를 고르고 가져오는 일을 도면 수만큼 반복해야 합니다. 한 장이면 괜찮지만 여든 장이면 못 씁니다.
- 폴더를 지정하면 안의 DWG를 모두 변환합니다. 하위 폴더 포함 여부를 고를 수 있습니다
- 한 파일이 실패해도 나머지는 계속 처리합니다. 중간에 멈추지 않습니다
- 위의 문자 붙이기·면 만들기·좌표 맞추기가 전체에 똑같이 적용됩니다
- 파일별 결과를 CSV 리포트로 남깁니다
아래는 도면 9장이 든 폴더를 한 번 돌린 실제 리포트입니다. R13 도면 한 장이 섞여 있었지만 거기서 멈추지 않고 나머지를 끝냈고, 무엇이 왜 안 됐는지가 그대로 남았습니다.
| file | status | note | layers | features | sec |
|---|---|---|---|---|---|
| facility-2011-dm-a04.dwg | ok | 42 | 7,172 | 8.8 | |
| cafm-plan-de.dwg | ok | Dropped 1 features with broken coordinates | 23 | 3,517 | 3.9 |
| fire-station.dwg | ok | 13 | 3,621 | 2.2 | |
| floorplan-elevation.dwg | ok | 19 | 1,111 | 4.0 | |
| building-a-floor0.dwg | ok | 18 | 327 | 2.3 | |
| site-survey-3.dwg | unsupported | Format AC1012. Only R14 and newer are supported. | 0 | 0 | 0.0 |
| tourist-home.dwg | ok | Dropped 5 features with broken coordinates | 34 | 17,496 | 6.6 |
좌표가 깨진 피처를 몇 개 버렸는지까지 남습니다. 조용히 버리면 나중에 개수가 안 맞는 이유를 찾지 못합니다.
3. 열린 폴리라인을 면으로
CAD에서는 눈으로 닫혀 보이면 그만이라, 마지막 점이 시작점과 몇 밀리미터 어긋난 채로 남습니다. GIS는 그것을 선으로만 받아서 면적도 못 내고 포함 질의도 못 합니다. 저희 표본에서 납품 도면의 폴리라인 531개 중 528개가 열려 있었습니다.
허용오차를 주면 그 안에서 벌어진 선을 닫아 면을 만듭니다. 원본 선은 지우지 않습니다 — 값이 틀리면 있어야 할 선이 사라지므로, 면을 얹기만 해서 결과를 보고 값을 고쳐 다시 돌리실 수 있게 했습니다. 자동으로 켜지도 않습니다. 배관 한 줄이나 치수선을 면으로 만들면 쓰레기가 됩니다.
실측 — 납품 도면 9장, 허용오차 1.0에서 면 1,986개가 만들어졌습니다. 면을 먼저 만들고 문자를 붙이므로 문자 부착률도 47.9%에서 50.3%로 올랐습니다.
4. 기준점 두 개로 실좌표에 맞추기
도면을 0,0 근처에 그려 놓는 것이 CAD의 보통입니다. 공개 표본 20장 중 17장이 로컬좌표였습니다. 그대로 QGIS에 넣으면 도면이 엉뚱한 자리에 놓여 배경지도와 겹치지도 않습니다.
도면에서 읽은 두 점과 그 두 점의 실좌표를 적으면 이동·회전·축척을 한 번에 잡습니다. 축척은 x와 y에 같게 걸립니다 — 어긋남을 허용하면 값을 한 자리 틀렸을 때 도면 전체가 조용히 찌그러집니다. 틀린 입력은 찌그러지는 것보다 거부되는 편이 낫습니다.
실측 — 기준점 오차 0.000000000, 가로 길이 14,382.7736 그대로, 피처 11,831개 전부 이동했습니다.
5. 높이(Z) 값 유지
배관 아이소메트릭처럼 높이가 정보의 절반인 도면이 있습니다. 평면으로 눌러 받으면 배관이 어느 층을 지나는지 알 수 없습니다.
옵션을 켜면 레이어를 2.5D로 만들고 정점마다 높이를 그대로 담습니다. 2차원 피처가 섞여 있으면 높이를 0으로 채워 같은 레이어에 넣습니다 — 한 CAD 레이어가 두 개로 쪼개지는 것보다 낫습니다.
실측 — 납품 도면 9장 모두 3D 레이어로 나왔습니다. 서로 다른 높이가 ISO 배관도에서 1,757 ~ 27,330개입니다. 전에는 전부 0으로 눌려 있었습니다.
6. 매핑 프로파일 — CAD 레이어를 조직 스키마로
도면 100장을 받으면 레이어명이 100가지입니다. A-WALL-EXST,
A-WALL-NEW, A-WALL-2F가 전부 같은 "건물벽"인데
QGIS에는 레이어 세 개로 들어옵니다.
프로파일은 glob 패턴 규칙 목록입니다. 위에서부터 첫 매칭이 적용되고, 순서가 곧 우선순위입니다. 어느 규칙에도 안 걸린 레이어는 원래 이름을 유지하면서 매칭 안 됨으로 보고되므로 빠진 것이 있는지 바로 알 수 있습니다. JSON 파일 하나라 팀에서 공유하고 git으로 버전 관리할 수 있습니다.
{
"version": 1,
"name": "example",
"rules": [
{ "match": "A-WALL-*", "layer_name": "building_wall", "geometry": "polygon" },
{ "match": "*-TEXT", "layer_name": "annotation", "geometry": "point" }
],
"default": { "layer_name": "{cad_layer}", "geometry": "auto" }
}
7. 블록 속성(ATTRIB)을 질의 가능한 필드로
블록 속성을 쓰는 도면이라면 거기에 맨홀 번호, 관경, 시설물 코드, 지번이 들어 있습니다. 무료판도, QGIS 내장 임포터도 이걸 가져오지 않습니다. 도면은 열리는데 속성은 사라집니다.
Pro는 CAD 레이어마다 블록 참조 포인트 레이어를 만들고, 그 레이어에 나온 모든 속성 태그를 필드로 펼칩니다. 원본 태그명은 QGIS 필드 별칭으로 보존되므로 필드명이 정규화돼도 원래 이름을 잃지 않습니다.
다만 블록 속성을 안 쓰는 도면이 훨씬 흔합니다. 저희 납품 표본 9장에는 하나도 없었습니다. 그래서 1번(문자 붙이기)이 먼저입니다.
8. 공간 처리 도구상자에서 실행
Pro는 공간 처리 도구상자 → EchoCad → DWG에
알고리즘 두 개로 등록됩니다 — DWG 가져오기와
DWG 일괄 가져오기입니다. 창을 열지 않고 이렇게 부를 수 있습니다.
import processing
processing.run("echocad:batchimportdwg", {
"INPUT_FOLDER": "D:/납품/2026-03/도면",
"RECURSIVE": True,
"CRS": "EPSG:5186",
"PROFILE": "D:/사내/office-schema.json",
"EXTRACT_ATTRIBS": True,
"JOIN_TEXT": True,
"CLOSE_TOLERANCE": 1.0,
"KEEP_Z": True,
"SKIP_HIDDEN": True,
"MERGE": True,
"OUTPUT": "D:/작업/gpkg",
"REPORT": "D:/작업/report.csv",
})
그래서 모델 빌더에 끼워 넣을 수 있고, 변환 다음에 버퍼·조인·내보내기를 이어 붙여 한 번에 돌릴 수 있습니다. 매달 같은 형식으로 납품이 들어오는 곳이라면 한 번 만들어 두고 계속 다시 돌리는 것이 가장 크게 절약되는 지점입니다. 무료판은 알고리즘을 아예 등록하지 않습니다 — 전부 가져오기 창에서 손으로 합니다.
9. 변환기 동봉 — 폐쇄망에서도 즉시
무료판도 버튼 한 번이면 변환기가 준비되지만, 그건 인터넷이 되는 곳에서만입니다. Pro에는 Windows·macOS 변환기가 들어 있어 망이 끊긴 자리에서도 설치 즉시 돕니다. macOS에서는 실행 권한과 격리 속성까지 처리하므로 터미널을 열 일이 없습니다.
Pro는 echocad_pro라는 별도 플러그인으로 설치되어 무료판과 충돌하지 않고,
업데이트 때 서로 덮어쓰지 않습니다. 인터넷이 필요 없어 폐쇄망에서도 그대로 씁니다.
각 기능의 화면과 예시는 기능에 더 있습니다.
가격
첫 1년 업데이트가 포함됩니다. 그 뒤로는 1년 주기로 $149입니다. 구독이 아닙니다 — 갱신하지 않아도 쓰던 버전은 계속 동작합니다.
먼저 무료판으로 확인해 보세요. 이 도구가 쓰시는 도면을 제대로 읽는지 — 레이어가 어떻게 나뉘고, 한글이 살아나고, 해치가 재현되는지 — 돈을 내기 전에 직접 보실 수 있습니다. 그 위에 블록 속성·매핑 프로파일·일괄 변환이 필요하시면 Pro입니다.
필요한 것
- QGIS 3.34 LTR 이상 (4.x 확인됨)
- Windows 또는 macOS
- R14 이상 DWG. R13 이하는 시작할 때 알리고 멈춥니다