কয়েকটি এলোমেলো পয়েন্ট দিয়ে শুরু করে, ওপি-র চিত্রের অনুকরণের জন্য সত্যায়িতভাবে, যেখানে প্রথম দুটি স্থানিকভাবে ছেদ করে, তারপরে ২ য় এবং তৃতীয়র মধ্যে একই বৈশিষ্ট্য আইডি (২) রয়েছে, যা দুটি স্থানের সাথে ছেদ করতে পারে না বা হয় না একই বৈশিষ্ট্য, নিম্নলিখিত কোয়েরি 3 টি গুচ্ছ উত্পাদন করে:
WITH
temp (id, geom) AS
(VALUES (1, ST_Buffer(ST_Makepoint(0, 0), 2)),
(2, ST_Buffer(ST_MakePoint(-0.7,0.5), 2)),
(2, ST_Buffer(ST_MakePoint(10, 10), 2)),
(3, ST_Buffer(ST_MakePoint(-2, 12), 2)),
(4, ST_Buffer(ST_MakePoint(5, -6), 2))),
unions(geoms) AS
(SELECT ST_Union(geom) FROM temp GROUP BY id),
clusters(geoms) AS
(SELECT ST_CollectionExtract(unnest(ST_ClusterIntersecting(geoms)), 3)
FROM unions),
multis(id, geoms) AS
(SELECT row_number() over() as id, geoms FROM clusters)
SELECT ST_UNION(d.geom) FROM
(SELECT id, (ST_DUMP(geoms)).geom FROM multis) d GROUP BY id;
এখানে বেশ কয়েকটি পদক্ষেপ রয়েছে:
ST_Union
আইডি দ্বারা গোষ্ঠীকরণ, বৈশিষ্ট্য দ্বারা প্রথম গোষ্ঠীতে ব্যবহার করুন
ST_ClusterIntersecting
একই গ্রুপ থেকে যারা সংক্ষিপ্তভাবে ছেদ করে তাদের একত্রিত করতে ব্যবহার করুন
- প্রতিটি ক্লাস্টারে একটি আইডি যুক্ত করুন (টেবিল মাল্টিস) - এটি সরাসরি ক্লাস্টার ইন্টারেক্টেটিংয়ে করার চেষ্টা করে সমস্ত জ্যামিতিগুলিকে 1 এর আইডি পেয়ে যায়
- পদক্ষেপ 2 থেকে ফেলে দেওয়া জ্যামিতিগুলি ইউনিয়ন করুন, পদক্ষেপ 3 থেকে আইডি দ্বারা গোষ্ঠীকরণ করুন - এটি দ্রবীভূত অংশ। এটি আপনার ক্লাস্টার A তে দুটি ওভারল্যাপিং বহুভুজকে ওভারল্যাপিংয়ের পরিবর্তে একত্রে যোগদান করার কারণ হিসাবে এগুলি দ্বিতীয় ধাপের শেষে রয়েছে।
বরং দীর্ঘ, তবে এটি কার্যকর হয় (এবং, আমি নিশ্চিত যে আরও একটি ছোট উপায় আছে)।
কিউজিআইএস-এ ডব্লিউকেটি সরঞ্জামটি ব্যবহার করে, (এবং আমি সম্পাদনার সরঞ্জামগুলির সাথে আমি কতটা ভয়ঙ্কর তা আবিষ্কার করছি) নীচের মতো ক্লাস্টার তৈরি করে, যেখানে আপনি ক্লাস্টারটিকে একটি হিসাবে লেবেলযুক্ত দেখতে পাচ্ছেন, সব মিলিয়ে রয়েছে - অর্থাত্ একটি বর্ণ।
আপনি যদি ফাইনালের জন্য একটি ST_AsText রাখেন, ST_UNION (d.geom), তবে আপনি ফলাফলগুলি সরাসরি দেখতে পাবেন।
মন্তব্যে আরও তথ্যের অনুসরণ করে সম্পাদনা করুন: আপনি যখন পয়েন্টগুলি শুরু করছেন আপনাকে বাফারটি আমার মূল সমাধানটিতে অন্তর্ভুক্ত করতে হবে - যা আমি আপনার চিত্রটি নকল করতে শুরুতে অস্থায়ী সিটিইতে রেখেছি। ইউনিয়ন সিটিইতে বাফার যুক্ত করা আরও সহজ হবে, তাই আপনি একবারে সমস্ত জ্যামিতি করতে পারেন। সুতরাং, উদাহরণস্বরূপ, 1000 এর বাফার দূরত্ব ব্যবহার করে, নিম্নলিখিত এখন 3 টি ক্লাস্টার প্রত্যাশিত হিসাবে প্রত্যাবর্তন করবে
WITH temp(id, geom) AS
(VALUES
(1, ST_SetSRID(ST_GeomFromText('MultiPoint(12370 361685)'), 31256)),
(2, ST_SetSRID(ST_GeomFromText('MultiPoint(13520 360880, 19325 364350)'), 31256)),
(3, ST_SetSRID(ST_GeomFromText('MultiPoint(11785 367775)'), 31256)),
(4, ST_SetSRID(ST_GeomFromText('MultiPoint(19525 356305)'), 31256))
),
unions(geoms) AS
(SELECT st_buffer(ST_Union(geom), 1000) FROM temp GROUP BY id),
clusters(geoms) AS
(SELECT ST_CollectionExtract(unnest(ST_ClusterIntersecting(geoms)), 3)
FROM unions),
multis(id, geoms) AS
(SELECT row_number() over() as id, geoms FROM clusters)
SELECT id, ST_UNION(d.geom) FROM
(SELECT id, (ST_DUMP(geoms)).geom FROM multis) d GROUP BY id;