मेरे पास QGIS 1.8 में एक कार्यशील प्लगइन था जो MSAccess डेटाबेस से डेटा पढ़ता था और इसे मेमोरी लेयर्स की एक श्रृंखला में जोड़ता था। अंतरिम में कुछ प्रसंस्करण शामिल है इसलिए मुझे नहीं लगता कि डेटाबेस से सीधे पढ़ने के लिए QGIS का उपयोग करना एक विकल्प है।
मैं QGIS 1.8 से 1.9 (मुख्य रूप से प्रिंट संगीतकार की बेहतर गुणवत्ता के कारण) से स्थानांतरित करना चाहूंगा। प्लगइन नए एपीआई के साथ काम नहीं करता है।
मैंने Google खोजों में कई तरह के तरीकों की कोशिश की है। एक, नीचे दिए गए कोड को संशोधित करना - http://www.qgis.org/pyqgis-cookbook/vector.html#memory-provider , यानी डेटामेट्रॉइडर में ज्यामिति और विशेषताओं को जोड़ना और फिर परत को अपडेट करना - नए एपीआई के अनुरूप काम करना जब तक मैं manully संपादन मोड ( http://hub.qgis.org/issues/3713 के समान ) में प्रवेश नहीं कर लेता, तब तक थोड़ी बहुत विशेषताएं दिखाई नहीं दीं । एक वैकल्पिक दृष्टिकोण, उपरोक्त लिंक के उत्तर # 1 में विस्तृत, परत और विशेषताओं को सही ढंग से जोड़ा गया लेकिन मैं परत में सुविधाओं को जोड़ने में असमर्थ था।
यह देखते हुए कि यह एक बहुत ही सरल कार्य होना चाहिए मुझे उम्मीद है कि यहां कोई व्यक्ति इस बात का एक उदाहरण पेश कर सकता है कि यह कैसे किया जाना चाहिए। (पीएस मैं एक पेशेवर प्रोग्रामर नहीं हूं और मेरे अधिकांश कोडिंग काफी कच्चे हैं - मैं किसी भी मार्गदर्शन का स्वागत करता हूं, लेकिन यह पूछें कि आप मेरी ओर से कुछ अज्ञानता का बहाना करते हैं)
# Receivers = a list of lists returned from a database query
# create layer
vl = QgsVectorLayer("Point", item, "memory")
pr = vl.dataProvider()
# add fields
pr.addAttributes( [ QgsField("Rec_No", QVariant.Int), QgsField("Include", QVariant.String), QgsField("Label", QVariant.String), QgsField("X", QVariant.Double),
QgsField("Y", QVariant.Double), QgsField("Z", QVariant.Double), QgsField("Height", QVariant.Double),
QgsField("Project_Re", QVariant.String), QgsField("NCA", QVariant.String),
QgsField("DayCrit", QVariant.Int), QgsField("EveCrit", QVariant.Int), QgsField("NightCrit", QVariant.Int) ] )
for i in range(len(Receivers)):
# add a feature
fet = QgsFeature()
X = Receivers[i][3]
Y = Receivers[i][4]
fet.setGeometry( QgsGeometry.fromPoint(QgsPoint(X,Y)) )
# Details = a list of results returned from a database query specific to each result in 'Receivers'
if Receivers[i][3] != 0:
Include = 'Yes'
else:
Include = 'No'
fet.setAttributeMap( { 0 : QVariant(Receivers[i][0]), 1 : QVariant(Include), 2 : QVariant(Receivers[i][2]),
3 : QVariant(Receivers[i][3]), 4 : QVariant(Receivers[i][4]), 5 : QVariant(Receivers[i][5]), 6 : QVariant(Receivers[i][6]),
7 : QVariant(Details[0]), 8 : QVariant(Details[1]), 9 : QVariant(Details[2]), 10 : QVariant(Details[3]), 11 : QVariant(Details[4]) } )
pr.addFeatures( [ fet ] )
# add a style
vl.loadNamedStyle('C:/OSGeo4W/apps/qgis/python/plugins/Gopher2QGIS/styles/Receiver_Style.qml')
# update layer's extent when new features have been added
# because change of extent in provider is not propagated to the layer
vl.commitChanges()
vl.updateExtents()
vl.updateFieldMap()
QgsMapLayerRegistry.instance().addMapLayer(vl)