OpenStreetMap 데이터를 사용하여 pgRouting과 함께 사용할 도로 네트워크를 만들고 싶습니다. GeoFabrik의 shapefile을 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.