Postgis ST_Split 没有按所有点分割道路

Postgis ST_Split not splitting roads by all points

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

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

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

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 版,所以我按多点拆分不是问题..

如有任何帮助,我们将不胜感激!

如评论所述,某些功能(如所有叠加运算符和 ST_Split 需要精确点头才能按预期执行。这意味着令人讨厌的几何叠加的浮点差异将使来自不同几何的顶点彼此非常接近(在 <1e-12 的数量级),但不精确。

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