Service Géoplateforme de calcul altimétrique
- 1. Généralités
- 2. Consulter la liste des ressources
- 3. Consulter le détail d'une ressource
- 4. Calculer des altitudes
- 5. Différences et adaptations entre le service Géoportail et le service Géoplateforme
Table des matières
Titre
1. Généralités
Ce service s'appuie sur des ressources altimétriques pour fournir des altitudes. Ainsi, lancer un calcul en sollicitant une ressource altimétrique basée sur la donnée RGE ALTI® donnera un résultat différent du même calcul sollicitant une ressource altimétrique basée sur la donnée BD ALTI®, en raison des différences de résolution et de précision de ces deux produits.
Au moyen d'une API REST, interrogeable en méthode GET et POST, le service permet d'obtenir :
- l'altitude d'un ou de plusieurs points ;
- un profil altimétrique le long d'une courbe.
Le swagger de l'API est accessible ici : https://data.geopf.fr/altimetrie/swagger-ui/index.html
Titre
2. Consulter la liste des ressources
La liste des ressources disponibles au sein du service de calcul altimétrique est consultable via la requête :
https://data.geopf.fr/altimetrie/resources
La requête a pour paramètre optionnel keywords permettant de filtrer les ressources en fonction de leurs mots clés.
Exemples d'interrogations filtrées sur le mot clé "Altitude", puis sur les deux mots clés "Altitude" et "Exemple" :
https://data.geopf.fr/altimetrie/resources?keywords=Altitude
https://data.geopf.fr/altimetrie/resources?keywords=Altitude&keywords=Exemple
Titre
3. Consulter le détail d'une ressource
Les informations détaillées (emprise des données, sources, etc.) d'une ressource sont consultables via la requête :
https://data.geopf.fr/altimetrie/resources/{id_ressource}
Exemple d'interrogation sur la ressource d'identifiant "ign_rge_alti_wld" (RGE ALTI® de l'IGN) :
https://data.geopf.fr/altimetrie/resources/ign_rge_alti_wld
Titre
4. Calculer des altitudes
4.1 Déterminer l'altitude d'un ou plusieurs points via la méthode GET
Ce calcul permet d'obtenir l'altitude d'un ou plusieurs points à partir de leurs coordonnées géographiques. Il est accessible via l'URL suivante :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.{format}
La requête a pour caractéristiques :
- Méthode : GET
- Paramètres obligatoires :
- format :
- Description : format de sortie
- Format : texte
- Valeurs possibles : json, xml
- lon :
- Description : liste des longitudes
- Format : liste de décimaux (texte)
- Valeurs possibles : de -180 à +180
- Contraintes : nombre de longitudes identique au nombre de latitudes, limité à 5 000
- lat :
- Description : liste des latitudes
- Format : liste de décimaux (texte)
- Valeurs possibles : de -90 à +90
- Contraintes : nombre de latitudes identique au nombre de longitudes, limité à 5 000
- resource :
- Description : identifiant de la donnée altimétrique sollicitée
- Format : texte
- format :
- Paramètres facultatifs :
- delimiter :
- Description : caractère utilisé pour séparer les longitudes et les latitudes
- Format : texte
- Valeurs possibles : "|" ou ";" ou ","
- indent :
- Description : choix d'une réponse indentée
- Format : booléen (texte)
- Valeurs possibles : false (réponse non indentée), true (réponse indentée)
- Valeur par défaut : false
- measures :
- Description : choix d'une altitude d'une source unique ou de plusieurs sources (dans ce cas avec informations sur la source et la précision)
- Format : booléen (texte)
- Valeurs possibles : false (une altitude par point), true (une ou plusieurs altitudes par point en fonction du nombre de pyramides associées à la "resource")
- Valeur par défaut : false
- zonly :
- Description : choix d'un tableau d'altitudes ou d'une réponse étendue
- Format : booléen (texte)
- Valeurs possibles : false (réponse étendue), true (simple tableau de valeurs)
- Valeur par défaut : false
- delimiter :
- Remarques :
- Pour un point située dans une zone non couverte par la donnée, l'altitude renvoyée sera "-99999"
- Les altitudes fournies sont arrondies à 2 chiffres après la virgule
Si une coordonnée fournie est située dans une zone non couverte, l'altitude renvoyée aura pour valeur "-99999".
Exemple de requête et résultat en JSON :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=1.48|1.49&lat=43.54|43.55&resource=ign_rge_alti_wld&delimiter=|&indent=false&measures=false&zonly=false
{"elevations": [{"lon": 1.48, "lat": 43.54, "z": 164.34, "acc": "Variable suivant la source de mesure"}, {"lon": 1.49, "lat": 43.55, "z": 141.33, "acc": "Variable suivant la source de mesure"}]}
Exemple de requête et résultat en XML:
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.xml?lon=1.48|1.49&lat=43.54|43.55&resource=ign_rge_alti_wld&delimiter=|&indent=false&measures=false&zonly=false
<elevations>
<elevation>
<lon>1.48</lon>
<lat>43.54</lat>
<z>164.34</z>
<acc>Variable suivant la source de mesure</acc>
</elevation>
<elevation>
<lon>1.49</lon>
<lat>43.55</lat>
<z>141.33</z>
<acc>Variable suivant la source de mesure</acc>
</elevation>
</elevations>
Exemple de requête et résultat en JSON, sous forme de tableau de valeurs, avec réponse indentée :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=1.48|1.49&lat=43.54|43.55&resource=ign_rge_alti_wld&delimiter=|&indent=true&measures=false&zonly=true
{
"elevations": [
164.34,
141.33
]
}
Exemple de requête et résultat en JSON, sous forme de tableau de valeurs, avec réponse indentée et mesures multiples :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=1.48;1.49&lat=43.54;43.55&resource=ign_rge_alti_wld&delimiter=;&indent=true&measures=true&zonly=false
{
"elevations": [
{
"lon": 1.48,
"lat": 43.54,
"z": 164.34,
"acc": "Variable suivant la source de mesure",
"measures": [
{
"z": 164.34,
"source_name": "RGE Alti IGN",
"source_measure": "Fixed value",
"acc": "Variable suivant la source de mesure",
"title": "Pyramide RGE Alti France Enti\u00e8re (M\u00e9tropole, DOM et COM couvertes)"
}
]
},
{
"lon": 1.49,
"lat": 43.55,
"z": 141.33,
"acc": "Variable suivant la source de mesure",
"measures": [
{
"z": 141.33,
"source_name": "RGE Alti IGN",
"source_measure": "Fixed value",
"acc": "Variable suivant la source de mesure",
"title": "Pyramide RGE Alti France Enti\u00e8re (M\u00e9tropole, DOM et COM couvertes)"
}
]
}
]
}
4.2 Déterminer l'altitude d'un ou plusieurs points via la méthode POST
Ce calcul permet d'obtenir l'altitude d'un ou plusieurs points à partir de leurs coordonnées géographiques. Il est accessible via l'URL suivante :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.{format}
Il utilise la méthode POST et nécessite donc de fournir en entrée un "body" sous la forme d'un objet JSON.
Exemple d'appel :
curl -X 'POST' \
'https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"lon": "1.48",
"lat": "43.54",
"resource": "string",
"delimiter": "|",
"indent": "false",
"measures": "false",
"zonly": "false"
}'
4.3 Déterminer le profil altimétrique d'une courbe via la méthode GET
Ce calcul permet d'obtenir un profil en long. Il est accessible via l'URL suivante :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevationLine.{format}
La requête elevationLine a les mêmes caractéristiques que la requête elevation, avec en supplément :
- Paramètres facultatifs supplémentaires :
- profile_mode :
- Description : mode de calcul altimétrique
- Format : texte
- Valeurs possibles : simple (calcul classique), accurate (permet de doubler la valeur du paramètre "sampling" afin de gagner en précision mais avec un temps de réponse plus long)
- Valeur par défaut : simple
- sampling :
- Description : nombre de points constituant l'échantillonnage
- Format : entier
- Valeurs possibles : de 2 à 5000
- Valeur par défaut : le nombre de couples (lon,lat)
- Contrainte : ne doit pas dépasser 5000
- profile_mode :
Exemple de requête et résultat en JSON en profile_mode "simple" :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevationLine.json?lon=1.48|1.49&lat=43.54|43.55&resource=ign_rge_alti_wld&delimiter=|&indent=true&measures=false&profile_mode=simple&sampling=4
{
"elevations": [
{
"lon": 1.48,
"lat": 43.54,
"z": 164.34,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.4833333333333334,
"lat": 43.54333333333333,
"z": 152.62,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.4866666666666666,
"lat": 43.54666666666667,
"z": 145.1,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.49,
"lat": 43.55,
"z": 141.33,
"acc": "Variable suivant la source de mesure"
}
],
"height_differences": {
"positive": 0,
"negative": 23.00999999999999
}
}
Exemple de requête et résultat en JSON en profile_mode "accurate" :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevationLine.json?lon=1.48|1.49&lat=43.54|43.55&resource=ign_rge_alti_wld&delimiter=|&indent=true&measures=false&profile_mode=accurate&sampling=4
{
"elevations": [
{
"lon": 1.48,
"lat": 43.54,
"z": 164.34,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.4814285714285713,
"lat": 43.54142857142857,
"z": 159.39,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.4828571428571429,
"lat": 43.542857142857144,
"z": 155.07,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.4842857142857142,
"lat": 43.544285714285714,
"z": 149.4,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.4857142857142858,
"lat": 43.54571428571428,
"z": 146.7,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.487142857142857,
"lat": 43.54714285714285,
"z": 144.53,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.4885714285714287,
"lat": 43.54857142857143,
"z": 142.59,
"acc": "Variable suivant la source de mesure"
},
{
"lon": 1.49,
"lat": 43.55,
"z": 141.33,
"acc": "Variable suivant la source de mesure"
}
],
"height_differences": {
"positive": 0,
"negative": 23.00999999999999
}
}
4.4 Déterminer le profil altimétrique d'une courbe via la méthode POST
Ce calcul permet d'obtenir un profil en logn. Il est accessible via l'URL suivante :
https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevationLine.{format}
Il utilise la méthode POST et nécessite donc de fournir en entrée un "body" sous la forme d'un objet JSON.
Exemple d'appel :
curl -X 'POST' \
'https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevationLine.json' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"lon": "1.48",
"lat": "43.54",
"resource": "string",
"delimiter": "|",
"indent": "false",
"measures": "false",
"zonly": "false"
}'
Titre
5. Différences et adaptations entre le service Géoportail et le service Géoplateforme
5.1 Différences :
- Changement d’URL : Comme pour les autres géoservices, l’URL d’accès change,. ex. au lieu de https://wxs.ign.fr/calcul/geoportail/alti/rest/route?, on aura https://data.geopf.fr/altimetrie/route?
- L'appel au nouveau service se fait dans l’esprit Opendata de la Géoplateforme c’est à dire sans clé.
- Ajout d’un paramètre “resource” :
- Un nouveau paramètre obligatoire est introduit pour l’ensemble des routes : le paramètre “resource”. Il permet de procéder au calcul sur différentes sources de données d’altitudes.
- En GET l'appel évolue donc de la manière suivante :
- Ancien appel en https://wxs.ign.fr/calcul/geoportail/alti/rest/route?
- Nouvel appel en https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.{format}?resource=id_ressource
- Ces ressources peuvent être découvertes via une nouvelle route d'API dédiée reprise dans la documentation détaillée de la nouvelle API.
- L’appel WPS est abandonné au profit d’un appel REST en POST reprenant les mêmes paramètres que l’appel GET
- Les messages d’erreur ont été homogénéisés et standardisés. Une erreur d’appel API renvoie maintenant systématiquement un code 400 et un message dont la structure est : {"error": {"code": "BAD_PARAMETER", "description": "Message"}}
5.2 Nouveautés :
- Les ressources sur lesquelles portent la délivrance d’altitude peuvent être de différents types :
- Comme pour la version du Géoportail : une seule donnée disponible nationalement (DOM compris) délivrant des altitudes sans autre information
- Une donnée d’altitude associée à des données précisant la source de la mesure (LIDAR, Corrélation...) et la précision de mesure associée et ce de manière dynamique pour chaque point fourni en résultat
- Des ressources multiples superposées (MNT + MNS sur un même territoire par exemple) ou juxtaposées (Continent + Corse par exemple), elles même associées, éventuellement à des informations de source et de précisions dynamiques.
- Attention : certaines de ces ressources peuvent être inadaptées à l’utilisation du comportement par défaut de l’API, c’est à dire, celui assurant une reprise de l’existant proche de l’identique
- Les ressources disponibles pour obtenir des altitudes sont consultables via deux nouvelles routes dédiées : une pour découvrir l’ensemble des ressource disponibles :
- https://data.geopf.fr/altimetrie/resources
- et une seconde pour obtenir des détails (emprises des données, sources …) sur une des ressources listées par la route précédente : https://data.geopf.fr/altimetrie/resources/{id_ressource}/
- Introduction d’un paramètre “measures” facultatif permettant d’accéder aux informations détaillées d’une mesure, utile dans le cadre de l’utilisation d’une mesure sur une ressource multi-source ou utilisant des métadonnées de source et/ou de précision dynamique.
5.3 Evolution des appels type en GET :
- Appel en GET sur la route elevation (altitudes d’un ou plusieurs points) ou elevationLine (altitudes sur un profil en long) :
- Appel Géoportail : https://wxs.ign.fr/calcul/alti/rest/elevation.json?lat=41.91102104468432&lon=8.795425081633132&zonly=false&indent=true
- Appel GPF : https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json.json?resource=ign_rge_alti_wld&lat=41.91102104468432&lon=8.795425081633132&zonly=false&indent=true
>>Sur l’appel seule la racine de l’url et l’ajout du paramètre “resource” change
- Réponse Géoportail :
{"elevations": [
{
"lon": 8.79542508,
"lat": 41.91102104,
"z": 4.31,
"acc": 2.5
}
]}
-
Réponse GPF :
{
"elevations": [
{
"lon": 8.795425081633132,
"lat": 41.91102104468432,
"z": 4.28,
"acc": "Distance d\u2019interpolation inf\u00e9rieure \u00e0 1 m"
}
]
}
>>Sur la réponse, ni la structure, ni les valeurs ne changent (à ressource de délivrance d’altitude constante). Si une ressource avec valeur d’accuracy dynamique est utilisée, la valeur du champ “acc” de la réponse sera variable et dépendante de la coordonnée interrogée.
5.4 Exemple des nouveaux appels en POST :
- Url d’appel (exemple en XML) : https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.xml
- Corps de la requête (toujours en JSON, même si la réponse est demandée en xml):
{
"lon": "8.795425081633132",
"lat": "41.91102104468432",
"resource": "nl_rge_alti_capa_32bits_full_bbox_ignf_lamb93",
"delimiter": "|",
"indent": "true",
"measures": "false",
"zonly": "false"
}
- Réponse :
<elevations>
<elevation>
<lon>8.795425081633132</lon>
<lat>41.91102104468432</lat>
<z>4.28</z>
<acc>Distance d’interpolation inférieure à 1 m</acc>
</elevation>
</elevations>
5.5 Exemple d’impact du nouveau paramètre “measures=true” :
- Cas d’une ressource unique avec source et paramètre de précision dynamique :
{
"elevations": [
{
"lon": 8.795425081633132,
"lat": 41.91102104468432,
"z": 4.28,
"acc": "Distance d'interpolation inférieure à 1 m",
"measures": [
{
"z": 4.28,
"source_name": "LiDAR Topo externe densité d'acquisition théorique 2 points au m² (de 81 à 87)",
"source_measure": "Dynamic value",
"acc": "Distance d'interpolation inférieureà 1 m",
"title": "RGE Alti 1 m : CAPA 32bits"
}
]
}
]
}
La partie haute de la réponse :
"lon": 8.795425081633132,
"lat": 41.91102104468432,
"z": 4.28,
"acc": "Distance d'interpolation inférieure à 1 m",
correspond à la réponse par défaut : la valeur de “acc” renvoie la valeur pour les coordonnées demandées. Dans le cas de l’utilisation d’un RGE ALTI, on verra pour cette valeur, la valeur donnée par le masque de distance si ce dernier est bien paramétré au niveau de la ressource utilisée.
La partie basse
"measures": [
{
"z": 4.28,
"source_name": "LiDAR Topo externe densité d'acquisition théorique 2 points au m² (de 81 à 87)",
"source_measure": "Dynamic value",
"acc": "Distance d'interpolation inférieureà 1 m",
"title": "RGE Alti 1 m : CAPA 32bits"
}
]
donne le détail de la mesure avec les valeurs de la réponse par défaut (z et acc) et en plus:
- Source_name : donne la valeur de la source de la mesure (LIDAR, Corrélation...) suivant ce qui a été configuré dans la ressource.
- Source_measure : indique si la valeur qui est renvoyée est dynamique (variable en fonction de la coordonnée) ou non
- Title : donne le titre de la ressource ayant servie à la mesure, ici un RGE ALti à 1m de résolution
Les valeurs qui sont présentées ici à titre d'exemple sont issus des masques de source et de distance livrés avec le RGE Alti.
- Cas d’une ressource avec données superposées (MNT + MNS) avec source et paramètre de précision dynamique :
{
"elevations": [
{
"lon": 8.795425081633132,
"lat": 41.91102104468432,
"z": 4.11,
"acc": "50 cm",
"measures": [
{
"z": 4.11,
"source_name": "MNS de corr\u00e9lation",
"source_measure": "Fixed value",
"acc": "50 cm",
"title": "MNS : CAPA 32bits"
},
{
"z": 4.28,
"source_name": "LiDAR Topo externe densit\u00e9 d\u2019acquisition th\u00e9orique 2 points au m\u00b2 (de 81 \u00e0 87)",
"source_measure": "Dynamic value",
"acc": "Distance d\u2019interpolation inf\u00e9rieure \u00e0 1 m",
"title": "RGE Alti 1 m : CAPA 32bits"
}
]
}
]
}
On ne redétaille pas ici le descriptif partie haute et partie basse car la structure et le principe restent le même.
La nouveauté introduite ici est que la mesure peut renvoyer des valeurs sur un MNS et un MNT, le MNS étant défini en premier dans cette ressource, apparait en premier dans le noeud “measures” et apparait par défaut en partie haute de la réponse.
- Cas d’une ressource avec données juxtaposée (ici avec un MNT Corse + un MNT Ile de la Réunion) avec source et paramètre de précision dynamique :
{
"elevations": [
{
"lon": 8.73370173,
"lat": 41.92341582,
"z": 80.17,
"acc": "Distance d\u2019interpolation inf\u00e9rieure \u00e0 1 m",
"measures": [
{
"z": 80.17,
"source_name": "LiDAR Topo externe densit\u00e9 d\u2019acquisition th\u00e9orique 2 points au m\u00b2 (de 81 \u00e0 87)",
"source_measure": "Dynamic value",
"acc": "Distance d\u2019interpolation inf\u00e9rieure \u00e0 1 m",
"title": "RGE Alti 1 m : CAPA 32bits"
},
{
"z": -99999.0,
"source_name": "Source mapping not found",
"source_measure": "Dynamic value",
"acc": "Accuracy mapping not found",
"title": "RGE Alti 1 m : CATCO 32bits"
}
]
}
]
}
Dans ce cas-ci on garde le principe de réponse par défaut se faisant sur la première source de donnée définie dans la ressource, ici le MNT de la Corse.
Dans ce contexte, si la coordonnée demandée est en Corse, la valeur par défaut donnera directement la valeur utilisable, si c’est à la Réunion, en revanche, l’utilisateur recevra du No Data (z = - 99 999).
L’intéret du paramètre measures est ici de pouvoir distinguer la donnée qui renvoie les valeurs de celle qui renvoie les NotData.
Une autre manière de faire serait d’exploiter les valeurs de bbox présentes directement au niveau de la ressource de délivrance d’altitude.