Tests traitement dans geoplateforme#
Ce chapitre décrit les différentes étapes nécessaires sur la géoplateforme pour :
l’intégration du traitement
l’intégration de données pour l’utilisation du traitement
l’execution du traitement
Intégraton du traitement#
Si le traitement n’est pas disponible dans le datastore, il est nécessaire de l’ajouter via l’API d’administration puis dans un second temps dans le datastore.
Les chapitres suivants précisent les commandes à envoyer.
Des scripts bash utilisant curl sont en cours de développement pour une intégration via script.
Les scripts doivent être édités pour définir au minimum la variable suivante :
API_KEY
: clé utilisé pour l’authentification
Les autres variables sont définies avec des valeurs par défaut pour l’utilisation de la sandbox oslandia. Il est nécessaire de les modifier pour l’utilisation d’un autre environnement.
BASE_URL
: url de l’entrepot pour l’environnement à testerDATASTORE_ID
: id de la datastore à utiliser
Ajout traitement dans l’administration#
POST {{baseUrl}}/administrator/processings
Un fichier .json contenant les paramètres de la requête POST est disponible dans le répertoire gitlab orchestrator
.
Il y a 3 processings à ajouter selon le type de graphe qui sera généré :
graphe PgRouting :
processing-creation-graph-db.json
graphe OSRM :
processing-creation-graph-osrm.json
graphe Valhalla :
processing-creation-graph-valhalla.json
En retour on peut récupérer l’identifiant de chaque processing à créer, que l’on nomme processing-id
pour les étapes suivantes.
Cette étape peut être effectuée automatiquement avec le script bash orchestrator/processing_creation.sh
. Les 3 processings seront créés.
Ajout traitement dans datastore#
Récupération processing déjà présent#
GET {{baseUrl}}/administrator/datastores/:datastore
On récupère la liste des processings déjà présents:
"processings": [
"af042611-13eb-4a18-8d04-9b7604a031cc",
"af052611-13eb-4a18-8d04-9b7604a031cc",
"af062611-13eb-4a18-8d04-9b7604a031cc",
"af012611-13eb-4a18-8d04-9b7604a031cc",
"af022611-13eb-4a18-8d04-9b7604a031cc"
]
Modification datastore#
On va patcher le datastore pour lui ajouter le nouveau processing.
Note
Il faut absolument avoir récupérer les processings déjà présents ou ils ne seront plus disponible pour le datastore.
PATCH {{baseUrl}}/administrator/datastores/:datastore
En paramètre, on indique la liste des processings déjà présent plus le nouveau processing a intégré:
"processings": [
"af042611-13eb-4a18-8d04-9b7604a031cc",
"af052611-13eb-4a18-8d04-9b7604a031cc",
"af062611-13eb-4a18-8d04-9b7604a031cc",
"af012611-13eb-4a18-8d04-9b7604a031cc",
"af022611-13eb-4a18-8d04-9b7604a031cc",
"{{processing-id}}"
]
Intégration de données pour l’utilisation du traitement#
Le traitement prend en entrée une stored data de type VECTOR-DB
contenant une base pivot au format Road2.
Pour la procédure concernant la génération de cette stored data, veuillez vous référer à la documentation du processing vector-db-to-pivot-road2
.
Execution du traitement#
Récupération identifiant stored data base pivot#
Avant le lancement du processing, il est nécessaire qu’une stored data de type VECTOR-DB
contenant une base au format pivot Road2 soit déjà disponible dans le datastore.
L’identifiant de la stored data créé est nommé stored-data-id
dans les paragraphes suivants.
Récupération du traitement pivot-road2-to-graph-{graph-type}
#
GET {{baseUrl}}/datastores/:datastore/processings
On va utiliser l’identifiant du processing pivot-road2-to-graph-{graph-type}
, que l’on nomme processing-id
pour la suite.
Création d’une exécution du traitement pivot-road2-to-graph-{graph-type}
#
POST {{baseUrl}}/datastores/:datastore/processings/executions
En paramètre on doit indiquer :
le processing utilisé
les inputs
le nom de la données en sortie
Voici un exemple d’appel pour pivot-road2-to-graph-valhalla
:
{
"processing": "{{processing-id}}",
"inputs": {
"upload": [],
"stored_data": [
"{{stored-data-id}}"
]
},
"output": {
"stored_data": {
"name": "graph_valhalla"
}
},
"parameters": {
"cost_calculations": [
{
"name": "CC_car",
"variables": [
{
"name": "nature",
"column_name": "nature",
"mapping": "value"
},
{
"name": "length_m",
"column_name": "length_m",
"mapping": "value"
},
{
"name": "vitesse_voiture",
"column_name": "vitesse_moyenne_vl",
"mapping": "value"
},
{
"name": "sens",
"column_name": "direction",
"mapping": "value"
},
{
"name": "urbain",
"column_name": "urbain",
"mapping": {
"True": 5,
"False": 0
}
}
],
"outputs": [
{
"name": "cost_m_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "distance",
"operations": [
[
"add",
"length_m"
]
]
},
{
"name": "cost_s_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "duration",
"operations": [
[
"add",
"length_m"
],
[
"divide",
"vitesse_voiture"
],
[
"multiply",
3.6
],
[
"add",
"urbain"
]
]
},
{
"name": "cost_m_pedestrian",
"speed_value": 4,
"direct_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"reverse_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"turn_restrictions": false,
"cost_type": "distance",
"operations": [
["add", "length_m"]
]
},
{
"name": "cost_s_pedestrian",
"speed_value": 4,
"direct_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"reverse_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"turn_restrictions": false,
"cost_type": "duration",
"operations": [
["add", "length_m"],
["multiply", 0.9]
]
}
]
}
],
"costs": [
{
"profile": "car",
"optimization": "fastest",
"cost_calculation": "CC_car"
},
{
"profile": "car",
"optimization": "shortest",
"cost_calculation": "CC_car"
},
{
"profile": "pedestrian",
"optimization": "fastest",
"cost_calculation": "CC_car"
},
{
"profile": "pedestrian",
"optimization": "shortest",
"cost_calculation": "CC_car"
}
]
}
}
Voici un exemple d’appel pour pivot-road2-to-graph-osrm
:
{
"processing": "{{processing-id}}",
"inputs": {
"upload": [],
"stored_data": [
"{{stored-data-id}}"
]
},
"output": {
"stored_data": {
"name": "graph_osrm"
}
},
"parameters": {
"cost_calculations": [
{
"name": "CC_car",
"variables": [
{
"name": "nature",
"column_name": "nature",
"mapping": "value"
},
{
"name": "length_m",
"column_name": "length_m",
"mapping": "value"
},
{
"name": "vitesse_voiture",
"column_name": "vitesse_moyenne_vl",
"mapping": "value"
},
{
"name": "sens",
"column_name": "direction",
"mapping": "value"
},
{
"name": "urbain",
"column_name": "urbain",
"mapping": {
"True": 5,
"False": 0
}
}
],
"outputs": [
{
"name": "cost_m_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "distance",
"operations": [
[
"add",
"length_m"
]
]
},
{
"name": "cost_s_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "duration",
"operations": [
[
"add",
"length_m"
],
[
"divide",
"vitesse_voiture"
],
[
"multiply",
3.6
],
[
"add",
"urbain"
]
]
},
{
"name": "cost_s_pedestrian",
"speed_value": 4,
"direct_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"reverse_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"turn_restrictions": false,
"cost_type": "duration",
"operations": [
["add", "length_m"],
["multiply", 0.9]
]
}
]
}
],
"costs": [
{
"profile": "car",
"optimization": "fastest",
"name" : "cost_m_car",
"cost_calculation": "CC_car"
},
{
"profile": "car",
"optimization": "shortest",
"name" : "cost_s_car",
"cost_calculation": "CC_car"
},
{
"profile": "pedestrian",
"optimization": "shortest",
"name" : "cost_s_pedestrian",
"cost_calculation": "CC_car"
}
]
}
}
Voici un exemple d’appel pour pivot-road2-to-graph-db
:
{
"processing": "{{processing-id}}",
"inputs": {
"upload": [],
"stored_data": [
"{{stored-data-id}}"
]
},
"output": {
"stored_data": {
"name": "graph_pgr"
}
},
"parameters": {
"cost_calculations": [
{
"name": "CC_car",
"variables": [
{
"name": "nature",
"column_name": "nature",
"mapping": "value"
},
{
"name": "length_m",
"column_name": "length_m",
"mapping": "value"
},
{
"name": "vitesse_voiture",
"column_name": "vitesse_moyenne_vl",
"mapping": "value"
},
{
"name": "sens",
"column_name": "direction",
"mapping": "value"
},
{
"name": "urbain",
"column_name": "urbain",
"mapping": {
"True": 5,
"False": 0
}
}
],
"outputs": [
{
"name": "cost_m_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "distance",
"operations": [
[
"add",
"length_m"
]
]
},
{
"name": "cost_s_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "duration",
"operations": [
[
"add",
"length_m"
],
[
"divide",
"vitesse_voiture"
],
[
"multiply",
3.6
],
[
"add",
"urbain"
]
]
},
{
"name": "cost_m_pedestrian",
"speed_value": 4,
"direct_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"reverse_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"turn_restrictions": false,
"cost_type": "distance",
"operations": [
["add", "length_m"]
]
},
{
"name": "cost_s_pedestrian",
"speed_value": 4,
"direct_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"reverse_conditions" : "nature~='Type autoroutier';nature~='Bretelle'",
"turn_restrictions": false,
"cost_type": "duration",
"operations": [
["add", "length_m"],
["multiply", 0.9]
]
}
]
}
],
"costs": [
{
"profile": "car",
"optimization": "fastest",
"cost_calculation": "CC_car"
},
{
"profile": "car",
"optimization": "shortest",
"cost_calculation": "CC_car"
},
{
"profile": "pedestrian",
"optimization": "fastest",
"cost_calculation": "CC_car"
},
{
"profile": "pedestrian",
"optimization": "shortest",
"cost_calculation": "CC_car"
}
]
}
}
Voici un exemple du retour de l’API pour pivot-road2-to-graph-valhalla
::
{
"processing": {
"name": "pivot-road2-to-graph-valhalla",
"_id": "93d760fd-83a0-415c-ba08-256035e8e1dd"
},
"status": "CREATED",
"creation": "2023-06-14T11:47:49.754478190Z",
"inputs": {
"upload": [],
"stored_data": [
{
"name": "pivot_montfort_bdtopo",
"type": "VECTOR-DB",
"status": "GENERATED",
"srs": "EPSG:4326",
"_id": "9a97d4b4-ce22-4516-8fed-c9ce4c8624a0"
}
]
},
"output": {
"stored_data": {
"name": "graph_valhalla",
"type": "GRAPH-VALHALLA",
"status": "CREATED",
"_id": "0aa94a95-7422-4e24-8d22-c42a5e4176ae"
}
},
"parameters": {
"costs": [
{
"profile": "car",
"optimization": "fastest",
"cost_calculation": "CC_car"
},
{
"profile": "car",
"optimization": "shortest",
"cost_calculation": "CC_car"
}
],
"bbox": {
"west": -180,
"east": 180,
"south": -90,
"north": 90
},
"cost_calculations": [
{
"name": "CC_car",
"variables": [
{
"name": "nature",
"column_name": "nature",
"mapping": "value"
},
{
"name": "length_m",
"column_name": "length_m",
"mapping": "value"
},
{
"name": "length_m",
"column_name": "length_m",
"mapping": "value"
},
{
"name": "vitesse_voiture",
"column_name": "vitesse_moyenne_vl",
"mapping": "value"
},
{
"name": "sens",
"column_name": "direction",
"mapping": "value"
},
{
"name": "urbain",
"column_name": "urbain",
"mapping": {
"True": 5,
"False": 0
}
}
],
"outputs": [
{
"name": "cost_m_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "distance",
"operations": [
[
"add",
"length_m"
]
]
},
{
"name": "cost_s_car",
"speed_value": "vitesse_voiture",
"direct_conditions": "sens>=0;vitesse_voiture>0",
"reverse_conditions": "sens<=0;vitesse_voiture>0",
"turn_restrictions": true,
"cost_type": "duration",
"operations": [
[
"add",
"length_m"
],
[
"divide",
"vitesse_voiture"
],
[
"multiply",
3.6
],
[
"add",
"urbain"
]
]
},
{
"name": "cost_m_pedestrian",
"speed_value": 4,
"direct_conditions": "nature~='Type autoroutier';nature~='Bretelle'",
"reverse_conditions": "nature~='Type autoroutier';nature~='Bretelle'",
"turn_restrictions": false,
"cost_type": "distance",
"operations": [
[
"add",
"length_m"
]
]
},
{
"name": "cost_s_pedestrian",
"speed_value": 4,
"direct_conditions": "nature~='Type autoroutier';nature~='Bretelle'",
"reverse_conditions": "nature~='Type autoroutier';nature~='Bretelle'",
"turn_restrictions": false,
"cost_type": "duration",
"operations": [
[
"add",
"length_m"
],
[
"multiply",
0.9
]
]
}
]
}
]
},
"_id": "5c7e96b5-798d-4bb4-934f-2771233d1804"
}
En retour on va pouvoir récupérer l’identification de l’exécution execution-id
dans l’attribut _id
, qui doit être utilisé pour les requêtes suivantes.
On récupère aussi l’identifiant de la stored data qui sera créé après l’execution ["output"]["stored_data"]["_id"]
.
Il s’agit de l’identifiant de la stored data en sortie du processing de création de graph Road2.
Lancement execution pivot-road2-to-graph-{graph-type}
#
POST {{baseUrl}}/datastores/:datastore/processings/executions/:execution/launch
On indique execution-id
dans les variables de chemin pour execution
.
Le traitement est lancé dans l’entrepot. Selon le type de graphe demandé, une stored data est ajouté dans l’entrepot:
pivot-road2-to-graph-db
:GRAPH-DB
pivot-road2-to-graph-osrm
:GRAPH-OSRM
pivot-road2-to-graph-valhalla
:GRAPH-VALHALL