OpenStreetMapデータを使用してpgRoutingで使用する道路ネットワークを作成したいと思います。GeoFabrikからシェープファイルをPostgresテーブルにロードしました(PostGISを有効にした状態)。しかし、私が抱えていた問題の1つは、道路が常に交差点で終わらないということでした。そのため、すべての交差点または交差点で道路をすべて分割することにしました。
道路が交差または交差するすべての交差点を特定するために、私は次のものを使用しました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.