আর্কজিআইএস ডেস্কটপ ব্যবহার করে একটি শেফিল থেকে ওভারল্যাপিং বহুভুজগুলি গণনা করছেন?


10

আমি 16,400 বহুভুজ সঙ্গে একটি আকারফাইল আছে। প্রতিটি বহুভুজ পুরো বিশ্বের জন্য একটি পাখির প্রজাতির বিস্তার দেখায়।

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

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

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

অতএব আমি আপনাকে জিজ্ঞাসা করছি যে 16400 বহুভুজ এক আকারের ফাইলে থাকলে ওভারল্যাপিং বহুভুজগুলি গণনা করার উপায় আছে?

আমি 10.0 এর সাথে কাজ করছি এবং 10.2 দিয়ে কাজ করতে পারি। একটি আরকপাই সমাধানটিও দুর্দান্ত।

এই মুহুর্তে আমি একটি ফিশনেট তৈরি করার কথা ভাবছি এবং 16400 বহুভুজ দিয়ে shp এর সারিগুলিতে পুনরাবৃত্তি করব এবং বহুভুজ এই কোষে রয়েছে এবং পরবর্তী সারিতে (বহুভুজ) গ্রহণ করার চেয়ে একটি ফিশনেট কোষের একটি মান ক্ষেত্র 1 লিখুন এবং যদি এটি ফিশনেট সেল গণনা +1 এও থাকে।

তবে আমি জানি না যে এটি একটি ভাল সমাধান এবং এটি কীভাবে উপলব্ধি করা যায়। অথবা এই পদ্ধতির ব্যবহার করতে আমাকে আর শিখতে হবে।

ফলাফল: এটি এমন আকারের হওয়া উচিত যেখানে আপনার ওভারল্যাপিংগুলির বাইরে নতুন বহুভুজ এবং এমন ক্ষেত্র যেখানে ওভারল্যাপগুলি গণনা করা উচিত।

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


আপনার ডেটাসেটের আকারের কারণে আপনার সমস্যাটি সমস্যা। উত্তরগুলি (এবং আপনি যে লিঙ্কটি প্রস্তাব করেছেন) সঠিক তবে আপনার মেমরির সমস্যা থাকবে। কয়েক বিলিয়ন স্লাইভ বহুভুজ সৃষ্টি এড়াতে আপনি কয়েকশ মিটার (প্রত্যাশিত নির্ভুলতার ভিত্তিতে) দিয়ে আপনার ডেটাতে একীভূত করার চেষ্টা করতে পারেন Maybe কোনও অনুলিপিটিতে কাজ করা নিশ্চিত করুন কারণ এটি আপনার ডেটা সংশোধন করবে।
Radouxju

1
আমাদের শেফফিলকে আঞ্চলিক শেফফিলগুলিতে ভাগ করুন, তারপরে আঞ্চলিক শেফফিলগুলিতে বিশ্লেষণ চালান, তারপরে আবার পুরো ফাইলটি পেতে তাদের দ্রবীভূত করুন।
til_b

আমি এই আকারটি কেবল একটি দেশ দিয়ে ক্লিপ করার চেষ্টা করেছি তবে আমি 999999 এর ত্রুটি পেয়েছি।
নোরা

1
আপনার বহুভুজগুলির জটিলতা কমাতে আপনি কি ডাইস সরঞ্জামটির দিকে নজর রেখেছেন? এছাড়াও যদি আপনি কেবল আপনার ডেটা ক্লিপ করার চেষ্টা করে একটি 999999 ত্রুটি পেয়ে যাচ্ছেন তবে আপনি কি চেক জ্যামিতি সরঞ্জামটি পরীক্ষা করে দেখেছেন যে কোনও অন্তর্দৃষ্টি ছুঁড়েছে কিনা?
হর্নবিড্ড

2
আমি ডেটাতে আংশিক জ্যামিতি চেক করেছি এবং অনেকগুলি স্ব-ছেদ রয়েছে। আমি পরামর্শ দেব ১. সর্বোচ্চ র‌্যাম ব্যবহার এবং বৃহত পেজফিল নিশ্চিত করুন ২. জ্যামিতি মেরামত করুন necessary. যদি প্রয়োজন হয়, বহুভুজগুলি সরল করুন ৩. 1 / 3s বা 1 / 4s (অথবা যা কিছু প্রয়োজন) সাবসেট ডেটা 4. ইউনিয়ন-দ্রবীভূতকরণ-রাস্টাইজ ওয়ার্কফ্লো চালান এই উত্তর হিসাবে 5। রাস্টারদের যোগফল।
সুতি.রকউড

উত্তর:


9

আমি কাউন্ট ওভারল্যাপিং বৈশিষ্ট্যগুলি (বিশ্লেষণ) সরঞ্জামটি ব্যবহার করার পরামর্শ দেব ।

ইনপুট বৈশিষ্ট্যগুলি থেকে পরিকল্পনাকৃত ওভারল্যাপিং বৈশিষ্ট্যগুলি উত্পন্ন করে। ওভারল্যাপিং বৈশিষ্ট্যগুলির গণনা আউটপুট বৈশিষ্ট্যগুলিতে লেখা।

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


আমি এটিও চেষ্টা করেছিলাম, এবং এটি আমার shp (খুব বড়) এর জন্য কাজ করছে না। উত্তর দেওয়ার জন্য ধন্যবাদ
নোরা

1
অ্যারন লিঙ্কটি মারা গেছে প্রোতে এখন এই বাস্তবায়ন রয়েছে: pro.arcgis.com/en/pro-app/tool-references/analysis/…
অ্যালবার্ট

1
ধন্যবাদ অ্যালবার্ট, আপনার সুপারিশের ভিত্তিতে পোস্টটি আপডেট করা হয়েছে।
হারুন

5

আরকি জ্যামিতি টোকেন ব্যবহার করে আপনি এরকম কিছু চেষ্টা করতে পারেন:

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

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

উপরের নমুনা তথ্যের জন্য, কোডটি নিম্নলিখিত ওভারল্যাপ গণনাগুলি ফিরিয়ে দেবে: এখানে চিত্র বর্ণনা লিখুন

কোডটি কেবলমাত্র বহুভুজগুলির পক্ষে গণনা করবে যা কমপক্ষে একটির ওভারল্যাপ রয়েছে।


@ এনক্সাউ: ঠিক আছে, আমি অনুমান করি যে ফলাফলটি কেমন হওয়া উচিত তা বোঝাতে আমি ভুল করেছিলাম। এটি এমন একটি আকারের হওয়া উচিত যেখানে ওভারল্যাপিংগুলির বাইরে আপনার নতুন বহুভুজ রয়েছে। উদাহরণস্বরূপ আপনার ছবিতে 4 এবং 5 চেনাশোনাগুলি ওভারল্যাপ করছে। নতুন আকারে তিনটি বহুভুজ থাকা উচিত। (ইউনিয়ন এই বড় আকারের জন্য কাজ করছে না)। ওভারল্যাপিংয়ের ক্ষেত্রের ক্ষেত্রে একটি ক্ষেত্রের মান 2 এবং বাকী 4 এবং 5 টির মধ্যে এই ক্ষেত্রের মান 1 হওয়া উচিত। সুতরাং শেষ পর্যন্ত একটি শেফফাইল থাকা উচিত যেখানে আপনি দেখতে পাবেন যে একই জায়গায় কতগুলি পাখির প্রজাতি পাওয়া যায়। আপনার স্ক্রিপ্ট জন্য ধন্যবাদ!
নোরা

5

খুব সহজ পদ্ধতিটি হ'ল:

  1. ইউনিয়ন নিজেই সঙ্গে shapefile;
  2. মাল্টিপার্ট আউটপুটকে একক অংশে রূপান্তর করুন ;
  3. ব্যবহার করুন স্থানিক যোগদানের ওভারল্যাপ (ARE_IDENTICAL_TO ম্যাচ অপশনটি ব্যবহার করুন) গণনা করতে টুল;
  4. join_countক্ষেত্রটি ব্যবহার করে প্রতীকী করুন ।

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


1

আমি অনুমান করি আপনি এই পদ্ধতিটি ব্যবহার করে দেখেছেন: আরকজিআইএস ডেস্কটপে বহুভুজ ওভারল্যাপগুলি গণনা এবং রাস্টারাইজেশন?

16,400 বহুভুজ এতগুলি না। যাইহোক, একটি সম্ভাব্য সমাধান হ'ল কেবল একটি নিয়মিত স্পেসিয়াল জয়েন করা। ইন ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join

একই ডেটাসেটে উভয় targetএবং joinবৈশিষ্ট্য দুটি সেট করুন এবং একটি আউটপুট নির্দিষ্ট করুন। বাকি সেটিংস ছেড়ে দিন।

কয়েক মুহুর্তের পরে আপনার এমন একটি শেফফিল ফিরে পাওয়া উচিত যাতে "যোগদানের কাউন্ট" কলাম থাকে। এটি থেকে ১ টি বিয়োগ করুন (স্পষ্টতই প্রতিটি বৈশিষ্ট্যটি নিজেকে ছেদ করে)

আমি শুধু এটি চালু


হ্যাঁ, আমি ইতিমধ্যে লিঙ্কটি থেকে পদ্ধতির চেষ্টা করেছি। তবে ইউনিয়ন ব্যবহার করা এই শাখার পক্ষে অসম্ভব। স্থানিক যোগদানের চেষ্টা করে আমি এটি ফিরে পেয়েছি: এআরআরআর 000426: স্মৃতি ছাড়িয়ে গেছে।
নোরা

আমি এটিকে মাত্র 4 জিবি র‌্যাম সহ একটি মেশিনে চালাচ্ছি এবং এর প্রায় অনেক গুণ বৈশিষ্ট্য রয়েছে, তাই আমি অবাক হয়েছি যে এটি খুব কম সংখ্যার সাথে কাজ করছে না। আপনার ডেটাতে অনেকগুলি শিখুন থাকতে পারে (আমার প্রায় 60MB ছিল; আপনার .shp ফাইলটি কত বড়?) এটি সাধারণ করার চেষ্টা করুন।
জিআইএস-জনাথন

যদি কেবল shp একটি fgdb এ থাকে fgdb এর সাথে 1,73 গিগাবাইট থাকে। একটি ফোল্ডারে আকারটির 2,00GB থাকে।
নোরা

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

@ সুতি.রকউড: এবং আপনি আর এর সমাধান খুঁজে পাবেন, তাই না? আমি "যোগ কাউন্ট" মান এবং শেষে ক্যালকুলেট রাস্টার (মডেলবিল্ডার) সাথে বহুভুজ তুলনায় 500 বহুভুজ (33 নির্বাচন) এর ইনপুট দিয়ে 'কাউন্ট ওভারল্যাপিং বহুভুজ' টুলবক্সটি ব্যবহার করার কথা ভাবি। এটি একটি দীর্ঘ সময় নেয় ...
নোরা

1

আমি "কাউন্ট ওভারল্যাপিং বহুভুজ" সরঞ্জামটি ডাউনলোড করে দেখেছি। এটি কার্যকর হতে পারে তবে এটি একটি অত্যন্ত দীর্ঘ সময় নেয় (সম্ভবত ফাইলের আকারের কারণে, তবে আমার ইনপুট এফসির কাছে কেবল <5,000 রেকর্ড ছিল)।

আমি সেই সরঞ্জামটি চালুর অপেক্ষায় থাকাকালীন আমি আরক ম্যাপের অন্য একটি উইন্ডোটি খুললাম এবং এটি আমার যা চেয়েছিল তা পেতে কেবল বেশ কয়েকটি দ্রুত পদক্ষেপ নিয়েছে। 1) স্থানিক যোগদান - টার্গেট এবং যোগদানের বৈশিষ্ট্যগুলির মতো একই বৈশিষ্ট্য শ্রেণিটি ব্যবহার করে এবং "অনেকের সাথে এক যোগ করুন" বিকল্পটি নির্বাচন করুন। 2) দ্রবীভূত করুন - শেষ পদক্ষেপ থেকে আউটপুট ব্যবহার করে। দ্রবীভূত ক্ষেত্র হিসাবে "TARGET_FID" ব্যবহার করুন এবং পরিসংখ্যানগুলির জন্য আপনি "জয়েন_কাউন্ট" ক্ষেত্রটি সুম করতে পারেন বা "JOIN_FID" ক্ষেত্রটি COUNT করতে পারেন। ৩) পদক্ষেপ ২ থেকে আউটপুট ফাইলে, স্ট্যাটাস ফিল্ড থেকে ফিল্ড ক্যালকুলেটর 1 বিয়োগ করা ("SUM_Join_Count", বা "COUNT_JOIN_FID") ব্যবহার করুন - যেহেতু প্রতিটি বৈশিষ্ট্যই নিজেকে ছেদ করে।

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

আশাকরি এটা সাহায্য করবে!

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