मैं एक PL/R
फ़ंक्शन का उपयोग कर रहा हूं और PostGIS
अंकों के एक सेट के आसपास वोरोनोई पॉलीगॉन उत्पन्न करने के लिए। जो फ़ंक्शन मैं उपयोग कर रहा हूं वह यहां परिभाषित है । जब मैं किसी विशेष डेटासेट पर इस फ़ंक्शन का उपयोग करता हूं तो मुझे निम्न त्रुटि संदेश मिलता है:
Error : ERROR: R interpreter expression evaluation error
DETAIL: Error in pg.spi.exec(sprintf("SELECT %3$s AS id,
st_intersection('SRID='||st_srid(%2$s)||';%4$s'::text,'%5$s')
AS polygon FROM %1$s WHERE st_intersects(%2$s::text,'SRID='||st_srid(%2$s)||';%4$s');",
:error in SQL statement : Error performing intersection: TopologyException: found non-noded
intersection between LINESTRING (571304 310990, 568465 264611) and LINESTRING (568465
264611, 594406 286813) at 568465.05533706467 264610.82749605528
CONTEXT: In R support function pg.spi.exec In PL/R function r_voronoi
त्रुटि संदेश के इस भाग की जांच करने से:
Error performing intersection: TopologyException: found non-noded intersection between
LINESTRING (571304 310990, 568465 264611) and LINESTRING (568465 264611, 594406 286813)
at 568465.05533706467 264610.82749605528
यह समस्या ऊपर दी गई समस्या की तरह दिखती है:
मैंने शुरू में सोचा था कि यह संदेश समान बिंदुओं के अस्तित्व के कारण हो सकता है, और इस st_translate()
फ़ंक्शन को निम्न तरीके से उपयोग करके हल करने का प्रयास किया गया है:
ST_Translate(geom, random()*20, random()*20) as geom
यह समस्या को ठीक करता है, लेकिन मेरी चिंता यह है कि मैं अब x / y दिशा में ~ 20m तक सभी बिंदुओं का अनुवाद कर रहा हूं। मैं यह भी नहीं बता सकता कि उचित अनुवाद राशि की क्या आवश्यकता है। उदाहरण के लिए, परीक्षण और त्रुटि के माध्यम से इस डेटासेट में यह 20m * random number
ठीक है, लेकिन मैं कैसे बता सकता हूं कि यह बड़ा होना चाहिए?
ऊपर की छवि के आधार पर मुझे लगता है कि समस्या यह है कि बिंदु रेखा के साथ प्रतिच्छेद कर रहा है जबकि एल्गोरिथ्म बहुभुज के साथ बिंदु को प्रतिच्छेद करने का प्रयास कर रहा है। मुझे यकीन नहीं है कि मुझे यह सुनिश्चित करने के लिए क्या करना चाहिए कि बिंदु एक बहुभुज के भीतर है, बल्कि एक पंक्ति के साथ प्रतिच्छेद करने के बजाय। इस लाइन पर त्रुटि हो रही है:
"SELECT
%3$s AS id,
st_intersection(''SRID=''||st_srid(%2$s)||'';%4$s''::text,''%5$s'') AS polygon
FROM
%1$s
WHERE
st_intersects(%2$s::text,''SRID=''||st_srid(%2$s)||'';%4$s'');"
मैंने इस पिछले प्रश्न के माध्यम से पढ़ा है, "गैर-एनस्टेड चौराहा" क्या है? इस समस्या को बेहतर ढंग से समझने की कोशिश करें, और इसे हल करने के लिए सबसे अच्छी सलाह दें।
WHERE ST_IsValid(p.geom)
शुरू में बिंदुओं को फ़िल्टर करने के लिए उपयोग कर रहा हूं ।