1

我有一张包含芝加哥街道网络的表格,还有一张在芝加哥犯下罪行的表格。我正在尝试通过将它们分配给距离最短道路距离的集群中心来为犯罪创建 k-means 集群。

首先,我将所有犯罪插值到最近的道路上。到目前为止,一切都很好。现在我要做的是将每条道路上的所有犯罪点分开,这样我就可以使用 pgrouting 和从一个犯罪地点到另一个犯罪地点的路线来创建网络拓扑。

问题是,ST_Split 函数似乎没有分割大部分道路,我不知道为什么。鉴于我有一百万个犯罪点,道路应该被分成大量的路段,但我只得到比原始街道网络表中的多一千行。这是我正在使用的命令:

CREATE TABLE algorithms.crime_network AS 
    SELECT road.id AS road_id, (ST_Dump(ST_Split(road.geom, road.crime_points))).geom
    FROM (SELECT r.geom as geom, r.gid id, ST_Multi(ST_Collect(c.geom)) AS crime_points FROM public.transportation r INNER JOIN chicago_data.interpolated_crimes c ON c.road_id = r.gid GROUP BY r.gid) AS road;

我使用的是 Postgis 2.2.2 版,所以我被多点分割的事实不是问题..

任何帮助,将不胜感激!

4

1 回答 1

1

正如所评论的,像所有覆盖运算符和 ST_Split 之类的某些功能需要精确的节点才能按预期执行。这意味着几何叠加的烦人浮点差异将使来自不同几何的顶点彼此非常接近(大约<1e-12),但不精确。

使用 ST_Snap 获得一个几何体在另一个几何体上的精确节点,这将有助于 ST_Split 等函数按预期运行。

于 2016-04-28T21:58:04.263 回答