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:
- výběr cyklo a pěších tras v Praze 6
- převod z multiprvků na singleprvky
- 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;