我想使用PostGIS来交叉分割OpenStreetMap街道。我试图将一个城市的街道变成一个图形结构,其中的节点由道路绘制的交叉点和边缘构成。
我目前正在使用ST_Intersection命令开辟了通往其组件所有可能排列的道路。
对于一个有三个交叉路口的道路(例如,从下面开始的第二条水平线),我想要四条分开的道路,但我得到的道路的每一个可能的组合,长度为三个街区,两个街区,一个街区。我如何简单地将所有道路划分为每个单独的区块?
答案 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);