Как разделить улицы города на перекрестки с помощью PostGIS?
Я хочу использовать PostGIS для разбивки улиц OpenStreetMap по пересечениям. Я пытаюсь поместить улицы города в графовую структуру, с узлами, образованными пересечениями и ребрами, нарисованными дорогами.
В настоящее время я использую команду ST_Intersection, которая разбивает дорогу на все возможные перестановки ее компонентов.
Для дороги с тремя пересечениями, например (вторая горизонтальная линия сверху снизу), я хочу четыре части разделенной дороги, но вместо этого я соберите все возможные комбинации дороги длиной в три квартала, два квартала и один квартал. Как мне просто разделить все дороги на отдельные кварталы?
1 ответ:
Для этого есть два варианта -
1) Используйте pgRouting , который учитывает такие вещи, как вертикальные различия между дорогами (например, туннели и эстакады)
2) Используйте этот SQL-код, где
dc_streets_subset
- Данные OSM для DC.--Get a list of all intersections in city CREATE TABLE dc_intersections AS SELECT DISTINCT (ST_DUMP(ST_INTERSECTION(a.geom, b.geom))).geom AS ix FROM dc_streets_subset a INNER JOIN dc_streets_subset b ON ST_INTERSECTS(a.geom,b.geom) WHERE geometrytype(st_intersection(a.geom,b.geom)) = 'POINT'; CREATE INDEX ON dc_intersections USING gist(ix); CREATE TABLE dc_union AS SELECT ST_UNION(geom) as geom FROM dc_streets_subset; CREATE INDEX ON dc_union USING gist(geom); CREATE TABLE dc_segments AS SELECT (ST_DUMP(ST_SPLIT(a.geom,b.ix))).geom FROM dc_union a INNER JOIN dc_intersections b ON ST_INTERSECTS(a.geom, b.ix);