क्या पायथन कमांड के माध्यम से प्रोजेक्ट सीआरएस को सेट करना संभव है?


10

क्या पायथन कमांड के माध्यम से QGIS में प्रोजेक्ट का CRS सेट करना संभव है?

मेरे मामले में उपयोगकर्ता को QGIS खोलना चाहिए, मेरा लिखित प्लगइन शुरू करना चाहिए और यह प्लगइन स्थानिक डेटा को लोड करेगा जिसमें एप्सग कोड 31467 (गॉस क्रुएजर ज़ोन 3) है। दुर्भाग्य से QGIS डिफ़ॉल्ट CRS WGS84 है, इसलिए मैं इकाइयों और पैमाने पर परेशानी में पड़ जाता हूं।

मेरा पहला दृष्टिकोण इस कोड का उपयोग करना था:

    my_crs = core.QgsCoordinateReferenceSystem(31467, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    self.iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

यह परिवर्तन (डेटा पहले से ही कल्पना के बाद) गॉस क्रुजर ज़ोन के लिए सीआरएस 3. निचले दाएं कोने में कम से कम एस्पग कोड बदल गया है। इकाइयां अभी भी डिग्री में हैं और पैमाने पूरी तरह से गलत है। 1: 5000 गॉस क्रुगर में 1: 528822376 WGS 84 में (QGIS में मेरे मामले में)। गुणों में मैन्युअल रूप से परियोजना सीआरएस स्थापित करने के बाद परियोजना सीआरएस वास्तव में जीके 3 है और पैमाने और इकाइयां सही हैं।

तो मेरा सवाल यह है कि क्या मैंने प्रोजेक्ट सीआरएस को दूसरे तरीके से सेट किया है, जैसा मैंने किया है? मैं मैनुअल तरीके से बचना चाहता हूं।


मैंने निम्नलिखित कोड जोड़कर समस्या का हल किया:

qgis.utils.iface.mapCanvas().setMapUnits(0)
qgis.utils.iface.mapCanvas().refresh()

यह इकाइयों को मीटर में सेट करता है और स्केल अपने आप अपडेट हो जाता है। 0 मीटर के लिए खड़ा है, 1 पैर के लिए है, 2 डिग्री के लिए है और 3 अज्ञात के लिए है।

जवाबों:


7

हाँ, यह मुमकिन है। Sourcepole द्वारा Openlayers प्लगइन स्वचालित रूप से CRS को EPSG: 3857 में सेट करता है।

Openlayers_layers.py और Openlayers_plugin.py पर एक नज़र डालें।


8

जवाब देने में थोड़ी देर हो गई, लेकिन अगर कोई व्यक्ति Google से उस पेज पर जाता है, तो प्लगइन स्थापित किए बिना, http://www.purplelinux.co.nz उस पर अच्छी जानकारी प्रदान करता है।

बैंगनीलिनक्स पर पाया गया उदाहरण (जो ठीक काम कर रहा है) निम्नलिखित सुझाव देता है:

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
    my_crs = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)


और आप कॉल करके CRS भी बना सकते हैं:

QgsCoordinateReferenceSystem("PROPERTY:ID")

जो होगा:

QgsCoordinateReferenceSystem("EPSG:31467")

जो IMHO कोड को अधिक पठनीय बनाता है।


1
नोट कोड QGIS 2.X के लिए है और आपको QGIS3 कोड के लिए यहां सूचीबद्ध अन्य उत्तरों को देखना चाहिए
Mr बैंगनी

4

इसे इस्तेमाल करो:

QgsProject.instance().setCrs(my_crs)

1
QGIS3 के साथ काम करता है, जब my_crs=QgsCoordinateReferenceSystem(4326):)
axel_ande
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.