এখানে একটি ধারণা আসে
যদি আপনি তুলনামূলকভাবে পরীক্ষা করার জন্য লাইনস্ট্রিংগুলির মধ্যে একটি ছিঁড়ে ফেলেন এবং ভার্ট এক্সপয়েন্টগুলি তুলনা করার জন্য অন্যান্য লাইনস্ট্রিং থেকে কিছু দূরত্বে রয়েছে তবে আপনি পরীক্ষাটি বিভিন্ন উপায়ে নিয়ন্ত্রণ করতে পারবেন।
এই উদাহরণগুলি পোস্টজিআইএস-এ কাজ করে (যারা অনুমান করতে পারে :-))
প্রথমত, আমরা যদি বলি যে টেবিল_1 তে একটি লাইনস্ট্রিঙের সমস্ত ভার্টেক্স পয়েন্টগুলি 0.5 মিটার (মানচিত্র ইউনিট) বা টেবিল_2 এর একটি লাস্টারিংয়ের কাছাকাছি থাকলে একটি মিল রয়েছে:
SELECT a.id, b.id FROM
(SELECT ST_NPoints(the_geom) as num_of_points,
(ST_Dumppoints(the_geom)).geom as p, id FROM table_1) a
INNER JOIN
table_2 b
ON ST_DWithin(a.p, b.the_geom, 0.5) GROUP BY a.id, b.id
HAVING COUNT(*)=num_of_points;
তারপরে আমরা বলতে পারি যে টেবিল_1 এর একটি লাইনস্ট্রিংয়ের মধ্যে 60০% এরও বেশি ভার্টেক্স_পয়েন্টগুলি টেবিল_2 এ লাইনস্ট্রিংয়ের দূরত্বের মধ্যে থাকলে
SELECT a.id, b.id FROM
(SELECT ST_NPoints(the_geom) as num_of_points,
(ST_Dumppoints(the_geom)).geom as p, id FROM table_1) a
INNER JOIN
table_2 b
ON ST_DWithin(a.p, b.the_geom, 0.5) GROUP BY a.id, b.id
HAVING COUNT(b.id)/num_of_points::float > 0.6
বা আমরা স্বীকার করতে পারি যে একটি পয়েন্ট সীমার মধ্যে নেই:
SELECT a.id, b.id FROM
(SELECT ST_NPoints(the_geom) as num_of_points,
(ST_Dumppoints(the_geom)).geom as p, id FROM table_1) a
INNER JOIN
table_2 b
ON ST_DWithin(a.p, b.the_geom, 0.5) GROUP BY a.id, b.id
HAVING COUNT(b.id)-num_of_points <= 1;
বিপরীত ভূমিকার ক্ষেত্রে আপনাকে টেবিল_1 এবং টেবিল_2 দিয়ে ক্যোয়ারী চালাতে হবে।
আমি জানি না এটি কত দ্রুত হবে। এসT_ডামপয়েন্টস বর্তমানে পোস্টজিআইএস-এ একটি স্কেল-ফাংশন এবং এটি কোনও সি-ফাংশন নয় যা এটি হওয়া উচিতের চেয়ে ধীর করে তোলে। তবে আমি মনে করি এটি যাইহোক বেশ দ্রুত হবে।
স্পেসিয়াল ইনডেক্সগুলি এস এস দ্বিথিনকে কার্যকর করতে অনেক সাহায্য করবে।
এইচটিএইচ নিক্লাস