সম্পাদনা করুন আমি নির্দিষ্ট পরিস্থিতি পরিচালনার জন্য (নির্দিষ্ট কোণ মানের কারণে) এবং বৃত্তাকার কোণটি সংজ্ঞায়িত করার সময় বিন্দুযুক্ত লাইনগুলি প্রদর্শন না করার জন্য সম্পাদনা করেছি।
আমি কেবল নিয়ম-ভিত্তিক প্রতীকাদি এবং লেবেলিংয়ের জন্য পুনরাবৃত্তি করে একটি সমাধান প্রস্তাব করি।
শুরু করার আগে, আমি নিম্নরেখাঙ্কিত করতে চাই যে আমি কাঙ্ক্ষিত ফলাফল পুনরুত্পাদন করার জন্য ন্যূনতম জিনিসগুলির ব্যাখ্যায় মনোনিবেশ করব: এর অর্থ হ'ল কিছু অন্যান্য ছোট ছোট প্যারামিটার (যেমন আকার, প্রস্থ এবং অন্যান্য) আপনার দ্বারা সহজেই সামঞ্জস্য করা উচিত আপনার প্রয়োজন আরও ভাল ফিট করার জন্য।
তদ্ব্যতীত, এই সমাধানটি কেবল তখনই কাজ করে যদি আপনি ধরে নেন যে 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
ক্ষেত্রটি sert োকান:
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
ক্ষেত্রটি sert োকান:
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
সর্বশেষ ফলাফল
আপনি যদি পূর্বের কাজগুলি সঠিকভাবে সম্পাদন করেন তবে আপনি এই ফলাফলটি পেতে সক্ষম হবেন:
বোনাস
যেহেতু গৌণ প্যারামিটারগুলি এই উত্তরের পুরোপুরি আচ্ছাদিত হওয়ার জন্য অনেক বেশি ছিল তাই আমি এখানে শৈলীটি সংযুক্ত করেছি : আপনি এই কোডটি কোনও পাঠ্য সম্পাদক দিয়ে খুলতে পারেন এবং এটি কিউজিআইএস লেয়ার স্টাইল ফাইল হিসাবে সংরক্ষণ করতে পারেন (অর্থাত একটি .qml
এক্সটেনশন সহ)।
উপরের স্টাইলটি QGIS 2.18.4 ব্যবহার করে তৈরি করা হয়েছিল (এতে আপনি যে শেপফাইলটি ব্যবহার করছেন তার একই নাম থাকতে হবে)।