বহুভুজগুলির নিকটতম প্রতিবেশীদের গণনা করতে আমি পোস্টজিআইএস ব্যবহার করছি। আমি যা গণনা করতে চাই তা হ'ল প্রতিটি বহুভুজ থেকে নিকটতম বহুভুজের সর্বনিম্ন দূরত্ব।
এখন পর্যন্ত আমি এখানে মাইক টুউজের জবাব (যা আমি একটি ছোটখাটো পরিবর্তনের সাথে উদ্ধৃত করছি) থেকে দুর্দান্ত সহায়তা পেয়েছি :
SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM
public."TestArea" AS a, public."TestArea" AS b
WHERE
a.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
তারপরে আমি সর্বনিম্ন গণনা করেছি:
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
যাইহোক, আমার চ্যালেঞ্জটি হ'ল বহুগুণ (1000,000) এর জন্য এটি গণনা করা। উপরের গণনাটি প্রতিটি বহুভুজের সাথে প্রতিটি বহুভুজের তুলনা করার সাথে সাথে আমি ভাবছিলাম কীভাবে আমি গণনাটি উন্নত করতে পারি যাতে আমাকে 10 ^ 12 গণনা করতে না হয়।
আমার মনে হয়েছিল যে প্রতিটি বহুভুজকে বাফার করতে হবে এবং তারপরে সেই বহুভুজের জন্য বাফারের মধ্যে সমস্ত মানের নিকটবর্তী প্রতিবেশীদের গণনা করতে হবে এবং সর্বনিম্ন রেকর্ড করতে হবে। আমি নিশ্চিত নই যে এটিই সর্বোত্তম পন্থা, বা পোস্টজিআইএস-এ এমন কোনও ফাংশন রয়েছে যা আমার ব্যবহার করা উচিত whether
সম্পাদনা: নিক্লাসের একটি পরামর্শ ব্যবহার করে, আমি এটি ব্যবহার করছি ST_Dwithin()
:
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
এটি প্রতিটি বহুভুজের আইডির একটি টেবিল ফেরত দেয় এবং এটি নির্দিষ্ট দূরত্বের মধ্যে রয়েছে কিনা। IF/ELSE
এসকিউএল ব্যবহার করে কি কোনও টাইপ স্টেটমেন্ট তৈরি করা সম্ভব ? (আমি CASE
শর্তটি ব্যবহার করার বিষয়ে পড়ি ) অথবা আমার নিজের তৈরি টেবিলটি মূল টেবিলটিতে যোগ দেওয়ার চেষ্টা করা উচিত এবং তারপরে ST_Distance ব্যবহার করে আবার কোয়েরিটি চালানো উচিত?