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
|
||||
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
|
||||
-- à partir de données OSM
|
||||
|
||||
|
||||
|
||||
-- 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
|
||||
-- on prend le tracé routé et on fait une version simple
|
||||
-- 1 ligne par secteur
|
||||
TRUNCATE TABLE phase_2_trace_secteur ;
|
||||
INSERT INTO phase_2_trace_secteur
|
||||
SELECT
|
||||
-- info de routage
|
||||
a.seq AS id,
|
||||
a.path_seq,
|
||||
a.node,
|
||||
a.cost,
|
||||
a.agg_cost,
|
||||
-- infos OSM
|
||||
b.osm_id,
|
||||
b.highway,
|
||||
b."type",
|
||||
b.oneway,
|
||||
b.ref,
|
||||
b.name_fr,
|
||||
b.name_br,
|
||||
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 ;
|
||||
secteur_id, '', '', 0, 0,
|
||||
ST_UNION(the_geom)
|
||||
FROM phase_2_trace_pgr
|
||||
GROUP BY secteur_id
|
||||
ORDER BY secteur_id ;
|
||||
|
||||
-- mise à jour des attributs
|
||||
UPDATE phase_2_trace_secteur a
|
||||
SET
|
||||
nom_fr = b.nom_fr,
|
||||
nom_br = b.nom_br,
|
||||
longueur = TRUNC( ST_Length(the_geom)::numeric , 0),
|
||||
longueur_km = TRUNC( ST_Length(the_geom)::numeric / 1000 , 1)
|
||||
FROM secteur b WHERE a.secteur_id = b.id ;
|
||||
|
||||
|
||||
|
||||
TRUNCATE phase_2_trace_troncons ;
|
||||
/*TRUNCATE phase_2_trace_troncons ;
|
||||
INSERT INTO phase_2_trace_troncons
|
||||
SELECT
|
||||
row_number() over() as uid,
|
||||
|
@ -140,5 +68,5 @@ SET
|
|||
END),
|
||||
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
|
||||
|
||||
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||
echo " Récupération des fichiers geojson depuis umap"
|
||||
|
||||
# les couches PK
|
||||
# PK début - fin de secteur
|
||||
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
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
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;"
|
||||
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
|
||||
# et bien d'autres choses :
|
||||
# - 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
|
||||
|
||||
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
|
||||
|
||||
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||
echo " Calcul des itinéraires (pgrouting)"
|
||||
echo ""
|
||||
|
||||
# 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 ;"
|
||||
|
@ -129,19 +147,51 @@ ORDER BY pk.id ;" \
|
|||
|
||||
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
|
||||
|
||||
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||
echo " Exports"
|
||||
echo ""
|
||||
|
||||
echo " exports geojson"
|
||||
echo ""
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
echo " fait"
|
||||
echo ""
|
||||
|
||||
# on exporte un json de synthèse des KM par secteur
|
||||
# TODO
|
||||
|
||||
|
||||
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||
echo " F I N"
|
||||
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
||||
echo ""
|
||||
|
|
Loading…
Reference in a new issue