Spécification initiale#
Voir le ticket JIRA
Contexte#
Script de génération ou de modification de graphe itinéraire à partir de données stockée vecteur en entrée.
Ce script sera exécuté afin de générer ou modifier une donnée stockée de type graphe itinéraire à partir d’une donnée stockée vecteur qui correspond au format pivot.
Données en entrée#
une donnée stockée de type
VECTOR-DB
Donnée en sortie#
une donnée stockée de type
GRAPH-DB
dans ce cas le storage de celle-ci doit être de typePOSTGRESQL-ROUTING
OUune donnée stockée de type
GRAPH-OSRM
dans ce cas le storage de celle-ci doit être de typeS3
OUune donnée stockée de type
GRAPH-VALHALLA
dans ce cas le storage de celle-ci doit être de typeS3
Note
Oslandia souhaite que ce soit le même script qui soit utilisé. Par contre le modèle contraint à ce que 3 processing différents existent dans l’entrepôt. C’est donc au niveau de la déclaration des traitement dans l’orchestrateur que ce fait le paramétrage de la stored data en sortie :
Création via API entrepôt de 3 processing avec pour chacun un type de stored data spécifique et un job_name spécifique (pivot2db, pivot2osrm, pivot2valhalla par exemple)
Dans l’orchestrateur, on créé 3 yaml : pivot2db.yml, pivot2osrm.yml, pivot2valhalla.yml
Chacun des ces yaml indique la bonne ligne de commande pour l’éxécution du script : gpf-pivot-road2-to-graph -w “$(pwd)”
Le type de graphe à générer sera déduit par le processing du type de stored data en output
Paramètres#
bbox
: bounding box en EPSG:4326 pour utilisation d’un extrait de la donnée en entrée. Représentée via{"west" : x_min, "east": x_max, "south" : y_min, north": y_max}
Optionnel : valeur par défaut{"west" : -180, "east": 180, "south" : -90, north": 90}
cost_calculations
: balise définissant les paramètres de calcul des couts. Il s’agit d’une liste d’objet reprenant le formalisme définit dans le JSON définit dans le chapitre suivant Obligatoirecosts
: balise définissant les paramètres de couts et les profils qui seront créés. Il s’agit d’une liste de structure voir ci-dessous. On aura un cost par type de profil/optimisation. Obligatoireprofile
:car
optimization
:fastest
name
: <name_of_output_in_cost_calculation_json_file> (optional needed only for osrm generation)cost_calculation
: <nom défini dans la balise précédente cost_calculations>
Étapes et régles métier#
Contrôler les paramètres :
Identifier les tables en entrée à traiter :
les paramètres de connection à la base de donnée pour la récupération des données en entrée sont issus des variables globales du parameters.json (infos de connexion à la BDD),
du storage de la donnée en input (serveur BDD concerné, port d’accès, nom de la BDD) et de la livraison en elle même (nom de schéma à reconstruire à partir de l’id)
Identifier la BDD en sortie :
les paramètres de connection à la base de donnée pour écrire les données en sortiesont issus des variables globales du parameters.json (infos de connexion à la BDD),
du storage de la donnée en input (serveur BDD concerné, port d’accès, nom de la BDD) et de la donnée stockée en elle même (nom de schéma à reconstruire à partir de l’id)
Identifier le S3 en sortie :
les paramètres de connection au S3 pour l’écriture des graphs sont issus des variables globales du parameters.json (accès au S3)
du storage de la donnée stockée en sortie (output/stored_data/storage/type_infos/pot_name) et de la donnée stockée en elle même : stored_data/{output/stored_data/_id}/
Création des donnée de routing
utilisation du paquet python route-graph-generator pour la transformation
si création
GRAPH-DB
(pgRouting)ajout des procédures spécifiques via l’utilisation du dépot https://github.com/IGNF/pgrouting-procedures en tant que submodule
transformation de la base pivot en une base pgrouting
si création
GRAPH-VALHALLA
transformation base pivot en fichier .osm
transformation du fichier .osm en tuiles valhalla
si création
GRAPH-OSRM
transformation base pivot en fichier .osm
transformation du fichier .osm en fichier .osrm
pour
GRAPH-VALHALLA
etGRAPH-OSRM
: ajout d’un fichier de hash .md5 correspondant à la signature de l’ensemble des fichiers ajoutés dans le S3. Ce fichier pourra être utilisé par l’agent de publication pour vérifier si les données ont été modifiées.
Calculer les informations sur la donnée en sortie :
Dans
output.stored_data
:type_infos/attributes
: hash des attributs et types du “graph” de routing pour chaque table (3 a priori)type_infos/modes
: liste de couples{ profile : (CAR ou PEDESTRIAN), optimization : (FASTEST ou SHORTEST) }
utilisable sur le graph. Les valeurs doivent bien être uniformisées entre les 3 types de stored data en sortiesrs
: la projection des données en base (format EPSG:XXXX ou équivalent) –> toujours EPSG:4326extent
: l’étendue des données (on calcule la zone couverte par le graph), en EPSG:4326size
: la taille complète du schéma en octets en fin de processus, ou des fichiers stockées sur le S3
Dans
pipeline_status
: Une ligne indiquant le status du script :SUCCESS
: L’intégration n’a pas rencontré de problème, pour aucun des fichiers de la livraison.FAILURE
: Une erreur est intervenu lors de l’intégration des données en base :Données incorrectes
donnée de l’input inadaptées à la génération de graph
erreur de contruction du graph
TECHNICAL_ERROR
: En cas d’erreur technique :Mauvaise composition du parameters.json
Valeur inatendue dans le schéma JSON
Erreur de lecture / écriture dans le répertoire de travail
Erreur de lecture / écriture dans le S3 (déconnection, indispo, full bdd)
Erreur de lecture / écriture dans la BDD (déconnection, indispo, full bdd)
JSON-schema cost_calculations
#
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": [
"variables",
"outputs",
"name"
],
"properties": {
"name": {
"type": "string"
},
"variables": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"column_name",
"mapping"
],
"properties": {
"name": {
"type": "string"
},
"mapping": {
"oneOf": [
{
"type": "string"
},
{
"type": "object"
}
]
},
"column_name": {
"type": "string"
}
}
}
},
"outputs": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"speed_value",
"direct_conditions",
"reverse_conditions",
"turn_restrictions",
"cost_type",
"operations"
],
"properties": {
"name": {
"type": "string"
},
"cost_type": {
"type": "string"
},
"operations": {
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{
"type": "string",
"enum" : ["add","substract","multiply","divide"]
},
{
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
]
}
},
"speed_value": {
"oneOf": [
{
"type": "string"
},
{
"type": "number"
}
]
},
"direct_conditions": {
"type": "string"
},
"turn_restrictions": {
"type": "boolean"
},
"reverse_conditions": {
"type": "string"
}
}
}
}
}
}