pyQGIS를 이용한 벡터 데이터 처리 8 : 새로운 SHP 파일 생성하기

새로운 벡터 데이터 파일을 생성하는 코드를 순차적으로 나열하면 먼저 필드를 정의합니다.

QgsProject.instance().removeAllMapLayers()

fields = QgsFields()
fields.append(QgsField("id", QVariant.Int))
fields.append(QgsField("name", QVariant.String))
fields.append(QgsField("value", QVariant.Double))

그리고 생성할 SHP 파일명을 지정하고 Writer 객체를 생성합니다. 속성 문자셋은 UTF-8로 지정했고 지오메트리 타입은 Point로 지정했습니다. 좌표계는 EPSG:5179입니다.

fileName = "D:/__Data__/new_point.shp"

writer = QgsVectorFileWriter(
    fileName, 
    "UTF-8", 
    fields,
    QgsWkbTypes.Point, 
    QgsCoordinateReferenceSystem("EPSG:5179"),
    "ESRI Shapefile"
)

이 Writer 객체를 통해 피쳐를 기록할 수 있고 피쳐를 기록하는 코드를 함수로 작성해 둡니다.

def createFeature(x, y, attributes):
    feat = QgsFeature()
    geom = QgsGeometry.fromPointXY(QgsPointXY(x, y))
    feat.setGeometry(geom)
    feat.setAttributes(attributes)
    return feat

위의 함수를 사용하여 4개의 피쳐를 기록합니다.

writer.addFeature(createFeature(971195, 1841488, [1, "김형준", 10.21]))
writer.addFeature(createFeature(971295, 1841488, [2, "홍길동", 20.31]))
writer.addFeature(createFeature(971195, 1841588, [3, "일지매", 25.16]))
writer.addFeature(createFeature(971295, 1841588, [4, "임꺽정", 17.54]))

생성된 SHP 파일을 Close하기 위해 다음 코드를 추가합니다.

del(writer)

이제 생성된 SHP 파일을 레이어로 추가합니다.

layer = QgsVectorLayer(fileName, "새로운 레이어", "ogr")
QgsProject.instance().addMapLayers([layer])

결과는 다음과 같습니다.

SHP 파일의 속성 값의 경우 Length와 Precision 값을 지정할 수 있는데, 위의 코드 중 필드를 추가하는 코드를 다음과 같이 Length와 Precision과 함께 처리가 가능합니다.

fields.append(QgsField("id", QVariant.Int, None, 5))
fields.append(QgsField("name", QVariant.String, None, 40))
fields.append(QgsField("value", QVariant.Double, None, 10, 4))

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다