12. PostGIS - síťové analýzy

Přednáška

Cvičení

Data:

Tip

Import dat z příkazové řádky:

ogr2ogr -f PostgreSQL -overwrite -a_srs EPSG:5514 -nln cyklotrasy -nlt PROMOTE_TO_MULTI -lco GEOMETRY_NAME=geom "PG:dbname=uzpr host=gislab.fsv.cvut.cz user=xxx password=xxx" /vsizip/DOP_CUR_DOP_CYKLOTRASY_L.zip

ogr2ogr -f PostgreSQL -overwrite -a_srs EPSG:5514 -nln pesitrasy -nlt PROMOTE_TO_MULTI -lco GEOMETRY_NAME=geom "PG:dbname=uzpr host=gislab.fsv.cvut.cz user=xxx password=xxx" /vsizip/DOP_CUR_DOP_PESITRASY_L.zip

Předzpracování dat:

  1. výběr cyklo a pěších tras v Praze 6
  2. převod z multiprvků na singleprvky
  3. vytvoření topologie sítě
CREATE TABLE praha6 AS
SELECT geom FROM ruian_praha.momc WHERE nazev = 'Praha 6';

-- cyklotrasy
CREATE TABLE cyklo6 AS
SELECT (st_dump(geom)).geom AS geom FROM
(
 SELECT st_intersection(c.geom, p6.geom) AS geom
 FROM cyklotrasy AS c
 JOIN praha6 AS p6
 ON st_intersects(c.geom, p6.geom)
) as foo;

ALTER TABLE cyklo6 ADD COLUMN gid serial;
ALTER TABLE cyklo6 ADD PRIMARY KEY (gid);
CREATE INDEX ON cyklo6 USING gist (geom);

ALTER TABLE cyklo6 ADD COLUMN source integer;
ALTER TABLE cyklo6 ADD COLUMN target integer;

-- https://docs.pgrouting.org/latest/en/pgr_createTopology.html
SELECT pgr_createTopology('cyklo6', 0.1, 'geom', 'gid');

CREATE INDEX ON cyklo6 (source);
CREATE INDEX ON cyklo6 (target);

SELECT * FROM cyklo6 LIMIT 5;
SELECT * FROM cyklo6_vertices_pgr LIMIT 5;

-- pěší trasy
CREATE TABLE pesi6 (
 gid serial, source integer, target integer, geom geometry(linestring, 5514)
);

INSERT INTO pesi6 (geom)
SELECT (st_dump(geom)).geom AS geom FROM
(
 SELECT geom FROM
 (
  SELECT st_intersection(c.geom, p6.geom) AS geom
  FROM pesitrasy AS c
  JOIN praha6 as p6
  ON c.geom && p6.geom
 ) AS foo1
 WHERE NOT st_isempty(geom)
) AS foo2;

CREATE INDEX ON pesi6 USING gist (geom);

SELECT pgr_createTopology('pesi6', 0.1, 'geom', 'gid');

CREATE INDEX ON pesi6 (source);
CREATE INDEX ON pesi6 (target);

SELECT * FROM pesi6 LIMIT 5;
SELECT * FROM pesi6_vertices_pgr LIMIT 5;

Další materiály