2016-04-26 103 views
0

我有一个表包含芝加哥的街道网络,我也有一个在芝加哥犯下的罪行表。我试图通过将它们分配到距离最短路程的聚类中心来为犯罪创建k-means聚类。Postgis ST_Split不分道路所有点

首先,我把所有的罪行插入到最近的道路上。到现在为止还挺好。 现在我想要做的就是将所有犯罪点分开,然后我可以使用pgrouting创建一个网络拓扑并从一个犯罪地点路由到另一个犯罪地点。

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

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,使我对multipoints分裂是没有问题的事实..

任何帮助,将不胜感激!

+0

也许使用ST_Snap捕捉道路上的点垂直线,以便它们干净地分割。 –

+0

你说得对,它似乎以这种方式工作。我认为使用ST_Closest_Point插入犯罪就足够了。谢谢! – Ponsietta

回答

0

正如所评论的,像所有覆盖运算符和ST_Split这样的函数都需要精确的编码才能按预期执行。这意味着烦人的几何图形叠加层的浮点差异将具有来自彼此非常接近的不同几何图形的顶点(大约为< 1e-12),但不精确。

使用ST_Snap可以获得另一个几何图形上的精确编码,这将有助于像ST_Split这样的函数按预期工作。

+0

非常感谢回答:) – Ponsietta