【问题标题】:How do I divide city streets by intersection using PostGIS?如何使用 PostGIS 按十字路口划分城市街道?
【发布时间】:2014-11-03 09:21:23
【问题描述】:

我想使用 PostGIS 按十字路口划分 OpenStreetMap 街道。我正在尝试将城市的街道放入图形结构中,节点由交叉点构成,边缘由道路绘制。

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

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

【问题讨论】:

标签: graph gis geospatial openstreetmap postgis


【解决方案1】:

有两种选择-

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);

【讨论】:

  • 根据具体情况,您可能必须在拆分之前使用 ST_Snap 将点捕捉到线。
猜你喜欢
  • 2017-08-02
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多