2019-10-22 20:59:29 +00:00
#!/bin/bash
# ce traitement consiste à charger les données des 10 cartes umap
# à les contrôler par rapport aux données de référence
# à les agréger
# puis les exporter pour merour
set -e
set -u
2019-10-22 21:54:03 +00:00
#PSQL=/usr/bin/psql
PSQL = psql
2020-02-16 19:04:03 +00:00
DB_HOST = localhost
2019-10-22 20:59:29 +00:00
DB_NAME = redadeg
DB_USER = redadeg
DB_PASS = redadeg
#cd /data/www/vhosts/ar-redadeg_openstreetmap_bzh/htdocs/scripts/
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo " Chargement des données des cartes umap"
echo ""
echo ""
# OK !
#dernierFichierCmd="ls -l1dt phase_5_pk_secteur_"$secteur"_* | head -1"
#eval $dernierFichierCmd
# on procède secteur par secteur
# on récupère les données umap et on les charge dans la même couche
# on commence donc par vider la couche cible
2019-10-27 19:32:12 +00:00
# géré avec l'option -overwrite sur le secteur 1 -> pb : on a des lignes dans la couche de points…
# on commence par vider la table qui contiendra les calculs d'itinéraires
2019-10-28 09:48:05 +00:00
2019-10-27 19:32:12 +00:00
echo " vidage de la couche de routage"
2019-10-28 13:48:45 +00:00
$PSQL -h $DB_HOST -U $DB_USER -d $DB_NAME -c "TRUNCATE TABLE phase_5_pk_umap_4326 ;"
2019-10-27 19:32:12 +00:00
echo " fait"
2019-10-22 20:59:29 +00:00
2019-10-27 19:32:12 +00:00
echo ""
echo " import des données umap"
echo ""
2019-10-22 20:59:29 +00:00
echo " secteur 1"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027042/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# chargement initial
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 2"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027081/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 3"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027101/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 4"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027104/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 5"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027107/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 6"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027110/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 7"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027114/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 8"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027117/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 9"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027120/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 20:59:29 +00:00
echo " secteur 10"
2019-10-23 17:36:08 +00:00
curl -sS http://umap.openstreetmap.fr/fr/datalayer/1027123/ > data/phase_5_pk_umap_tmp.geojson
2019-10-22 20:59:29 +00:00
# on rajoute à la couche
2019-10-23 17:36:08 +00:00
ogr2ogr -f "PostgreSQL" PG:" host= $DB_HOST user= $DB_USER password= $DB_PASS dbname= $DB_NAME " \
2019-10-28 13:48:45 +00:00
data/phase_5_pk_umap_tmp.geojson -nln phase_5_pk_umap_4326 -explodecollections -append
2019-10-22 21:54:03 +00:00
2019-10-27 19:32:12 +00:00
# ensuite on supprime les enregistrement aberrants
echo ""
echo " suppression des données nulles"
2019-10-28 13:48:45 +00:00
$PSQL -h $DB_HOST -U $DB_USER -d $DB_NAME -c "DELETE FROM phase_5_pk_umap_4326 WHERE ST_geometrytype(the_geom) <> 'ST_Point' OR secteur_id IS NULL OR pk_id IS NULL ;"
2019-10-27 19:32:12 +00:00
echo " fait"
2019-10-28 13:48:45 +00:00
# et on charge la couche en 2154 pour pouvoir travailler
echo ""
echo " chargement de la couche de travail en 2154"
$PSQL -h $DB_HOST -U $DB_USER -d $DB_NAME \
-c " TRUNCATE phase_5_pk_umap ;
INSERT INTO phase_5_pk_umap
SELECT pk_id, secteur_id, ST_Transform( the_geom,2154) AS the_geom
FROM phase_5_pk_umap_4326
ORDER BY pk_id ; "
echo " fait"
2019-10-27 19:32:12 +00:00
2019-10-22 21:54:03 +00:00
echo ""
echo ""
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo " Contrôle des données par secteur"
echo ""
# on veut la liste des vrais secteurs : pas des secteurs de gestion
# on instancie donc un tableau
declare -a secteursArray = ( )
secteursArray = ( ` $PSQL -h $DB_HOST -U $DB_USER $DB_NAME -t -X -A -c \
" WITH a AS
(
SELECT substring( secteur_id::text,1, char_length( secteur_id::text) -1) ::integer AS secteur_id
FROM phase_5_pk_ref
)
SELECT DISTINCT( secteur_id) FROM a ORDER BY secteur_id ; " `)
#echo "secteursArray = " ${secteursArray[@]}
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo ""
echo " 1 : nombre de PK par secteur"
echo ""
for secteur in ${ secteursArray [@] }
do
2019-10-22 22:32:02 +00:00
#echo " secteur $secteur"
# une requête qui compare le nb de PK entre la couche de référence et la couche umap
sect_deb = $secteur "0" # 1 --> 10
sect_fin = $(( secteur+1)) 0
#echo "$sect_deb -> $sect_fin"
$PSQL -X -A -t -h $DB_HOST -U $DB_USER $DB_NAME \
-c " WITH ref AS (
SELECT COUNT( pk_id) as ref FROM phase_5_pk_ref
WHERE ( secteur_id >= $sect_deb and secteur_id < $sect_fin )
) ,
umap AS (
SELECT COUNT( pk_id) as umap FROM phase_5_pk_umap
WHERE ( secteur_id >= $sect_deb and secteur_id < $sect_fin )
)
SELECT
*,
CASE
WHEN ref.ref < umap.umap THEN 'plus'
WHEN ref.ref > umap.umap THEN 'moins'
WHEN ref.ref = umap.umap THEN 'pareil'
ELSE 'problème'
END AS test
FROM ref, umap" \
--single-transaction \
--set AUTOCOMMIT = off \
--set ON_ERROR_STOP = on \
--no-align \
-t \
--field-separator ' ' \
--quiet | while read -a Record ; do
nbPKref = ${ Record [0] }
nbPKumap = ${ Record [1] }
test = ${ Record [2] }
#test='moins'
# on teste
if [ [ $test = = "pareil" ] ] ;
then echo " secteur $secteur ok : $nbPKref PK "
elif [ [ $test = = "plus" ] ] ;
then echo " secteur $secteur >>>> problème : " $(( nbPKumap - $nbPKref )) " PK en trop"
elif [ [ $test = = "moins" ] ] ;
then echo " secteur $secteur >>>> problème : " $(( nbPKref - $nbPKumap )) " PK en moins"
fi
done
2019-10-22 21:54:03 +00:00
# fin de la boucle
done
2019-10-22 20:59:29 +00:00
2019-10-23 17:36:08 +00:00
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo ""
echo ""
echo " 2 : si replacement : test de distance"
echo ""
# ici une requête PostGIS sortira les PK qui auront été trop déplacés
2019-10-28 09:48:05 +00:00
read nb_pk_deplaces <<< $( $PSQL -h $DB_HOST -U $DB_USER -d $DB_NAME --no-align -t --quiet -c \
" SELECT COUNT(*)
FROM phase_5_pk_ref r FULL JOIN phase_5_pk_umap u ON r.pk_id = u.pk_id
2019-10-28 13:48:45 +00:00
WHERE TRUNC( ST_Distance( r.the_geom, u.the_geom) ::numeric,2) > 1 ; "
2019-10-28 09:48:05 +00:00
)
echo " $nb_pk_deplaces PK déplacés manuellement "
# plus de détails
#--no-align -t --quiet --single-transaction --set AUTOCOMMIT=off --set ON_ERROR_STOP=on --field-separator ' ' \
$PSQL -X -h $DB_HOST -U $DB_USER -d $DB_NAME \
-c " WITH liste_pk_decales AS (
SELECT
r.pk_id,
r.secteur_id,
2019-10-28 13:48:45 +00:00
TRUNC( ST_Distance( r.the_geom, u.the_geom) ::numeric,2) as distance
2019-10-28 09:48:05 +00:00
FROM phase_5_pk_ref r FULL JOIN phase_5_pk_umap u ON r.pk_id = u.pk_id
2019-10-28 13:48:45 +00:00
WHERE TRUNC( ST_Distance( r.the_geom, u.the_geom) ::numeric,2) > 1
2019-10-28 09:48:05 +00:00
)
SELECT '1' as tri, '> 1000' as distance, COUNT( *) FROM liste_pk_decales WHERE ( distance >= 1000)
UNION SELECT '2' as tri, '> 500' as distance, COUNT( *) FROM liste_pk_decales WHERE ( distance >= 500 AND distance < 1000)
UNION SELECT '3' as tri, '> 100' as distance, COUNT( *) FROM liste_pk_decales WHERE ( distance >= 100 AND distance < 500)
UNION SELECT '4' as tri, '> 10' as distance, COUNT( *) FROM liste_pk_decales WHERE ( distance >= 10 AND distance < 100)
UNION SELECT '5' as tri, '< 10' as distance, COUNT( *) FROM liste_pk_decales WHERE ( distance < 10)
ORDER BY tri ; " \
--single-transaction \
--set AUTOCOMMIT = off \
--set ON_ERROR_STOP = on \
--no-align \
-t \
--field-separator ' ' \
--quiet |
while read tri distance count ; do
printf " $distance $count \n "
done
2019-10-23 17:36:08 +00:00
2019-10-28 09:48:05 +00:00
echo ""
2019-10-23 17:36:08 +00:00
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo " Application des traitements SQL phase 5"
echo ""
2019-10-28 13:48:45 +00:00
$PSQL -h $DB_HOST -U $DB_USER -d $DB_NAME < traitements_phase_5.sql
2019-10-23 17:36:08 +00:00
echo " fait"
echo ""
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# et on exporte en geojson pour umap et merour
echo ""
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo " Exports"
echo ""
echo " exports geojson"
echo ""
rm data/phase_5_pk.geojson
2019-10-25 20:06:07 +00:00
ogr2ogr -f "GeoJSON" data/phase_5_pk.geojson PG:" host= $DB_HOST user=redadeg password=redadeg dbname=redadeg " phase_5_pk -sql "SELECT * FROM phase_5_pk ORDER BY pk_id"
2019-10-23 17:36:08 +00:00
echo " fait"
echo ""
echo " pousse vers serveur"
echo ""
rsync -av -z data/phase_5_pk.geojson breizhpovh2:/data/www/vhosts/ar-redadeg_openstreetmap_bzh/htdocs/scripts/data/
echo ""
echo " fait"
echo ""
2019-10-22 20:59:29 +00:00
echo ""
echo ""
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo " F I N"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo ""