প্রথম লেবেল QGIS- এ ফিট না হলে বিকল্প লেবেলে পরিবর্তন করা হচ্ছে?


10

আমি মুদ্রণের জন্য একটি মানচিত্র তৈরি করার চেষ্টা করছি এবং আমার বহুভুজগুলির আকারের পরিমাণে প্রচুর পার্থক্য রয়েছে। যেহেতু এটি একটি রেফারেন্স মানচিত্র হবে আমার প্রতিটি বহুভুজকে লেবেল করা দরকার তবে কয়েকটি নাম বহুভুজের মধ্যে খাপ খায় না। এই ক্ষেত্রে আমি পরিবর্তে বৈশিষ্ট্য আইডিটি ব্যবহার করতে চাই এবং তারপরে নামের সাথে আইডিটির একটি বিশিষ্ট টেবিলটি যুক্ত করতে চাই।

আমি যা করতে চাই তা হল এক ধরণের অভিব্যক্তি যা আমি মানচিত্রে কোন লেবেলটি ব্যবহার করতে হবে এবং বৈশিষ্ট্য সারণীতে কোন সারিগুলি অন্তর্ভুক্ত করতে হবে তা নির্বাচন করতে ব্যবহার করতে পারি। এর মতো কিছু isLabelledমানচিত্রের স্কেল, লেবেলের দৈর্ঘ্য, ফন্টের আকার ইত্যাদি বিবেচনায় নিতে সক্ষম হবে।


2
মনে রাখবেন, মানচিত্রটির ব্যবহারকারীর জন্য এটি বিভ্রান্তিকর হতে পারে, যখন একই বৈশিষ্ট্য শ্রেণীর বহুভুজগুলিকে বিভিন্ন উপায়ে লেবেল করা হয় এবং অতিরিক্তভাবে কেবল তাদের মধ্যে কয়েকটি অ্যাট্রিবিউট সারণীতে উপস্থিত হয়।
টালিস্ট্রোয়ান

আমি জিবি এর একটি কাউন্টি মানচিত্রের কথা ভাবছি
আয়ান টার্টন

গতিশীলভাবে ফন্ট ফিট করার জন্য কী? আপনি বৈশিষ্ট্যের মাত্রাগুলির মধ্যে সবচেয়ে দীর্ঘ সময় নিতে পারেন, লেবেল স্ট্রিংয়ের কতগুলি অক্ষর দ্বারা বিভক্ত হয়েছিলেন এবং স্কেল দিয়ে কিছু গণিত করতে পারেন বা এটি ইতিমধ্যে সেট করা ফন্টের আকার পরিবর্তন করতে পারেন ... বিকল্পভাবে আপনি সেই পরিমাপটি ব্যবহার করতে পারেন (দীর্ঘতম বৈশিষ্ট্যের মাত্রা / স্ট্রিং এর লেন) এবং যদি এটি আইডি সহ অনেক দীর্ঘ লেবেল থাকে।
জেসি ম্যাকমিলান

বেশিরভাগ ক্ষেত্রেই আমি পাঠ্যতা নিয়ে উদ্বিগ্ন তাই আমি ফন্টের আকারের সাথে গোলযোগ করতে চাই না
ইয়ান টার্টন

1
আপনি একটি পাইথন কাস্টম এক্সপ্রেশনটি লেবেল, ফন্টের আকার এবং স্কেলটি ব্যবহার করতে পারেন এবং মানানসই যদি সত্য বা মিথ্যা ফিরে আসে। তারপরে এক্সপ্রেশন ইঞ্জিনে লেবেলগুলি স্যুইচ করতে একটি if ক্লজ ব্যবহার করুন। আমি উদাহরণগুলির সাথে পরে আপনার জন্য একটি উত্তর কাজ করব।
জেসি ম্যাকমিলান

উত্তর:


8

এটি করার জন্য এখানে কিছুটা আনুমানিক (তবে আশাকরি কার্যকর) উপায়।

প্রথমে কিছু গণিত। আমাদের নির্দিষ্ট ফন্ট আকারে কতগুলি অক্ষর থাকতে পারে তা নির্ধারণ করতে হবে need জানার জন্য এখানে জিনিস / অনুমান:

  • ধরে নেওয়া মেট্রিক ইউনিট, (নীচে সামান্য পরিবর্তন যুক্ত করা হয়েছে যা আমাদের পায়ের জন্য সিআরটি তৈরি করতে পারে))
  • হরফ আকার হরফ উচ্চতার একটি পরিমাপ। বেশিরভাগ হরফগুলির উচ্চতা প্রায় অর্ধেক প্রশস্ত।
  • ফন্টের উচ্চতার জন্য পিটি ব্যবহার করে, 1pt হুল্লোড়ভাবে 0.035CM হয়
  • ধরে নিচ্ছি আপনার পার্সেলগুলি প্রায় আয়তক্ষেত্রাকার / নিয়মিত

কোনও আইটেমটি স্ক্রিনে / মুদ্রণে কতক্ষণ রয়েছে তা সন্ধান করার জন্য আমরা এটির দীর্ঘতম মাত্রা (দৈর্ঘ্য বা উচ্চতা বা আপনার লেবেলগুলি কেবল অনুভূমিক হলে দৈর্ঘ্য) / স্কেল * 100 (এম থেকে সিএম যেতে) ব্যবহার করতে পারি

তারপরে আমরা দেখতে পাচ্ছি যে আমাদের লেবেল ফিট হবে কিনা।

আপনি এটি সমস্ত এক্সপ্রেশন ইঞ্জিনে করতে পারেন তবে কাস্টম পাইথন এক্সপ্রেশনটি আরও দক্ষ হবে। এটি কীভাবে তৈরি করবেন সে সম্পর্কে একটি টিউটোরিয়াল এখানে

আমার কাস্টম এক্সপ্রেশন:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def labelFits(labelStr, fontPt, scaleM, feature, parent):
    # returns true if a label will fit in the feature at a given
    # font size and scale

    bbox = feature.geometry().boundingBox()

    # for CRS in us foot
    # fontWidth = fontPt * 0.0875

    # for CRS in metric
    # 1pt = 0.035CM
    fontWidth = fontPt * 0.035 * 0.5

    # length of maximum dimension on-screen/print in CM
    labelRoom =  max(bbox.width(),bbox.height()) / scaleM * 100

    # approx length of our label in CM based on font height * 0.5
    labelLen = len(labelStr) * fontWidth

    if labelRoom > labelLen:
        return True
    else:
        return False

তারপরে লেবেলে কেবল সেই অভিব্যক্তিটি ব্যবহার করুন:

if(labelFits( "yourAttribute" , 8 , @map_scale ), "yourAttribute",$id)

আপনি অবশ্যই যে বৈশিষ্ট্যটি ব্যবহার করছেন তা অবশ্যই প্লাগ ইন করতে হবে এবং আপনি ফন্টের আকারটি 8 থেকে যা ব্যবহার করছেন তা পরিবর্তন করতে হবে। এছাড়াও, যেহেতু হরফগুলি বেশ খানিকটা পরিবর্তিত হয় আপনার ডানদিকটি সঠিক হওয়া পর্যন্ত এটি কিছুটা টুইট করতে হবে।

আপনি লেবেলটি ফিট করে কিনা তার উপর ভিত্তি করে রঙ পরিবর্তন করার মতো জিনিসগুলি করতে এই অভিব্যক্তিটিও ব্যবহার করতে পারেন।


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

if(
    labelFits( "yourAttribute" , 8 , getScale('composername','mapname')),
    "yourAttribute",$id)

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

আপনি পাইলের ইমেজফন্ট.জেটসাইজ () ব্যবহার করতে পারেন। এটি আপনাকে আপনার নির্বাচিত ফন্টে একটি স্ট্রিংয়ের যথাযথ প্রস্থ দেবে, তবে আমি মনে করি এটির একটি বড় পারফরম্যান্স হিট হবে। উপরের রুক্ষ গণিতটি অনেক সহজ, বিশেষত আপনার যদি স্ক্রিনে কয়েক
জেসি ম্যাকমিলান

কেবলমাত্র সামান্য সমস্যাটি হ'ল ফাংশনটি প্রিন্ট সুরকারের অ্যাট্রিবিউট টেবিলগুলিতে ফিল্টার হিসাবে কাজ করবে বলে মনে হচ্ছে না।
ইয়ান Turton

আপনার মানচিত্রের স্কেল কি পৃষ্ঠায় পরিবর্তিত হয়? @ ম্যাপ_স্কেল ভেরিয়েবলের পরিবর্তে ম্যানুয়ালি স্কেলে রাখার চেষ্টা করুন। আমার অনুমান বৈশিষ্ট্য সারণিতে আপনার মানচিত্রের স্কেলটি জানার কোনও উপায় নেই। (কারণ উদাহরণস্বরূপ আপনার বিভিন্ন স্কেলের
জেসি ম্যাকমিলান

1
@ विशाल আমি অন্য কাস্টম এক্সপ্রেশনটির একটি লিঙ্ক পোস্ট করেছি যা আপনার রচয়িতা মানচিত্রের স্কেল প্রোগ্রামগতভাবে পাবে।
জেসি ম্যাকমিলান

3

লেয়ারটি অনুলিপি করুন, কোনও চিহ্ন নেই, এবং প্রতিটিের জন্য লেবেলের জন্য বিভিন্ন জুম স্তর / বাধা সেটিংস সেট করুন।


1

আমার প্রতিটি রাস্তা রাস্তার স্তরে লেবেল করার বাধ্যবাধকতার সাথে একই অবস্থা ছিল। আমার সমাধানটি ছিল বড় আকারে ক্যানভাস তৈরি করা, পিডিএফ রফতানি করা এবং তারপরে পিডিএফটিকে প্রয়োজনীয় আকারে মুদ্রণ করা।

উদাহরণস্বরূপ, সমাপ্ত পণ্যটির A3 হওয়া দরকার। এ 3 তে ক্যানভাসে আমি সমস্ত লেবেল ফিট করতে পারিনি। সুতরাং আমি ক্যানভাস এ 2 তৈরি করেছিলাম এবং এটি সমস্ত লেবেলগুলি দেখতে দেয়। A2 আকারের মানচিত্রের একটি পিডিএফ তৈরি করুন এবং এ 3 হিসাবে মুদ্রণ করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.