QGIS ক্ষেত্রে একটি ডিফল্ট মান সেট করা


12

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

আমার ক্ষেত্রে ডিফল্ট মানটি হবে @ প্রোজেক্ট_ফিলনাম ভেরিয়েবল (প্রকল্পের ফাইলের নাম)।

আমি এই কার্যকারিতাটি কোথাও খুঁজে পাচ্ছি না।

শুভেচ্ছা সহ,

উত্তর:


8

কিউজিআইএস ২.১18, লেয়ার বৈশিষ্ট্য / ক্ষেত্রের বৈশিষ্ট্যগুলিতে যান এবং @project_filenameডিফল্ট মান হিসাবে একটি অভিব্যক্তি সেট ( এই ক্ষেত্রে)।

এক্সপ্রেশন ভিত্তিক ডিফল্ট মান

https://www.qgis.org/en/site/forusers/visualchangelog218/index.html#feature-client-side-default-field-values


1
সি ++ এপিআইতে যদি আমার ভুল না হয় তবে প্রোগ্রামটিভভাবে এটি করার জন্য ক্লাস কি.গ.স.ডিফল্টভ্যালু রয়েছে। অজগর বিকল্প আছে কি?
শিকা-কান

আপনি যদি এটি একটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করেন তবে আমি এর উত্তর দিয়ে খুশি হব। শুধু আমাকে এখানে একটি অনুস্মারক প্রেরণ করুন;)
ম্যাথিয়াস


10

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

import os

# Get project name
project = QgsProject.instance()
project_name = os.path.basename(project.fileName())

# Set active layer
layer = qgis.utils.iface.activeLayer()

# Define function to select added feature and add attribute to field "Name"
def update(featureAdded):
    idx = layer.fieldNameIndex('Name')
    layer.changeAttributeValue(featureAdded, idx, project_name)

# Connect "featureAdded" event to "select" function
layer.featureAdded.connect(update)

ফলাফল


1
প্রতিবার স্তরটি সম্পাদনা করার সময় কি স্ক্রিপ্টটি চালানোর দরকার পড়ে বা স্ক্রিপ্টটি কিউজিস প্রকল্পে সংরক্ষিত থাকে?
উপত্যকা

1
@ ভ্যাল - আপনি স্ক্রিপ্টটি ম্যাক্রো হিসাবে সংরক্ষণ করতে পারবেন যা কিউজিআইএস প্রকল্পের মধ্যে সংরক্ষণ করা হবে। আমি এটিকে অন্তর্ভুক্ত করতে পোস্টটি সম্পাদনা করব =)
জোসেফ

1
আপনি কেন জোসেফ বৈশিষ্ট্য নির্বাচন করতে হবে?
জার্মেইন ক্যারিলো

3
আমি মনে করি না যে আরও একটি প্রশ্ন পোস্ট করার দরকার আছে, কারণ সেখানে খুব বেশি ওভারল্যাপ হবে। আপনি আসলে কাছে। আমি আপনাকে বৈশিষ্ট্য নির্বাচন করা এড়াতে পরামর্শ দেব। সিগন্যাল featureAddedট্রিগার করার সময় আপনি প্যারামিটার হিসাবে যা পান তা আসলে একটি বৈশিষ্ট্য আইডি। এবং কল করার জন্য এটাই আপনার দরকার changeAttributeValue। মধ্যে updateফাংশন আপনি শুধু 2 লাইন (আপনার পরিবর্তনশীল নামের ব্যবহার করে) প্রয়োজন হবে: idx = layer.fieldNameIndex('Name')এবং layer.changeAttributeValue(featureAdded, idx, project_name)
জার্মেইন ক্যারিলো

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