আমার কিউজিআইএস ১.৮ এ একটি ওয়ার্কিং প্লাগইন ছিল যা একটি এমএসএ্যাক্সেস ডাটাবেস থেকে ডেটা পড়ে এবং এটি মেমরি স্তরগুলির একটি সিরিজে যুক্ত করে। অন্তর্বর্তীকালীন কিছু প্রক্রিয়াকরণ জড়িত তাই আমি মনে করি না সরাসরি ডাটাবেস থেকে পড়ার জন্য QGIS ব্যবহার করা একটি বিকল্প।
আমি কিউজিআইএস 1.8 থেকে 1.9 এ স্থানান্তরিত করতে চাই (মূলত মুদ্রণ সুরকারের উন্নত মানের কারণে)। প্লাগইনটি নতুন এপিআইয়ের সাথে কাজ করে না।
আমি গুগল অনুসন্ধানে আগত বিভিন্ন পদ্ধতি ব্যবহার করে দেখেছি। একটি, নীচের কোডটি সংশোধন করে - http://www.qgis.org/pyqgis-cookbook/vector.html#memory-provider থেকে , যেমন ডেটাপ্রভাইডারে জ্যামিতি এবং বৈশিষ্ট্য যুক্ত করা এবং তারপরে স্তরটি আপডেট করা - নতুন এপিআইয়ের সাথে কাজ করার জন্য সামান্য তবে বৈশিষ্ট্যগুলি দৃশ্যমান ছিল না যতক্ষণ না আমি ম্যানুয়ালি সম্পাদনা মোডে প্রবেশ করি ( 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)