डेटा परिभाषित लेबल स्थिति एक परत में एक से अधिक पैमाने के लिए


10

मैं अपनी परियोजनाओं के लिए एक बेहतर लेबलिंग-समाधान की तलाश कर रहा हूं। यह मुश्किल लग रहा है - लेकिन शायद मैं सिर्फ अंधा हूं?

मेरी परियोजनाएं: मैं मुद्रित बाइक-हाइक-पुस्तकें बनाता हूं। मुख्य पैमाना 1: 75k है और इसमें 10k का सिटी स्केल और 200k का ओवरव्यू स्केल है। क्योंकि मुझे लेबल प्लेसमेंट की "कार्टोग्राफिक" गुणवत्ता पसंद है, इसलिए मैं हर एक लेबल को छूता हूं और इसे सर्वश्रेष्ठ स्थिति में ले जाता हूं। मुझे यह हर एक पैमाने के लिए करना है, इसलिए 3 स्केल के लिए मेरे लेबलिंग कॉलम इस तरह दिखते हैं ('स्केल 1' 75k के लिए 10k 'स्केल 2' और 200k के लिए 'स्केल 3'):

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

लेकिन इससे पहले कि मैं विस्तार से समझाने की कोशिश करूं, मैं इस सरल उदाहरण-परियोजना का निर्माण करता हूं जहां आप 3 स्केल के लिए मेरे (पुराने) लेबलिंग समाधान को देख और परीक्षण कर सकते हैं: http://www.map-site.de/tmp/LabelingExample.zip

ठीक है, यह काम कर रहा है लेकिन:

  • आपको हर पैमाने के लिए लेबलिंग कॉलम चाहिए
  • आपको हर पैमाने के लिए एक परत की आवश्यकता है

मैं डुप्लिकेट परतों और कॉलम के टन के बिना बहुत बेहतर समाधान की तलाश कर रहा हूं। मैं आपके रचनात्मक दिमाग पर भरोसा करता हूं!

संपादित करें: मैंने उदाहरण के रूप में इस दो बहुत घने मानचित्र को जोड़ा:

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

"सेंट पॉलस डोम" के लिए केवल एक ही संभव स्थिति है और यह किसी भी प्रकार का नहीं है: यहाँ छवि विवरण दर्ज करें

प्रत्येक लेबल को मैन्युअल रूप से स्थानांतरित करना होगा। कुछ लेबल चतुष्कोण में नहीं हैं।


क्या लेबल को कुछ विशिष्ट मानदंडों को पूरा करने की आवश्यकता है? मुझे समझ में नहीं आ रहा है कि "बेस्ट पोज़िशन" से आपका क्या मतलब है।
मैगरी

1
"सर्वश्रेष्ठ स्थिति" के साथ मेरा मतलब कार्टोग्राफिक दावों के अनुसार एक स्थिति है। यह अधिक व्यक्तिपरक है।
MAP

2
मैंने पाया कि आपका उदाहरण एक फ़ॉन्ट का उपयोग करता है, 'Noto Sans', जो मेरे पास नहीं है, और मैं अनुमान लगा रहा हूं कि दूसरों के लिए भी यही स्थिति होगी। आप यहां फ़ॉन्ट डाउनलोड कर सकते हैं google.com/get/noto फ़ॉन्ट स्थापित करने के बाद आपको QGIS को पुनरारंभ करना होगा।
टीजे रॉकफेलर

उस लिंक को जोड़ने के लिए धन्यवाद - यह मेरे मिंट इंस्टॉलेशन का मानक फ़ॉन्ट है।
एमएपी

जवाबों:


7

मेरा कहना है कि आप जो अनुरोध कर रहे हैं वह थोड़ा जटिल है क्योंकि आप चाहते हैं कि लेबलिंग छोटे स्तर पर और साथ ही बड़े पैमाने पर (सबसे उपयुक्त) दिखाई दे। इसलिए, यहां यह विचार है कि उस बिंदु को कैसे रखा जाए जो विभिन्न पैमानों पर दिखाई दे।

कई परीक्षण के बाद, मैंने पाया कि प्रत्येक स्केल रेंज के लिए कई कॉलम बनाने के बजाय और निर्धारित बिंदुओं पर x और y के लिए निर्देशांक डालें, आप प्रत्येक स्थान के लिए प्राथमिकता वाले पदों के लिए केवल एक कॉलम बना सकते हैं, जैसा कि आप नीचे देख सकते हैं (I आपकी फ़ाइल में स्थानों का अनुसरण किया गया):

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

फिर, आप Layer propoerties -> Labels -> Placement -> Offset from pointया तो जाते हैं Around point, दोनों ठीक हैं, लेकिन मैंने चुना Offset from point

  1. पर Quadrantकरें Data defined override -> Edit, और निम्न सूत्र दर्ज करें:

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

    CASE 
    WHEN  $scale >= 200000 THEN  "priority"  
    WHEN  $scale < 200000 and $scale >= 75000 THEN  "priority"   
    WHEN  $scale < 75000 and $scale >=10000 THEN  5
    WHEN  $scale < 10000 THEN 2 
    END
    

    यहाँ, "Priority"फ़ील्ड नाम में परिभाषित बिंदुओं का स्थान हैPriority

  2. आपको बेहतर दृश्यता के लिए बिंदुओं को स्थानांतरित करने के लिए ऑफसेट का उपयोग करने की आवश्यकता है, और मैंने निम्न सूत्र का उपयोग किया है:

    CASE
    WHEN  $scale >= 200000 THEN '0.001,0'
    WHEN  $scale < 200000 and $scale >= 75000 THEN '0.001,0'
    WHEN  $scale < 75000 and $scale >=10000 THEN '0.0005,0'
    WHEN  $scale < 10000 THEN '0.0001,0'
    END
    

यहाँ विभिन्न पैमानों पर आउटपुट दिया गया है:

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

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

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

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

यह देखने के लिए कि प्रत्येक नंबर [0-8] किस स्थान पर प्रदर्शित होता है, कृपया निम्नलिखित छवि पर एक नज़र डालें:

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

आप प्रत्येक स्थिति के साथ मूल्य को जोड़कर लेबल की स्थिति को नियंत्रित कर सकते हैं। लेकिन दुर्भाग्य से, आप इसे 'क्लिक-एंड-मूव' दृष्टिकोण से नहीं कर सकते। आपको इसे विशेषता तालिका में करने की आवश्यकता है।

अपडेट करें:

आपकी आवश्यकता के आधार पर कि 9 चतुर्थांश पद पर्याप्त नहीं हैं, मैंने पाया कि यदि आप Cartographyइसके बजाय चयन करते हैं Offset from point, और प्राथमिकता का चयन करते हैं, जैसा कि नीचे की छवि में है, तो आपके पास 9. के बजाय 12 प्राथमिकता वाले स्थान होंगे। आपको एक Textप्रकार का क्षेत्र बनाने की आवश्यकता है , फिर केवल वह संक्षिप्त नाम रखें जो आप सर्वश्रेष्ठ स्थिति 'टीएल', 'टीएसएल', 'टी' ... आदि के लिए चाहते हैं। इसके अलावा, आप बिंदु को कवर करने से लेबल से बचने के लिए दूरी दर्ज कर सकते हैं।

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


एक दृष्टिकोण मैं अब तक की कोशिश नहीं की थी। क्या आपको 'क्लिक-एंड-मूव' द्वारा चतुर्थांश में लेबल लगाने के लिए कोई रास्ता दिखाई देता है?
एमएपी

दुर्भाग्य से, आप इसे 'क्लिक-एंड-मूव' दृष्टिकोण से नहीं कर सकते। आपको इसे विशेषता तालिका में करने की आवश्यकता है। लेकिन 1 कॉलम जोड़ना प्रत्येक x, y स्केल स्तरों के लिए 6 कॉलम से बेहतर है। मैंने अपना उत्तर अपडेट कर दिया।
अहमदनब

1
अंतिम दिनों में, मैंने एक समाधान देने की भी कोशिश की लेकिन मैंने छोड़ दिया क्योंकि मुझे लगा कि समस्या अधिक सामान्य समाधान की पेशकश के लिए बहुत व्यक्तिपरक है। इसके बजाय, @ahmadhanb द्वारा समाधान ऐसा करने के लिए पर्याप्त रचनात्मक लगता है (मैंने इसका परीक्षण नहीं किया, हालांकि)। मेरे लिए +1।
मिलीग्राम फेयर

मैं आपसे सहमत हुँ। यहां की विषय-वस्तु उच्च है। यह मुख्य रूप से एक व्यक्तिगत राय है कि आप लेबल के स्थानों का न्याय कैसे कर सकते हैं यदि वे उपयुक्त हैं या नहीं।
अहमदनभ

1
प्राथमिकता वाले स्थानों को संपादित करने के लिए पहचान टूल का उपयोग न करें, चयनित टूल का उपयोग करना बेहतर है। विशेषता तालिका खोलें, और केवल चयनित बिंदुओं को दिखाने के लिए चुनें। संपादन सत्र प्रारंभ करें, और स्थान अपडेट करें और संपादन सहेजें। प्राथमिकता स्थान को सीधे अपडेट किया जाएगा, यदि आपने पहले से ही डेटा परिभाषित ओवरराइड में अभिव्यक्ति जोड़ दी है।
अहमदनब

3

आप अभिव्यक्ति का उपयोग करके कई परतों से छुटकारा पा सकते हैं।

आपके उदाहरण में मैं जो देख सकता था उसमें से लेयर के बीच मुख्य अंतर Data defined Coordinate X Yअलग-अलग स्केल x, y वैल्यूज़ की ओर इशारा करता है।

आप इसे X और Y के आगे ड्रॉपडाउन का चयन करके और संपादन का चयन करके एक एकल परत में पूरा कर सकते हैं ... जो एक अभिव्यक्ति स्ट्रिंग बिल्डर लाएगा।

X के लिए आप कुछ का उपयोग कर सकते हैं

if(@map_scale <=10000, "scale1-x", if(@map_scale <=75000, "scale2-x", "scale3-x"))

और Y के लिए आप कुछ का उपयोग कर सकते हैं

if(@map_scale <=10000,  "scale1-y" , if(@map_scale <=75000, "scale2-y", "scale3-y"))

यदि स्केल का मान 1 से 10,000 या स्केल 2 x के बराबर है, तो इसे स्केल 1 x, y मान का उपयोग करना चाहिए। ।

यदि आपको प्रत्येक पैमाने के लिए मैन्युअल रूप से स्थिति बनानी है, तो मैं नहीं देखता कि आप अपने द्वारा परिभाषित प्रत्येक स्तर के पैमाने # -x और स्केल # -y कॉलम से कैसे दूर हो सकते हैं।


मेरे पास अलग-अलग वजन वाले लेबल की एक उच्च नियति है। मुझे उन्हें मैन्युअल रूप से रखना होगा क्योंकि कोई भी स्वचालितता 'वास्तविक' कार्टोग्राफिक तरीके से करने में सक्षम नहीं है। और नक्शे हर साल मुद्रित और अद्यतन किए जाएंगे ताकि लेबलिंग कुछ हद तक स्थिर हो। en.wikipedia.org/wiki/Cartographic_labeling#Placement
एमएपी

@MAP ठीक है, इसलिए आपको पता है कि आपको मैन्युअल रूप से आइटम स्थिति में लाना है, आप बस कम परतें और कॉलम चाहते हैं।
टीजे रॉकफेलर

1
यह सिर्फ एक परत के साथ 3 तराजू के लेबल को प्रदर्शित करने में मदद करता है। लेकिन QGIS अभिव्यक्ति के माध्यम से "वापस लिखना" समन्वय करने में सक्षम नहीं है। इसलिए यदि मैं आपके बताए अनुसार स्केल-एक्सप्रेशन का उपयोग करता हूं, तो मैं लेबलों को आगे नहीं बढ़ा सकता।
एमएपी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.