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 à tester

  • DATASTORE_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