Graph 如何使用PostGIS按交叉口划分城市街道?

Graph 如何使用PostGIS按交叉口划分城市街道?,graph,gis,geospatial,openstreetmap,postgis,Graph,Gis,Geospatial,Openstreetmap,Postgis,我想使用PostGIS将OpenStreetMap街道按交叉点分开。我试图把一个城市的街道放到一个图形结构中,节点由交叉点构成,边由道路绘制 我目前正在使用命令将一条道路分割成所有可能的组件排列 例如,对于一条有三个交叉点的道路(从顶部到下方的第二条水平线),我想要四条分开的道路,但我得到的是三个街区、两个街区和一个街区长度的所有可能的道路组合。我如何简单地将所有道路划分为每个街区 这有两种选择- 1) 使用,考虑道路之间的垂直差异(如隧道和立交桥) 2) 使用此SQL代码,其中dc\u str

我想使用PostGIS将OpenStreetMap街道按交叉点分开。我试图把一个城市的街道放到一个图形结构中,节点由交叉点构成,边由道路绘制

我目前正在使用命令将一条道路分割成所有可能的组件排列

例如,对于一条有三个交叉点的道路(从顶部到下方的第二条水平线),我想要四条分开的道路,但我得到的是三个街区、两个街区和一个街区长度的所有可能的道路组合。我如何简单地将所有道路划分为每个街区


这有两种选择-

1) 使用,考虑道路之间的垂直差异(如隧道和立交桥)

2) 使用此SQL代码,其中
dc\u streets\u subset
是dc的OSM数据

--Get a list of all intersections in city
CREATE TABLE dc_intersections AS 
SELECT DISTINCT (ST_DUMP(ST_INTERSECTION(a.geom, b.geom))).geom AS ix 
FROM dc_streets_subset a 
INNER JOIN dc_streets_subset b 
ON ST_INTERSECTS(a.geom,b.geom)
WHERE geometrytype(st_intersection(a.geom,b.geom)) = 'POINT';

CREATE INDEX ON dc_intersections USING gist(ix);

CREATE TABLE dc_union AS 
SELECT ST_UNION(geom) as geom
FROM dc_streets_subset;

CREATE INDEX ON dc_union USING gist(geom);

CREATE TABLE dc_segments AS
SELECT (ST_DUMP(ST_SPLIT(a.geom,b.ix))).geom
FROM dc_union a
INNER JOIN dc_intersections b
ON ST_INTERSECTS(a.geom, b.ix);
这是你想要的吗?