प्रोग्रामिक रूप से एक नई खाली वेक्टर परत कैसे बनाएं?


21

मैं अजगर और QGIS के लिए नया हूं। मैंने 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-लिस्बोआ का उपयोग कर रहा हूं, लेकिन उपरोक्त त्रुटि का क्या कारण हो सकता है?
दून हेडेनरिच

1
ऐसा लगता है कि setAttributeMapअब QgsFeature कक्षाओं की एक विधि नहीं है, इसलिए यह समाधान सबसे हालिया (इसके 2016) QGIS के लिए काम नहीं करता है।
स्पेसमैन

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.