如何使用PostGIS将交叉路口划分为城市街道?

时间:2014-09-09 20:51:22

标签: graph gis geospatial openstreetmap postgis

我想使用PostGIS来交叉分割OpenStreetMap街道。我试图将一个城市的街道变成一个图形结构,其中的节点由道路绘制的交叉点和边缘构成。

我目前正在使用ST_Intersection命令开辟了通往其组件所有可能排列的道路。

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

intersections

1 个答案:

答案 0 :(得分:7)

有两种选择 -

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

2)使用此SQL代码,其中dc_streets_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);