मैं OpenStreetMap डेटा का उपयोग करके pgRout के साथ उपयोग के लिए एक सड़क-नेटवर्क बनाना चाहता हूं। मैंने GeoFabrik से एक Postgres तालिका (PostGIS सक्षम के साथ) में एक आकृतिफल लोड किया। हालाँकि, मुझे एक समस्या यह थी कि सड़कें हमेशा चौराहों पर समाप्त नहीं होती हैं, इसलिए मैंने उन सभी को हर चौराहे या क्रॉसिंग पर विभाजित करने का निर्णय लिया।
उन सभी अंतर्संबंधों की पहचान करने के लिए जहां सड़कें पार हुईं या खंडित हुईं, मैंने निम्नलिखित का उपयोग किया 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.