태그 보관물: qgis

qgis

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

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

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

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



답변

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()

답변

하드 디스크에 새 벡터 레이어 (.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() )


답변