วิธีการสร้างเวกเตอร์เลเยอร์เปล่าใหม่โดยทางโปรแกรม


21

ฉันยังใหม่กับ python และ QGIS ฉันได้ดูบทแนะนำของสคริปต์ python สำหรับ QGIS พวกเขาทั้งหมดสร้างเวกเตอร์และเลเยอร์แรสเตอร์ใหม่พร้อมแหล่งข้อมูลที่มีอยู่ เช่น. ตารางฐานข้อมูล shapefile หรือ geotiff หรือ postgis

เป็นไปได้หรือไม่ที่จะสร้างเลเยอร์ QGIS ผ่านสคริปต์ไพ ธ อนซึ่งฉันสามารถสร้าง / เพิ่ม / แก้ไขฟีเจอร์ใหม่ผ่านสคริปต์ไพ ธ อนได้ตามต้องการ โดยทั่วไปจะเป็นเลเยอร์เวกเตอร์ที่มีข้อมูลจุดและสัญลักษณ์ที่กำหนดเอง

สิ่งนี้จะเป็นไปได้ไหม มีตัวอย่างที่ฉันสามารถดูได้หรือไม่

คำตอบ:


19

มีลักษณะที่เป็นผู้ให้บริการหน่วยความจำที่อธิบายไว้ในPyQGIS ตำรา

ผู้ให้บริการหน่วยความจำมีวัตถุประสงค์เพื่อใช้งานเป็นหลักโดยปลั๊กอินหรือนักพัฒนาแอปบุคคลที่สาม มันไม่ได้จัดเก็บข้อมูลบนดิสก์ช่วยให้นักพัฒนาสามารถใช้เป็นแบ็กเอนด์ที่รวดเร็วสำหรับเลเยอร์ชั่วคราวบางส่วน

# 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: ชื่อ 'QVariant' ไม่ได้กำหนดไว้" ฉันออกจากส่วน "addAttributes" ออกไปและจัดการเพื่อวางจุดบนแผนที่เพื่อให้ทำงานได้ดีขอบคุณ ฉันใช้ Ubuntu 12.04 และ QGIS 1.8.0-Lisboa แต่สิ่งที่สามารถทำให้เกิดข้อผิดพลาดดังกล่าวข้างต้น?
Theuns Heydenrych

1
ดูเหมือนว่าsetAttributeMapจะไม่มีวิธีการเรียน QgsFeature อีกต่อไปดังนั้นวิธีนี้จะไม่ทำงานสำหรับ QGIS ล่าสุด (2016)
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 ที่ว่างเปล่าถ้าฉันต้องการบันทึกรูปร่างไฟล์ที่มีอยู่ไปยังพา ธ ที่ระบุฉันจะทำอย่างไร
user99
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.