ar_redadeg/scripts/create_tables.sql

273 lines
8.2 KiB
MySQL
Raw Normal View History

2019-01-01 19:52:23 +00:00
2019-03-17 09:19:08 +00:00
/*
==========================================================================
phase 1 : récupération des données depuis umap et calcul des PK auto
==========================================================================
*/
-- voir la documentation pour la création de la base de données
2019-03-06 19:46:07 +00:00
-- on est obligé de créer des tables en Lambert 93 (EPSG:2154) (ou une CC conforme)
2019-03-17 09:19:08 +00:00
-- car même si les tables originales sont déclarées en 3857
2019-01-01 19:52:23 +00:00
-- en fait les géoémtries sont en 4326
-- donc les calculs de longueur sont faux
2019-03-06 19:46:07 +00:00
-- au moins en créant une table en dur en Lambert 93 / 2154 on est sûr des longueurs
2019-01-01 19:52:23 +00:00
2019-01-13 16:41:56 +00:00
-- la table secteur gère les grands découpage de gestion
2019-03-06 19:46:07 +00:00
DROP TABLE IF EXISTS secteur CASCADE ;
2019-01-13 16:41:56 +00:00
CREATE TABLE secteur
(
id integer,
nom_br text,
nom_fr text
);
ALTER TABLE secteur OWNER to redadeg;
-- et on insert ces données stables
TRUNCATE TABLE secteur ;
INSERT INTO secteur VALUES (1,'Karaez -> Rostren','Carhaix -> Rostrenen');
INSERT INTO secteur VALUES (2,'Rostren -> Plounevez-Moedeg','Rostrenen -> Plounevez-Moedec');
INSERT INTO secteur VALUES (3,'Plounevez-Moedeg -> Montroulez','Plounevez-Moedec -> Morlaix');
INSERT INTO secteur VALUES (4,'Montroulez -> Ar Faou','Morlaix -> Châteauneuf-du-Faou');
INSERT INTO secteur VALUES (5,'Ar Faou -> Kemperle','Châteauneuf-du-Faou -> Quimperlé');
INSERT INTO secteur VALUES (6,'Kemperle -> Redon','Quimperlé -> Redon');
INSERT INTO secteur VALUES (7,'Redon -> Soulvach','Redon -> Soulvach');
INSERT INTO secteur VALUES (8,'Soulvach -> Roazhon','Soulvach -> Rennes');
INSERT INTO secteur VALUES (9,'Roazhon -> Sant-Brieg','Rennes -> Saint-Brieuc');
INSERT INTO secteur VALUES (10,'Sant-Brieg -> Gwengamp','Saint-Brieuc -> Gwengamp');
INSERT INTO secteur VALUES (999,'test','test');
2019-03-06 19:46:07 +00:00
DROP TABLE IF EXISTS phase_1_trace CASCADE ;
CREATE TABLE phase_1_trace
2019-01-01 19:52:23 +00:00
(
ogc_fid integer,
2019-03-06 19:46:07 +00:00
secteur_id int,
2019-01-03 21:19:25 +00:00
ordre int,
longueur numeric,
2019-03-06 19:46:07 +00:00
the_geom geometry(LineString,2154),
CONSTRAINT phase_1_trace_pkey PRIMARY KEY (ogc_fid),
2019-01-01 19:52:23 +00:00
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text),
2019-03-06 19:46:07 +00:00
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
2019-01-01 19:52:23 +00:00
);
2019-03-06 19:46:07 +00:00
DROP TABLE IF EXISTS phase_1_pk_vip CASCADE ;
CREATE TABLE phase_1_pk_vip
2019-01-01 19:52:23 +00:00
(
ogc_fid integer,
name text,
description text,
2019-03-06 19:46:07 +00:00
the_geom geometry(Point,2154),
CONSTRAINT phase_1_pk_vip_pkey PRIMARY KEY (ogc_fid),
2019-01-01 19:52:23 +00:00
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'POINT'::text),
2019-03-06 19:46:07 +00:00
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
2019-01-01 19:52:23 +00:00
);
-- on crée aussi une version correcte en 4326 pour export vers umap
2019-03-06 19:46:07 +00:00
DROP TABLE IF EXISTS phase_1_trace_4326 ;
CREATE TABLE phase_1_trace_4326
(
ogc_fid integer,
name text, -- = section_nom
secteur_id int,
ordre int,
longueur numeric,
the_geom geometry(LineString,4326),
CONSTRAINT phase_1_trace_4326_pkey PRIMARY KEY (ogc_fid),
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
);
2019-01-01 19:52:23 +00:00
-- table des tronçons créés à partir des longs tracés
2019-03-06 19:46:07 +00:00
DROP TABLE IF EXISTS phase_1_trace_troncons CASCADE ;
CREATE TABLE phase_1_trace_troncons
2019-01-01 19:52:23 +00:00
(
uid bigint,
2019-03-06 19:46:07 +00:00
secteur_id int,
2019-01-13 16:11:59 +00:00
ordre bigint,
2019-01-01 19:52:23 +00:00
km bigint,
km_reel bigint,
longueur integer,
2019-03-06 19:46:07 +00:00
the_geom geometry(LineString,2154),
CONSTRAINT phase_1_trace_troncons_pkey PRIMARY KEY (uid),
2019-01-01 19:52:23 +00:00
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text),
2019-03-06 19:46:07 +00:00
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
2019-01-01 19:52:23 +00:00
);
2019-03-06 19:46:07 +00:00
ALTER TABLE phase_1_trace OWNER to redadeg;
2019-01-19 11:15:23 +00:00
ALTER TABLE phase_1_trace_4326 OWNER to redadeg;
2019-03-06 19:46:07 +00:00
ALTER TABLE phase_1_pk_vip OWNER to redadeg;
ALTER TABLE phase_1_trace_troncons OWNER to redadeg;
2019-01-13 16:11:59 +00:00
2019-01-01 19:52:23 +00:00
-- table des PK auto en fin de tronçon
2019-03-06 19:46:07 +00:00
/*DROP TABLE phase_1_pk_auto ;
CREATE TABLE phase_1_pk_auto
2019-01-01 19:52:23 +00:00
(
uid bigint,
secteur character varying(25),
km bigint,
km_reel bigint,
2019-03-06 19:46:07 +00:00
the_geom geometry(Point,2154),
CONSTRAINT phase_1_pk_auto_pkey PRIMARY KEY (uid),
2019-01-01 19:52:23 +00:00
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'POINT'::text),
2019-03-06 19:46:07 +00:00
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
2019-01-01 19:52:23 +00:00
);*/
-- vue des PK auto en fin de tronçon
2019-03-06 19:46:07 +00:00
DROP VIEW IF EXISTS phase_1_pk_auto ;
CREATE VIEW phase_1_pk_auto AS
2019-01-01 19:52:23 +00:00
SELECT
2019-03-06 20:28:35 +00:00
uid, secteur_id, ordre, km, km_reel,
2019-03-06 19:46:07 +00:00
ST_Line_Interpolate_Point(the_geom, 1)::geometry(Point, 2154) AS the_geom
FROM phase_1_trace_troncons
2019-03-06 20:28:35 +00:00
ORDER BY secteur_id ASC, ordre ASC, km ASC ;
2019-01-01 19:52:23 +00:00
-- la même mais en 4326 pour export
DROP VIEW IF EXISTS phase_1_pk_auto_4326 ;
2019-01-01 19:52:23 +00:00
CREATE VIEW phase_1_pk_auto_4326 AS
SELECT
2019-03-06 20:28:35 +00:00
uid, secteur_id, ordre, km, km_reel,
ST_Transform(the_geom,4326)::geometry(Point, 4326) AS the_geom
2019-03-06 19:46:07 +00:00
FROM phase_1_pk_auto
2019-03-06 20:28:35 +00:00
ORDER BY secteur_id ASC, ordre ASC, km ASC ;
2019-03-06 19:46:07 +00:00
ALTER TABLE phase_1_pk_auto OWNER to redadeg;
2019-01-13 16:11:59 +00:00
ALTER TABLE phase_1_pk_auto_4326 OWNER to redadeg;
2019-01-01 19:52:23 +00:00
2019-03-04 22:49:45 +00:00
-- vue tableau de bord de synthèse
2019-03-06 20:51:37 +00:00
DROP VIEW IF EXISTS phase_1_tdb ;
CREATE VIEW phase_1_tdb AS
2019-03-04 22:49:45 +00:00
SELECT
2019-03-06 20:51:37 +00:00
t.secteur_id, s.nom_br, s.nom_fr,
2019-03-06 21:13:14 +00:00
TRUNC( SUM(t.longueur)::numeric , 3) AS longueur_km,
ROUND( SUM(t.longueur)::numeric ) AS longueur_km_arrondi
2019-03-06 20:51:37 +00:00
FROM phase_1_trace t JOIN secteur s ON t.secteur_id = s.id
GROUP BY secteur_id, nom_br, nom_fr
2019-03-04 22:49:45 +00:00
ORDER BY secteur_id ;
2019-01-01 19:52:23 +00:00
2019-03-17 09:19:08 +00:00
/*
==========================================================================
phase 2 : calcul d'itinéraires en appui du réseau routier OSM
==========================================================================
*/
2019-03-17 18:07:55 +00:00
-- la table qui contient les lignes des routes venant de OSM
2019-03-17 09:19:08 +00:00
DROP TABLE IF EXISTS osm_roads ;
CREATE TABLE osm_roads
(
id bigint,
2019-03-17 09:19:08 +00:00
osm_id bigint,
highway text,
type text,
oneway text,
ref text,
name_fr text,
name_br text,
the_geom geometry,
CONSTRAINT osm_roads_pkey PRIMARY KEY (id),
2019-03-17 09:19:08 +00:00
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text OR geometrytype(the_geom) = 'MULTILINESTRING'::text),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
);
2019-03-17 18:07:55 +00:00
-- la table en version routable
DROP TABLE IF EXISTS osm_roads_pgr ;
CREATE TABLE osm_roads_pgr
(
id bigint,
osm_id bigint,
highway text,
type text,
oneway text,
ref text,
name_fr text,
name_br text,
source bigint,
target bigint,
2019-03-28 17:53:10 +00:00
cost double precision,
reverse_cost double precision,
2019-03-17 18:07:55 +00:00
the_geom geometry,
CONSTRAINT osm_roads_pgr_pkey PRIMARY KEY (id),
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text OR geometrytype(the_geom) = 'MULTILINESTRING'::text),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
);
CREATE INDEX osm_roads_pgr_source_idx ON osm_roads_pgr (source);
CREATE INDEX osm_roads_pgr_target_idx ON osm_roads_pgr (target);
-- dans la base redadeg on chargera la couche osm_roads qui a été calculée
-- à partir de données OSM
-- 1. création d'un schéma qui va accueillir le réseau topologique de la couche osm_roads
SELECT topology.CreateTopology('osm_roads_topo', 2154);
2019-03-17 09:19:08 +00:00
2019-04-07 09:12:51 +00:00
-- la table qui va recevoir le résultat du calcul d'itinéraire
DROP TABLE IF EXISTS phase_2_trace_pgr ;
CREATE TABLE phase_2_trace_pgr
(
-- info de routage
id bigint,
path_seq bigint,
node bigint,
cost double precision,
agg_cost double precision,
-- info OSM
osm_id bigint,
highway text,
type text,
oneway text,
ref text,
name_fr text,
name_br text,
the_geom geometry,
CONSTRAINT phase_2_trace_pkey PRIMARY KEY (id),
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text OR geometrytype(the_geom) = 'MULTILINESTRING'::text),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
);
2019-03-17 09:19:08 +00:00
2019-04-07 09:12:51 +00:00
-- la table qui va contenir des tronçons de x m
DROP TABLE IF EXISTS phase_2_trace_troncons ;
CREATE TABLE phase_2_trace_troncons
(
uid bigint,
secteur_id int,
ordre bigint,
km bigint,
km_reel bigint,
longueur integer,
-- info OSM
osm_id bigint,
highway text,
type text,
oneway text,
ref text,
name_fr text,
name_br text,
the_geom geometry,
CONSTRAINT phase_2_trace_troncons_pkey PRIMARY KEY (uid),
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'LINESTRING'::text),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
);
2019-03-17 09:19:08 +00:00