我想使用OpenStreetMap数据创建一个用于pgRouting的道路网络。我从GeoFabrik将shapefile加载到Postgres表中(启用了PostGIS)。但是,我遇到的一个问题是道路并不总是在十字路口处终止,因此我决定在每个十字路口或十字路口将其全部拆分。
要找出所有地方的道路交叉或相交我用下面的interesections 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.