কিউজিসে সেক্টর লাইট তৈরি করছেন?


24

আমি কিউজিআইএস 2.18 ব্যবহার করছি। আমাকে একটি মানচিত্রে নেভিগেশনাল উদ্দেশ্যে সেক্টর লাইট তৈরি করতে হবে।

আমার কাছে হালকা সেক্টরের ডেটা রয়েছে যা ক্ষেত্রগুলিতে বেকন_আইডি, শুরু ডিগ্রি, শেষ ডিগ্রি এবং রঙে একটি 500 বছরেরও বেশি বয়ে, বীকন এবং বাতিঘর দেয় যা মানচিত্রে প্রদর্শিত হওয়া দরকার a প্রতিটি বীকনের জন্য, অনেকগুলি সারি থাকতে পারে, প্রতিটি একটি আলোক সেক্টর বর্ণনা করে (উদাহরণস্বরূপ একটি সাদা ক্ষেত্র)

শেষের ফলাফলটি নীচের মতো দেখতে হবে: রঙের ক্ষেত্রে (আরজিডাব্লু) বর্ণটি চিহ্নিত রঙের সাথে সঠিক রঙের হালকা সেক্টর এবং বোয় / বেকন / বাতিঘর থেকে 100 মিটার থেকে 1000 মিটার পর্যন্ত বিন্দুযুক্ত রেখাগুলি।

এটি সম্ভবত শাসিত-ভিত্তিক প্রতীক হিসাবে তৈরি করা উচিত, তবে আমার অনুমান করার জন্য কিছু অজগর প্রয়োজন?

এখানে চিত্র বর্ণনা লিখুন

এখানে নীচে বাতিঘরটির জন্য শেফফাইল ডেটার উদাহরণ রয়েছে (দুর্ভাগ্যক্রমে উপরেরটি নয়) যা 114 এবং 154 ডিগ্রির মধ্যে একটি সবুজ খাত, 154 এবং 168 ডিগ্রির মধ্যে একটি সাদা ক্ষেত্র, 168 এবং 237 ডিগ্রির মধ্যে একটি লাল ক্ষেত্র, একটি সবুজ ২ sector7 থেকে ৩১৪ ডিগ্রির মধ্যে সেক্টর, ৩১৪ থেকে ৩২০ ডিগ্রির মধ্যে একটি সাদা ক্ষেত্র, ৩২০ থেকে ৩৩7 ডিগ্রির মধ্যে একটি লাল ক্ষেত্র (কোনও কারণে 0 উত্তর নয়, দক্ষিণে রয়েছে):

শেফফিল টেবিল উদাহরণ



2
দয়া করে, আপনি কী ফলাফলের প্রত্যাশার ফলাফলটি সঠিকভাবে ব্যাখ্যা করে একটি নমুনা ডেটাসেট আপলোড করতে এবং আপনার প্রশ্নটি সম্পাদনা করতে পারেন? সংযুক্ত চিত্রটিতে আমি কেবল একটি চিহ্ন এবং রঙের একটি মহাবিশ্ব দেখি।
এমগ্রি

1
উদাহরণ ডেটা এখানে সাহায্য করবে। আপনার কি সেক্টর লাইট প্রতি বৈশিষ্ট্য আছে, বা বয় প্রতি একটি বৈশিষ্ট্য আছে? ওয়েজ বাফার প্লাগইন এখানে সহায়তা করতে পারে তবে এটি কীভাবে সহজ তা নির্ভর করবে আপনার ডেটা কীভাবে সেট আপ হয় তার উপর।
স্টিভেন কে

হাই @ এমগ্রি এবং স্টিভেন, আমি উদাহরণের ডেটা যুক্ত করেছি এবং প্রশ্নটি আরও পরিষ্কার করার চেষ্টা করেছি :), ধন্যবাদ!
বেনিয়ামিন ডোনার

1
@ এমগ্রি লাইনগুলি কোনও পরিবর্তনশীল নয়, তবে চিত্রগুলি যেমন আলোর ক্ষেত্রগুলির মধ্যে 900 মি দীর্ঘ লাইন হিসাবে স্ট্যাটিকভাবে দেখানো উচিত। অনুমিত রেফারেন্স সিস্টেম।
বেনিয়ামিন ডোনার

উত্তর:


50

সম্পাদনা করুন আমি নির্দিষ্ট পরিস্থিতি পরিচালনার জন্য (নির্দিষ্ট কোণ মানের কারণে) এবং বৃত্তাকার কোণটি সংজ্ঞায়িত করার সময় বিন্দুযুক্ত লাইনগুলি প্রদর্শন না করার জন্য সম্পাদনা করেছি।


আমি কেবল নিয়ম-ভিত্তিক প্রতীকাদি এবং লেবেলিংয়ের জন্য পুনরাবৃত্তি করে একটি সমাধান প্রস্তাব করি।

শুরু করার আগে, আমি নিম্নরেখাঙ্কিত করতে চাই যে আমি কাঙ্ক্ষিত ফলাফল পুনরুত্পাদন করার জন্য ন্যূনতম জিনিসগুলির ব্যাখ্যায় মনোনিবেশ করব: এর অর্থ হ'ল কিছু অন্যান্য ছোট ছোট প্যারামিটার (যেমন আকার, প্রস্থ এবং অন্যান্য) আপনার দ্বারা সহজেই সামঞ্জস্য করা উচিত আপনার প্রয়োজন আরও ভাল ফিট করার জন্য।

তদ্ব্যতীত, এই সমাধানটি কেবল তখনই কাজ করে যদি আপনি ধরে নেন যে 0ডিগ্রিটি দক্ষিণের পরিবর্তে উত্তরের (যদি 0দক্ষিণ হয়, পরিবর্তে, 180প্রতিটি সময় সূচিত্রে একটি '90' উপস্থিত হয় তবে এটি একটি মূল্য যোগ করার পক্ষে যথেষ্ট হবে, উদাহরণস্বরূপ cos(radians(90))হয়ে উঠবে cos(radians(180 + 90)))। আমি কেবল আরও সাধারণ সমাধান দেওয়ার জন্যই এটি করা পছন্দ করি।


স্টাইল

আমরা একটি এবং তিনটি প্রতীক স্তরকে Single symbolপুনরাবৃত্তি করে পয়েন্টগুলি রেন্ডার করব :Simple MarkerGeometry 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 ব্যবহার করে তৈরি করা হয়েছিল (এতে আপনি যে শেপফাইলটি ব্যবহার করছেন তার একই নাম থাকতে হবে)।


3
দুর্দান্ত দেখাচ্ছে, সত্যিই আপনাকে জ্যামিতি জেনারেটরের শক্তি দেখায়। এটি রেন্ডার করতে ধীর?
হাইক্কি ওয়েসেন্টো

2
@ ওয়েসেন্টো আমি ছয়টি বৈশিষ্ট্যযুক্ত (অর্থাৎ ছয়টি সেক্টর লাইট) এক পর্যায়ে এটি পরীক্ষা করেছি এবং এটি তাত্ক্ষণিকভাবে রেন্ডার হয়ে গেছে। আমি মনে করি শত শত বৈশিষ্ট্য নিয়ে কাজ করার সময় এটি দ্রুত হওয়া উচিত কারণ সরবরাহকারীদের কাছে বা অনুরূপ কিছু নয়, তবে ওয়েল নন টেক্সট হিসাবে কেবল কয়েকটি গণিতের ক্রিয়াকলাপ এবং জ্যামিতি রয়েছে।
মিগরি

2
এই জাতীয় প্রশ্ন / উত্তরগুলি সত্যই দেখায় যে কিউআইজিআইএস কীভাবে বহুমুখী হতে পারে!
জোসেফ

1
@ এমগ্রি আপনি মাস্টার, একটি চমত্কার সমাধান এবং অনেক কাজের সাথে জড়িত একটি দুর্দান্ত ব্যাখ্যা, আপনাকে ধন্যবাদ !!
বেনিয়ামিন ডোনার

1
@ এমগ্রি এই অঞ্চলের একটি পর্বতের নাম আপনার নামে রাখা উচিত, আপনাকে ধন্যবাদ !! আমি কিছুটা পরীক্ষা করেছি এবং আপনার যুক্ত সমাধানগুলির সাথে কোনও সমস্যা খুঁজে পাওয়া যায় নি :)!
বেনিয়ামিন ডোনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.