f0156a7548
arrondi au mètre
144 lines
4.5 KiB
Bash
Executable file
144 lines
4.5 KiB
Bash
Executable file
#! /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 " Patch de la couche osm_roads_pgr pour les cas particuliers"
|
|
echo ""
|
|
|
|
|
|
echo " suppression des objets de osm_roads_pgr qui intersectent avec les zones de boucles"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
"DELETE FROM osm_roads_pgr WHERE id IN
|
|
(
|
|
SELECT a.id
|
|
FROM osm_roads_pgr_patch_mask m, osm_roads_pgr a
|
|
WHERE
|
|
m.secteur_id = $secteur_id
|
|
AND ST_INTERSECTS(a.the_geom, m.the_geom)
|
|
);"
|
|
echo " fait"
|
|
echo ""
|
|
|
|
|
|
echo " collage des objets de la couche osm_roads_pgr_patch à la place des objets supprimés"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
"INSERT INTO osm_roads_pgr
|
|
SELECT
|
|
nextval('osm_roads_pgr_id_seq') AS uid,
|
|
$secteur_id AS secteur_id,
|
|
a.osm_id, a.highway, a.type, a.oneway, a.ref, a.name_fr, a.name_br,
|
|
NULL, NULL, NULL, NULL,
|
|
a.the_geom
|
|
FROM osm_roads_pgr_patch a, osm_roads_pgr_patch_mask m
|
|
WHERE
|
|
m.secteur_id = $secteur_id
|
|
AND ST_INTERSECTS(a.the_geom, m.the_geom);"
|
|
echo " fait"
|
|
echo ""
|
|
|
|
|
|
echo " calcul des 2 attributs de coût (= longueur)"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c "
|
|
UPDATE osm_roads_pgr
|
|
SET cost = round(st_length(the_geom)::numeric), reverse_cost = round(st_length(the_geom)::numeric)
|
|
WHERE secteur_id = $secteur_id ;"
|
|
|
|
echo " recrée des nœuds uniquement sur les zones de patch"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
"SELECT pgr_nodeNetwork('osm_roads_pgr', 0.001, rows_where:='true');"
|
|
|
|
echo " recalcul la topologie pgRouting uniquement sur les zones de patch"
|
|
# avec nettoyage de la topologie précédente
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
"SELECT pgr_createTopology('osm_roads_pgr', 0.001, rows_where:='true', clean:=false);"
|
|
|
|
|
|
# on recale les PK secteur et les points de nettoyage que maitenant
|
|
# car on vient de maj la topologie de routage
|
|
|
|
echo " recalage des PK secteurs sur un nœud du réseau routable"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME < sql/phase_2.1_recalage_pk_secteurs.sql
|
|
echo " fait"
|
|
echo ""
|
|
|
|
echo " recalage des points de nettoyage sur un nœud du réseau routable"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME < sql/phase_2.2_recalage_points_nettoyage.sql
|
|
echo " fait"
|
|
echo ""
|
|
|
|
|
|
# ensuite : on met un coût x 10 sur les tronçons de certains types
|
|
# AVANT de calculer les itinéraires
|
|
echo " pondération de la couche de routage selon le type de voies"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
"UPDATE osm_roads_pgr
|
|
SET cost = st_length(the_geom)*10, reverse_cost = st_length(the_geom)*10
|
|
WHERE
|
|
secteur_id >= $secteur_id AND secteur_id < $secteur_id_next
|
|
AND highway IN ('path','footway','service','cycleway','steps');"
|
|
echo " fait"
|
|
echo ""
|
|
|
|
|
|
|
|
# ensuite : on met un coût ÉNORME sur les tronçons ciblés par la couche de points de nettoyage
|
|
# AVANT de calculer les itinéraires
|
|
echo " nettoyage de la couche de routage par les points ciblés"
|
|
PGPASSWORD=$DB_PASSWD $PSQL -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c \
|
|
"UPDATE osm_roads_pgr SET cost = 1000000, reverse_cost = 1000000
|
|
WHERE
|
|
secteur_id >= $secteur_id AND secteur_id < $secteur_id_next
|
|
AND id IN
|
|
(
|
|
SELECT r.id
|
|
FROM osm_roads_pgr r JOIN phase_2_point_nettoyage p ON r.id = p.edge_id
|
|
WHERE r.secteur_id >= $secteur_id AND r.secteur_id < $secteur_id_next
|
|
);"
|
|
echo " fait"
|
|
echo ""
|
|
|
|
|
|
|
|
echo ""
|
|
echo ""
|
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
|
echo " F I N préparation pour le calcul d'un itiniraire pour le secteur $secteur_id"
|
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
|
|
echo ""
|