couche phase_2_trace_secteur
This commit is contained in:
parent
007b4cf784
commit
c437d84829
|
@ -284,6 +284,34 @@ ALTER TABLE phase_2_trace_pgr_4326 OWNER to redadeg;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- couche qui contient 1 ligne par secteur
|
||||||
|
DROP TABLE IF EXISTS phase_2_trace_secteur CASCADE ;
|
||||||
|
CREATE TABLE phase_2_trace_secteur
|
||||||
|
(
|
||||||
|
secteur_id int,
|
||||||
|
nom_fr text,
|
||||||
|
nom_br text,
|
||||||
|
longueur int,
|
||||||
|
longueur_km numeric,
|
||||||
|
the_geom geometry,
|
||||||
|
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
|
||||||
|
);
|
||||||
|
ALTER TABLE phase_2_trace_secteur OWNER to redadeg;
|
||||||
|
|
||||||
|
-- une vue en 4326 pour export
|
||||||
|
DROP VIEW IF EXISTS phase_2_trace_secteur_4326 ;
|
||||||
|
CREATE VIEW phase_2_trace_secteur_4326 AS
|
||||||
|
SELECT
|
||||||
|
secteur_id, nom_fr, nom_br,
|
||||||
|
longueur, longueur_km,
|
||||||
|
ST_Transform(the_geom,4326)::geometry(MultiLineString, 4326) AS the_geom
|
||||||
|
FROM phase_2_trace_secteur ;
|
||||||
|
ALTER TABLE phase_2_trace_secteur_4326 OWNER to redadeg;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- la table qui va contenir des tronçons de x m
|
-- la table qui va contenir des tronçons de x m
|
||||||
DROP TABLE IF EXISTS phase_2_trace_troncons ;
|
DROP TABLE IF EXISTS phase_2_trace_troncons ;
|
||||||
|
|
|
@ -1,105 +1,33 @@
|
||||||
/*
|
/*
|
||||||
==========================================================================
|
==========================================================================
|
||||||
|
|
||||||
phase 2 : calcul d'itinéraires en appui du réseau routier OSM
|
phase 2 : création de différentes données à partir du tracé routé
|
||||||
|
|
||||||
==========================================================================
|
==========================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
-- dans la base redadeg on a chargé la couche osm_roads qui a été calculée
|
-- on prend le tracé routé et on fait une version simple
|
||||||
-- à partir de données OSM
|
-- 1 ligne par secteur
|
||||||
|
TRUNCATE TABLE phase_2_trace_secteur ;
|
||||||
|
INSERT INTO phase_2_trace_secteur
|
||||||
|
|
||||||
-- 2. ajout d'un nouvel attribut sur la table osm_roads
|
|
||||||
-- normalement il existe déjà mais au cas où on a rechargé un nouveau réseau routier
|
|
||||||
SELECT topology.AddTopoGeometryColumn('osm_roads_topo', 'public', 'osm_roads', 'topo_geom', 'LINESTRING');
|
|
||||||
|
|
||||||
|
|
||||||
-- 3. on calcule le graphe topologique
|
|
||||||
-- en remplissant le nouvel attribut géométrique
|
|
||||||
-- le 1er chiffre est l'identifiant du layer dans la table topology.layer
|
|
||||||
-- le 2e chiffre est la tolérance en mètres
|
|
||||||
UPDATE osm_roads SET topo_geom = topology.toTopoGeom(the_geom, 'osm_roads_topo', 1, 0.00001);
|
|
||||||
-- 1.0 = 18 min
|
|
||||||
-- 0.00001 = 2 min
|
|
||||||
|
|
||||||
-- à ce stade on a un graphe topologique dans le schema osm_roads_topo
|
|
||||||
|
|
||||||
|
|
||||||
-- 4. remplissage de la couche routable depuis la couche d'origine et la topologie
|
|
||||||
-- on commence par vider avant de remplir
|
|
||||||
TRUNCATE TABLE osm_roads_pgr ;
|
|
||||||
--TRUNCATE TABLE osm_roads_pgr_noded ;
|
|
||||||
TRUNCATE TABLE osm_roads_pgr_vertices_pgr ;
|
|
||||||
-- reset des séquences
|
|
||||||
ALTER SEQUENCE osm_roads_pgr_vertices_pgr_id_seq RESTART WITH 1;
|
|
||||||
--ALTER SEQUENCE osm_roads_pgr_noded_id_seq RESTART WITH 1;
|
|
||||||
|
|
||||||
INSERT INTO osm_roads_pgr
|
|
||||||
( SELECT
|
|
||||||
row_number() over() as id,
|
|
||||||
o.osm_id,
|
|
||||||
o.highway,
|
|
||||||
o.type,
|
|
||||||
o.oneway,
|
|
||||||
o.ref,
|
|
||||||
o.name_fr,
|
|
||||||
o.name_br,
|
|
||||||
NULL as source,
|
|
||||||
NULL as target,
|
|
||||||
NULL as cost,
|
|
||||||
NULL as reverse_cost,
|
|
||||||
e.geom as the_geom
|
|
||||||
FROM osm_roads_topo.edge e,
|
|
||||||
osm_roads_topo.relation rel,
|
|
||||||
osm_roads o
|
|
||||||
WHERE e.edge_id = rel.element_id
|
|
||||||
AND rel.topogeo_id = (o.topo_geom).id
|
|
||||||
);
|
|
||||||
|
|
||||||
-- calcul des 2 attributs de coût (= longueur)
|
|
||||||
UPDATE osm_roads_pgr SET cost = st_length(the_geom);
|
|
||||||
UPDATE osm_roads_pgr SET reverse_cost = st_length(the_geom);
|
|
||||||
|
|
||||||
|
|
||||||
-- 5. calcul du graphe routier par pgRouting
|
|
||||||
SELECT pgr_createTopology('osm_roads_pgr', 1.0);
|
|
||||||
-- 35 s
|
|
||||||
|
|
||||||
-- vérification
|
|
||||||
SELECT pgr_analyzegraph('osm_roads_pgr', 1.0);
|
|
||||||
SELECT pgr_nodeNetwork('osm_roads_pgr', 1.0);
|
|
||||||
|
|
||||||
|
|
||||||
-- il ne reste plus qu'à faire des calculs d'itinéraires
|
|
||||||
-- on met le résultat dans une table
|
|
||||||
TRUNCATE TABLE phase_2_trace_pgr ;
|
|
||||||
INSERT INTO phase_2_trace_pgr
|
|
||||||
SELECT
|
SELECT
|
||||||
-- info de routage
|
secteur_id, '', '', 0, 0,
|
||||||
a.seq AS id,
|
ST_UNION(the_geom)
|
||||||
a.path_seq,
|
FROM phase_2_trace_pgr
|
||||||
a.node,
|
GROUP BY secteur_id
|
||||||
a.cost,
|
ORDER BY secteur_id ;
|
||||||
a.agg_cost,
|
|
||||||
-- infos OSM
|
-- mise à jour des attributs
|
||||||
b.osm_id,
|
UPDATE phase_2_trace_secteur a
|
||||||
b.highway,
|
SET
|
||||||
b."type",
|
nom_fr = b.nom_fr,
|
||||||
b.oneway,
|
nom_br = b.nom_br,
|
||||||
b.ref,
|
longueur = TRUNC( ST_Length(the_geom)::numeric , 0),
|
||||||
b.name_fr,
|
longueur_km = TRUNC( ST_Length(the_geom)::numeric / 1000 , 1)
|
||||||
b.name_br,
|
FROM secteur b WHERE a.secteur_id = b.id ;
|
||||||
b.the_geom
|
|
||||||
FROM pgr_dijkstra(
|
|
||||||
'SELECT id, source, target, cost, reverse_cost FROM osm_roads_pgr',
|
|
||||||
7632, 687) as a
|
|
||||||
JOIN osm_roads_pgr b ON a.edge = b.id ;
|
|
||||||
|
|
||||||
|
|
||||||
|
/*TRUNCATE phase_2_trace_troncons ;
|
||||||
TRUNCATE phase_2_trace_troncons ;
|
|
||||||
INSERT INTO phase_2_trace_troncons
|
INSERT INTO phase_2_trace_troncons
|
||||||
SELECT
|
SELECT
|
||||||
row_number() over() as uid,
|
row_number() over() as uid,
|
||||||
|
@ -140,5 +68,5 @@ SET
|
||||||
END),
|
END),
|
||||||
km = uid -- km redadeg
|
km = uid -- km redadeg
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,9 @@ cd /data/www/vhosts/ar-redadeg_openstreetmap_bzh/htdocs/scripts/
|
||||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
# on récupère les couches geojson depuis umap
|
# on récupère les couches geojson depuis umap
|
||||||
|
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
echo " Récupération des fichiers geojson depuis umap"
|
||||||
|
|
||||||
# les couches PK
|
# les couches PK
|
||||||
# PK début - fin de secteur
|
# PK début - fin de secteur
|
||||||
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817220/ > data/phase_2_umap_pk_secteur.geojson
|
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817220/ > data/phase_2_umap_pk_secteur.geojson
|
||||||
|
@ -22,7 +25,9 @@ curl -sS http://umap.openstreetmap.fr/fr/datalayer/817221/ > data/phase_2_umap_
|
||||||
# PK manuels
|
# PK manuels
|
||||||
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817222/ > data/phase_2_umap_pk_manuel.geojson
|
curl -sS http://umap.openstreetmap.fr/fr/datalayer/817222/ > data/phase_2_umap_pk_manuel.geojson
|
||||||
|
|
||||||
echo "Récupération des fichier geojson umap ok"
|
|
||||||
|
echo " fait"
|
||||||
|
echo ""
|
||||||
|
|
||||||
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
# on les charge dans postgis
|
# on les charge dans postgis
|
||||||
|
@ -30,15 +35,25 @@ echo "Récupération des fichier geojson umap ok"
|
||||||
|
|
||||||
# note : les coordonnées sont en 3857 mais la déclaration de la table = 4326
|
# note : les coordonnées sont en 3857 mais la déclaration de la table = 4326
|
||||||
|
|
||||||
|
echo " chargement des fichiers dans la BD"
|
||||||
|
|
||||||
$PSQL -U $DB_USER -d $DB_NAME -c "DROP TABLE IF EXISTS phase_2_pk_secteur_3857 CASCADE;"
|
$PSQL -U $DB_USER -d $DB_NAME -c "DROP TABLE IF EXISTS phase_2_pk_secteur_3857 CASCADE;"
|
||||||
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" data/phase_2_umap_pk_secteur.geojson -nln phase_2_pk_secteur_3857 -lco GEOMETRY_NAME=the_geom -explodecollections -overwrite
|
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" data/phase_2_umap_pk_secteur.geojson -nln phase_2_pk_secteur_3857 -lco GEOMETRY_NAME=the_geom -explodecollections -overwrite
|
||||||
|
|
||||||
|
echo " fait"
|
||||||
|
echo ""
|
||||||
|
|
||||||
# on crée les tables en 3948
|
# on crée les tables en 3948
|
||||||
# et bien d'autres choses :
|
# et bien d'autres choses :
|
||||||
# - recalage des PK secteurs sur un nœud du réseau routable
|
# - recalage des PK secteurs sur un nœud du réseau routable
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
echo " Application des traitements SQL 2.1"
|
||||||
|
echo ""
|
||||||
|
|
||||||
$PSQL -U $DB_USER -d $DB_NAME < traitements_phase_2.1.sql
|
$PSQL -U $DB_USER -d $DB_NAME < traitements_phase_2.1.sql
|
||||||
|
|
||||||
|
echo " fait"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,6 +63,9 @@ $PSQL -U $DB_USER -d $DB_NAME < traitements_phase_2.1.sql
|
||||||
|
|
||||||
# https://www.manniwood.com/postgresql_and_bash_stuff/index.html
|
# https://www.manniwood.com/postgresql_and_bash_stuff/index.html
|
||||||
|
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
echo " Calcul des itinéraires (pgrouting)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
# on commence par vider la table qui contiendra les calculs d'itinéraires
|
# on commence par vider la table qui contiendra les calculs d'itinéraires
|
||||||
$PSQL -h $DB_HOST -U $DB_USER -c "TRUNCATE TABLE phase_2_trace_pgr ;"
|
$PSQL -h $DB_HOST -U $DB_USER -c "TRUNCATE TABLE phase_2_trace_pgr ;"
|
||||||
|
@ -129,19 +147,51 @@ ORDER BY pk.id ;" \
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo " Calcul des itinéraires terminé"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
|
||||||
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
# on applique maintenant des requêtes SQL de création des données dérivées des données de routage
|
||||||
|
|
||||||
|
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
echo " Application des traitements SQL 2.2"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
$PSQL -U $DB_USER -d $DB_NAME < traitements_phase_2.2.sql
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
# et on exporte en geojson pour umap
|
# et on exporte en geojson pour umap
|
||||||
|
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
echo " Exports"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo " exports geojson"
|
||||||
|
echo ""
|
||||||
|
|
||||||
rm data/phase_2_pk_secteur.geojson
|
rm data/phase_2_pk_secteur.geojson
|
||||||
ogr2ogr -f "GeoJSON" data/phase_2_pk_secteur.geojson PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" phase_2_pk_secteur_4326
|
ogr2ogr -f "GeoJSON" data/phase_2_pk_secteur.geojson PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" phase_2_pk_secteur_4326
|
||||||
rm data/phase_2_trace_pgr.geojson
|
rm data/phase_2_trace_pgr.geojson
|
||||||
ogr2ogr -f "GeoJSON" data/phase_2_trace_pgr.geojson PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" phase_2_trace_pgr_4326
|
ogr2ogr -f "GeoJSON" data/phase_2_trace_pgr.geojson PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" phase_2_trace_pgr_4326
|
||||||
|
rm data/phase_2_trace_secteur.geojson
|
||||||
|
ogr2ogr -f "GeoJSON" data/phase_2_trace_secteur.geojson PG:"host=localhost user=redadeg password=redadeg dbname=redadeg" phase_2_trace_secteur_4326
|
||||||
# les fichiers sont ensuite tout de suite visible dans umap
|
# les fichiers sont ensuite tout de suite visible dans umap
|
||||||
|
|
||||||
|
echo " fait"
|
||||||
|
echo ""
|
||||||
|
|
||||||
# on exporte un json de synthèse des KM par secteur
|
# on exporte un json de synthèse des KM par secteur
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
echo " F I N"
|
||||||
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||||
|
echo ""
|
||||||
|
|
Loading…
Reference in a new issue