আমি ওপেন স্ট্রিটম্যাপ ডেটা ব্যবহার করে পিজারাউটিংয়ের সাথে ব্যবহারের জন্য একটি রোড-নেটওয়ার্ক তৈরি করতে চাই। আমি জিওফ্যাব্রিক থেকে একটি পোস্টগ্রিস টেবিলে পোস্টফাইল লোড করেছি (পোস্টজিআইএস সক্ষম সহ)। যাইহোক, আমার একটি সমস্যা ছিল যে রাস্তাগুলি সর্বদা মোড়ে শেষ হয় না, তাই আমি প্রতিটি মোড় বা ক্রসিংয়ে সেগুলি বিভক্ত করার সিদ্ধান্ত নিয়েছিলাম।
রাস্তাগুলি অতিক্রম করা বা ছেদ করা সমস্ত আন্তঃসংশোধনগুলি সনাক্ত করতে আমি নিম্নলিখিতগুলি ব্যবহার করেছি SQL
( পূর্ববর্তী প্রশ্নের অনুরূপ ):
CREATE TABLE split_points as
SELECT DISTINCT
ST_GeometryN(ST_Intersection(a.geom, b.geom),1) as geom
FROM
roads as a,
roads as b
WHERE
ST_Touches(a.geom, b.geom)
OR
ST_Crosses(a.geom, b.geom)
AND a.gid != b.gid
GROUP BY
ST_Intersection(a.geom, b.geom);
আমি এখন এই পয়েন্টগুলি ব্যবহার করে রাস্তাগুলি বিভক্ত করতে চাই। আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করেছি:
CREATE TABLE split_roads as
SELECT
ST_GeomFromEWKB((ST_Dump(ST_Split(g.geom, blade.geom))).geom) As geom,
generate_series(1,ST_NumGeometries((ST_Split(g.geom, blade.geom)))) as gid
FROM
split_points as blade,
roads as g
WHERE
ST_Intersects(g.geom, blade.geom);
এই বিভক্ত পদ্ধতির সমস্যাটি হ'ল সমস্ত বিভক্ত টুকরা ছাড়াও পুরো রাস্তার দৈর্ঘ্য রয়ে গেছে। অন্তর্ভুক্ত থাকা এই বিভাজনযুক্ত রাস্তার জ্যামিতিগুলি সরাতে আমি ST_Equals()
তাদের চিহ্নিত করতে এবং সেগুলি মুছতে ফাংশনটি ব্যবহার করেছি:
DELETE FROM split_roads USING roads
WHERE ST_Equals(split_roads.geom, roads.geom)
যাইহোক, এই পদ্ধতির সমস্ত অনুলিপি জ্যামিতিগুলি মুছে ফেলবে না (যদিও এটি তাদের কয়েকটি সরিয়ে দেয়)। মুছে ফেলার (বা সামগ্রিক) জন্য আরও ভাল পন্থা রয়েছে যাতে আমার কেবল কোনও টেবিলে বিভক্ত জ্যামিতি থাকে?
.geom
আপনি কোনটির কথা উল্লেখ করছেন? এটি স্পট করতে পারে না!
ERROR: function st_geomfromewkb(geometry_dump) does not exist LINE 4: ST_GeomFromEWKB((ST_Dump(ST_Split(g.geom, blade.geom))))... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.