নকল জ্যামিতিগুলি খুঁজতে জিআইএস বিশ্লেষণ


9

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

তাদের মধ্যে কিছু হুবহু ডুপ্লিকেট করা হয় (এগুলি অন্যের উপরে প্রদর্শিত হয়) অন্যরা দুটি বস্তুর মধ্যে একটি স্থানের সাথে সদৃশ হয় (যেমন একটি বস্তু অন্যটির অভ্যন্তরে থাকে - সংযুক্ত স্ক্রিন শটটি দেখুন)।

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

আমি সেই ডেটা পরিষ্কার করতে চাই যাতে শহরে আমার কেবল সঠিক বিল্ডিং / ঘর থাকে তাই আমার প্রশ্নটি হ'ল:

এমন কোনও জিআইএস বিশ্লেষণ বা এসকিউএল এক্সপ্রেশন আছে যা আমি সমস্ত অনুলিপি বৈশিষ্ট্য (সঠিক এবং অন্যদের মধ্যে অবস্থিত উভয়ই) খুঁজে পেতে চালাতে পারি? আমার কাছে আরকিজিআইএস এবং কিউজিআইএস উভয়ই রয়েছে তাই আমি আপনার সমস্ত পরামর্শের জন্য উন্মুক্ত।


আপনি মুছুন আইডেন্টিকাল সরঞ্জামটি অন্বেষণ করার চেষ্টা করতে পারেন । তবে এটির জন্য একটি এন্টারপ্রাইজ লাইসেন্স স্তর প্রয়োজন। আপনি প্রযুক্তিগত আর্টিকেল ৩31৩৩৩ এ উপলভ্য কিছু অন্যান্য বিকল্প পর্যালোচনা করতে পারেন যা আরকিজিআইএস নকল জ্যামিতির সাথে বৈশিষ্ট্যগুলি সনাক্ত বা অপসারণের জন্য কোনও উপায় সরবরাহ করে যা আপনার সেরা বেট হ'ল ডেটা রিভিউর এক্সটেনশন । এই সরঞ্জামগুলির
কোনওটিই

এছাড়াও, আপনাকে বিবেচনা করতে হবে যে সারণী উপাদানগুলি মুছুন অভিন্ন সরঞ্জামের সাথে তুলনা করা হবে না। আমি এর উত্তর জানি না তবে আশা করি সমস্যা সমাধানে এটি সহায়তা করে।
এমডিহাল্ড

ডেটাবেসে কি ডেটা থাকে? যা টাইপ?
রাসেল ISC

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

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

উত্তর:


4

কিউজিআইএস-এ টপোলজি চেকার প্লাগইন আপনার সমস্যার সমাধান করতে পারে


3
আমি সম্মত হই যে কোনও টপোলজি হ'ল ডেটা পরিষ্কার করার সমস্যার একক সমাধান হতে পারে। তবে আপনি প্লাগইনটিতে একটি লিঙ্ক এবং টপোলজি কী বা কী করে এবং কোনটি আপনি চালাবেন সে সম্পর্কে একটি সংক্ষিপ্ত বিবরণ সরবরাহ করে আপনার উত্তরটি কিছুটা প্রসারিত করতে চাইতে পারেন। আমি আশঙ্কা করছি টাইপ করা আপনার উত্তর সম্ভবত নিম্নমানের হিসাবে পতাকাঙ্কিত হবে।
ক্রিস ডাব্লু

ঠিক আছে: প্লাগইনটির একটি বিবরণ এখানে রয়েছে: docs.qgis.org/2.2/en/docs/user_manual/plugins/… এবং "অবশ্যই ওভারল্যাপ করা উচিত নয়" সমস্যাটির কাছে যেতে পারে। প্লাগইনটির একটি ভিডিও গাইড এখানে রয়েছে: youtube.com/watch?v=huhkTZkoKC8
লুইজি পাইরেলি

6

আপনার পরবর্তী স্থানিক সম্পর্কগুলি খুঁজে পেতে আমি খুব দক্ষতার জন্য পাইথনের ইটারলুলস এবং অনুসন্ধান অনুসন্ধানকারী ব্যবহার করব। আপনি একত্রীভূত করতে পারেন জ্যামিতি পদ্ধতি overlaps , containsএবং equalজ্যামিতি বৈশিষ্ট্য এ জন্য।

  1. কর্মপ্রবাহকে আরও সুসংহত করতে এবং পুনরাবৃত্তির জন্য একটি ফাংশন তৈরি করে শুরু করুন

    def findOverlaps(x):

  2. পৃথক বৈশিষ্ট্য জ্যামিতির উপর লুপ করতে একটি অনুসন্ধান কার্সার খুলুন

    with arcpy.da.SearchCursor(x, ['OID@', 'SHAPE@']) as cur:

  3. itertools.combinations()ইনপুট পুনরাবৃত্তিযোগ্য থেকে উপাদানগুলির উপসর্গগুলি ফেরত দিতে ব্যবহার করুনcur

    for feature1,feature2 in itertools.combinations(cur, 2):

  4. নিম্নলিখিত পদ্ধতিগুলির সঙ্গে জ্যামিতি বৈশিষ্ট্য অ্যাক্সেস করুন: equals(), overlaps(), এবং contains()। এগুলি একটি লজিকাল সিকোয়েন্সে সেট আপ করা হয় - প্রয়োজনে আপনার নির্দিষ্ট উদ্দেশ্যগুলি পূরণ করতে আপনি এটি টুইট করতে পারেন।

        if feature1[1].equals(feature2[1]):
            print "{} equals {}".format(feature1[0],feature2[0])
        if feature1[1].overlaps(feature2[1]):
            print "{} overlaps {}".format(feature1[0],feature2[0])
        if feature1[1].contains(feature2[1]):
            print "{} contains {}".format(feature1[0],feature2[0])
  5. চালাও এটা...

enter code herefindOverlaps (এফসি)


import itertools, arcpy

fc = r'C:\path\to\your\fc'

def findOverlaps(x):
    with arcpy.da.SearchCursor(x, ['OID@', 'SHAPE@']) as cur:
        for feature1,feature2 in itertools.combinations(cur, 2):
            if feature1[1].equals(feature2[1]):
                print "{} equals {}".format(feature1[0],feature2[0])
            if feature1[1].overlaps(feature2[1]):
                print "{} overlaps {}".format(feature1[0],feature2[0])
            if feature1[1].contains(feature2[1]):
                print "{} contains {}".format(feature1[0],feature2[0])

findOverlaps(fc)

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

স্ক্রিনশটটি বিভিন্ন বৈশিষ্ট্য দেখায় যা ওভারল্যাপিং, ওভারল্যাপিং এবং অভিন্ন এবং অনন্য।

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


2

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

আর্কম্যাপ ব্যবহার করা হচ্ছে

(1) জিনিসগুলি ভুল হয়ে গেলে আপনার শেফফিলের একটি অনুলিপি তৈরি করুন।

(২) আপনার শেপফাইলে ডাবল হিসাবে একটি কলাম যুক্ত করুন।

(3) আপনি করতে পারেন সর্বাধিক বর্ণনামূলক (সবচেয়ে সুনির্দিষ্ট) ফর্ম্যাট ব্যবহার করে প্রতিটি বৈশিষ্ট্যের জন্য অঞ্চল গণনা করুন। রাউন্ডিং কোনও সমস্যা নাও হতে পারে।

(4) সেই কলামটিতে একটি সংক্ষিপ্তসার (সংক্ষেপে) চালান। নিশ্চিত করুন যে আপনি সংক্ষেপে একটি অনন্য শনাক্তকারী নির্বাচন করেছেন এবং উভয়কে প্রথম এবং শেষ চিহ্ন করে mark

(5) আপনার আউটপুট সারণিতে, সেই রেকর্ডগুলি সন্ধান করুন যেখানে গণনা ক্ষেত্র 1 এর চেয়ে বেশি।

(A এ) ম্যানুয়ালি বৈশিষ্ট্যগুলি পরীক্ষা করে দেখুন এবং আরও নকল না হওয়া পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করুন।

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

আরকিপি ব্যবহার করে অন্য একটি প্রযুক্তি

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

আরকিপাই ব্যবহার করে এটি করার জন্য আমি যেভাবে ভাবব তা আপনার সিস্টেমে ট্যাক্স লাগতে পারে এবং কিছুটা সময় নিতে পারে।

(1) আপনার শেফফাইলের একটি অনুলিপি তৈরি করুন (আবার ক্ষেত্রে)

(২) সদৃশ বোঝাতে একটি নতুন কলাম যুক্ত করুন। এমন কিছু যা 'y' বা 'n' বা 0 বা 1 এর মতো লাগে বা যা কাজ করবে।

(3) অনন্য সনাক্তকারী সংরক্ষণ করার জন্য পাইথনে একটি তালিকা তৈরি করুন।

(4) একটি আপডেট কার্সার চালান ( arcpy.UpdateCursor('LAYERNAME'))। প্রতিটি রেকর্ডের জন্য, এটিতে সেই শনাক্তকারী রয়েছে কিনা তা দেখার জন্য আপনার তালিকাগুলি পরীক্ষা করে দেখুন এবং এটির জন্য যদি আপনার কলামটি নকলের জন্য চিহ্নিত করে।

myList = []
rows = arcpy.UpdateCursor("layername")
for row in rows:
  if str(row.UniqueIdentifier) in myList:
    #value duplicated
    row.DuplicateColumnName = "y"
  else:
    #not there, add it
    myList.append(row.UniqueIdentifier)
  rows.updateRow(row)

(5) তারপরে আপনি চিহ্নিত চিহ্নিত কলামগুলির সাথে আপনি যা যা চান তার তুলনা বা করতে পারেন।

এই তুলনাগুলি করার জন্য সম্ভবত আরও ভাল উপায় আছে তবে আমি বিশ্বাস করি যে দুটি কাজ করা উচিত বা কমপক্ষে আপনাকে শুরু করা উচিত।

সম্পাদন করা

এলরোবিসের মন্তব্যের ভিত্তিতে , আপনি ভুল বৈশিষ্ট্যগুলি সরিয়ে ফেলার সম্ভাবনা আরও হ্রাস করতে সর্বনিম্ন বাউন্ডিং আয়তক্ষেত্রটি ব্যবহার করতে পারেন।

আর্কম্যাপ ব্যবহার করে আপনি ডেটা ম্যানেজমেন্টে ন্যূনতম বাউন্ডিং জ্যামিতি সরঞ্জাম চালাতে পারেন । বিকল্পগুলি পরীক্ষা করার পরে, আমি মনে করি CONVEX_HULL বিকল্পটি ব্যবহার করা সম্ভবত সেরা।

তোমার তুলনা যদি MBG_APodX / Y1 , MBG_APod_X / Y2 সহ ক্ষেত্র MBG_Orientation সদৃশ, আপনি সদৃশ বৈশিষ্ট্য একটি ভাল ধারণা পেতে সক্ষম হওয়া উচিত। আমি তুলনা করতে উপরে বর্ণিত সংক্ষিপ্ত পদ্ধতিটি ব্যবহার করার পরামর্শ দেব। সদৃশ আয়তক্ষেত্রটি থেকে সদৃশগুলি খুঁজতে একটি শীর্ষ (স্থানাঙ্ক) চয়ন করুন। আপনি কয়েকটি ঘটনামূলক 'ম্যাচ' পেতে পারেন, তবে একবার আপনি অন্য শীর্ষকোনা প্লাস ওরিয়েন্টেশনে যুক্ত হয়ে গেলে এটি মোটামুটি নিরাপদ বাজি হয়ে যাবে যে ফলাফলের বৈশিষ্ট্যগুলি সদৃশ।

যদিও আমি এটি ব্যবহার করি নি এবং এই সরঞ্জামটি থেকে প্রাপ্ত ফলাফল সম্পর্কে পুরোপুরি নিশ্চিত নই, আপনি যদি অর্কম্যাপে সংক্ষিপ্তসার পরিসংখ্যান সরঞ্জামটি ব্যবহার করেন তবে ফলস্বরূপ শেফফাইল পরীক্ষা করা সহজতর হতে পারে । দেখে মনে হচ্ছে আপনি আমার একক কলাম বিকল্পের পরিবর্তে সেভাবে একাধিক কলাম সংক্ষিপ্ত করতে পারেন।

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


আমি ধরে নিচ্ছি সেগুলি বহুভুজ ছিল। যদি সেগুলি লাইন হয় তবে আপনি দৈর্ঘ্যটি ব্যবহার করতে পারেন। এক্স / ওয়াই স্থানাঙ্কের সাথে পয়েন্টগুলি সবচেয়ে সহজ।
ব্র্যাঙ্কো

2
আমি "সমান অঞ্চল বৈশিষ্ট্যগুলি" সম্পর্কেও ভেবেছিলাম, তবে এটি আমাকে সম্ভবত আঘাত করে যে বেলডিজি পাদদেশে অজানা ম্যাচগুলি তৈরি করতে একই ধরণের আকার থাকতে পারে might আমি মনে করি এটি বৈশিষ্ট্যগুলির ডাব্লু / এমবিআর ছেদগুলিকে আরও পরিমার্জন করার পক্ষে প্রতিক্রিয়ার উন্নতি করবে। এটি হ'ল, যদি তাদের একই অঞ্চল থাকে (এবং একই বৈশিষ্ট্যটি হতে পারে) এবং তাদের এমবিআরগুলি ছেদ করে তবে সম্ভবত সম্ভবত তারা একই বৈশিষ্ট্যের দুটি প্রজন্ম are যে জানার জন্য?
elrobis

2

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

SELECT a.id, b.id from buildings a, buildings b WHERE 
  ST_INTERSECTS(a.geom, b.geom) AND a.id < b.id;

এটি ছেদ করবে find আপনি যদি সামগ্রিক সাম্যতা চান তবে ST_Equals এর সাথে ST_Intersect প্রতিস্থাপন করুন। অথবা, কেবল দুটি একত্রিত করুন:

SELECT a.id, b.id from buildings a, buildings b WHERE 
   (ST_INTERSECTS(a.geom, b.geom) OR ST_EQUALS(a.geom, b.geom)) 
   AND a.id < b.id;

দ্রষ্টব্য, a.id <b.id এর অর্থ হল যে আপনি কেবল স্ব-যোগদানের অর্ধেক কেস বিবেচনা করেন, এটি এটিকে ক) দ্রুত এবং খ) আপনাকে একটি তালিকা দেয় যা আপনি সমস্তগুলি মোছা ছাড়াই ওভারল্যাপিং বহুভুজগুলির অর্ধেক মুছতে ব্যবহার করতে পারেন । স্পষ্টতই, এটি এখনও একটি ও (n²) অ্যালগরিদম, তবে বাস্তবে, যদি আপনার জায়গায় একটি স্থানিক সূচক থাকে তবে এটি অনেক দ্রুত হবে - এটি কোনও তুচ্ছ ডেটা সেটের জন্য সত্যিই মোট প্রয়োজন।

ওভারল্যাপিংয়ের কিছু সংজ্ঞা মানিয়ে নিতে আপনার এই সামান্য কিছুটা ম্যাসেজ করতে হবে - আপনি খারাপভাবে জরিপ করা এমন প্রতিবেশী বাড়িগুলি মুছতে চান না।


আপনি যদি শেফফাইলে কোনও অনন্য বৈশিষ্ট্য হারিয়ে ফেলছেন তবে আপনি এর a.rowidপরিবর্তে ব্যবহার করতে পারেন a.idrowidএসকিউএলাইটে একটি কীওয়ার্ড যা আপনাকে ডেটাসেটের অভ্যন্তরীণ আইডি দেবে।
LuWi

1

টপোলজি চেকার প্লাগইনটি যদি সঠিকভাবে ব্যবহৃত হয় তবে একটি ভাল সরঞ্জাম। আপনার এখনও আপনার ডেটা সম্পর্কে একটি মৌলিক বোঝাপড়া থাকতে হবে এবং আপনাকে ম্যানুয়ালি 'সংশোধন' করতে হবে। প্লাগিনটি এটিকে কী ত্রুটি বলে মনে করে তা হাইলাইট করবে। তারপরে প্রতিটি পরীক্ষা করে নেওয়া আপনার এবং আপনার ডেটার জন্য যথাযথ সিদ্ধান্ত নেওয়া আপনার উপর নির্ভর করবে। আপনার স্তর 90,000 আইটেম সঙ্গে, আপনি ক্রিসমাস দ্বারা বাড়িতে হতে পারে!

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