QGIS प्रिंट कंपोज़र में विचारों को सिंक्रनाइज़ करना?


10

मुझे अपनी समस्या के समान एक सवाल मिला: आर्कगिस या क्यूजीआईएस में डेटाफ्रेम कैसे लिंक करें? । लेकिन QGIS के लिए समाधान अब काम नहीं करता (डुअल व्यू प्लग-इन अब उपलब्ध नहीं है)।

मैं तीन विचारों को सिंक करना चाहता हूं:

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

QGIS प्रिंट कंपोजर में एक मास्टर मैप के साथ एक ही समय में तीन मैप व्यू को स्थानांतरित करने का विचार है।

क्या ऐसा करने का कोई तरीका या प्लग-इन है?

जवाबों:


2

संगीतकार नक्शे के सिंक्रनाइज़ेशन के लिए एक और सुरुचिपूर्ण "कोई कोड" समाधान QGIS के अंतर्निहित "अवलोकन" तंत्र का उपयोग करता है:

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

वहां हम हर मैप विंडो में एक "मास्टर मैप फ़्रेम" अवलोकन जोड़ते हैं, जिसे मास्टर मैप के साथ सिंक्रनाइज़ किया जाना चाहिए। फिर हम फ़्रेम स्टाइल को नो ब्रश / नो पेन पर सेट करते हैं और "सेंटर ऑन ओवरव्यू" को सक्षम करते हैं।

बाल मानचित्र के पैमाने को ठीक करने के लिए, हम एक अभिव्यक्ति मान दर्ज करते हैं: यहां छवि विवरण दर्ज करें

बस इतना ही।

बहुत आसान और बहुत गतिशील!


महान! इतना सरल ... उत्कृष्ट काम के आसपास
aldo_tapia

4

एकमात्र तरीका जो मुझे इस समय मिला, वह अजगर में एक छोटी सी स्क्रिप्ट बनाने के लिए था, शायद यह एक प्लगइन में माइग्रेट कर सकता है लेकिन मुझे इसमें कोई अनुभव नहीं है।

एक बहुत ही मूल कोड है, सही संगीतकार और नक्शे का चयन:

from qgis.core import *
from qgis.utils import *

composerList = iface.activeComposers()

comp = composerList[4]

maps = comp.composition().composerMapItems()

masterMap = maps[0]
slave1 = maps[1]
slave2 = maps[4]

slave1.setNewExtent(masterMap.extent())
slave2.setNewExtent(masterMap.extent())

अन्य विकल्प गुलाम नक्शों में प्रारंभिक पैमाना बनाए रखेंगे, यदि नक्शे में अलग-अलग आकार हों तो नई सीमा के बाद सेट करना होगा, लेकिन इस कोड के साथ मेरे व्यक्तिगत मामले में पर्याप्त था:

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

मैं इस समाधान में सुधार के लिए खुला हूं (मेरे पास लगभग कोई अनुभव नहीं है PyQGIS)।


विभिन्न विस्तार और तराजू से निपटना

ऊपर दिया गया कोड समान सीमा (और फलस्वरूप, आकृति) और स्केल के साथ बढ़िया काम करता है। अब मेरे पास एक कोड है जिसे विभिन्न रूप, आकार और तराजू के साथ परीक्षण किया गया है:

from qgis.core import *
from qgis.utils import *

composerList = iface.activeComposers()

comp = composerList[0]

maps = comp.composition().composerMapItems()

masterMap = maps[2]
slave1 = maps[1]
slave2 = maps[0]

centroid = masterMap.extent().center()

diffx1 = slave1.extent().xMaximum() - slave1.extent().xMinimum()
diffy1 = slave1.extent().yMaximum() - slave1.extent().yMinimum()

diffx2 = slave2.extent().xMaximum() - slave2.extent().xMinimum()
diffy2 = slave2.extent().yMaximum() - slave2.extent().yMinimum()

newExtent1 = QgsRectangle(centroid[0]-(diffx1/2),centroid[1]-(diffy1/2),centroid[0]+(diffx1/2),centroid[1]+(diffy1/2))
newExtent2 = QgsRectangle(centroid[0]-(diffx2/2),centroid[1]-(diffy2/2),centroid[0]+(diffx2/2),centroid[1]+(diffy2/2))

slave1.setNewExtent(newExtent1)
slave2.setNewExtent(newExtent2)

और परिणामी परीक्षा:

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


अपनी समस्या को हल करने के लिए बाईं ओर की हरी-फीकी टिक पर क्लिक करके अपना उत्तर स्वीकार करना न भूलें :)
यूसुफ

1
@ जोसेफ धन्यवाद, लेकिन आधा हल है। मैं इसे पूर्ण समाधान प्रदान करने के लिए प्लग-इन में परिवर्तित करने के बाद अपना स्वयं का उत्तर स्वीकार करूंगा। फिर भी मेरे लिए एक चुनौती
aldo_tapia

2

कोई कोड के साथ यह करने के लिए बस एक छोटी सी टिप। यह कम कुशल है तो बाद में इसका जवाब है लेकिन अगर यह अंतिम नक्शा करने के लिए है तो यह अंत में यह काम करता है। आपको या तो मास्टर दृश्य की आवश्यकता नहीं है, यह नक्शा कैनवास की सीमा है जो मायने रखता है:

  1. मानचित्र को अपनी इच्छानुसार स्थानांतरित करें (यह मास्टर मैप होगा)
  2. "मानचित्र कैनवास में देखें हद" पर क्लिक करें
  3. B पर जाएँ
  4. "सेट टू मैप कैनवास हद" पर क्लिक करें
  5. C पर जाएँ
  6. "सेट टू कैनवस हद" पर क्लिक करें

आदि।

नक्शा कैनवास दृश्य / हद

जब आपको मास्टर होने के लिए एक और मानचित्र की आवश्यकता होती है, तो बस दूसरे मानचित्र पर क्लिक करें फिर दूसरों को सेट करने से पहले "नक्शा कैनवास में देखें"।

क्या आपको बाद के लिए एक विशिष्ट दृश्य रखना पसंद है, मैं आपको स्थानिक बुकमार्क पैनल का उपयोग करने की सलाह देता हूं। मानचित्र कैनवास को एक चयनित सीमा पर सेट करें और फिर सेट करें पर क्लिक करें कैनवास के प्रत्येक स्लेव में आप की जरूरत है :)


हां, मैं इस तरह से करता था। एक बढ़िया विकल्प है, लेकिन बी और सी के नक्शे में हमेशा बदलाव होता है, इसलिए दो और चरण हैं
aldo_tapia

तुम्हारा अच्छा जवाब है, मैं इसे कोशिश करने की जरूरत है ^ ^
gisnside

2

मुझे बस एक ही समस्या थी और आश्रित मानचित्रों पर अभिव्यक्तियों का उपयोग करके वांछित परिणाम प्राप्त करने में सक्षम था। यह मानता है कि सभी मानचित्रों के लेआउट में समान आयाम हैं।

  1. अपने मास्टर मैप को एक आइटम आईडी दें, जैसे 'map1' (आइटम गुणों के निचले भाग पर)

  2. प्रत्येक आश्रित मानचित्र पर, प्रत्येक मान को एक मान जोड़ें:

    x_min(map_get(item_variables('map1'), 'map_extent'))
    

कोड को कंपोज़र आइटम 'map1' के लिए वैरिएबल मिलेगा, उससे ज्यामिति के रूप में सीमा प्राप्त करें और अंत में ज्यामिति से उसका x_min मान प्राप्त करें। तदनुसार x_min को y_min, x_max और y_max में बदलें।

केवल नकारात्मक पक्ष यह है कि आपको हर बार मास्टर मैप को स्थानांतरित करने के लिए आश्रित मानचित्रों को ताज़ा करना होगा। निर्यात पर यह स्वचालित रूप से अद्यतन होना चाहिए।


QGIS के किस संस्करण का आप उपयोग कर रहे हैं? मैंने सफलता के बिना 3.0.2 में कोशिश की
aldo_tapia

उबालू 16.04 को @aldo_tapia QGIS 3.0.3
leak_my_brain

अजीब है, मैं इसे चलाने के लिए नहीं कर सकता ... लेकिन अपवर्तित!
aldo_tapia
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.