Ich möchte ein Straßennetz zur Verwendung mit pgRouting unter Verwendung von OpenStreetMap-Daten erstellen. Ich habe ein Shapefile von GeoFabrik in eine Postgres-Tabelle geladen (mit aktiviertem PostGIS). Ein Problem, das ich hatte, war jedoch, dass die Straßen nicht immer an Kreuzungen enden. Deshalb habe ich beschlossen, sie alle an jeder Kreuzung oder Kreuzung aufzuteilen.
Um alle Kreuzungen zu identifizieren, an denen sich Straßen kreuzten oder kreuzten, habe ich Folgendes verwendet SQL
(ähnlich einer vorherigen Frage):
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);
Ich möchte jetzt die Straßen mit diesen Punkten teilen. Ich habe den folgenden Ansatz verwendet:
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);
Das Problem bei diesem geteilten Ansatz besteht darin, dass die gesamte Straßenlänge zusätzlich zu allen geteilten Teilen erhalten bleibt. Um diese nicht geteilten Straßengeometrien zu entfernen, die enthalten waren, habe ich die ST_Equals()
Funktion verwendet, um sie zu identifizieren und zu löschen:
DELETE FROM split_roads USING roads
WHERE ST_Equals(split_roads.geom, roads.geom)
Bei diesem Ansatz werden jedoch nicht alle ursprünglichen ungeteilten Geometrien entfernt (obwohl einige davon entfernt werden). Gibt es einen besseren Ansatz zum Löschen (oder insgesamt), sodass ich nur die geteilten Geometrien in einer Tabelle habe?
.geom
beziehen Sie sich? Kann es nicht erkennen!
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.