EDIT I ने विशेष स्थितियों (विशिष्ट कोण मानों के कारण) के प्रबंधन के लिए और एक गोल कोण परिभाषित होने पर बिंदीदार रेखाओं को प्रदर्शित नहीं करने के लिए उत्तर संपादित किया।
मैं केवल नियम-आधारित सिम्बॉलॉजी और लेबलिंग के आवर्ती द्वारा एक समाधान का प्रस्ताव करता हूं।
शुरू करने से पहले, मैं यह रेखांकित करना चाहता हूं कि मैं वांछित परिणाम को पुन: पेश करने के लिए न्यूनतम चीजों की व्याख्या पर ध्यान केंद्रित करूंगा: इसका मतलब है कि कुछ अन्य मामूली पैरामीटर (जैसे आकार, चौड़ाई और इतने पर) आसानी से आपके द्वारा समायोजित किए जाने चाहिए। अपनी आवश्यकताओं के लिए बेहतर फिटिंग के लिए।
इसके अलावा, यह समाधान केवल तभी काम करता है जब आप यह मान लेते हैं कि 0डिग्री दक्षिण के बजाय उत्तर है (यदि 0दक्षिण है, इसके बजाय, यह 180हर बार एक मान को पर्याप्त करेगा जो कि '90' के फॉर्मूले में दिखाई देता है जो कोणों के साथ व्यवहार करते हैं, जैसे cos(radians(90))बन जाएगा cos(radians(180 + 90)))। मैंने केवल अधिक सामान्य समाधान देने के लिए ऐसा करना पसंद किया।
स्टाइलिंग
हम Single symbolएक Simple Markerऔर तीन Geometry generatorप्रतीक परतों के आवर्ती के साथ अंक प्रस्तुत करेंगे :

आगे की व्याख्या में, मैं ऊपर की छवि में प्रतीकों के उसी क्रम का पालन करूंगा।
1) सरल मार्कर
मैंने एक ब्लैक स्टार का डिफ़ॉल्ट चिन्ह चुना (यह इस ट्यूटोरियल का सबसे आसान हिस्सा है), जिसका आकार 3 मिमी और चौड़ाई 0.4 मिमी है।
2) ज्यामिति जनरेटर नंबर 1
एक नई प्रतीक परत जोड़ें और Geometry generatorप्रकार चुनें :

इस एक्सप्रेशन को Expressionफ़ील्ड में डालें :
CASE
WHEN abs( "ALKUKULMA" - "LOPPUKULMA") < 360
THEN
make_line(
$geometry,
make_point(
$x + 1000*cos(radians(90 - "ALKUKULMA")),
$y + 1000*sin(radians(90 - "ALKUKULMA"))
)
)
END
हमने केवल पहली पंक्ति को परिभाषित किया है जो उस बिंदु की ओर इंगित करता है जहां प्रकाश क्षेत्र शुरू होता है। यह रेखा 1000 मीटर लंबी है और इसे केवल तभी बनाया जाता है जब सेक्टर प्रकाश का उद्घाटन कोण एक गोल कोण नहीं होता है (यह बचने के लिए होता है कि लाइन एक पूरे वृत्त को तोड़ देगी)।
3) ज्यामिति जनरेटर नंबर 2
ऊपर के समान लेकिन, इस चरण में, आपको इस अभिव्यक्ति का उपयोग करने की आवश्यकता है:
CASE
WHEN abs( "ALKUKULMA" - "LOPPUKULMA") < 360
THEN
make_line(
$geometry,
make_point(
$x + 1000*cos(radians(90 - "LOPPUKULMA")),
$y + 1000*sin(radians(90 - "LOPPUKULMA"))
)
)
END
हमने केवल पहली पंक्ति को परिभाषित किया है जो उस बिंदु की ओर इंगित करती है जहां प्रकाश क्षेत्र समाप्त होता है। यह रेखा 1000 मीटर लंबी है और इसे केवल तभी बनाया जाता है जब सेक्टर प्रकाश का उद्घाटन कोण एक गोल कोण नहीं होता है (यह बचने के लिए होता है कि लाइन एक पूरे वृत्त को तोड़ देगी)।
4) ज्यामिति जेनरेटर नंबर 3
इस एक्सप्रेशन को Expressionफ़ील्ड में डालें :
CASE
WHEN abs("ALKUKULMA" - "LOPPUKULMA") <= 180 AND "ALKUKULMA" >= "LOPPUKULMA"
THEN
difference(
boundary(
buffer(
$geometry, 900)
),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "ALKUKULMA" )), $y + 2000*sin(radians((90 - "ALKUKULMA" )))),
make_point($x + 2000*cos(radians(90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )), $y + 2000*sin(radians((90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )))),
make_point($x + 2000*cos(radians(90 - "LOPPUKULMA")), $y + 2000*sin(radians((90 - "LOPPUKULMA")))),
$geometry)
)
)
)
)
WHEN abs("ALKUKULMA" - "LOPPUKULMA") <= 180 AND "ALKUKULMA" <= "LOPPUKULMA"
THEN
intersection(
boundary(
buffer(
$geometry, 900)
),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "ALKUKULMA" )), $y + 2000*sin(radians((90 - "ALKUKULMA" )))),
make_point($x + 2000*cos(radians(90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )), $y + 2000*sin(radians((90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )))),
make_point($x + 2000*cos(radians(90 - "LOPPUKULMA")), $y + 2000*sin(radians((90 - "LOPPUKULMA")))),
$geometry)
)
)
)
)
WHEN abs("ALKUKULMA" - "LOPPUKULMA") > 180 AND "ALKUKULMA" >= "LOPPUKULMA"
THEN
intersection(
boundary(
buffer(
$geometry, 900)
),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "ALKUKULMA" )), $y + 2000*sin(radians((90 - "ALKUKULMA" )))),
make_point($x - 2000*cos(radians(90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )), $y - 2000*sin(radians((90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )))),
make_point($x + 2000*cos(radians(90 - "LOPPUKULMA")), $y + 2000*sin(radians((90 - "LOPPUKULMA")))),
$geometry)
)
)
)
)
WHEN abs("ALKUKULMA" - "LOPPUKULMA") > 180 AND "ALKUKULMA" <= "LOPPUKULMA"
THEN
difference(
boundary(
buffer(
$geometry, 900)
),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "ALKUKULMA" )), $y + 2000*sin(radians((90 - "ALKUKULMA" )))),
make_point($x - 2000*cos(radians(90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )), $y - 2000*sin(radians((90 - ("LOPPUKULMA" + "ALKUKULMA")/2 )))),
make_point($x + 2000*cos(radians(90 - "LOPPUKULMA")), $y + 2000*sin(radians((90 - "LOPPUKULMA")))),
$geometry)
)
)
)
)
END
हमने प्रकाश क्षेत्र के शुरुआती और अंतिम बिंदुओं के बीच चाप को परिभाषित किया है (कृपया ध्यान दें कि 2000यह एक मनमाना मूल्य है क्योंकि मैं एक बहुभुज बनाने की कोशिश कर रहा हूं, जिसमें 900 मीटर की त्रिज्या वाली सीमा के साथ एक दूसरे को काटना है)।
इसके अलावा, हमें उस रंग को सेट करने की आवश्यकता है जो "VARIS"फ़ील्ड में संग्रहीत है । ऐसा करने के लिए, हमें इसे एक कस्टम अभिव्यक्ति के साथ निर्दिष्ट करने की आवश्यकता है। नीचे दी गई छवि में तीर का पालन करें:

और फिर Edit...बटन पर क्लिक करने के बाद इस अभिव्यक्ति को टाइप करें:
CASE
WHEN "VARIS" = 'vi' THEN color_rgb(51,160,44)
WHEN "VARIS" = 'v' THEN color_rgb(255,255,255)
WHEN "VARIS" = 'p' THEN color_rgb(227,26,28)
END
कृपया ध्यान दें कि, इस प्रतीक परत के लिए, मैंने दो लाइनें बनाईं: ऊपरी रेखा रंग को उपयोग करने के लिए परिभाषित करती है (वास्तव में मैं इस एक के लिए कस्टम अभिव्यक्ति सेट करता हूं), जबकि निचली एक काली सीमा को परिभाषित करने के लिए उपयोगी है (इसमें होगा) एक चौड़ाई जो ऊपरी रेखा से एक से बड़ी है)। किसी भी रंग अतिव्यापी से बचने के लिए दोनों पंक्तियों के Flatरूप में सेट करने के Cap styleलिए भी याद रखें ।
लेबलिंग
1) लेबल सेट करना
पर जाएं Layer Properties> Labelsऔर हमेशा की तरह, लाल तीर का पालन करें:

और फिर यह अभिव्यक्ति टाइप करें:
CASE
WHEN "VARIS" = 'vi' THEN 'G'
WHEN "VARIS" = 'v' THEN 'W'
WHEN "VARIS" = 'p' THEN 'R'
END
हमने केवल "VARIS"क्षेत्र में संग्रहीत मूल्य का उपयोग करके रंग नियम को परिभाषित किया है ।
2) लेबल के लिए प्लेसमेंट सेट करना
मेनू Placementमें विकल्प चुनें Labelsऔर चुनें Offset from point।
फिर, नीचे की छवि के संदर्भ में:

लाल तीर का अनुसरण करें और इस अभिव्यक्ति को टाइप करें:
CASE
WHEN "ALKUKULMA" > "LOPPUKULMA"
THEN
concat(
-1000*cos(radians(90 - ("ALKUKULMA" + "LOPPUKULMA")/2)),
',',
1000*sin(radians(90 - ("ALKUKULMA" + "LOPPUKULMA")/2))
)
WHEN "ALKUKULMA" <= "LOPPUKULMA"
THEN
concat(
1000*cos(radians(90 - ("ALKUKULMA" + "LOPPUKULMA")/2)),
',',
-1000*sin(radians(90 - ("ALKUKULMA" + "LOPPUKULMA")/2))
)
END
फिर, हरे तीर का अनुसरण करें और इस अभिव्यक्ति को टाइप करें:
CASE
WHEN "ALKUKULMA" >= "LOPPUKULMA"
THEN
180-(("ALKUKULMA" + "LOPPUKULMA")/2)
WHEN "ALKUKULMA" < "LOPPUKULMA"
THEN
- (("ALKUKULMA" + "LOPPUKULMA")/2)
END
अंतिम परिणाम
यदि आपने पिछले कार्यों को सही ढंग से किया है, तो आपको यह परिणाम प्राप्त करने में सक्षम होना चाहिए:

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