2013년 9월 1일 일요일

QGIS에서 한글이 포함된 DXF 파일 불러오기

QGIS에서 DXF 파일을 불러올 때 한글이 포함된 텍스트(TEXT) 또는 레이어(LAYER)를 변환하면서 한글 속성이 깨지는 경우 해결하는 방법이며, 한글 윈도우를 기준으로 함



ESRI Shapefile의 경우 [Layer] --> [Add Vector Layer...] 메뉴 실행 후 다음 그림과 같이 EUC-KR을 선택하면 정상적으로 한글이 처리되지만, DXF 파일의 경우 현재 버전에서는 이 설정이 적용되지 않는다.
QGIS에서 DXF를 불러올 때 GDAL/OGR 라이브러리를 사용하므로 QGIS 시작할 때 환경설정을 추가하면 오류를 해결할 수 있다.

1. DXF 파일의 인코딩 확인
일반적으로 DXF 파일은 한글윈도우를 사용하여 CAD에서 저장하는 경우 파일의 헤더에 아래와 같이 $DWGCODEPAGE 속성이 ANSI_949로 저장되는 듯 하다(확인 필요)

$DWGCODEPAGE
  3
ANSI_949
  9

GDAL/OGR 드라이버에서 DXF 파일은 ANSI_1252 / Win1252 인코딩을 기본값으로 사용하며 ,파일 헤더의 $DWGCODEPAGE 속성 또는 GDAL/OGR 드라이버의 DXF_ENCODING 환경설정을 이용하여 인코딩을 설정할 수 있다.

현재 버전의 QGIS에서는DXF 파일의 $DWGCODEPAGE 속성 변경만으로는 정상적으로 한글을 불러올 수 없으며, DXF_ENCODING 전역환경 설정을 통해서 문제를 해결할 수 있다.

우선 불러오고자 하는 DXF 파일의 인코딩을 확인해야 한다.
 - Notepad++(http://notepad-plus-plus.org/)를 설치하고 DXF 파일을 불러온다
 - 우 하단의 인코딩 타입을 확인하면 다음과 같이 
   - ANSI 인 경우 : EUC-KR 또는 CP949
   - ANSI as UTF-8인 경우 : UTF-8

2. 환경설정
QGIS 바로가기 아이콘의 등록정보를 확인 후 다음과 같이 qgis-dev.bat 파일을 Notepad++에서 불러온다. 이하 [QGIS Weekly]는 설치된 QGIS 버전에 따라 다를 수 있으며, 아래는 2013년 8월 말 기준 QGIS Weekly version(http://qgis.org/downloads/weekly/)을 설치한 경우

예) C:\Program Files\QGIS Weekly\bin\qgis-dev.bat
정식버전의 경우 qgis.bat 파일이 될 것이다.

set GDAL_FILENAME_IS_UTF8=YES 다음 라인에 DXF_ENCODING 정보를 추가한다.

DXF 인코딩이 UTF-8인 경우 : set DXF_ENCODING=UTF-8
DXF 인코딩이 ANSI 인 경우 : set DXF_ENCODING=EUC-KR
3. 불러오기
이제 QGIS를 새로 실행한 후 [Layer] --> [Add Vector Layer...] 메뉴를 실행 후 파일 유형을 All files (*) (*.*) 또는 AutoCAD DXF [OGR] (*.dxf *.DXF) 를 선택하고 DXF 파일을 불러온다.


DXF의 원본 좌표체계를 선택 후 불러올 타입(Point[TEXT], LineString, Polygon)을 선택한다.

다음과 같이 Point를 Text 필드로 라벨을 설정하면 한글이 표시된다.

다음 화면은 환경 설정 후 정상적으로 한글이 표시된 지도이다.


이제 불러온 DXF 파일 레이어를 선택 후 오른쪽 마우스를 눌러 [Save As...] 메뉴를 실행 후 Shapefile로 저장하면 된다.

4. QGIS에 내장된 ogr2ogr 사용하는 경우
여러개의 DXF 파일을 Shapefile로 변환하는 경우에는 Command 창에서 ogr2ogr 명령어를 사용하면 된다.

ogr2ogr -f "ESRI Shapefile" h_point.shp      -overwrite 33607068.dxf -where "OGR_GEOMETRY='POINT'"
ogr2ogr -f "ESRI Shapefile" h_linestring.shp -overwrite 33607068.dxf -where "OGR_GEOMETRY='LINESTRING'"
ogr2ogr -f "ESRI Shapefile" h_polygon.shp    -overwrite 33607068.dxf -where "OGR_GEOMETRY='POLYGON'"

만약 변환하는 중에 다음과 같은 경고가 발생하는 경우가 있다.

C:\Program Files\QGIS Weekly\bin>ogr2ogr -where "OGR_GEOMETRY='POINT'" -f "ESRI Shapefile" h_point.shp 33607068.dxf
Warning 6: Normalized/laundered field name: 'ExtendedEntity' to 'ExtendedEn'
Warning 6: Normalized/laundered field name: 'EntityHandle' to 'EntityHand'
Warning 1: One or several characters couldn't be converted correctly from UTF-8 to ISO-8859-1.
This warning will not be emitted anymore

위와 같은 경고가 발생하는 경우 DXF파일을 열어서 $DWGCODEPAGE 속성을 삭제한 후 재시도하면 해결된다.

$DWGCODEPAGE
  3
ANSI_949
  9

5. 참고
 - http://trac.osgeo.org/gdal/wiki/ConfigOptions
 - http://www.gdal.org/ogr/drv_dxf.html