QGIS संगीतकार में लेआउट के लिए समन्वय प्रणाली जोड़ना?


10

मैं जानना चाहूंगा कि क्या QGIS कंपोज़र लेआउट में डायनामिक कोऑर्डिनेट सिस्टम फ़ील्ड जोड़ने का कोई तरीका है।

मैं कई वस्तुओं को जोड़ने के लिए एक अभिव्यक्ति का उपयोग कर सकता हूं जैसे कि दस्तावेज़ का नाम, फ़ाइल पथ, आदि, लेकिन मैं कर सकता हूं; यह पता लगाने के लिए कि समन्वय प्रणाली को कैसे जोड़ा जाए?


1
यदि आप अभी QGIS 3.x का उपयोग कर रहे हैं, तो आप QGIS 3.x उत्तर पर अपनी हरी स्वीकार चेकमार्क को स्थानांतरित करना चाह सकते हैं।
PolyGeo

जवाबों:


7

यह उत्तर QGIS 3.0 की रिलीज से पहले प्रदान किया गया था और स्वीकार किया गया था।

प्राधिकरण आईडी प्राप्त करने के लिए (अर्थात " EPSG: 4326 "):

  • आप बस अभिव्यक्ति का उपयोग कर सकते हैं [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

यदि आप सीआरएस (यानी " WGS84 ") का शाब्दिक विवरण प्राप्त करना चाहते हैं :

  • AFAIK, आपको एक कस्टम फ़ंक्शन बनाना होगा। ऐसा करने के लिए, "एक अभिव्यक्ति सम्मिलित करें" पर जाएं, और फ़ंक्शन संपादक टैब में निम्न फ़ंक्शन टाइप करें।

कोड:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_crs(layer_name, feature, parent):
    return QgsMapLayerRegistry.instance().mapLayersByName(layer_name)[0].crs().description()
  • "लोड" पर क्लिक करें
  • एक्सप्रेशन टैब में, टाइप करें get_crs( 'your_layer_name' )

9

QGIS 3.x के लिए उत्तर:

अजगर के बिना आसान समाधान के लिए नीचे दिए गए उद्योगों द्वारा टिप्पणी देखें

इस स्क्रिप्ट को अपने कस्टम फ़ंक्शन में जोड़ें:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_crs(layer_name, feature, parent):
    return QgsProject.instance().mapLayersByName(layer_name)[0].crs().description()

यहाँ छवि विवरण दर्ज करें

और तब अभिव्यक्ति संपादक के साथ crs नाम प्राप्त करें

get_crs(@layer_name)

यहाँ छवि विवरण दर्ज करें

अपनी परियोजना के सीआरएस नाम के लिए (उदाहरण के लिए आपके प्रिंट लेआउट में प्रक्षेपण) इसका उपयोग करें:

इस स्क्रिप्ट को अपने कस्टम फ़ंक्शन में जोड़ें:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_projectcrs(project_crs, feature, parent):
    return QgsCoordinateReferenceSystem(project_crs).description()

और तब के साथ अभिव्यक्ति संपादक में सीआरएस नाम प्राप्त करें:

 get_projectcrs(@project_crs) 

बेशक आप उदाहरण के लिए 'EPSG:4326'मैन्युअल रूप से टाइप कर सकते हैं या किसी अन्य फ़ंक्शन का उपयोग कर सकते हैं , @project_crsजो एक EPSG- कोड लौटाता है।

टिप्पणियाँ:

Qgis / xx में परिवर्तन के बारे में अधिक जानकारी के लिए https://qgis.org/api/api_break.html पर भी नज़र डालें


धन्यवाद @MXXsquared! मैंने पहले ठीक उस कोड की कोशिश की थी, लेकिन लेयर का नाम पास करते समय @ का उपयोग नहीं किया। हालाँकि, मुझे अभी भी यह काम करने के लिए नहीं मिल सकता है। जब मैं लेआउट दृश्य में एक मानचित्र जोड़ता हूं और उपरोक्त फ़ंक्शन के साथ एक लेबल सम्मिलित करता हूं, तो 'आउटपुट पूर्वावलोकन' केवल NULL दिखाता है और लेबल में कोई जानकारी नहीं जोड़ी जाती है। मैंने कई बार सब कुछ जांचा, नक्शे में एक नाम (और आईडी) और एक सीआरएस है लेकिन कुछ भी नहीं दिखा। यह सही इस्तेमाल किए गए विशिष्ट सीआरएस पर निर्भर नहीं होना चाहिए?
टिंकरफिल

बेशक यह लेआउट दृश्य में काम नहीं करेगा क्योंकि यह एक विशिष्ट परत को संदर्भित करता है। मैंने अपना उत्तर संपादित किया और अपनी परियोजना के उपयोग किए गए crs को वापस करने के लिए एक फ़ंक्शन जोड़ा । आप उपयोग किए गए प्रक्षेपण के नाम को प्रदर्शित करने के लिए अपने प्रिंट लेआउट में इसका उपयोग कर सकते हैं।
MrXsquared

2
आपके उत्तर ए के लिए, एक अजगर अभिव्यक्ति की आवश्यकता नहीं है। आप 'layer_property (@layer_name,' crs_description ') `कर सकते हैं।
21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.