У меня есть таблица, содержащая уличную сеть Чикаго, и у меня также есть таблица преступлений, совершенных в Чикаго. Я пытаюсь создать кластеры k-средств для совершения преступлений, назначив их центру кластера, который является самым коротким расстоянием.Postgis ST_Split не раскалывает дороги по всем пунктам
Во-первых, я применил все преступления на ближайшей дороге. Все идет нормально. Теперь то, что я пытаюсь сделать, - это разделить каждую дорогу на все точки преступления, которые попадают на нее, чтобы затем создать сетевую топологию, используя 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 для привязки точек vertecies на дорогах, так что они чисто расщепляются. –
Вы правы, похоже, что так работает. Я предположил, что интерполировать преступления было бы достаточно, используя ST_Closest_Point. Спасибо! – Ponsietta