Prérequis : Base de données
Le Système d’Aide à l’Exploitation (SAE) assiste les opérateurs du PCC (exploitants) dans ses principales missions d’exploitation du réseau de bus. Les fonctionnalités principales du SAE sont l’élaboration du référentiel et le transfert des données du référentiel.
Le référentiel est un ensemble de données descriptives de l’exploitation du réseau (référentiel SAE). Ces données concernent :
Ces données sont mémorisées dans la base de données MySQL du PCC, et mises à disposition des différents sous-systèmes en fonction de leurs besoins.
Remarque : Le référentiel respecte le format standardisé GTFS (General Transit Feed Specification). Ce format permet de communiquer des horaires de transports en commun et les informations géographiques associées (topographie d’un réseau : emplacement des arrêts, tracé des lignes). GTFS a été développé par Google et TriMet. Lien : https://developers.google.com/transit/gtfs/
L’offre de service sur une ligne est composée de courses reliant un terminus de départ à un terminus d’arrivée et desservant des arrêts selon un horaire. Une course est une mission effectuée par un véhicule : entre deux terminus extrêmes (course pleine), entre un terminus extrême et un arrêt (course partielle), sans desserte des arrêts entre l’arrêt de départ et l’arrêt d’arrivée (course dite HLP : Haut Le Pied) et enfin l’emprunt des itinéraires spéciaux (course spéciale). Donc, sur une ligne donnée, on trouve plusieurs types de courses possibles selon les arrêts desservis, l’itinéraire emprunté ou les consignes d’exploitation.
Les données GTFS exportées par les services de transport sont codées dans les principaux fichiers suivants :
Les tables ci-dessous ont été ajoutées aux données GTFS :
Le SAE assure tous les soirs la fonction de transfert des données du référentiel vers le SAI et les SIV-BERRY de chaque bus en n’y intégrant que les données descriptives de la topologie et des horaires de la journée, préparées et transférées par Wifi (automatiquement ou manuellement). Il est ajouté une notion de “service” associant un conducteur à un véhicule et l’ensemble des courses à effectuer pendant ce service. Le format des base de données SAI et les SIV-BERRY est SQLite.
Être capable d’exécuter des requêtes SQL sur une base de données MySQL.
Vérifier si les paquetages mysql sont installés sur votre machine :
$ dpkg -l | grep -i mysql
Sinon pour installer le SGBDR MySQL, il faut faire :
$ sudo apt install mysql-server
Vérifier si le serveur mysql est démarré sur votre machine :
$ sudo service mysql status
Pour démarrer le serveur MySQL :
$ sudo service mysql start
Pour redémarrer le serveur MySQL :
$ sudo service mysql restart
Pour arrêter le serveur MySQL :
$ sudo service mysql stop
Démarrer la console mysql :
$ sudo mysql -uroot -ppassword -hlocalhost
mysql>
Lien : https://doc.ubuntu-fr.org/mysql
Questions :
Pour installer la base de données sae (le référentiel, ici celui de Tisséo Toulouse), il faut :
CREATE DATABASE sae
)CREATE TABLE organisme ...
etc …)INSERT INTO organisme ...
etc …)Pour automatiser ces tâches, on utilisera le script sae.sh
fourni.
$ cp $HOME/sae.sh /tmp
$ cp $HOME/sae.zip /tmp
$ cd /tmp
$ chmod +x sae.sh
$ sudo ./sae.sh
Le script sae.sh
:
#!/bin/bash
HOSTNAME=localhost
USERNAME=root
PASSWORD=password
DBNAME=sae
PATH=/tmp
ARCHIVE=sae.zip
SQL=sae.sql
TABLES="ligne calendrier itineraire arret lieu trace"
echo "Installation base de donnees $DBNAME"
if [ -f $PATH/$ARCHIVE ]
then
echo "Extraction tables"
/usr/bin/unzip -u $PATH/$ARCHIVE -d "${PATH}" > /dev/null 2>&1
else
echo "Fichier ${ARCHIVE} manquant !"
fi
if [ -f $PATH/$SQL ]
then
echo "Creation tables"
/usr/bin/mysql -u$USERNAME -p$PASSWORD -h$HOSTNAME < $PATH/$SQL
/bin/rm -f $PATH/$SQL
else
echo "Fichier ${SQL} manquant !"
fi
for table in $TABLES
do
if [ -f $PATH/$table.txt ]
then
echo "Insertion table $table"
/bin/chown mysql $PATH/$table.txt
/usr/bin/mysql -u$USERNAME -p$PASSWORD -h$HOSTNAME $DBNAME -e"LOAD DATA INFILE '$PATH/$table.txt' REPLACE INTO TABLE $table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';"
/bin/rm -f $PATH/$table.txt
else
echo "Fichier $table.txt manquant !"
fi
done
Script : sae.sh
Base de données : sae.zip
Questions :
Démarrer la console mysql :
$ sudo mysql -uroot -ppassword -hlocalhost sae
mysql>
Liste l’ensemble des lignes :
select idLigne, nomLong, description from ligne;
+-------------------+---------+----------------------------------------------+
| idLigne | nomLong | description |
+-------------------+---------+----------------------------------------------+
| 11821949021891615 | 1 | Ligne Grand Rond / Compans - Caffarelli |
| ... | ... | ... |
| 11821953316814855 | 87 | Ligne Lycée Polyvalent / Cugnaux Henry Galdi |
+-------------------+---------+----------------------------------------------+
Nombre d’itinéraires pour la ligne “Grand Rond / Compans - Caffarelli” (11821949021891615) :
SELECT COUNT( DISTINCT idItineraire ) AS nbItineraires FROM itineraire WHERE idLigne='11821949021891615';
+---------------+
| nbItineraires |
+---------------+
| 82 |
+---------------+
Liste des horaires de départ des itinéraires pour la ligne “Grand Rond / Compans - Caffarelli” (11821949021891615) triés par heure de départ :
SELECT itineraire.idItineraire, itineraire.destination, itineraire.direction, heureDepart FROM itineraire INNER JOIN ligne ON ligne.idLigne=itineraire.idLigne INNER JOIN arret ON arret.idItineraire=itineraire.idItineraire WHERE itineraire.idLigne='11821949021891615' AND arret.numeroSequence='0' ORDER BY heureDepart ASC;
+------------------+-------------------------------+-----------+-------------+
| idItineraire | destination | direction | heureDepart |
+------------------+-------------------------------+-----------+-------------+
| 4503603928073507 | Grand Rond TOULOUSE | 0 | 06:00:00 |
| 4503603928073508 | Grand Rond TOULOUSE | 0 | 06:28:00 |
| 4503603928073618 | Compans - Caffarelli TOULOUSE | 1 | 06:30:00 |
| 4503603928073619 | Compans - Caffarelli TOULOUSE | 1 | 06:50:00 |
| 4503603928073509 | Grand Rond TOULOUSE | 0 | 06:55:00 |
| 4503603928073620 | Compans - Caffarelli TOULOUSE | 1 | 07:10:00 |
| ... | ... | ... | ... |
| 4503603928073545 | Grand Rond TOULOUSE | 0 | 20:25:00 |
| 4503603928073658 | Compans - Caffarelli TOULOUSE | 1 | 20:30:00 |
+------------------+-------------------------------+-----------+-------------+
Horaires et arrêts d’un itinéraire (4503603928073507) :
SELECT arret.numeroSequence, nomLieu, arret.heureDepart FROM itineraire INNER JOIN arret ON arret.idItineraire=itineraire.idItineraire INNER JOIN lieu ON lieu.idArret=arret.idArret WHERE itineraire.idItineraire='4503603928073507' ORDER BY heureDepart ASC;
+----------------+--------------------------+-------------+
| numeroSequence | nomLieu | heureDepart |
+----------------+--------------------------+-------------+
| 0 | Compans-Caffarelli | 06:00:00 |
| 1 | Sciences Sociales | 06:02:00 |
| 2 | Arsenal | 06:02:00 |
| 3 | Barcelone Leclerc | 06:03:00 |
| 4 | Leclerc | 06:04:00 |
| 5 | Héraclès | 06:05:00 |
| 6 | Amidonniers | 06:05:00 |
| 8 | St Cyprien - République | 06:07:00 |
| 7 | Les Abattoirs | 06:07:00 |
| 9 | Teinturiers | 06:08:00 |
| 10 | Fer à Cheval | 06:09:00 |
| 11 | Ile du Ramier | 06:11:00 |
| 12 | Palais de Justice | 06:11:00 |
| 13 | Jardin Royal | 06:13:00 |
| 14 | Grand Rond | 06:15:00 |
+----------------+--------------------------+-------------+
Donner les requêtes et résulats pour les cas suivants :