【发布时间】:2016-04-26 13:46:33
【问题描述】:
我有一张包含芝加哥街道网络的表格,还有一张在芝加哥犯下罪行的表格。我正在尝试通过将它们分配到距离最短的道路距离的集群中心来为犯罪创建 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,所以我按多点分割的事实不是问题..
任何帮助将不胜感激!
【问题讨论】:
-
也许可以使用 ST_Snap 捕捉道路上的点顶点,以便它们干净地分裂。
-
你说得对,它似乎是这样工作的。我认为使用 ST_Closest_Point 对犯罪进行插值就足够了。谢谢!
标签: postgresql postgis k-means postgresql-9.3 pgrouting