OpenStreetMap verilerini kullanarak pgRouting ile kullanmak için bir yol ağı oluşturmak istiyorum. Geogabrik'ten Postgres tablosuna (PostGIS etkinken) bir şekil dosyası yükledim. Ancak, yaşadığım bir sorun, yolların her zaman kavşaklarda bitmemesiydi, bu yüzden hepsini her kavşakta veya kavşakta ayırmaya karar verdim.
Yolların kesiştiği veya kesiştiği tüm kesişmeleri tanımlamak için aşağıdakileri kullandım SQL
( önceki soruya benzer ):
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);
Şimdi bu noktaları kullanarak yolları bölmek istiyorum. Aşağıdaki yaklaşımı kullandım:
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);
Bu bölünmüş yaklaşımın sorunu, tüm bölünmüş parçalara ek olarak tam yol uzunluğunun kalmasıdır. İçerilen bu bölünmemiş yol geometrilerini kaldırmak ST_Equals()
için onları tanımlamak ve silmek için işlevi kullandım :
DELETE FROM split_roads USING roads
WHERE ST_Equals(split_roads.geom, roads.geom)
Bununla birlikte, bu yaklaşım tüm orijinal bölünmemiş geometrileri kaldırmaz (bazılarını kaldırmasına rağmen). Bir tabloda yalnızca bölünmüş geometrilere sahip olmam için silme (veya genel) için daha iyi bir yaklaşım var mı?
.geom
ediyorsun? Tespit edemiyorum!
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.