2021-10-03 07:47:20 +00:00
|
|
|
#! /bin/bash
|
|
|
|
|
|
|
|
# exit dès que qqch se passe mal
|
|
|
|
set -e
|
|
|
|
# sortir si "unbound variable"
|
|
|
|
#set -u
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "$1" ]
|
|
|
|
then
|
|
|
|
echo "Pas de millésime en argument --> stop"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# lecture du fichier de configuration
|
|
|
|
. config.sh
|
|
|
|
|
|
|
|
|
|
|
|
# contrôle si argument secteur_id
|
|
|
|
if [ -z "$2" ]
|
|
|
|
then
|
|
|
|
echo "Pas de secteur_id en argument --> stop"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
secteur_id=$2
|
|
|
|
# on calcule le code du secteur suivant
|
|
|
|
# ex : 200 -> 300
|
|
|
|
secteur_id_next="$(( ${secteur_id:0:1} + 1 ))00"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
# ici on va calculer un itinéraire pour chaque secteur
|
|
|
|
# en utilisant les PK de début (ou fin) de chaque secteur
|
|
|
|
|
|
|
|
# https://www.manniwood.com/postgresql_and_bash_stuff/index.html
|
|
|
|
|
|
|
|
|
|
|
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
|
|
|
echo " Calcul de l'itinéraires pour le secteur $secteur_id"
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
|
|
# on commence par vider la table qui contiendra les calculs d'itinéraires
|
|
|
|
echo " vidage de la couche de routage"
|
2021-10-03 09:31:01 +00:00
|
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
|
|
"DELETE FROM phase_2_trace_pgr WHERE secteur_id = $secteur_id ;" >> /dev/null
|
2021-10-03 07:47:20 +00:00
|
|
|
echo " fait"
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
|
|
# on cherche le node_id du PK de début et le node_id du PK de fin
|
|
|
|
read pk_start_node <<< $(PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME --no-align -t --quiet -c \
|
|
|
|
"SELECT pk.pgr_node_id
|
|
|
|
FROM phase_2_pk_secteur pk JOIN secteur s ON pk.secteur_id = s.id
|
|
|
|
WHERE secteur_id IN ($secteur_id,$secteur_id_next)
|
|
|
|
ORDER BY s.id
|
|
|
|
LIMIT 1 OFFSET 0" )
|
|
|
|
|
|
|
|
read pk_end_node <<< $(PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME --no-align -t --quiet -c \
|
|
|
|
"SELECT pk.pgr_node_id
|
|
|
|
FROM phase_2_pk_secteur pk JOIN secteur s ON pk.secteur_id = s.id
|
|
|
|
WHERE secteur_id IN ($secteur_id,$secteur_id_next)
|
|
|
|
ORDER BY s.id
|
|
|
|
LIMIT 1 OFFSET 1" )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo " calcul d'un itinéraire entre les nœuds $pk_start_node et $pk_end_node"
|
|
|
|
|
|
|
|
|
|
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
|
|
"INSERT INTO phase_2_trace_pgr
|
|
|
|
SELECT
|
|
|
|
$secteur_id AS secteur_id,
|
|
|
|
-- info de routage
|
|
|
|
a.path_seq,
|
|
|
|
a.node,
|
|
|
|
a.cost,
|
|
|
|
a.agg_cost,
|
|
|
|
-- infos OSM
|
|
|
|
b.osm_id,
|
|
|
|
b.highway,
|
|
|
|
b.\"type\",
|
|
|
|
b.oneway,
|
|
|
|
b.ref,
|
|
|
|
CASE
|
|
|
|
WHEN b.name_fr IS NULL AND b.ref IS NOT NULL THEN b.ref
|
|
|
|
ELSE b.name_fr
|
|
|
|
END AS name_fr,
|
|
|
|
CASE
|
|
|
|
WHEN b.name_br IS NULL AND b.name_fr IS NULL AND b.ref IS NOT NULL THEN b.ref
|
|
|
|
WHEN b.name_br IS NULL AND b.name_fr IS NOT NULL THEN '# da dreiñ e brezhoneg #'
|
|
|
|
ELSE b.name_br
|
|
|
|
END AS name_br,
|
|
|
|
b.the_geom
|
|
|
|
FROM pgr_dijkstra(
|
|
|
|
'SELECT id, source, target, cost, reverse_cost FROM osm_roads_pgr', $pk_start_node, $pk_end_node) as a
|
|
|
|
JOIN osm_roads_pgr b ON a.edge = b.id ;" >> /dev/null
|
|
|
|
|
|
|
|
|
2021-10-03 09:31:01 +00:00
|
|
|
# ménage pour performances
|
|
|
|
PGPASSWORD=$DB_PASSWD $PSQL -X -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
|
|
"VACUUM FULL phase_2_trace_pgr ;" >> /dev/null
|
2021-10-03 07:47:20 +00:00
|
|
|
|
|
|
|
# on fait une requête pour voir la longueur insérée
|
|
|
|
# en fait : la longueur totale - la longueur totale lors du précédent calcul
|
2021-10-03 09:31:01 +00:00
|
|
|
read longueur_inseree <<< $(PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME --no-align -t --quiet -c \
|
2021-10-07 13:17:10 +00:00
|
|
|
"SELECT
|
|
|
|
CASE
|
|
|
|
WHEN trunc(SUM(ST_Length(the_geom))/1000) IS NULL THEN 0
|
|
|
|
ELSE trunc(SUM(ST_Length(the_geom))/1000)
|
|
|
|
END AS longueur
|
|
|
|
FROM phase_2_trace_pgr WHERE secteur_id = $secteur_id;")
|
2021-10-03 09:31:01 +00:00
|
|
|
|
2021-10-03 07:47:20 +00:00
|
|
|
|
|
|
|
# une alerte si 0 km insérés
|
|
|
|
if [ $longueur_inseree -eq 0 ] ;
|
|
|
|
then
|
2021-10-07 13:17:10 +00:00
|
|
|
echo " >>> aucun itinéraire n'a pu être calculé <<<"
|
|
|
|
echo " :("
|
2021-10-03 07:47:20 +00:00
|
|
|
echo ""
|
|
|
|
exit 0
|
|
|
|
else
|
2021-10-03 09:31:01 +00:00
|
|
|
echo " fait : $longueur_inseree km calculés"
|
2021-10-03 07:47:20 +00:00
|
|
|
fi
|
|
|
|
|
2021-10-03 14:13:53 +00:00
|
|
|
echo ""
|
2021-10-03 07:47:20 +00:00
|
|
|
echo " Export GeoJSON pour umap"
|
|
|
|
echo ""
|
|
|
|
rm -f $rep_data/phase_2_trace_pgr.geojson
|
|
|
|
ogr2ogr -f "GeoJSON" $rep_data/phase_2_trace_pgr.geojson PG:"host=$DB_HOST port=$DB_PORT user=$DB_USER password=$DB_PASSWD dbname=$DB_NAME" phase_2_trace_pgr_4326
|
|
|
|
echo " fait"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo ""
|
|
|
|
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
|
|
|
echo " F I N calcul de l'itinéraire pour le secteur $secteur_id"
|
|
|
|
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
|
|
|
echo ""
|