আমি একটি 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
এটি সমস্যার সমাধান করে তবে আমার উদ্বেগটি হ'ল আমি এখন সমস্ত পয়েন্টগুলি এক্স / ওয়াইয়ের দিক থেকে 20 মিলিয়ন ডলার পর্যন্ত অনুবাদ করছি। একটি উপযুক্ত অনুবাদ পরিমাণ কী প্রয়োজন তা আমিও বলতে পারি না। উদাহরণস্বরূপ, এই ডেটাসেটে ট্রায়াল এবং ত্রুটির মাধ্যমে একটি 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)
প্রাথমিকভাবে পয়েন্টগুলি ফিল্টার করতে ব্যবহার করছি ।