क्या पायथन का उपयोग करके QGIS में अपने चयनित फीचर का "स्क्रीनशॉट" अपने आप लेना संभव है?


11

मैं एक उपकरण लागू कर रहा हूं, जो उपयोगकर्ता को एक सुविधा का प्रोफाइल बनाने की अनुमति देता है (मेरे मामले में शहरी पार्सल)। क्या इस सुविधा का स्क्रीनशॉट स्वचालित रूप से लेना (QGIS विंडो में प्रदर्शित) और PDF प्रोफ़ाइल में प्रदर्शित करना संभव है?

तस्वीर में केवल फीचर की सीमा और शायद WMS-लेयर दिखाई देनी चाहिए जो कि फीचर से परे है। क्या पहले से ही कुछ उपकरण हैं जो आप सुझा सकते हैं?


मैं पीएनजी के बजाय जेपीजी को कैसे बचा सकता हूं? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") मुझे पता है कि मैं अंतिम पैरामीटर के रूप में "JPG" का उपयोग कर सकता हूं, लेकिन मुझे नहीं पता कि QPixmap को कैसे परिभाषित किया जाए जो वास्तव में वास्तविक मानचित्र की तरह ही है। खिड़की में qgis। सहायता के लिए धन्यवाद। मीका
जिस्म

जवाबों:


10

Kopi,

समाधान के कई दृष्टिकोण हैं, लेकिन यह सबसे सरल (आपकी आवश्यकताओं के आधार पर) हो सकता है:

QgsVectorLayer का उपयोग करके सुविधा का चयन करें

अपने वेक्टर लेयर (vlayer) और फीचर के id (fid) का संदर्भ मानते हुए। यह सभी देखें

vlayer.select(fid)

QgsInterface का उपयोग करके चयनित सुविधा पर ज़ूम करें

qgis.utils.iface.actionZoomToSelected().trigger()

QgsVectorLayer का उपयोग करते हुए सुविधा को अचयनित करें

vlayer.deselect(fid)

QgsMapCanvas का उपयोग करके चित्र के रूप में कैनवास सहेजें

qgis.utils.iface.mapCanvas().saveAsImage('/Users/me/Desktop/feature.png')

यह दृष्टिकोण जितना संभव हो उतने बड़े फोटो का उत्पादन करता है, यदि आपकी विंडो को पूर्ण रूप से विस्तारित किया गया है, क्योंकि कैनवास को सहेजना स्क्रीन रिज़ॉल्यूशन पर है। हालांकि, यह सुनिश्चित नहीं करता है कि आपके चित्र समान मानचित्र ज़ूम स्केल पर होंगे, केवल अपेक्षाकृत पिक्सेल आकार। अन्य विकल्प भी हैं जैसे QgisInterface::actionPanToSelected()कि आपको ज़ूम स्केल को सुसंगत रखने की आवश्यकता है।


वाह। आपके उत्तर के लिए धन्यवाद! यह बहुत अच्छा काम करता है!
कोपी

1
"आसान प्रिंट" प्लगइन पर भी एक नज़र डालें, शायद आपकी ज़रूरत नहीं है, लेकिन यह प्रेरणा के लिए उपयोगी हो सकता है।
जियोवानी मंगी

क्या स्क्रीनशॉट लेने से पहले स्केल सेट करना संभव है? और मैं "ActionPanToSelected" का उपयोग कैसे कर सकता हूं? मैं इसे इस तरह से कोशिश कर रहा हूं: qgis.utils.iface.actionPanToSelected (सुविधा जिसे फ़ंक्शन को पैन करना है ...), लेकिन यह एक त्रुटि संदेश देता है: "Attritbute त्रुटि: QgisInnorface ऑब्जेक्ट में कोई विशेषता क्रिया नहीं हैPanToSelected
kopi

1
qgis.utils.iface.mapCanvas().zoomScale(scale)मैप स्केल सेट करने का प्रयास करें । ActionPanToSelected () एक पैरामीटर नहीं लेता है, लेकिन कार्रवाई का एक संदर्भ स्वयं देता है (जैसे actionZoomToSelected () ऊपर)। qgis.utils.iface.actionPanToSelected().trigger()कार्रवाई को आग लगाने के लिए उसके सार्वजनिक स्लॉट का उपयोग करें , जो यह पता लगाएगा कि क्या चुना गया है।
डेकाकार्टो

1
हममम। qgis.utils.iface.actionPanToSelected ()। ट्रिगर () मेरे लिए QGIS संस्करण 1.8.0 के तहत काम करता है। क्या आप नवीनतम स्थिर संस्करण (1.8.0) का उपयोग कर रहे हैं? यह सुविधा जनवरी में वापस जोड़ दी गई थी , इसलिए यह 1.7.x संस्करण में नहीं है
डककार्टो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.