मैं बहुभुज के निकटतम पड़ोसियों की गणना करने के लिए PostGIS का उपयोग कर रहा हूं। मैं जो गणना करना चाहता हूं वह प्रत्येक बहुभुज से निकटतम बहुभुज की न्यूनतम दूरी है।
इस प्रकार अब तक मुझे माइक टोज़ के उत्तर (जिसे मैं एक मामूली बदलाव के साथ उद्धृत करता हूं ) से बहुत मदद मिली है:
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
हालांकि, मेरी चुनौती बड़ी संख्या में बहुभुज (1,000,000) के लिए इसकी गणना करना है। जैसा कि ऊपर की गणना प्रत्येक बहुभुज की तुलना हर दूसरे बहुभुज से करती है, मैंने सोचा कि मैं गणना में सुधार कैसे कर सकता हूं ताकि मुझे 10 ^ 12 गणना करने की आवश्यकता न हो।
मैंने सोचा था कि मुझे प्रत्येक बहुभुज को बफर करना था, और फिर उस बहुभुज के लिए बफर के भीतर सभी मूल्यों के निकटतम पड़ोसियों की गणना करना और न्यूनतम रिकॉर्ड करना था। मुझे यकीन नहीं है कि अगर यह सबसे अच्छा तरीका है, या क्या PostGIS में कोई फ़ंक्शन है जो मुझे उपयोग करना चाहिए।
संपादित करें: निकल्स के सुझावों में से एक का उपयोग करते हुए, मैं इसके साथ प्रयोग कर रहा हूं 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_A शासन का उपयोग करके फिर से क्वेरी चलानी चाहिए?