Configuration#

Le json-schema suivant décrit le json qui sera recu dans la balise type_infos des paramètres de publication.

{
    title: string
    abstract: string
    keywords: [string]
    limits: {
            steps: # Pour le calcul d'itinéraire
              type: number
              default: 16
              minimum: 0
              maximum: 25
            constraints: # Pour le calcul d'itinéraire
              type: number
              default: 3
              minimum: 0
              maximum: 6
            duration: # Pour le calcul d'isochrone
              type: number
              default: 43200
              minimum: 0
              maximum: 86400
            distance: # Pour le calcul d'isochrone
              type: number
              default: 1000000
              minimum: 0
              maximum: 2000000
    }
    bbox    {
        east*    number($double)
        north*    number($double)
        west*    number($double)
        south*    number($double)
    }
    constraints {
        JsonNode
    }
    srss : [string]
    used_data*    [{
        stored_data*    UUID
        profile*    string
        optimization*    string
        cost_column    string
        cost_type    stringEnum ( {"time", "distance"} )
        costing        stringEnum ( {"auto", "auto_shorter" "pedestrian"} )
        reverse_cost_column    string
        attributes [{
             table_name string # si non fourni, on met 'ways'
             native_name* string # doit être dans la table (info au niveau de la stored data GRAPH-DB)
             public_name* string
             default* boolean
        }]
    }]
}

Vérifications effectuées par l’entrepot#

  • limits : voir les contraintes dans le tableau

  • la bbox si elle est fournie doit être valide (et en 4326)

  • constraints : l’objet de contraintes sera validé via le schéma JSON définit dans le chapitre suivant. Pas de validation métier supplémentaire, l’API n’interprète pas le contenu.

  • srss: si une liste est fournie, une vérification de compatibilité est effectué avec le service Road2. Si pas de valeur définie, la projection EPSG:4326 est utilisée.

  • used_data

    • ne doit pas être vide

    • stored_data doit exister et appartenir au datastore, sinon erreur 404

    • la stored_data soit être au status GENERATED (voir les autres stratégies), sinon erreur 409

    • TOUTES les stored_data doivent avoir le même type parmis les 3 possibles (GRAPH-DB / GRAPH-OSRM / GRAPH-VALHALLA), sinon erreur 400

    • le couple used_data[n]/profile | used_data[n]/optimization doit être dans la liste des couple optimization_profile de la used_data[n]/stored_data, sinon erreur 400, le couple used_data[n]/profile | used_data[n]/optimization doit être unique pour la configuration, sinon erreur 400

    • si stored_data/type = GRAPH-DB, la stored_data doit contenir au moins uen relation ways, sinon erreur 400

    • used_data[n]/cost_column et used_data[n]/reverse_cost_column sont obligatoires pour stored_data/type = GRAPH-DB et doivent être dans la liste attributes de la table ways, sinon erreur 400

    • used_data[n]/cost_type est obligatoire pour stored_data/type = GRAPH-DB, sinon erreur 400,

    • costing est obligatoire quand stored_data/type est GRAPH-VALHALLA, sinon erreur 400,

    • attributes :

      • le champ attributes ne doit être renseigné que dans le cas d’un stored_data/type GRAPH-DB, sinon erreur 400

      • le table_name doit être dans la liste des relations de la stored_data

      • le attributes[n]/native_name doit être dans la liste attributes de la stored_data/relation correspondante, sinon erreur 400

      • Le couple table_name/native_name doit être unique dans la liste des used_data[n]/attributes[n], sinon erreur 400

      • Le public_name doit être unique dans la liste des used_data[n]/attributes[n]/native_name, sinon erreur 400

      • Le public_name doit respecter la regexp ^[A-Za-z0-9_\-]+$

JSON-schema constraints#

{
  "$schema": "https://json-schema.org/draft/2020-12/schema#",
  "title": "Generated schema for constraints field",
  "type": "object",
  "properties": {
    "defaultPreferredCostRatio": {
      "type": "number"
    },
    "defaultAvoidCostRatio": {
      "type": "number"
    },
    "values": {
      "type": "array",
      "items": {
        "anyOf" : [
          {"type": "object",
            "properties": {
              "keyType": {
                "type": "string",
                "enum": ["name-osrm"]
              },
              "key": {
                "type": "string"
              },
              "availableConstraintType": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "availableValues": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "string"
                    },
                    "field": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "value",
                    "field"
                  ]
                }
              }
            },
            "required": [
              "keyType",
              "key",
              "availableConstraintType",
              "availableValues"
            ]
          },
          {"type": "object",
            "properties": {
              "keyType": {
                "type": "string",
                "enum": ["name-pgr"]
              },
              "key": {
                "type": "string"
              },
              "availableConstraintType": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "availableValues": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "string"
                    },
                    "field": {
                      "type": "string"
                    },
                    "condition": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string"
                        },
                        "value": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "type",
                        "value"
                      ]
                    }
                  },
                  "required": [
                    "value",
                    "field",
                    "condition"
                  ]
                }
              }
            },
            "required": [
              "keyType",
              "key",
              "availableConstraintType",
              "availableValues"
            ]},
          {"type": "object",
            "properties": {
              "keyType": {
                "type": "string",
                "enum": ["numerical-pgr"]
              },
              "key": {
                "type": "string"
              },
              "availableConstraintType": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "field": {
                "type": "string"
              }
            },
            "required": [
              "keyType",
              "key",
              "availableConstraintType",
              "field"
            ]},
          {"type": "object",
            "properties": {
              "keyType": {
                "type": "string",
                "enum": ["name-valhalla"]
              },
              "key": {
                "type": "string"
              },
              "availableConstraintType": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "availableValues": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "string"
                    },
                    "field": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "value",
                    "field"
                  ]
                }
              }
            },
            "required": [
              "keyType",
              "key",
              "availableConstraintType",
              "availableValues"
            ]}
    ]
  },
  "required": [
    "values"
  ]
}
}
}