मेरे पास एड्रेस पॉइंट्स (37 मिलियन) का एक राष्ट्रीय डेटासेट है और मल्टीपॉलीगंज के प्रकारों की बाढ़ रूपरेखा (2 मिलियन) का बहुभुज डेटासेट है, कुछ पॉलीगॉन बहुत जटिल हैं, अधिकतम ST_NPoints 200,000 के आसपास हैं। मैं PostGIS (2.18) का उपयोग करके पहचान करने की कोशिश कर रहा हूं कि कौन से पते बिंदु एक बाढ़ बहुभुज में हैं और इन्हें पता आईडी और बाढ़ जोखिम विवरण के साथ एक नई तालिका में लिखें। मैंने एक पते के नजरिए (ST_Within) से कोशिश की है, लेकिन फिर बाढ़ क्षेत्र के दृष्टिकोण (ST_Contains) से शुरू होने वाली अदला-बदली, औचित्य यह है कि बड़े क्षेत्र हैं जिनमें कोई बाढ़ जोखिम नहीं है। दोनों डेटासेट को 4326 पर रीप्रोडक्ट किया गया है और दोनों टेबल में एक स्थानिक सूचकांक है। नीचे मेरी क्वेरी अभी 3 दिनों के लिए चल रही है और जल्द ही किसी भी समय खत्म करने के कोई संकेत नहीं दिखाती है!
select a.id, f.risk_factor_1, f.risk_factor_2, f.risk_factor_3
into gb.addresses_with_flood_risk
from gb.flood_risk_areas f, gb.addresses a
where ST_Contains(f.the_geom, a.the_geom);
क्या इसे चलाने का एक अधिक इष्टतम तरीका है? इसके अलावा, इस प्रकार के लंबे समय तक चलने वाले प्रश्नों के लिए संसाधन उपयोग और pg_stat- सक्रियता को देखने के अलावा प्रगति की निगरानी का सबसे अच्छा तरीका क्या है?
मेरी मूल क्वेरी 3 दिनों के लिए ठीक हो गई और मैं दूसरे काम से अलग हो गया, इसलिए मुझे कभी समाधान निकालने की कोशिश करने के लिए समय नहीं मिला। हालाँकि, मैंने अभी इस पर दोबारा विचार किया है और सिफारिशों के माध्यम से काम कर रहा है, अब तक यह अच्छा है। मैंने निम्नलिखित का उपयोग किया है:
- यहां सुझाए गए ST_FishNet समाधान का उपयोग करके यूके में 50 किमी का ग्रिड बनाया गया
- उत्पन्न ग्रिड के SRID को ब्रिटिश नेशनल ग्रिड पर सेट करें और इस पर एक स्थानिक सूचकांक बनाया
- ST_Intersection और ST_Intersects का उपयोग करके मेरे बाढ़ के डेटा (MultiPolygon) को बंद कर दिया गया था (केवल यहाँ गोछा था मुझे जियोम पर ST_Force_2D का उपयोग करना था क्योंकि shape2pgsql ने एक Z सूचकांक जोड़ा
- एक ही ग्रिड का उपयोग करके मेरे बिंदु डेटा को बंद कर दिया
- प्रत्येक तालिकाओं पर पंक्ति और कॉल और स्थानिक सूचकांक पर अनुक्रमणिका बनाई गई
मैं अब अपनी स्क्रिप्ट को चलाने के लिए तैयार हूं, जब तक मैं पूरे देश को कवर नहीं करता, तब तक एक नई तालिका में परिणामी पंक्तियों और स्तंभों पर पुनरावृति होगी। लेकिन अभी-अभी मेरे बाढ़ के आंकड़ों की जाँच की गई और कुछ सबसे बड़े बहुभुज अनुवाद में खो गए हैं! यह मेरी क्वेरी है:
SELECT g.row, g.col, f.gid, f.objectid, f.prob_4band, ST_Intersection(ST_Force_2D(f.geom), g.geom) AS geom
INTO rofrse.tmp_flood_risk_grid
FROM rofrse.raw_flood_risk f, rofrse.gb_grid g
WHERE (ST_Intersects(ST_Force_2D(f.geom), g.geom));
मेरा मूल डेटा इस तरह दिखता है:
हालाँकि पोस्ट क्लिपिंग यह इस तरह दिखता है:
यह "लापता" बहुभुज का एक उदाहरण है: