Les ressources

Pour pouvoir utiliser l’API REST Altimétrie, au moins une ressource doit être disponible.

Les ressources sont ajoutées et stockées dans l’entrepôt de l’IGN.

La documentation de l’API Entrepôt est accessible à l’adresse suivante : https://geoplateforme.pages.gpf-tech.ign.fr/gpf-warehouse-initial-swagger/

JSON Schéma de la ressource dans l’API

La configuration d’une ressource au format JSON Schéma est actuellement la suivante dans l’entrepôt :

{
    title*    string
    abstract*    string
    keywords    [string]
    bbox    {
        east*    number($double)
        north*    number($double)
        west*    number($double)
        south*    number($double)
    }
    used_data*    [{
        stored_data*    string($uuid)
        title*    string
        bbox    {
            east*    number($double)
            north*    number($double)
            west*    number($double)
            south*    number($double)
        }
        source*    {
            oneOf ->
            {
                value*    string
            }
            {
                stored_data*    string($uuid)
                mapping*    {string : string}
            }
        }
        accuracy*    {
            oneOf ->
            {
                value*    string
            }
            {
                stored_data*    string($uuid)
                mapping* {string : string}
            }
        }
    }]
}

Chaque ressource est associée à une ou plusieurs pyramides (propriété used_data). Chaque pyramide est associée à une source de données Rok4, une source et à une accuracy.

Un agent de publication est à l’écoute de l’entrepôt grâce à la technologie RabbitMQ. Lorsqu’une ressource est ajoutée, mise à jour, supprimée de l’entrepôt, un message est envoyé à l’agent de publication qui à son tour va faire des appels à l’API pour faire suivre les changements et mettre à jour les ressources disponibles. Ces routes permettant la mise à jour des ressources ne sont pas consultables depuis la documentation Swagger.

Les ressources chargées dans l’API sont stockées dans une base SQLite locale. Ce mode de fonctionnement nous permet de supporter le multithreading via l’option --workers de uvicorn : toutes les instances de l’API créées localement par uvicorn partagent ainsi la même soure de donnée.

Vous avez également la possibilité de publier une ressource.

Publier une ressource dans l’entrepôt pour qu’elle soit utilisable par l’API

Pour pouvoir ajouter une ressource, veuillez suivre la procédure suivante qui suit. Nous allons utiliser plusieurs endpoints de l’entrepôt.

Dans les urls ci-dessous, les éléments entre {} sont des noms de variable à adapter.

Livraisons et vérifications

Déclarer une nouvelle livraison

(POST) /datastores/{datastore}/uploads

Exemple de valeur de variables :

  • datastore : d68295f1-75f6-422c-9226-7fa03f36ab99

Exemple de body

{
  "description": "rgealti test 14",
  "name": "rgealti 14 test",
  "type": "RASTER",
  "srs": "EPSG:2154",
  "type_infos": {}
}

Téléverser un fichier de données

(POST) /datastores/{datastore}/uploads/{upload}/data

Exemple de valeur de variables :

  • datastore : d68295f1-75f6-422c-9226-7fa03f36ab99

  • upload : celui retourné par l’étape précédente

  • path : telechargement-qlf

Demander la fermeture d’une livraison

(POST) /datastores/{datastore}/uploads/{upload}/close

Vérifier le statut de la livraison

(GET) /datastores/{datastore}/uploads/{upload}/checks

Traitements et gestion des traitements de l’entrepôt

Créer une nouvelle exécution d’un traitement

(POST) /datastores/{datastore}/processings/executions

Exemple de body :

{
  "processing": "af022611-13eb-4a18-8d04-9b7604a031cc",
  "inputs": {
    "upload": [
      "f918ffea-5c7f-486f-9bc2-a240a5c6e1e7"
    ]
  },
  "output": {
    "stored_data": {
      "name": "rgealti_14_sbe"
    }
  },
  "parameters": {
    "compression": "zip",
    "tms": "PM",
    "top": "0",
    "bottom": "<AUTO>"
  }
}

Note: le numero du processing correspond aux pyramides rok4

Retourne un ID d’éxécution (tout en bas du json retourné)

Lancement de l’exécution d’un traitement

(POST) /datastores/{datastore}/processings/executions/{execution}/launch,

Récupération de l’id de la pyramide (stored_data) si besoin

(GET) /datastores/{datastore}/processings/executions/{execution}

Configurations et publications - Gestion des configurations sur la plateforme

Créer une nouvelle configuration

(POST) /datastores/{datastore}/configurations

{
    "type": "ALTIMETRY",
    "name": "RGE Alti - Calvados - 8 bits",
    "layer_name": "rge_alti_14_test_sbe",
    "type_infos": {
        "title": "RGE Alti - Calvados échantillon - 8 bits",
        "abstract": "RGE Alti - Calvados échantillon - 8 bits",
        "keywords": [
            "NL",
            "ALTI"
        ],
        "bbox": {
            "west": -1.1923,
            "south": 48.7882,
            "east": -1.1262,
            "north": 48.8464
        },
        "used_data": [
            {
                "title": "RGE Alti 1 m : CAPA",
                "stored_data": "fc3b31ad-bfe3-40f3-a073-4b6b20491d32",
                "bbox": {
                    "west": -1.1923,
                    "south": 48.7882,
                    "east": -1.1262,
                    "north": 48.8464
                },
                "source": {
                    "stored_data": "fc3b31ad-bfe3-40f3-a073-4b6b20491d32",
                    "mapping": {
                        "0": "Autre - Pas de données",
                        "2": "Autre - Raccord aux dépens du LiDAR",
                        "3": "Autre - Raccord aux dépens de la Corrélation",
                        "4": "Autre - Raccord aux dépens du RADAR",
                        "28": "LiDAR mixte Bathy SHOM",
                        "29": "LiDAR mixte BAthy SHOM interpolation > 10 m",
                        "30": "LiDAR Bathy SHOM",
                        "39": "LiDAR Bathy SHOM interpolation > 10m",
                        "40": "SMF SHOM",
                        "49": "SMF SHOM interpolation > 10 m"
                    }
                },
                "accuracy": {
                    "stored_data": "fc3b31ad-bfe3-40f3-a073-4b6b20491d32",
                    "mapping": {
                        "1": "1"
                    }
                }
            }
        ]
    }
}

Cette opération retourne un json avec un id qui sert pour l’étape suivante.

Demande la publication

(POST) /datastores/{datastore}/configurations/{configuration}/offerings

configuration: id donné à l’étape précédente

Exemple de body :

{
  "visibility": "PUBLIC",
  "endpoint": "6aec0a87-933e-4728-86ae-bf9a22efdb97",
  "permissions": [],
  "open": true
}

Note: le endpoint est un id fixé (attribué par WorldLine au moment de nos essais).

Pour vérifier la publication et la mise à disposition de la ressource, des routes dédiées ont été créées.