Rapport
Rapport
Rapport
Le but est de fournir des itinéraires en se basant sur des paramètres externes la position de départ, la
position d’arrivée et la charge que l’utilisateur porte, et des paramètres internes qu’on récupérer au
fur et à mesure de l’exécution à savoir le temps de départ et les conditions météorologiques dans la
zone de déplacement.
Les hypothèses :
L’utilisateur des apis de directions disponible et qui coute chère, et qui ne prennent des
paramètres comme la météo, et si on affecte les filtres après l’appel au API, on risque d’avoir
une liste vide au cas ou il y a un moyen principale dans le résultat fourni par l’API et qui dans
notre cas ne satisfait pas une certaine contraintes, Aussi l’utilisation des API existantes, nous
ne donne pas une visibilité que ce soit sur les données ( pas de modification ) et aussi pas
possible d’implémenter le temps de départ comme variable.
Implémenter le système de données dans le backend et implémenter le system de calcul
(choix adopté)
Les calculs sur les réseaux de moyens de transports sont basés sur la théorie des graphes, en
appliquant des algorithmes de plus court chemin et des plusieurs court chemin
(notre cas), pour cela on a prévu une architecture
Les sources de données des transports :
Parmi les exigences c’est d’avoir un système qui peut être rempli automatiquement via une
plateforme (dans notre cas on a utilisé Openstreetmap, une plateforme open source), aussi d’avoir
une manipulation sur ces données (qui, parfois, contiennent de erreurs). Et Avoir la possibilité
d’ajouter les données manuellement
Le calcul :
Pour les itinéraires fournis par google map ou d’autre solution pour les transports, ils utilisent des
algorithmes de calculs de plus court chemin, avec des serveurs très puissants pour garantir une durée
de calcul optimale, avec un pré-traitement du graphe pour avoir une liste des couples (aller ->
arrivée) déjà calculées, et qui sont envoyées à l’utilisateurs directement.
Dans notre cas, on va utiliser des algorithmes proposes par la base de données neo4j.
La conception de système de
données :
Les données fournies par OSM sont en générale pas organiser.
Le but est de rendre ces informations sous une format qu’on peut utiliser pour faire les calculs, et
aussi être modifiable à travers l’interface de data management.
Image données stockées dans MongoDB et après elles seront converties en des données stockées sur
Neo4j pour faciliter les manipulations et les calculs :
On a utilisé les classes suivantes pour modéliser les traitements de données venantes de OSM
MongoDB Neo4j
Insertion de données:
1. Le traitement se fait en 5 phases :
2. Le choix de la ville
3. La répartition de la ville en des petits morceaux qui contiennent des sommets < 5000
sommets (contrainte posée par OSM)
a. Récupération du fichier. OSM
b. Conversion en GeoJSon
c. Traitement Regex
d. Récupérer une liste de moyens dans ce morceau
e. Filtrer les duplicates de la liste et l’ajouter dans la liste des « Features ».
4. Pour chaque « Features » on récupère les sommets et après les WayPoints (les points de
passage entre les stations qui aide à dessiner les Polylines).
5. Les données de format OSM (NODE et WAY) => (Station et Relation).
6. Lier les stations avec les points de passages (WayPoints)
« Indication sur le problème de liaison » inverser l’ordre et checker … Problème existe à ce point.
Insertion manuelle :
On créer les stations, pour faciliter l’insertion de cette donnée et pour éviter d’avoir un ajouter d’un
même sommet plusieurs fois,
3- on ajoute les stations, et dans l’ajout des stations on affecte pour le départ et l’arrivée une liste
des moyens qui passe par ce stations (dans notre cas, Type Covoiturage, Spécification : George X11)
Dans l’ajout de la relation on a plusieurs paramètre faite pour traiter toute sorte de données de
moyens (au cas ou on a besoin d’ajouter un métro manuellement, ou un service de vélo ) on a un cas
diffèrent de celui de covoiturage ( seul départ -> seul arrivée ), alors que le métro ( plusieurs départ,
plusieurs arrivées), une variable d’horaires pour moyens qu’on des horaires, si c’est désactivée on le
considère comme tjrs disponible ( après ca peut être pour les moyens de transports non réguliers,
avec un système de Machine Learning pour fournir une prévision sur le temps d’attente)
On a programmé un service de direction dans le backend, et qui fournit les WayPoints pour chaque
sous-relations- peut-être plus tard il sera complètement autonome – basé sur les Routing-machine.
La raison pour laquelle on a stocke les WayPoints dans l’étape de l’ajout de la relation, c’est pour
éviter d’utiliser les requêtes de directions à chaque fois l’utilisateur demande les directions (raison de
cout)
Les domaines :
Les repositives :
On implémente les interfaces existantes dans les bibliothèques, pour gérer les données.
Ex : On manipule des documents de MongoDB, pour cela on implémente l’interface MongoDB
Migration :
Récupérer les documents qui contiennent les données des moyens de transports (Stations et
Relation) et créer des sommets (Node) et des relations (Edge).
Les contraintes :
La charge et la météo dans les positions de départ et d’arrivée, pour ça on a utilisé le service gratuit
OpenWeather qui a travers des apis qui prennent la localisation comme paramètre nous donne les
informations suivantes :
On n’exécute :
ng serve
--------------
Il faut exécuter :
mvn Package
Pour créer le fichier exécutable, avec lequel on va créer l’image docker à l’aide de la commande :
dans le dossier Target :
Pour visualiser l’interface de gestion de données et pour faire le test, elle ne contiendra pas des
informations.
Pour charger les fichiers JSON en base de données (ceci est fait pour éviter d’avoir une base de
données vides dans la première exécution, vu qu’on utilise une dans un containeur de docker)
Une fois terminé, l’interface : http://localhost:4200/
Add Relation : Pour ajouter un moyen de transport, et ses informations (les points de passage, durée,
cout.)
Relations : pour afficher tous les moyens de transports disponibles dans la ville.
Auto-OSM : cette option prend, un code de la forme. Qui contient les Id des
moyens dans transport dans la plateforme Openstreetmap (Open DATA), qui "123652",
{
nous aide à remplir la base de données automatiquement
"features": [
"1253894",
Search : Pour faire les tests. "1253898",
"1253899",
Mais avant de faire les tests on doit visiter la Page de Migration : "1253900",
]
}
Search :
Le résultat :
Pour visualiser les bases de données :
MongoDB : http://localhost:8081/
Username : root
Password : nooneknows
Neo4j : http://localhost:7474/
Username : neo4j
Password : nooneknows