Calcul altimétrique (REST)
- 1. Généralités
- 2. Connexion aux services d’altimétrie du Géoportail
- 3. Déterminer l’altitude d’un ou plusieurs points
- 3.1 Via l’API REST
- 3.2 Via la norme WPS
- 4. Déterminer le profil altimétrique d’une courbe
- 4.1 Via l’API REST
- 4.2 Via la norme WPS
- 5. Gestion des erreurs
Table des matières
Titre
1. Généralités
La plateforme Géoportail propose deux services d’altimétrie : détermination de l’altitude en un ou plusieurs points et détermination d’un profil altimétrique le long d’une courbe.
Détermination de l’altitude d’un ou plusieurs points
Le service d’altimétrie permet de fournir l’altitude à partir des coordonnées géographiques d’une requête.
Détermination d’un profil altimétrique le long d’une courbe
Un client envoie un ensemble de coordonnées qui définissent un chemin pour lequel le profil altimétrique doit être déterminé.
Le profil est calculé à partir d’un échantillonnage du chemin fourni en entrée. La précision de l’échantillonnage sera fournie en paramètre. La valeur par défaut est 0. La précision représente un nombre de points.
- Si elle n’est pas spécifiée ou est égale à 0 ou 1, on ne modifie pas le nombre des points, le profil sera donc constitué seulement avec les points fournis en entrée.
- Si elle est spécifiée, le profil sera constitué avec autant de points que demandés par la précision, indépendamment du nombre de points donnés en entrée. On retrouve donc 2 cas :
- La précision est inférieure au nombre de points spécifiés en entrée. Dans ce cas le profil sera constitué des nouveaux points répartis sur le chemin à des distances égales.
- La précision est supérieure ou égale au nombre de points spécifiés en entrée. Dans ce cas, le profil sera constitué des points fournis en entrée, et complété par autant de points que nécessaire afin d’atteindre la précision demandée. Les points seront rajoutés de manière itérative, à ce que chaque nouveau point est placé au milieu du plus grand segment.
Le service retourne ensuite chacun des points ainsi calculés avec leur altitude.
Ressources du service d’altimétrie
Les services d’altimétrie ne délivrent qu’une seule ressource :
Nom de la ressource | Nom technique |
---|---|
Alticodage | SERVICE_CALCUL_ALTIMETRIQUE |
Titre
2. Connexion aux services d’altimétrie du Géoportail
Les services de calcul altimétrique du Géoportail sont accessibles selon deux protocoles : une API REST ou via le standard OGC “Web Processing Service” (WPS).
Ils sont accessibles aux adresses suivantes :
Service | URL d’accès |
---|---|
Altitude en un point (API REST) | https://wxs.ign.fr/CLEF/alti/rest/elevation.{format} |
Profil Altimétrique (API REST) | https://wxs.ign.fr/CLEF/alti/rest/elevationLine.{format} |
Altitude et profil altimétrique (WPS) | https://wxs.ign.fr/CLEF/alti/wps?service=WPS&version=1.0.0 |
Le paramètre CLEF doit être remplacé par l'une des clés partagées suivante : "essentiels" ou "calcul"
Titre
3. Déterminer l’altitude d’un ou plusieurs points
Titre
3.1 Via l’API REST
Les formats disponibles pour le paramètre format sont json et xml
Exemple de requête GET n°1 (zonly = true) :
L’attribut "lon" correspond à la liste des longitudes des points dont on veut déterminer l’altitude, l’attribut "lat" correspond à la liste des latitudes des points dont on veut déterminer l’altitude et l’attribut "zonly" est un booléen qui indique s’il on souhaite uniquement un tableau d’altitudes (true) ou bien une réponse étendue (false). Les valeurs retournées sont les altitudes déterminées pour chaque point donné dans la requête.
https://wxs.ign.fr/calcul/alti/rest/elevation.json?lon=0.2367|2.1570&lat=48.0551|46.6077&zonly=true
Réponse simple :
L’attribut "elevations" est un tableau des altitudes déterminées pour les points demandés. Les valeurs sont données dans l’ordre dans lequel les points ont été fournis.
{"elevations": [123.23,19.45]}
Exemple de requête GET n°2 (indent = true) :
L’attribut "indent" est un booléen qui indique si la réponse sera indentée.
https://wxs.ign.fr/calcul/alti/rest/elevation.json?lon=0.2367|2.1570&lat=48.0551|46.6077&indent=true
Réponse étendue et indentée :
L’attribut "elevations" est un tableau des altitudes déterminées pour les points demandés :
- lat : latitude du point
- lon : longitude du point
- z : altitude au point considéré (en mètres)
- acc : précision de la valeur au point considéré
{
"elevations" : [
{
"lon": 0.2367,
"lat": 48.0551,
"z": 96.53,
"acc": 2.5
},
{
"lon": 2.157,
"lat": 46.6077,
"z": 208.77,
"acc": 2.5
}
]
}
Exemple de requête GET n°3 (delimiter = ",") :
L’attribut "delimiter" permet d’indiquer le caractère utilisé pour séparer les longitudes et les latitudes.
https://wxs.ign.fr/calcul/alti/rest/elevation.json?lon=0.2367,2.1570&lat=48.0551,46.6077&delimiter=,
Réponse étendue, non indentée avec le séparateur "," :
L’attribut "elevations" est un tableau des altitudes déterminées pour les points demandés :
- lat : latitude du point
- lon : longitude du point
- z : altitude au point considéré (en mètres)
- acc : précision de la valeur au point considéré
{"elevations": [{"lon": 0.2367,"lat": 48.0551,"z": 96.53,"acc": 2.5},{"lon": 2.157,"lat": 46.6077,"z": 208.77,"acc": 2.5}]}
Table des paramètres
Encapsulation en JSONP :
Pour bénéficier de l’encapsulation en JSONP, il faut utiliser le service avec le format XML. Ainsi, la requête suivante :
https://wxs.ign.fr/calcul/alti/rest/elevation.xml?lon=2.478036&lat=48.87324&output=json&callback=traiteResultat
Donne le résultat suivant :
traiteResultat({"http":{"status":200,"error":null},"xml":"<elevations><elevation><lon>2.478036</lon><lat>48.87324</lat><z>82.35</z><acc>2.5</acc></elevation></elevations>"})
Titre
3.2 Via la norme WPS
Via la norme WPS :
https://wxs.ign.fr/calcul/alti/wps?service=WPS&version=1.0.0
Exemple de requête POST (zonly = true) :
Entête de la requête
Content-type:text/xml
Corps de la requête
<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs"
xmlns:wps="http://www.opengis.net/wps/1.0.0"
xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="http://www.opengis.net/wps/1.0.0
http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
<ows:Identifier>gs:WPSElevation</ows:Identifier>
<wps:DataInputs>
<wps:Input>
<ows:Identifier>lon</ows:Identifier>
<wps:Data>
<wps:LiteralData>0.2367|2.1570</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>lat</ows:Identifier>
<wps:Data>
<wps:LiteralData>48.0551|46.6077</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>format</ows:Identifier>
<wps:Data>
<wps:LiteralData>xml</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>indent</ows:Identifier>
<wps:Data>
<wps:LiteralData>true</wps:LiteralData>
</wps:Data>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm>
<wps:RawDataOutput>
<ows:Identifier>result</ows:Identifier>
</wps:RawDataOutput>
</wps:ResponseForm>
</wps:Execute>
Réponse étendue, indentée et en format XML :
La balise "elevations" est composée des altitudes déterminées pour les points demandés.
- La balise lat correspond à la latitude du point
- La balise lon correspond à la longitude du point
- La balise z correspond à l’altitude au point considéré (en mètres)
- La balise acc correspond à la précision de la valeur au point considéré
Les valeurs sont données dans l’ordre dans lequel les points ont été fournis.
<elevations>
<elevation>
<lon>0.2367</lon>
<lat>48.0551</lat>
<z>93.58</z>
<acc>2.5.0</acc>
</elevation>
<elevation>
<lon>2.157</lon>
<lat>46.6077</lat>
<z>207.53</z>
<acc>2.5.0</acc>
</elevation>
</elevations>
Table des paramètres
Accès en GET
De même que pour le service de géocodage, le service altimétrique en WPS peut être attaqué en GET et bénéficier alors d’une encapsulation en JSONP. La requête :
https://wxs.ign.fr/calcul/alti/wps?service=WPS&version=1.0.0&request=Execute&identifier=gs%3AWPSElevation&datainputs=lon=2.478036;lat=48.87324;format=xml&rawdataoutput=result&output=json&callback=traiteResultat
Donne le résultat suivant :
traiteResultat({"http":{"status":200,"error":null},"xml":"<elevations><elevation><lon>2.478036</lon><lat>48.87324</lat><z>82.35</z><acc>2.5</acc></elevation></elevations>"})
Titre
4. Déterminer le profil altimétrique d’une courbe
Titre
4.1 Via l’API REST
Les formats disponibles sont json et xml.
Exemple de requête GET n°1 (indent = true) :
L’attribut "lon" correspond à la liste des longitudes des points dont on veut déterminer l’élévation, l’attribut "lat" correspond à la liste des latitudes des points dont on veut déterminer l’élévation et l’attribut "indent" est un booléen qui indique si la réponse sera indentée, l’attribut "sampling" correspond au nombre de points constituant l’échantillonnage. Les valeurs retournées sont les élévations déterminées pour chaque point donné dans la requête.
https://wxs.ign.fr/calcul/alti/rest/elevationLine.json?sampling=10&lon=0.2367|2.1570|4.3907&lat=48.0551|46.6077|43.91&indent=true
Réponse indentée :
{"elevations": [
{
"lon": 0.2367,
"lat": 48.0551,
"z": 96.53,
"acc": 2.5
},
{
"lon": 0.72668209,
"lat": 47.69632662,
"z": 137.35,
"acc": 2.5
},
{
"lon": 1.20996836,
"lat": 47.33546691,
"z": 61.6,
"acc": 2.5
},
{
"lon": 1.68669593,
"lat": 46.97257412,
"z": 176.82,
"acc": 2.5
},
{
"lon": 2.157,
"lat": 46.6077,
"z": 208.77,
"acc": 2.5
},
{
"lon": 2.73555223,
"lat": 45.93755309,
"z": 628.88,
"acc": 2.5
},
{
"lon": 3.30030144,
"lat": 45.26446777,
"z": 637.64,
"acc": 2.5
},
{
"lon": 3.85183162,
"lat": 44.58857531,
"z": 1315.04,
"acc": 2.5
},
{
"lon": 4.12281472,
"lat": 44.2496155,
"z": 508.63,
"acc": 2.5
},
{
"lon": 4.3907,
"lat": 43.91,
"z": 182.56,
"acc": 2.5
}
]}
Table des paramètres
Titre
4.2 Via la norme WPS
https://wxs.ign.fr/calcul/alti/wps?service=WPS&version=1.0.0
Entête de la requête
Content-type:text/xml
Corps de la requête
<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs"
xmlns:wps="http://www.opengis.net/wps/1.0.0"
xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="http://www.opengis.net/wps/1.0.0
http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
<ows:Identifier>gs:WPSLineElevation</ows:Identifier>
<wps:DataInputs>
<wps:Input>
<ows:Identifier>lon</ows:Identifier>
<wps:Data>
<wps:LiteralData>0.2367|2.1570|4.3907</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>lat</ows:Identifier>
<wps:Data>
<wps:LiteralData>48.0551|46.6077|43.9191</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>sampling</ows:Identifier>
<wps:Data>
<wps:LiteralData>10</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>format</ows:Identifier>
<wps:Data>
<wps:LiteralData>json</wps:LiteralData>
</wps:Data>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm>
<wps:RawDataOutput>
<ows:Identifier>result</ows:Identifier>
</wps:RawDataOutput>
</wps:ResponseForm>
</wps:Execute>
Réponse non indentée et en format json :
{"elevations":[{"lon":0.2367,"lat":48.0551,"z":93.58,"acc":2.5},
{"lon":0.726682,"lat":47.696327,"z":138.01,"acc":2.5},
{"lon":1.209968,"lat":47.335467,"z":62.79,"acc":2.5},
{"lon":1.686696,"lat":46.972574,"z":176.45,"acc":2.5},
{"lon":2.157,"lat":46.6077,"z":207.53,"acc":2.5},
{"lon":2.735486,"lat":45.939827,"z":634.69,"acc":2.5},
{"lon":3.300216,"lat":45.269017,"z":609.78,"acc":2.5},
{"lon":3.85177,"lat":44.5954,"z":1336.03,"acc":2.5},
{"lon":4.122779,"lat":44.257578,"z":266.01,"acc":2.5},
{"lon":4.3907,"lat":43.9191,"z":171.29,"acc":2.5}]}
Table des paramètres
Titre
5. Gestion des erreurs
En cas d’erreur du service (code HTTP différent de 200), la réponse est au format XML ou JSON. Par exemple :
XML
<error>
<code>BAD_PARAMETER</code>
<description>The argument [lon] is mandatory</description>
</error>
JSON
{"error": {
"code":"BAD_PARAMETER"
"description":"The argument [lon] is mandatory"
}}