프로그래밍 방식으로 새로운 빈 벡터 레이어를 만드는 방법은 무엇입니까?


21

저는 파이썬과 QGIS를 처음 사용합니다. QGIS 용 파이썬 스크립트 튜토리얼을 살펴 보았습니다. 모두 기존 데이터 소스를 사용하여 새 벡터 및 래스터 레이어를 만듭니다. 예. shapefile 또는 geotiff 또는 postgis 데이터베이스 테이블.

파이썬 스크립트를 통해 QGIS 레이어를 생성 할 수 있습니까? 필요한 경우 파이썬 스크립트를 통해 새로운 기능을 생성 / 추가 / 수정할 수 있습니다. 일반적으로 점 데이터와 사용자 정의 기호가있는 벡터 레이어입니다.

이것이 가능할까요? 내가 볼 수있는 예가 있습니까?

답변:


19

PyQGIS Cookbook에 설명 된대로 메모리 제공자 를 살펴보십시오 .

메모리 공급자는 주로 플러그인 또는 타사 앱 개발자가 사용하도록되어 있습니다. 디스크에 데이터를 저장하지 않으므로 개발자가 일부 임시 계층의 빠른 백엔드로 데이터를 사용할 수 있습니다.

# To avoid 'QVariant' is not defined error
from PyQt4.QtCore import *

# create layer
vl = QgsVectorLayer("Point", "temporary_points", "memory")
pr = vl.dataProvider()

# Enter editing mode
vl.startEditing()

# add fields
pr.addAttributes( [ QgsField("name", QVariant.String),
                QgsField("age",  QVariant.Int),
                QgsField("size", QVariant.Double) ] )

# add a feature
fet = QgsFeature()
fet.setGeometry( QgsGeometry.fromPoint(QgsPoint(10,10)) )
fet.setAttributeMap( { 0 : QVariant("Johny"),
                   1 : QVariant(20),
                   2 : QVariant(0.3) } )
pr.addFeatures( [ fet ] )

# Commit changes
vl.commitChanges()

답장을 보내 주셔서 감사합니다. 확실히 도움이되었습니다. 그러나 스크립트를 사용할 때 다음 오류가 발생합니다. "NameError : name 'QVariant'is not defined" "addAttributes"부분을 남겨두고지도에 점을 표시 할 수 있으므로 작동합니다. 감사합니다. Ubuntu 12.04 및 QGIS 1.8.0-Lisboa를 사용하고 있습니다. 그러나 위에서 언급 한 오류의 원인은 무엇입니까?
Theuns Heydenrych

1
setAttributeMap더 이상 QgsFeature 클래스의 메서드가 아닌 것 같으므로이 솔루션은 최신 (2016 년) QGIS에서 작동하지 않습니다.
Spacedman

4

하드 디스크에 새 벡터 레이어 (.shp)를 저장하려면 QgsVectorFileWriter () 를 사용해야 합니다. 몇 가지 매개 변수가 필요하며 가장 간단한 방법은 사용중인 프로젝트의 매개 변수를 사용하는 것입니다. 이 사이트를 살펴보십시오 .

   cLayer = qgis.utils.iface.mapCanvas().currentLayer()
   provider = cLayer.dataProvider()
   writer = QgsVectorFileWriter( "output_path_and_name.shp", provider.encoding(), provider.fields(),QGis.WKBPolygon, provider.crs() )

1
그러나 이것은 빈 .shpfile을 만들고 있습니다. 기존 shapefile을 지정된 경로에 저장하려면 어떻게해야합니까?
user99
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.