পোস্টগ্র্রেএসকিউএল / পোস্টজিআইএস ব্যবহার করে আপনার কার্য সমাধানের আরও একটি উপায়।
যদি লাইনগুলি সংক্ষিপ্ত এবং সহজ হয় তবে স্ক্রিপ্টটি চালান:
WITH
tbla AS (SELECT (ST_Dump(geom)).geom geom FROM <line_name_table>),
tblb AS (SELECT (ST_DumpPoints(geom)).geom geom FROM tbla
UNION
SELECT ST_Centroid(geom) geom FROM tbla),
tblc AS (SELECT ((ST_Dump(ST_VoronoiPolygons(ST_Collect(geom)))).geom) geom FROM tblb)
SELECT ST_Union(a.geom) geom FROM tblc a JOIN tbla b ON ST_Intersects(a.geom, b.geom) GROUP BY b.geom;
ফলাফল দেখুন।
লাইনগুলি দীর্ঘ হলে স্ক্রিপ্টটি চালান:
WITH
tbla AS (SELECT (ST_Dump(geom)).geom geom FROM <line_name_table>),
tblb AS (WITH btbl AS (SELECT (ST_Dump(geom)).geom geom FROM tbla),
intervals AS (SELECT generate_series (0, 9) as steps)
SELECT steps AS stp, ST_LineInterpolatePoint(geom, steps/(SELECT count(steps)::float-1 FROM intervals)) geom FROM btbl, intervals GROUP BY intervals.steps, geom),
tblc AS (SELECT ((ST_Dump(ST_VoronoiPolygons(ST_Collect(geom)))).geom) geom FROM tblb)
SELECT ST_Union(a.geom) geom FROM tblc a JOIN tbla b ON ST_Intersects(a.geom, b.geom) GROUP BY b.geom;
ফলাফল দেখুন।
যদি প্রয়োজন হয় তবে লাইনগুলিতে পয়েন্টের সংখ্যাটি সংক্ষিপ্ত করুন, আমার উদাহরণে এটি 10 পয়েন্ট।
মূল সমাধান।
এই স্ক্রিপ্টটি বলা হয়: ST_Voronoi ডায়াগ্রাম ফ্রেমলাইনস।