কীভাবে মুছে ফেলা বৈশিষ্ট্যগুলির বৈশিষ্ট্যগুলি অ্যাক্সেস করবেন (প্রতিশ্রুতি দেওয়ার আগে)


13

আমার একটি স্তরে বৈশিষ্ট্য মোছার ইভেন্টের জন্য একটি সংকেত সেটআপ রয়েছে:

self.layer.featureDeleted.connect(self.feature_deleted)

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

আমি ভাবতাম স্তরের পরিবর্তনগুলি সংঘটিত হওয়ার আগে আমার মুছে ফেলা বৈশিষ্ট্য থেকে বৈশিষ্ট্যগুলি পুনরুদ্ধার করতে সক্ষম হওয়া উচিত? অন্যথায় ফিড প্যারামিটারটি কী ব্যবহার করে তা আমি দেখতে পাই না।

def feature_deleted(self, fid):
    feature = self.layer.getFeatures(QgsFeatureRequest().setFilterFid(int(fid))).next()
    idx = self.layer.fieldNameIndex('my_attribute')
    print feature.attributes()[idx]

আমি কীভাবে মুছে ফেলা বৈশিষ্ট্যের বৈশিষ্ট্যগুলিতে অ্যাক্সেস করতে পারি (স্তরের পরিবর্তনগুলি প্রতিশ্রুতি দেওয়ার আগে)?


1
দেখে মনে হচ্ছে মুছে ফেলা বৈশিষ্ট্যগুলি কোথাও সঞ্চিত নয় ... আপনার স্তরটির মূল সংস্করণ ব্যতীত ... তাই ... সম্ভবত এটি দু'বার খুলুন এবং তারপরে আপনি যে স্তরটি সম্পাদনা করছেন তার সম্পাদনা বাফার দ্বারা ফিরে আসা মুছে ফেলা বৈশিষ্ট্যগুলি ব্যবহার করুন ? আমি কেবলমাত্র খুঁজে পেয়েছি যে গুণাবলীর মান পরিবর্তন বা জ্যামিতির পরিবর্তনগুলি সংরক্ষণ করা আছে ... মুছে ফেলা বৈশিষ্ট্যগুলি নেই (কেবল তাদের বৈশিষ্ট্যগুলিই রয়েছে ...)
স্নেলেটার

@ স্নাইলিটার আমার ক্ষেত্রে স্তরটি অনুলিপি করা একটি ব্যয়বহুল ক্রিয়াকলাপ হবে। বৈশিষ্ট্যগুলির বৈশিষ্ট্যগুলি নির্বাচিত হওয়ার সাথে সাথে আমি চেষ্টা করব এবং রেকর্ড করব এবং পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ হওয়ার পরে তাদের বাম দিকের সাথে তুলনা করব।
ম্যাট

@ ম্যাট মেইলিং লিস্টে এই পোস্টিংটি সাহায্য করবে:
list.osgeo.org/pipermail/qgis-developer/2015-

উত্তর:


5

দুটি মুহুর্ত থাকবে যেখানে আপনি এখনও মুছতে হবে এমন বৈশিষ্ট্যগুলি পেতে পারেন:

  1. আপনি যখন এডিট সেশনে এগুলি মুছুন কিন্তু প্রতিশ্রুতিবদ্ধ বা পরিবর্তনগুলি সংরক্ষণ করেন নি (যেমন, আপনি এখনও রোলব্যাক করতে পারেন)।

    layer = iface.activeLayer()
    idx = layer.fieldNameIndex( 'my_attribute' )
    def feature_deleted( fid ):
        feature = layer.dataProvider().getFeatures( QgsFeatureRequest( fid ) ).next()
        print feature.id(), feature.attributes()[idx]
    
    layer.featureDeleted.connect( feature_deleted )
    
  2. মুছে ফেলা বৈশিষ্ট্যগুলি প্রতিশ্রুতিবদ্ধ হওয়ার ঠিক আগে (যেমন, আপনি সবেমাত্র Save Layer Editsবোতামটি ক্লিক করেছেন বা আপনি সবেমাত্র কল করেছেন layer.commitChanges())।

    layer = iface.activeLayer()
    idx = layer.fieldNameIndex( 'my_attribute' )
    def features_deleted():
        if layer.editBuffer():
           ids = layer.editBuffer().deletedFeatureIds()
           for feature in layer.dataProvider().getFeatures( QgsFeatureRequest().setFilterFids( ids ) ):
               print feature.id(), feature.attributes()[idx]
    
    layer.beforeCommitChanges.connect( features_deleted )
    

এটি একটি ভাল সমাধান তবে পোস্টগিজ স্তরগুলির জন্য কাজ করছে বলে মনে হয় না। আমার কাছে মনে হয় তারা এডিটিং বাফারটি মূলত ভিন্ন handle স্তরটি সম্পাদনা মোডে থাকা সত্ত্বেও আমি একটি স্টপ পুনরাবৃত্তি ত্রুটি পেয়েছি। সেখানে কোন পরামর্শ?
জেসি ম্যাকমিলান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.