এখানে জেনেরিক সলিউশন, আপনি পোস্টজিআইএস বা অন্য কোনও ওজিসি-অনুগত সফ্টওয়্যার দিয়ে ইমপিমেমেন্ট করতে পারেন।
দ্রষ্টব্য: যেমনটি আমি আগেই বলেছি , ফসস এবং জিআইএস-এর একটি মূল ধারণাটি প্রমিতকরণ : ওজিসির মতো সেরা সমাধানগুলি মান গ্রহণ করে ।
আপনার সমস্যাটি "সিউডো নোডগুলি সন্ধান করা" ... তবে আমি মনে করি এটি আরও কিছুটা, "সিউডোহীন নোডগুলি সন্ধান করুন এবং সিউডো নোডের লাইনগুলিতে যোগ দিন"। আমার সমাধান উভয় জন্য ব্যবহার করা যেতে পারে।
ওজিসি স্ট্যান্ডার্ডগুলি অফার করে:
ST_ সীমানা (জিম) : লাইনের নোডগুলি সনাক্ত করতে
ST_Dump (geom) : প্রতিটি একক নোডকে এসকিউএল টেবিল রেকর্ডে রাখার জন্য।
পরিবর্তন সহনশীলতার জন্য ST_DWithin, ST_Equals, ST_SnapToGrid, ST_Snap ব্যবহার করা যেতে পারে। আমি ST_DWithin ব্যবহার করছি।
আমরা ধরে নিতে পারি যে আপনার মূল সমস্যাটি এই বিষয়গুলি এবং বৈশিষ্ট্যগুলির সাথে নির্দিষ্ট করা যেতে পারে,
লাইনস্ট্রিং জ্যামিতির দ্বারা প্রতিনিধিত্ব করা কেবলমাত্র রেখাংশ (একটি টেবিলের লিনিগমেন্টের ) রয়েছে ... আমি বহুটির সাথে পরীক্ষা করিনি, যদি আপনার জ্যামিতি টাইপ = মাল্টিপোয়েন্ট থাকে তবে আপনি ST_Dump এবং ST_LineMerge দিয়ে মাল্টলাইনগুলিকে বিভক্ত এবং কাস্ট করতে পারেন;
প্রতিটি লাইনে সেগমেন্ট একটি (জ্যামিতি আইডি) আছে gid এবং (রঙ আইডি) idline ।
সুতরাং, প্রথম পদক্ষেপটি নোডগুলি পাওয়া যা লাইনগুলিতে যোগদান থেকে আসে,
CREATE TABLE cache_bounds AS
SELECT gid as gid_seg, (ST_Dump(ST_Boundary(the_geom))).geom AS the_geom,
gid as color
-- if you not have something for "color label" of lines, use gid.
FROM linesegment;
ALTER TABLE cache_bounds ADD column gid serial PRIMARY KEY;
CREATE TABLE cache_joinnodes AS
-- Use your TOLERANCE instead "1" at ST_DWithin and ST_Buffer.
SELECT *, array_length(colors,1) as ncolors FROM (
SELECT gid, array_distinct(array_cat(a_colors,b_colors)) as colors, the_geom FROM (
SELECT
a.gid, array_agg(a.color) as a_colors, array_agg(b.color) as b_colors
, st_buffer(a.the_geom,1) as the_geom -- any one to represent the join point.
FROM cache_bounds a, cache_bounds b
WHERE a.gid>b.gid AND ST_DWithin(a.the_geom,b.the_geom,1)
-- use ST_equals(a.the_geom,b.the_geom) if no tolerance.
GROUP BY a.gid, a.the_geom
) as t
) as t2;
দ্রষ্টব্য: ক্যাশে ব্যবহার করা হচ্ছে কারণ তারা দেখার চেয়ে দ্রুত। সিপিইউ সময় যাচাই করতে "এক্সপ্লেইন নির্বাচন ..." ব্যবহার করুন, এটি একটি দীর্ঘ সময় নিতে পারে।
এখানে চক্র এবং অবিচ্ছিন্ন (একই বর্ণ) লাইনগুলি ncolors=1
পয়েন্ট হিসাবে চিহ্নিত করা হয় এবং সিউডো নোডগুলি ncolors=2
পয়েন্ট হিসাবে চিহ্নিত করা হয়, সুতরাং, আপনার সেই পয়েন্টগুলির সাথে একটি স্তর রয়েছে।
আপনার "ভাল নোডস" এর সারণীটি মূল "বাউন্ডিং পয়েন্টগুলি" এবং "সিউডো নোডগুলি" ছাড়াই।
CREATE VIEW vw_joinnodes_full AS
SELECT b.*, j.ncolors
FROM cache_joinnodes j INNER JOIN cache_bounds b
ON j.gid=b.gid;
CREATE TABLE cache_good_nodes AS
SELECT *
FROM vw_joinnodes_full
WHERE ncolors=1 OR ncolors>2;
-- IF NEED ... CREATE VIEW vw_correct_linesegment AS ...