API Géoportail – Services Spécifications Fonctionnelles
Transcription
API Géoportail – Services Spécifications Fonctionnelles
API Géoportail – Services Spécifications Fonctionnelles DATE : 24/06/2015 version 0.4 73 AVENUE DE PARIS, 94165 SAINT-MANDE CEDEX ign.fr - geoportail.gouv.fr Table des matières Suivi du document...........................................................................................................................4 Contexte...........................................................................................................................................5 Description générale........................................................................................................................5 Objectifs de l'API Géoportail Services.......................................................................................5 Cas d'utilisation...........................................................................................................................5 Accès au paramétrage des couches WMTS / WMS / WFS / KML de la plateforme.............5 Mise en œuvre d'un formulaire de recherche, de calcul d'itinéraire.......................................6 Accès aux services d'altimétrie et de calcul de profil.............................................................6 Transformations de coordonnées en utilisant le service et les registres IGN.........................6 Couverture Fonctionnelle............................................................................................................6 Description détaillée........................................................................................................................8 Namespace..................................................................................................................................8 Découpage fonctionnel................................................................................................................8 Gp.protocols : Protocoles d'accès................................................................................................8 Accès en mode AJAX.............................................................................................................9 Cas d'utilisation..................................................................................................................9 Mise en oeuvre...................................................................................................................9 Exemples d'utilisation......................................................................................................10 Accès en mode JSONP.........................................................................................................11 Cas d'utilisation................................................................................................................11 Mise en oeuvre.................................................................................................................11 Exemples d'utilisation......................................................................................................12 Gp.services : Accès aux services de la plateforme Géoportail..................................................14 Principe Général...................................................................................................................14 Accès au service d'autoconfiguration...................................................................................15 Cas d'utilisation................................................................................................................16 Mise en œuvre..................................................................................................................16 Exemples d'utilisation :....................................................................................................27 Géocodage Direct.................................................................................................................31 Cas d'utilisation................................................................................................................31 Mise en oeuvre.................................................................................................................31 Geocodage inverse...............................................................................................................37 Cas d'utilisation................................................................................................................37 Mise en oeuvre.................................................................................................................37 Exemples d'utilisation......................................................................................................40 Autocomplétion....................................................................................................................42 Cas d'utilisation................................................................................................................42 Mise en oeuvre.................................................................................................................42 Exemples d'utilisations....................................................................................................44 Calcul d'itinéraires................................................................................................................45 Cas d'utilisation................................................................................................................45 Mise en œuvre..................................................................................................................45 Exemples d'utilisation......................................................................................................46 Calcul d'isochrones / isodistances........................................................................................48 Cas d'utilisation................................................................................................................48 Mise en œuvre..................................................................................................................48 Exemples d'utilisation......................................................................................................49 1/94 Services d'altimétrie.............................................................................................................51 Cas d'utilisation................................................................................................................51 Mise en œuvre..................................................................................................................51 Exemples d'utilisation......................................................................................................53 Service WCTS : connaître le domaine de validité d'un Système de coordonnées...............55 Cas d'utilisation................................................................................................................55 Mise en œuvre..................................................................................................................55 Exemples d'utilisation......................................................................................................56 Service WCTS : transformer des coordonnées.....................................................................57 Cas d'utilisation................................................................................................................57 Mise en œuvre..................................................................................................................57 Exemples d'utilisation......................................................................................................58 Gp.formats : Gestion des formats relatifs aux services.............................................................59 Packaging..................................................................................................................................59 Annexes.........................................................................................................................................60 Principe du filtre JSONP...........................................................................................................60 Principe de l'auto-configuration................................................................................................61 Accès au service :............................................................................................................61 1ère opération :...........................................................................................................61 2ème opération :..........................................................................................................62 Réponse du service :........................................................................................................62 Mise en cache des informations..................................................................................63 Structure des données :...............................................................................................63 Schéma des données renvoyées par le service............................................................66 Service de Géocodage...............................................................................................................68 Géocodage Direct.................................................................................................................68 Géocodage inverse...............................................................................................................70 Service d'Autocomplétion.........................................................................................................72 Service de calcul altimétrique...................................................................................................74 Principe du service de calcul altimétrique............................................................................74 Détermination de l'altitude d'un ou plusieurs points........................................................74 1. Accès au service......................................................................................................74 2. Paramètres en entrée...............................................................................................74 3. Structure de la requête............................................................................................76 4. Paramètres en sortie...............................................................................................77 5. Messages d'erreur....................................................................................................79 Détermination du profil altimétrique d'une courbe..........................................................79 1. Accès au service......................................................................................................79 2. Paramètres en entrée...............................................................................................79 3. Structure de la requête............................................................................................79 4. Paramètres en sortie...............................................................................................80 Modèle de données du service altimétrique.....................................................................81 Service de calcul d'itinéraires....................................................................................................82 Syntaxe, protocoles d'accès..................................................................................................82 Données................................................................................................................................82 Requête............................................................................................................................82 Réponse............................................................................................................................83 Service de calcul d'isochrones / isodistances............................................................................86 Syntaxe, protocoles d'accès..................................................................................................86 Données................................................................................................................................86 Requête............................................................................................................................86 2/94 Réponse............................................................................................................................87 Service de transformations de coordonnées (WCTS)...............................................................89 Syntaxe, protocoles d'accès..................................................................................................89 Processus GetValidityArea...................................................................................................89 Requête............................................................................................................................89 Réponse............................................................................................................................90 Processus TransformCoordinates.........................................................................................90 Requête............................................................................................................................90 Réponse............................................................................................................................91 3/94 Suivi du document Date Version 24/06/2015 0.4 Raison Version de publication pour avis 4/94 Contexte La version 3 de l'API Géoportail doit se décliner selon une offre logicielle à trois niveaux : 1. Un premier niveau qui couvre l'accès aux référentiels Géoportail et prend en charge l'accès aux services spécifiques de la plateforme Géoportail indépendamment de toute bibliothèque cartographique. 2. Un second niveau qui intègre le premier et propose des intégrations des services de la platforme Géoportail (spécifiques ou standards) dans les bibliothèques du marché via leurs mécanismes propres d'extension. Des lots de composants graphiques peuvent être aussi proposés pour chacune des bibliothèques supportées, déclinés selon une identité visuelle commune. 3. Un troisième niveau (« haut niveau ») qui intègre les deux niveaux précédents et offre une solution « clef en main » d'intégration d'une carte dans une page web en s'appuyant sur une ou plusieurs bibliothèques du marché prises sur étagère. L'API Géoportail « Services », objet de ces spécifications, a pour but la mise en œuvre du premier niveau. Description générale Objectifs de l'API Géoportail Services L'API Géoportail Services est une brique logicielle mise à disposition des développeurs pour leur faciliter l'accès aux services de la plateforme Géoportail. Pour cela, elle propose un ensemble de classes et fonctions permettant : • d'accéder aux définitions et paramétrages des webs services de la plateforme Géoportail ainsi qu'aux ressources accessibles depuis une clef d'accès à la plateforme. • d'utiliser les webservices spécifiques de la plateforme en faisant abstraction des protocoles de dialogue. Cas d'utilisation Accès au paramétrage des couches WMTS / WMS / WFS / KML de la plateforme Un développeur souhaite afficher des couches WMTS, WMS, WFS ou KML diffusées par la platforme Géoportail à l'aide d'une bibliothèque cartographique du marché (Google, Leaflet, OpenLayers, …). Il dispose d'une clef d'accès à la plateforme. Il a besoin de connaître le paramétrage à appliquer pour afficher ces couches (URL, layers, pyramides, … ). Le service d'autoconfiguration de la plateforme Géoportail permet d'obtenir ces informations. L'API Géoportail Services doit permettre d'invoquer simplement ce service, d'analyser la réponse de façon à proposer les informations lues de façon simple, intuitive et exploitable. 5/94 Mise en œuvre d'un formulaire de recherche, de calcul d'itinéraire Un développeur souhaite proposer un formulaire HTML permettant d'intéragir avec les services de Géocodage et de calcul d'itinéraire, indépendamment de toute visualisation cartographique. L'internaute saisit, avec l'aide du service d'autocomplétion, des adresses ou toponymes pour établir ses points de départ, intermédiaires et d'arrivée. Il soumet son formulaire et la page lui retoune une feuille de route. Les services de Géocodage, d'autocomplétion et de calcul d'itinéraire sont sollicités. L'API Géoportail Services doit permettre de faire intéragir simplement le formulaire avec ces services en formalisant et envoyant les requêtes OpenLS ou d'autocomplétion correspondantes à la saisie, puis en analysant les réponses de façon à en restituer le contenu de façon simple, intuitive et exploitable. Accès aux services d'altimétrie et de calcul de profil Un développeur souhaite pouvoir déterminer les altitudes en un ou plusieurs points saisis à partir d'une interface cartographique quelquonque de façon à pouvoir soit les afficher lors de la saisie, soit afficher un profil altimétrique à l'aide d'une bibliothèque tierce dédiée. Les services d'altimétrie et de calcul de profil de la plateforme Géoportail sont sollicités. L'API Géoportail Services doit permettre de formaliser et d'envoyer les requêtes à ces services puis d'en analyser les réponses de façon à en restituer le contenu de façon simple, intuitive et exploitable. Transformations de coordonnées en utilisant le service et les registres IGN Un développeur souhaite transformer des lots de coordonnées pour son application en s'appuyant sur le registre de système de coordonnées IGN (« IGNF ») et sans utiliser de bibliothèque logicielle tierce. Le service WCTS de la plateforme Géoportail est sollicité. L'API Géoportail Services doit permettre de formaliser et d'envoyer les requêtes de transformation à ce service puis de récupérer les coordonnées transformées, de façon simple, intuitive et exploitable. Couverture Fonctionnelle L'API Géoportail Services doit permettre d'encapsuler l'accès aux webservices suivants de la plateforme : * Autoconfiguration * Géocodage * Autocomplétion * Calcul d'itinéraire et d'isochrones / isodistances * Services d'altimétrie et de calcul de profils altimétriques * Transformations de coordonnées Au travers de l'accès au service d'autoconfiguration, l'API Géoportail Services permet de consulter les droits relatifs à une clef (Ressources disponibles) et de disposer des paramètres nécessaires pour exploiter ces ressources avec des outils logiciels tiers. Elle doit permettre aussi de prendre en charge les différents protocoles d'interrogation des services 6/94 offerts par la plateforme Géoportail. 7/94 Description détaillée Namespace Le namespace lié à l'API Géoportail Services est « Gp ». Découpage fonctionnel L'API Géoportail Services se décompose en trois blocs fonctionnels : * un bloc de gestion des protocoles d'accès aux services, accessible derrière le package « Gp.protocols » ; * un bloc de gestion de l'accès aux services (interrogation des services), regroupé dans le package « Gp.services » ; * un bloc de gestion des formats relatifs aux services (exploitation des réponses brutes des services pour les restituer dans les formats offerts par l'API), disponible derrière le package « Gp.formats ». Les dépendances entre ces blocs sont les suivantes : Gp.services dépend de Gp.protocols Gp.formats Gp.protocols : Protocoles d'accès Les webservices de la plateforme Géoportail sont, par définition, accessibles via le protocole HTTP. Le dialogue avec ces services depuis une API cliente peut donc naturellement se faire en mode AJAX (via des objets de type XMLHTTPRequest1 : « XHR ») en s'exposant alors aux blocages des navigateurs due à la politique sécuritaire dite de « même origine »2 empêchant l'accès à des ressources hébergées sur un serveur ayant un autre nom de domaine que celui où est hébergée la page web. La plateforme Géoportail offre aussi la possibilité de dialoguer avec les services en mode JSONP3 afin de contourner ce blocage. Le principe du protocole JSONP mis en œuvre sur la platforme Géoportail est détaillé en annexes. L'API Géoportail « Services » offrira donc les outils permettant de dialoguer avec les services de la platforme selon ces deux modes. 1 2 3 cf. http://fr.wikipedia.org/wiki/XMLHttpRequest « Same-origin policy » : http://en.wikipedia.org/wiki/Same-origin_policy cf. http://en.wikipedia.org/wiki/JSONP 8/94 Remarque : Les utilisateurs de l'API Géoportail Services auront rarement besoin d'utiliser directement les outils exposés ici. Ces derniers ont surtout pour vocation à être exploités par la couche supérieure exposée dans le package Gp.services. Accès en mode AJAX Il s'agit de proposer une couche logicielle permettant la mise en œuvre du mode AJAX (XHR) pour l'invocation des services de la plateforme Géoportail grâce aux navigateurs usuels. Cette couche logicielle devra instancier la requête en fonction des paramètres passés par l'utilisateur, l'envoyer au serveur et retourner sa réponse en paramètre d'une fonction de rappel. L'utilisation du protocole XHR se fera toujours en mode asynchrone : les appels aux services en mode AJAX ne bloqueront pas le déroulement de l'application. Cas d'utilisation L'utilisateur est un développeur qui souhaite invoquer un service de la plateforme Géoportail en HTTP GET ou POST avec des paramètres d'appel au service et en traiter la réponse au moyen d'une fonction de rappel. Il doit fournir les paramètres nécessaires à l'invocation du service et la fonction de traitement de la réponse lorsque celle-ci arrive. La couche XHR se chargera simplement d'invoquer le service en mode AJAX et d'appeler la fonction de rappel lors de la réception du résultat. Elle offrira aussi une possibilité de traitement en cas de non réponse du service (timeOut) au bout d'un laps de temps paramétrable. Mise en oeuvre L'utilisation se fera par l'appel d'une fonction statique : Gp.protocols.XHR(options) Cette fonction envoie une requête HTTP sur l'URL fournie via le paramètre « options.url » en mettant en œuvre le protocole XHR. Elle permet de lier l'émission de la requête à deux fonctions de rappel fournies par l'utilisateur : • • onResponse(result) : appelée lors de la réception des résultats avec pour paramètre la réponse du service ; onTimeOut() : appelée en cas de non réponse au bout d'un temps déterminé par le paramètre « options.timeout ». Les propriétés de l'objet « options » sont les suivantes : Paramètre Type Opt. Valeur url String obligatoire URL à invoquer. httpMethod String optionnel Méthode de transfert : "GET" ou "POST". La valeur par défaut est "GET". content String optionnel Contenu de la requête en HTTP POST. Si httpMethod vaut « GET », ce paramètre est ignoré. headers Object optionnel Liste d'en-têtes pour la requête HTTP. 9/94 Paramètre Type Opt. Valeur Exemple : headers : { 'content-type' : 'text/xml' } timeOut Entier positif optionnel Nombre de ms au bout duquel on considère que le service n'a pas répondu. Par défaut, cette valeur est fixée à 10000 (10 secondes). Une valeur de 0 pour ce paramètre permet de désactiver la gestion du timeOut. onResponse Fonction Obligatoire Fonction qui sera appelée lors de la réception des résultats du service. Elle prend en paramètre la réponse du service sous la forme d'une chaîne de caractères. onTimeOut Fonction optionnel Fonction qui sera appelée en cas de non réponse du service. Le temps au bout duquel on considère que le service n'a pas répondu est déterminé par le paramètre timeOut. Par défaut, une fonction timeOut, notifiant dans la console le timeOut sur le service sera appelée. Exemples d'utilisation Requête en POST sur le service de géocodage du Géoportail. Utilisation d'un proxy pour contourner les problèmes de cross-domain. Gp.protocols.XHR({ url :"http://localhost/proxy.php?url=http %3A//wxs.ign.fr/CLE_API/geoportail/ols%3F%0A", method :"POST", content :"<RequestHeader sessionID="" srsName="epsg:4326"/><Request maximumResponses="30" methodName="GeocodeRequest" version="1.2" requestID=""><GeocodeRequest returnFreeForm="false"><Address countryCode="StreetAddress">StreetAddress><Building number="36"/><Street>rue gérald rey</Street></StreetAddress><Place type="Municipality">arles</Place><PostalCode>13200</PostalCode><Department>13</ Department><gml:envelope><gml:pos>43.682765684094534 4.604832911570827</gml:pos><gml:pos>43.686676004569826 4.614145541270513</gml:pos></gml:envelope></Address></GeocodeRequest></Request> ", timeout : 15000, onResponse: function (response){ console.log(response); var parser = new DOMParser() ; var xmlDoc = parser.parseFromString(response,'text/xml') ; //exploitation du document XML résultat //... }, onTimeOut : function (){ alert("TIME OUT"); } }) ; 10/94 Accès en mode JSONP Il s'agit de proposer une couche logicielle permettant la mise en œuvre du protocole JSONP pour l'invocation des services de la plateforme qui le supportent. Cette couche logicielle devra écrire la balise <script> ayant comme valeur pour l'attibut href, l'URL du service contenant les paramètres fournis et y rajouter, si nécessaire, le paramètre permettant l'activation du filtre au niveau de la plateforme Géoportail (callback=xxx). Cas d'utilisation L'utilisateur est un développeur qui souhaite invoquer un service de la plateforme Géoportail en HTTP GET avec des paramètres d'appel au service et en traiter la réponse au moyen d'une fonction qui a été au préalable écrite. Il doit fournir les paramètres nécessaires à l'invocation du service et la fonction de traitement de la réponse lorsque celle-ci arrive. La couche JSONP se chargera simplement d'appeler cette fonction lors de la réception du résultat. Elle offrira aussi une possibilité de traitement en cas de non réponse du service (timeOut) au bout d'un laps de temps paramétrable. Mise en oeuvre L'utilisation se fera par l'appel d'une fonction statique : Gp.protocols.JSONP(options) ; Cette fonction réalise l'appel du service fourni via le paramètre « options.url » en mettant en œuvre le protocole JSONP. Elle permet de lier l'appel du service à deux fonctions de rappel fournies par l'utilisateur : • onResponse(result) : appelée lors de la réception des résultats avec pour paramètre le résultat du service encapsulé dans sa coquille JSON ; • onTimeOut() : appelée en cas de non réponse du service au bout d'un temps déterminé via le paramètre timeout. Paramètres Paramètre Type Opt. Valeur url String obligatoire URL du service à invoquer (indépendamment du protocole JSONP). Cette URL contient déjà les paramètres du service. Si le paramètre dédié à la mise en œuvre du protocole JSONP (callback=xxx) n'est pas présent, ils est rajouté par la fonction ; sa valeur est déterminée en fonction du paramètre callbackName. L'ajout du paramètre output=json si nécessaire est à la charge du développeur. timeOut Entier positif optionnel Nombre de ms au bout duquel on considère que le service n'a pas répondu. Par défaut, cette valeur est fixée à 10000 (10 secondes). Une valeur de 0 pour ce paramètre permet de désactiver la gestion du timeOut. callbackName String optionnel Valeur du paramètre callback à rajouter sur l'URL. Si l'URL fournie contient déjà le paramètre callback, le paramètre callbackName ne sera pas pris en compte. La fonction de callback est créée dynamiquement par la 11/94 Paramètre Type Opt. Valeur fonction JSONP ; elle a deux fonctions : elle annule la condition de timeOut puis appelle la fonction fournie par l'utilisateur via le paramètre onResponse. Par défaut, le nom de la fonction de callback sera TODO : nom de la fonction onResponse fonction Conditionnel Nom de la fonction qui sera appelée lors de la réception des résultats du service. Ce paramètre sera ignoré si l'URL contient déjà le paramètre callback. La fonction de rappel appelée sera alors celle ayant pour nom la valeur de ce paramètre. onTimeOut fonction optionnel Nom de la fonction qui sera appelée en cas de non réponse du service. Le temps au bout duquel on considère que le service n'a pas répondu est déterminé par le paramètre timeOut. Par défaut, une fonction timeOut, notifiant dans la console le timeOut sur le service sera appelée. Exemples d'utilisation Exemple 1 : envoi d'une requête de géocodage en GET et JSONP. L'ajout du paramètre output=json dans l'URL entraine l'encapsulation de la réponse du service dans une « coquille » JSON. Gp.protocols.JSONP({ url :"http://wxs.ign.fr/CLE_API/geoportail/ols?xls=%3CRequestHeader %20sessionID%3D%22%22%20srsName%3D%22epsg%3A4326%22/%3E%3CRequest %20maximumResponses%3D%2230%22%20methodName%3D%22GeocodeRequest%22%20version%3D %221.2%22%20requestID%3D%22%22%3E%3CGeocodeRequest%20returnFreeForm%3D%22false %22%3E%3CAddress%20countryCode%3D%22StreetAddress%22%3EStreetAddress%3E %3CBuilding%20number%3D%2236%22/%3E%3CStreet%3Erue%20g%E9rald%20rey%3C/Street %3E%3C/StreetAddress%3E%3CPlace%20type%3D%22Municipality%22%3Earles%3C/Place%3E %3CPostalCode%3E13200%3C/PostalCode%3E%3CDepartment%3E13%3C/Department%3E%3Cgml %3Aenvelope%3E%3Cgml%3Apos%3E43.682765684094534%204.604832911570827%3C/gml %3Apos%3E%3Cgml%3Apos%3E43.686676004569826%204.614145541270513%3C/gml%3Apos%3E %3C/gml%3Aenvelope%3E%3C/Address%3E%3C/GeocodeRequest%3E%3C/Request%3E%0A %0A&output=json", timeOut : 15000, onResponse: function (response){ console.log(response); var parser = new DOMParser() ; // la réponse xml est accessible via response.xml var xmlDoc = parser.parseFromString(response.xml,'text/xml') ; //exploitation du document XML résultat //... }, onTimeOut : function (){ alert("TIME OUT"); } }) ; Exemple 2 : envoi d'une requête d'altimétrie en GET et JSONP. Gp.protocols.JSONP({ url :"http://wxs.ign.fr/CLE_API/alti/rest/elevation.json?lon=0.2367| 2.1570&lat=48.0551|46.6077", 12/94 timeOut : 5000, onResponse: function (response){ console.log(response.elevations); // exploitation de la réponse // ... }, onTimeOut : function (){ alert("TIME OUT"); } }) ; Exemple 3 : Même traitement que précédemment mais avec utilisation du paramètre « callback » dans l'URL. Ici, le paramètre onResponse n'est pas utilisé, mais la valeur du paramètre callback doit faire référence à une fonction existante. function traiteResultats (response){ console.log(response.elevations); // exploitation de la réponse // ... } ; Gp.protocols.JSONP({ url :"http://wxs.ign.fr/CLE_API/alti/rest/elevation.json?lon=0.2367| 2.1570&lat=48.0551|46.6077&callback=traiteResultats", timeOut : 5000, onTimeOut : function (){ alert("TIME OUT"); } }) ; 13/94 Gp.services : Accès aux services de la plateforme Géoportail On traite ici de la couche logicielle qui gère l'accès aux services de la plateforme Géoportail qui rentent dans la couverture fonctionnelle de ce document. Principe Général L'API Géoportail « Services » offre pour chaque service une ou plusieurs fonctions qui permettent d'émettre des réquêtes, de réceptionner les réponses afin de pouvoir les exploiter. Pour un service donné, l'utilisation de l'API se fera au travers d'une fonction statique dédiée ayant la signature globale suivante : Gp.services.serviceOperation(options) ; Où : • « serviceOperation » correspond à l'opération du service que l'on veut invoquer (geocode, reverseGeocode, autocomplete, …) : les fonctions correspondantes seront détaillées dans les paragraphes suivants selon les webservices traités ; • « options » est un objet javascript dont les propriétés sont les suivantes : Paramètre Type Opt. Valeur apiKey String Conditionnel ou Array(String) Clef d'accès à la plateforme Géoportail, nécessaire pour franchir la couche de contrôle des accès pour avoir une réponse du service invoqué. Dans le cas de l'invocation du service d'autoconfiguration, plusieurs clefs peuvent être passées. Si ce paramètre n'est pas renseigné, alors le paramètre serverUrl doit être renseigné (comprenant alors, si nécessaire la clef API). serverUrl String URL d'accès au service. Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès. Si ce paramètre est renseigné alors, le paramètre apiKey est ignoré. Conditionnel Paramètres optionnels permettant de jouer sur le protocole d'accès au service protocol String Optionnel Le protocole à utiliser pour récupérer les informations du service d'auto-configuration : peut valoir 'JSONP' ou 'XHR'. Par défaut, c'est le protocole JSONP qui sera utilisé. proxyURL String Optionnel Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR. Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut 'JSONP'. 14/94 Paramètre Type Opt. Valeur httpMethod String Optionnel La méthode HTTP à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'. Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET. Par défaut, c'est la méthode GET qui est utilisée. timeOut Number Optionnel Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête). Par défaut, aucun timeOut n'est pris en compte (timeOut= 0). rawResponse Boolean Optionnel Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée. (Cf. paramètre « onSuccess » pour plus de détails). Fonction Optionnel Fonction appelée lorsque le service répond correctement à la requête :(code HTTP 200, sans message d'erreur). Fonctions de rappels onSuccess Cette fonction prend en paramètre la réponse du service, soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ; soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ». onFailure Fonction Optionnel Fonction appelée lorsque le service ne répond pas correctement (code HTTP de retour différent de 200 ou pas de réponse). Paramètres spécifiques à l'invocation du service : Ces paramètres seront détaillés service par service dans les parties suivantes propriété … … ... Exemples d'utilisation Exemple 1 : invocation classique d'un service avec une clef API : Gp.services.serviceOperation({ apiKey : 'CLEF_API', onSuccess : function(response) { // exploitation de la reponse... console.log(response) ; (...) } }) ; Accès au service d'autoconfiguration Il s'agit de proposer une couche logicielle permettant d'utiliser le service d'auto-configuration des API dont le principe est expliqué en Annexes. Cette couche logicielle devra envoyer une requête au service d'auto-configuration, avec les paramètres éventuellement fournis, puis parser la réponse du service, pour finalement construire une variable globale contenant les informations utiles pour 15/94 l'utilisation de l'API (configuration des services, informations sur les couches, etc.). Cas d'utilisation L'utilisateur est un développeur web qui souhaite initialiser sa fenêtre cartographique, et a donc besoin d'informations sur les couches et services Géoportail disponibles avec sa clé de contrat API (paramètres des couches, territoires, pyramides d'images, etc), sur les paramètres de configuration par défaut (configuration de la carte, territoires, couches par défaut), ou autres informations renvoyées par le service d'auto-configuration. L'utilisateur peut fournir des paramètres optionnels, comme sa ou ses clés de contrat API, la fonction de rappel à lancer en cas de succès de la récupération de l'auto-configuration, le protocole à utiliser, ou encore l'identifiant d'une couche agrégée dont il souhaite plus d'informations concernant l'agrégation. (voir ci-dessous pour une liste plus détaillée) En retour, sauf si une des clés fournies est invalide, il récupère un objet JSON contenant les informations utiles à l'utilisation de l'API ou des services Géoportail. Mise en œuvre L'utilisation se fera par l'appel de la fonction statique : Gp.services.getConfig(options) Dans un premier temps, cette fonction envoie une requête HTTP au service d'auto-configuration, via le protocole JSONP ou Ajax, avec les éventuels paramètres fournis par l'utilisateur (clé(s) et identifiant d'un agrégat), et et en spécifiant une fonction de callback. Dans un second temps, après avoir récupéré la réponse XML sous forme d'un objet document, la fonction va récupérer les différentes informations présentes dans cet objet, et les stocker selon leur valeur dans une variable globale Gp.Config. La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Paramètre layerId Type String Opt. Optionnel Valeur Le nom de l'agrégat (couche) dont on veut connaître les informations détaillées. La présence de cette propriété implique l'utilisation de la deuxième opération du service pour accéder aux informations d'une couche aggrégée. Dans ce cas, la fonction effectuera quand même dans un premier temps la récupération des informations de l'autoconfiguration complète, sauf si un premier appel à l'autoconf a déjà été fait avec cette clé (i.e. si la variable globale est définie pour la clé de contrat). Elle ira ensuite chercher les informations des couches agrégées, qui seront ajoutées à la variable globale Gp.Config. Paramètres de la fonction onSuccess 16/94 Paramètre Gp.Config Type Object Opt. Valeur Obligatoire Il s'agit de la variable globale contenant les informations utiles récupérées via le service d'auto-configuration. Sa structure est détaillée ci-après. Paramètres de la fonction onFailure : La fonction onConfFailure prend en paramètre un objet contenant les propriétés suivantes : Paramètre Type Opt. Valeur status Number obligatoire Code HTTP de retour du serveur, ou -1 (par exemple) si on est en timeout. (S'il vaut 200, c'est que l'erreur provient de la lecture des paramètres de la réponse.) message String obligatoire Message de retour du serveur, ou notification de timeOut, ou encore de l'API en cas de problème d'interprétation des résultats. Résultat en sortie : Le résultat est une variable globale Gp.Config, qui est un objet contenant les informations utiles renvoyées par l'auto-configuration, et dont la structure est la suivante : Gp.Config > generalOptions > apiKeys > title > BBOX > defaultGMLGFIStyle > theme > windowHeight > windowWidth > WGS84Resolutions > Layers > layerID > queryable > hidden > name > title > description > quicklookURL > apiKeys > minZoomLevel > maxZoomLevel > BBOX > temporalExtent > Order > serviceParams > type > serviceUrl > version > TileMatrixSetLink > projection > AdditionalSRS 17/94 > featurePrefix > typename > featureNS > geometryName > metadata > format > url > xlinkType > styles > name > title > current > legends > format > url > maxScale > xlinkType > originators > name > attribution > logo > url > bounds > minZoomLevel > maxZoomLevel > thematics > inspire (boolean) > name > formats > current (boolean) > name > dimensions > type > visibilityRange > visibilityMode > noDataValue > geometricType > contraints > CRS > BBOX > minZoomLevel > maxZoomLevel > temporalExtent > aggregationOptions > IsAggregate > aggregatedLayers > layerID > layerID > LayerID > Territories > territoryID > isDefault > defaultCRS > additionalCRS > additionalCRSID 18/94 > additionalCRSID > geoBBOX > geoCenter > defaultOptions > defaultZoomLevel > minZoomLevel > maxZoomLevel > defaultLayers > layerID > layerID > territoryID > TileMatrixSets > TMSID > projection > nativeResolutions > matrixIds > matrixId > matrixHeight > matrixWidth > scaleDenominator > tileHeight > tileWidth > topLeftCorner > TMSID > Projections > CRSID > CRSID > Services > serviceID > title > serverUrl > version > serviceID Les tableaux ci-dessous détaillent les différentes propriétés de cet objet. Propriétés de l'objet Gp.Config : Propriété Type Opt. Valeur generalOptions Object Obligatoire Options générales par défaut layers Object Obligatoire Objet ayant pour propriétés les identifiants des couches disponibles d'après le contrat API. territories Object Obligatoire Objet ayant pour propriétés les identifiants des territoires disponibles. tileMatrixSets Object Optionnel Objet ayant pour propriétés les identifiants des TileMatrixSets disponibles. projections array({String}) Obligatoire Tableau contenant les identifiants des projections disponibles. services Object Obligatoire Objet ayant pour propriétés les identifiants des services disponibles. Propriétés de l'objet generalOptions : 19/94 Propriété Type Opt. Valeur apiKeys Object Obligatoire Objet contenant les informations de la ou des clés de contrat API spécifiées (peut être vide). title String Obligatoire Titre du service d'auto-configuration bbox Object({left,right,t Obligatoire op,bottom}) Objet contenant les coordonnées correspondant à l'étendue spatiale des données par défaut, en coordonnées géographiques WGS84 defaultGMLGFIStyle String Obligatoire URL pointant vers la feuille de style XSL (eXtensible Stylesheet Language) theme String Obligatoire Thème par défaut windowHeight Float Obligatoire Hauteur de la fenêtre par défaut windowWidth Float Obligatoire Largeur de la fenêtre par défaut wgs84Resolutions Array({float}) Obligatoire Les résolutions en WGS84. Peuvent être utiles par ex. car les BBOX et centres des territoires sont exprimés en coordonnées géographiques. Propriétés des différentes couches de l'objet layers : L'objet LAYERS a pour propriétés l'ensemble des identifiants des ressources disponibles, par exemple : « GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS ». Pour chacune d'elles, les propriétés associées sont détaillées ci-dessous : Propriété Type Opt. Valeur name String Obligatoire Le nom usuel de la couche (par exemple « GEOGRAPHICALGRIDSYSTEMS.MAPS ») title String Obligatoire Le titre de la couche (par exemple « Cartes IGN ») description String Obligatoire La description associée à la couche queryable Boolean Optionnel On peut faire un getFeatureInfo sur la couche (WMS ou WMTS) hidden Boolean Optionnel Par défaut la couche n'est pas visible. quicklookURL String Optionnel Url pointant vers l'image d'aperçu rapide (pour les couches associées à une visualisation) apiKeys Array({String}) Optionnel La (ou les) clé(s) de contrat à laquelle cette couche est associée minZoomLevel Number Optionnel Le zoom minimum spécifié par défaut pour cette couche. maxZoomLevel Number Optionnel Le zoom maximum spécifié par défaut pour cette couche. bbox Object({left,right,t Obligatoire op,bottom}) Objet contenant les coordonnées des extrémités de l'étendue spatiale de la couche, en coordonnées géographiques WGS84 temporalExtent array({string}) Tableau contenant deux dates sous forme de chaines de caractères, correspondant aux extrémités de l'étendue temporelle des données : [minT, maxT]. /!\ Peu d'informations sur la signification de ces deux Obligatoire 20/94 Propriété Type Opt. Valeur dates. order number Optionnel Utile pour ordonner les différentes couches, mais /!\ c'est un paramètre qui n'est souvent pas spécifié dans l'entrepôt. Amélioration envisageable pour GPP4. serviceParams object Obligatoire Service associé à la couche (OpenLS, WFS, WMTS) tileMatrixSetLink string Optionnel Nom du TileMatrixSet associé à la couche (seulement pour les couches WMTS) projection String Optionnel Identifiant de la projection associée à la couche (défaut ou celle du TMS pour les couches WMTS). additionalSRS array({string}) Optionnel Tableau contenant les autres SRS associés à la couche (pour les couches WFS notamment). featurePrefix string Optionnel Le préfixe dans le nom de la ressource (seulement pour les couches WFS). Ce paramètre ne provient pas de la réponse de l'auto-configuration, mais peut être récupéré à partir du nom de la couche (tout comme le paramètre typename ci-dessous) : c'est le nom de la ressource, correspondant à la chaîne de caractère avant les '':'' dans le nom de la couche (par exemple : BDCARTO_BDD_GLP_WGS84G_20131216). typename string Optionnel Le type d'entité, pour les couches WFS seulement. Il correspond à la chaîne de caractères située après les '':'' dans le nom de la couche (par exemple : 'parcelle'). featureNS string Optionnel Le namespace associé à la ressource. (uniquement pour les couches WFS). Ce paramètre ne provient pas non plus de la réponse de l'auto-configuration, il ne sera donc pas rempli. Il peut être récupéré à l'aide d'une requête DescribeFeatureType. geometryName string Optionnel Nom de l'attribut où est stockée la géométrie (uniquement pour les couches WFS). Comme featureNS, il ne sera pas rempli à l'aide de la réponse de l'auto-configuration, mais peut être récupéré avec un DescribeFeatureType. metadata Array({object}) Optionnel Informations concernant les métadonnées associées à la couche (la liste des propriétés est détaillée plus loin). styles Array({object}) Optionnel Informations concernant les styles associés à la couche (normal, bdparcellaire, …). La liste des propriétés est détaillée plus loin. legends Array({object}) Optionnel Informations concernant les légendes associées à la couche (la liste des propriétés est détaillée plus loin). originators Array({object}) Optionnel Informations concernant les propriétaires des données (originators). La liste des propriétés est détaillée plus loin. thematics Array({object}) Obligatoire Informations concernant les thématiques associées à la couche (la liste des propriétés est détaillée plus loin). formats Array({object}) Optionnel Informations concernant les formats des données (la liste des propriétés est détaillée plus loin). dimensions Object Optionnel Informations concernant les dimensions associées aux données (la liste des propriétés est détaillée plus loin). constraints Array({object}) Optionnel Informations concernant des contraintes associées à la 21/94 Propriété Type Opt. Valeur couche (la liste des propriétés est détaillée plus loin). aggregationOptions Object Optionnel Informations concernant l'agrégation de couches. Permet de savoir par exemple si la couche est un agrégat. La liste des propriétés est détaillée plus loin. Propriétés de l'objet territories : L'objet TERRITORIES a pour propriétés l'ensemble des identifiants des territoires disponibles, par exemple 'FXX'. Pour chaque territoire, les propriétés sont détaillées ci-dessous : Propriété Type Opt. Valeur isDefault Boolean Obligatoire Vaut 'true' si c'est le territoire à charger par défaut, ou 'false' sinon. defaultCRS String Obligatoire Identifiant de la projection associée par défaut au territoire (par exemple 'EPSG:3857'). additionalCRS Array({string}) Obligatoire Autres projections associées au territoire, sous forme d'un tableau contenant les identifiants des projections. geoBBOX Object({left,right,t Obligatoire op,bottom}) Objet contenant les coordonnées des extrémités de l'étendue spatiale du territoire (en coordonnées géographiques WGS84) geoCenter Object({lon,lat}) Obligatoire Objet contenant la latitude et longitude du centre du territoire (en coordonnées géographiques WGS84). defaultOptions Object Obligatoire Les niveaux de zoom utilisés par défaut pour ce territoire. La liste des propriétés est détaillée plus loin. defaultLayers Array({string}) Obligatoire Tableau contenant les identifiants des couches associées par défaut à ce territoire (par exemple, GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORT AIL:OGC:WMTS). Propriétés de l'objet tileMatrixSets : L'objet TILEMATRIXSETS a pour propriétés l'ensemble des identifiants des TMS disponibles, par exemple 'PM'. Pour chaque TMS, les propriétés sont détaillées ci-dessous : Propriété Type Opt. Valeur projection String Obligatoire La projection associée (par exemple 'EPSG:3857'). nativeResolutions Array({float}) Obligatoire Tableau contenant les résolutions associées aux différents niveaux de zoom, calculées à partir des échelles des niveaux de la pyramide (matrixIds). matrixIds Array({object}) Obligatoire Tableau contenant les informations des niveaux de la pyramide (matrixIDs), sous forme d'objets. La liste des propriétés de ces objets est détaillée plus loin. 22/94 Propriétés de l'objet services : L'objet SERVICES a pour propriétés l'ensemble des services disponibles, par exemple 'OGC:WMTS'. Pour chaque service, les propriétés sont détaillées ci-dessous : Propriété Type Opt. Valeur title String Obligatoire Titre du service (par exemple 'Point altimetrique') serverUrl String Obligatoire URL du serveur associé à ce service (par exemple 'http://wxs.ign.fr/geoportail/ols') version String Obligatoire Version du service (par exemple 2.0.0) Propriétés de l'objet apiKeys (de l'objet generalOptions) : L'objet apiKeys a pour propriétés la ou les clés de contrat pour lesquelles la configuration a été demandée (chaînes de caractères). Pour chaque clé, les propriétés sont détaillées ci-dessous : Propriété allowedLayers Type Array({string}) Opt. Valeur Obligatoire Liste des identifiants des couches disponibles pour cette clé de contrat. Propriétés de l'objet serviceParams (de l'objet Layers) : Propriété Type Opt. Valeur type String Obligatoire Type du service (WFS, WMTS, OpenLS) serviceUrl Array({string}) Obligatoire Tableau contenant les URL du service (avec la ou les clé(s) de contrat associées à la couche) version String Obligatoire Version du service Propriétés des objets du tableau metadata (de l'objet Layers) : Propriété Type Opt. Valeur format String Obligatoire Format du fichier de métadonnées (généralement XML). url String Obligatoire URL du fichier de métadonnées xlinkType String Obligatoire Type du lien XML, généralement 'simple'. Propriétés des objets du tableau styles (de l'objet Layers) : Propriété Type Opt. Valeur name String Obligatoire Identifiant du 'bdparcellaire'). title String Obligatoire Titre décrivant un peu plus le style. current Number Optionnel Vaut 1 si le style actuel est sélectionné, 0 sinon. 23/94 style (par exemple 'normal' ou Propriétés des objets du tableau legends (de l'objet Layers) : Propriété Type Opt. Valeur format String Obligatoire Format de la légende. /!\ Vaut toujours 'format' pour l'instant... url String Obligatoire URL du fichier de légende maxScale Number Obligatoire Dénominateur de l'échelle maximum à laquelle la légende est disponible. xlinkType String Obligatoire Type du lien XML, généralement 'simple'. Propriétés des objets du tableau Originators (de l'objet Layers) : Propriété Type Opt. Valeur name String Obligatoire Identifiant du propriétaire des données attribution String Obligatoire Nom complet du propriétaire des données logo String Obligatoire Url du logo du propriétaire des données url String Obligatoire URL du propriétaire des données (par exemple, http://www.ign.fr) bounds Object({left,right,t Obligatoire op,bottom}) Objet contenant les coordonnées des extrémités de la couverture spatiale des données de ce producteur (en coordonnées géographiques WGS84) . minZoomLevel Number Obligatoire Zoom minimum correspondant aux données couvertes par cet originator. maxZoomLevel Number Obligatoire Zoom maximum correspondant aux données couvertes par cet originator. Propriétés des objets du tableau thematics (de l'objet Layers) : Propriété Type Opt. Valeur inspire String Optionnel Vaut 'true' si c'est une thématique Inspire, 'false' si c'est une thématique autre. name String Obligatoire Intitulé de la thématique. Propriétés des objets du tableau formats (de l'objet Layers) : Propriété Type Opt. Valeur current Boolean Obligatoire Vaut true si c'est le format actuel sélectionné, false sinon. name String Obligatoire Nom du format des données (par exemple, 'image/png'). 24/94 Propriétés de l'objet dimensions (de l'objet Layers) : Propriété Type Opt. Valeur type String Optionnel Type de visualisation (2D) visibilityRange String Optionnel Échelle de visualisation visibilityMode String Optionnel Exemple : 'resolution', 'distance' noDataValue String Optionnel Exemple : 'FFFFFF' geometricType String Optionnel Type de géométrie (uniquement pour les couches WFS) Propriétés des objets du tableau constraints (de l'objet Layers) : Propriété Type Opt. Valeur crs String Optionnel Identifiant de la projection associée. bbox Object({left,right,t Optionnel op,bottom}) Objet contenant les coordonnées des extrémités de l'étendue correspondant à la contrainte (en coordonnées géographiques WGS84) minZoomLevel Number Obligatoire Niveau de zoom minimum maxZoomLevel Number Obligatoire Niveau de zoom maximum temporalExtent Array({float}) Optionnel Tableau contenant deux dates sous forme de chaines de caractères, correspondant aux extrémités de l'étendue temporelle : [minT, maxT] Propriétés de l'objet aggregationOptions (de l'objet Layers) : Propriété Type Opt. Valeur isAggregate Boolean Obligatoire Permet de savoir si la couche est un agrégat d'autres données. aggregatedLayers Array({string}) Optionnel Objet contenant la liste des identifiants des couches agrégées formant l'agrégat. Cette liste n'apparaît que lorsque l'utilisateur a demandé explicitement des informations sur l'agrégat. Propriétés de l'objet defaultOptions (de l'objet Territories) : Propriété Type Opt. Valeur defaultZoomLevel Number Obligatoire Le zoom spécifié par défaut pour ce territoire. minZoomLevel Number Obligatoire Le zoom minimum spécifié par défaut pour ce territoire. maxZoomLevel Number Obligatoire Le zoom maximum spécifié par défaut pour ce 25/94 Propriété Type Opt. Valeur territoire. Propriétés des objets du tableau matrixIds (de l'objet TileMatrixSets) : Chaque élément de matrixIds a pour propriétés l'ensemble des identifiants d'un niveau de matrice. Pour chaque niveau, les propriétés sont détaillées ci-dessous : Propriété Type Opt. Valeur matrixId Number Obligatoire Identifiant de la matrice (= niveau de pyramide) : entier entre 0 et 21. matrixHeight Number Obligatoire Hauteur de la matrice, en nombre de tuiles matrixWidth Number Obligatoire Largeur de la matrice, en nombre de tuiles scaleDenominator Float Obligatoire Dénominateur d'échelle associé à ce niveau (permet de calculer la résolution associée) tileHeight Float Obligatoire Hauteur des tuiles, en pixels (généralement 256) tileWidth Float Obligatoire Largeur des tuiles, en pixels (généralement 256) topLeftCorner Array({float}) Obligatoire Coordonnées d'origine des tuiles (coin « en haut à gauche »), dans la projection du TileMatrixSet : [x, y]. Quelques remarques : Plusieurs clés Si plusieurs clés sont spécifiées, les informations relatives aux deux clés de contrat seront alors disponibles dans la variable Gp.Config. La clé spécifiée dans l'objet layers permet de savoir à quel contrat est associé chaque ressource, et donc de bien différencier les droits relatifs à chaque clé (notamment si on prévoit de gérer l'utilisation de plusieurs clés dans l'API). Informations des couches agrégées Si l'identifiant d'une couche agrégée est spécifié, les informations spécifiques à l'agrégation seront ajoutées dans la variable globale Gp.Config, dans les informations de la couche agrégée (l'agrégat final des autres couches). Informations manquantes pour les couches WFS Les informations retournées par le service, et stockées dans l'objet Gp.Config ne sont pas suffisantes, notamment pour afficher une couche WFS. En effet, il est nécessaire de connaître des paramètres concernant le protocole WFS : le namespace de la couche (featureNS) ainsi que le nom de l'attribut contenant la géométrie (geometryName). Ces deux éléments ne peuvent être récupérés qu'avec une requête DescribeFeatureType sur la couche que l'on veut récupérer. De même, il est nécessaire de connaître le featurePrefix ainsi que le typename, qui peuvent être récupérés à partir du nom de la ressouce. On peut récupérer les paramètres featurePrefix et typename à partir du nom de la ressource pour les ajouter à la variable globale. Par exemple avec la ressource BDCARTO_BDD_GLP_WGS84G_20131216:commune : • featurePrefix : la chaine de caractères avant les « : » dans le nom de la ressource. Par 26/94 exemple, featurePrefix = BDCARTO_BDD_GLP_WGS84G_20131216. • typename : la chaine de caractères après les « : » dans le nom de la ressource. Par exemple, typename = commune. En revanche, pour les paramètres featureNS et geometryName, on les laissera vide. Lorsqu'on souhaitera ajouter une couche WFS, on pourra essayer les propositions suivantes : : uri composée de la manière suivante : http://wxs.ign.fr/datastore/featurePrefix. Par exemple, http://wxs.ign.fr/datastore/BDCARTO_BDD_GLP_WGS84G_20131216 • featureNS • geometryName = 'the_geom' ou 'geom' Exemples d'utilisation : Utilisation de la fonction getConfig() Exemple 1 : Première opération de l'autoconf avec une clef ; utilisation des différentes fonctions de rappel. Gp.services.getConfig({ apiKey: 'CLE_API', onSuccess: function(config){ console.log("Succès de la lecture de l'auto-configuration"); //affiche le contenu de la variable Geoportal.Config console.log(config); }, onFailure: function(error){ console.log("erreur de récupération des paramètres d'autoconfiguration"); console.log("erreur : "+error.errorStatus); console.log(error.message); } }) ; L'objet config de la fonction onConfLoaded correspond à la variable globale Gp.Config. On peut alors visualiser notamment les différentes ressources auxquelles on a accès avec sa clé dans l'objet config.layers. Exemple 2 : getConfig avec plusieurs clefs. Gp.services.getConfig({ apiKey: [ 'CLE_1', 'CLE_2' ], onSuccess: function(config){ console.log(config.generalOptions.apiKeys); }, }) ; Pour visualiser rapidement les ressources disponibles pour chacune des clés, on peut visualiser l'objet Gp.Config.generalOptions.apiKeys, qui liste pour chaque clé les identifiants des couches disponibles. Exemple 3 : Utilisation du paramètre layerId (deuxième opération de l'autoconf). 27/94 Gp.services.getConfig({ apiKey: 'CLE_API', layerID: "GEOGRAPHICALGRIDSYSTEMS.MAPS.3D$GEOPORTAIL:OGC:WMTS@aggregate", onSuccess(config) { console.log(config); }, }) ; On peut alors visualiser le nom des couches composant la couche agrégée dans le tableau : config.layers["GEOGRAPHICALGRIDSYSTEMS.MAPS.3D$GEOPORTAIL:OGC:WMTS@aggr egate"].aggregationOptions.aggregatedLayers[]. Exemple 4 : Autoconf chargée localement. Gp.services.getConfig( serverUrl: "autoconf.js", onSuccess: function(config){ console.log(config); } ) ; Exemple 5 : Autoconf en GET sans passer par le protocole JSONP. Utilisation d'un proxy. Gp.services.getConfig( apiKey: 'CLE_API', onSuccess: function(config){ console.log(config); }, protocol:'XHR', proxyURL: "/proxy/proxy.php", httpMethod:'GET' ) ; Le résultat est le même : l'ensemble des informations associées à son contrat sont présentes dans la variable Gp.Config. Exemple 6 : Autoconf en POST. Utilisation d'un proxy. Gp.services.getConfig({ apiKey: 'CLE_API', onSuccess: function(config){ console.log(config); }, protocol:'XHR', proxyURL: "/proxy/proxy.php", httpMethod:'POST' }) ; Exploitation des résultats avec OpenLayers 3 Exemple 1 : Affichage d'une couche Géoportail WMTS avec OpenLayers 3 et les informations issues de l'autoconfiguration. var map = null; Gp.services.getConfig({ 28/94 apiKey: 'CLE_API', // la fin de chargement de l'autoconf declenche l'affichage de la carte onSuccess: initMap }); function initMap(config){ var layerID= 'GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS'; var layerConf= Gp.Config.layers[layerID]; var territoryConf= Gp.Config.territories; var TMSconf= Gp.Config.TileMatrixSets[layerConf.TileMatrixSetLink]; map= new ol.Map({ target: 'viewerDiv', renderer: "dom", view: new ol.View({ zoom: 7, center: [288074.8449901076, 6247982.515792289], maxZoom: territoryConf.defaultOptions.maxZoomLevel }), layers: [ new ol.layer.Tile({ source: new ol.source.WMTS({ url: layerConf.serviceParams.serviceUrl layer: layerConf.name, matrixSet: layerConf.TileMatrixSetLink, format: layerConf.formats[0].name, projection: layerConf.projection, tileGrid: new ol.tilegrid.WMTS({ origin: TMSConf.matrixIds[0].topLeftCorner, resolutions: TMSConf.nativeResolutions, matrixIds: TMSConf.matrixIds }), style: layerConf.styles[0].name }) }) ] }); } Exemple 2 : Affichage d'une couche WMS Géoportail avec OpenLayers 3 et les données de l'autoconfiguration. (GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMS) var map = null; Gp.services.getConfig({ apiKey: 'CLE_API', // la fin de chargement de l'autoconf déclenche l'affichage de la carte onSuccess : initMap }); function initMap(config){ var layerID = 'GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMS'; var layerConf = Gp.Config.layers[layerID]; var territoryConf = Gp.Config.territories; map = new ol.Map({ target: 'viewerDiv', view: new ol.View({ zoom: 7, center: [288074.8449901076, 6247982.515792289], maxZoom: territoryConf.defaultOptions.maxZoomLevel }), 29/94 }); layers: [ new ol.layer.Image({ source: new ol.source.ImageWMS({ url: layerConf.serviceParams.serviceUrl, params: {'LAYERS': layerConf.name} }) }) ] } 30/94 Géocodage Direct Il s'agit de proposer une couche logicielle permettant l'utilisation du service de géocodage du Géoportail4. Cette couche logicielle devra envoyer une requête correctement construite au serveur de géocodage selon des paramètres passés par le développeur et, parser la réponse du serveur, pour présenter au développeur les résultats. Cas d'utilisation L'utilisateur est un développeur qui souhaite géocoder un ou plusieurs localisants. Il peut rechercher l'emplacement d'un toponyme, d'une adresse, d'une parcelle cadastrale et filtrer cette recherche en fonction d'attributs ou de contraintes géographiques. Il peut utiliser plusieurs méthodes et protocoles pour faire cette recherche. La réponse du serveur, après avoir été analysée et structurée, lui sera communiquée pour qu'il puisse ensuite effectuer le traitement qu'il souhaite. Mise en oeuvre L'utilisation se fera par l'appel de la fonction statique : Gp.services.geocode(geocodeOptions) La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Propriété location Type String or Object Opt. obligatoire Valeur Nom de l'adresse, du toponyme ou de la parcelle cadastrale recherchée (ou autre type de localisant). Sous forme de String, la propriété permet de faire une recherche déstructurée. Sous forme d'objet, la propriété permet de structurer la recherche. Dans ce cas, les propriétés possibles de cet objet sont décrites ci-après. filterOptions Object optionnel Les propriétés possibles de cet objet sont décrites ciaprès. maximumResponses Number optionnel Nombre de réponses maximal que l'on souhaite recevoir. Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 25. returnFreeForm Boolean optionnel Indique si l'on souhaite en réponse un localisant concaténée plutôt que structuré. Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'false'. srs 4 String optionnel Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés. Les principes du service de Géocodage sont exposés en Annexes. 31/94 Propriété Type Opt. Valeur Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'. Propriétés de l'objet location : Propriété [propriétés du localisant] Type String Valeur Propriété du localisant recherché sous la forme d'un couple clé/valeur à définir selon les possibilités du serveur. Le service de géocodage du Géoportail permet de faire des recherches structurées avec les propriétés : "number", "street", "postalCode" et "city", Propriétés de l'objet filterOptions : Propriété bbox Type Object Valeur Emprise dans laquelle on souhaite effectuer la recherche. Les propriétés possibles de cet objet sont décrites ci-après. Pas de valeur par défaut. type Array(String) Type de l'objet recherché. Le service de géocodage du Géoportail permet de rechercher des 'PostionOfInterest' pour des toponymes, des 'StreetAddress' pour des adresses postales et/ou des 'CadastralParcel' pour des parcelles cadastrales. D'autres types pourront être rajoutés selon l'évolution du service. Par défaut, type = ['StreetAddress']. [propriétés du filtre] String Critère supplémentaire pour filtrer la recherche sous la forme d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête. Le service de géocodage du Géoportail permet de filtrer tous les résultats avec les propriétés : "municipality", "insee", "department", "accuracy" et "matchType". Il permet aussi de filtrer les adresses postales avec les propriétés : "number", "street", "postalCode","quality", "ID", "ID_TR", et "territory". Il permet de filtrer les toponymes avec les propriétés : "importance", "nature", "postalCode" et "territory". Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés : "sheet", "section", et "absorbedcity". Pas de valeur par défaut. Propriétés de l'objet bbox: Propriété Type Opt. Valeur left Float obligatoire Abscisse du côté gauche de la BBOX right Float obligatoire Abscisse du côté droit de la BBOX. 32/94 top Float obligatoire Ordonnée supérieure de la BBOX. bottom Float obligatoire Ordonnée inférieure de la BBOX. Paramètres de la fonction onSuccess() La fonction onSuccess() prend en paramètre un objet ayant les propriétés suivantes: Propriété Type Valeur geocodedLocations Array({Objet}) Liste des localisants géolocalisées. Les propriétés possibles de cet objet sont décrites ci-après. Propriétés des objets de geocodedLocations Propriété Type Valeur position Array({x :Float, y:Float}) Longitude, latitude du résultat dans le système de coordonnées demandé. accuracy Float Indicateur de pertinence (proximité phonétique et orthographique) entre la requête et le résultat. Il est compris entre 0 (pas de correspondance) et 1 (exactement identique). commune String Ville du résultat. department String Département du résultat. freeform String Nom de l'adresse, du toponyme ou de la parcelle dans le cas où une forme déstructurée a été demandée. insee Number Code INSEE du résultat. matchType String Indique comment a été fait le géocodage : "street number" (à l'adresse exacte), "street enhanced" (à l'adresse avec interpolation entre les bornes de début et de fin du tronçon), "street" (à la rue sans interpolation), "city" (à la commune). municipality String Municipalité du résultat. Propriétés spécifiques aux adresses postales bbox Array(Object) id String id_tr String number String postalCode Number quality String street String territoire String oEmprise de l'adresse dans le système de coordonnées demandé. p oIdentifiant BD ADRESSE dans le cas où le résultat est une adresse. p oIdentifiant "Route Adresse" de la voie portant l'adresse dans la base BD pADRESSE. oNuméro de l'adresse (avec répétiteur s'il y a lieu) . p oCode postal de l'adresse. p oIndicateur de qualité du géocodage (pour plus d'infos phttp://api.ign.fr/tech-docs-js/fr/developpeur/search.html) oNom de la rue dans laquelle se trouve l'adresse. p oCode du territoire français où se situe l'adresse p 33/94 Propriété Type Valeur Propriétés spécifiques aux toponymes bbox Array(Object) oEmprise du toponyme dans le système de coordonnées demandé. p importance Number oImportance du toponyme. p nature String oNature du toponyme. p postalCode Number oCode postal du toponyme. p territoire String oCode du territoire français où se situe le toponyme. p Propriétés spécifiques aux parcelles cadastrales absorbedCity String oCode commune absorbée de la parcelle : lorsqu'une parcelle est issue pd'une ancienne commune qui a fusionné avec une autre. Sinon, le code vaut '000'. cadastralParcel String sheet String number String section String oNom de la parcelle. p oFeuille de la parcelle. p oNuméro de la parcelle. p oSection de la parcelle. p Les propriétés listées ci-dessus sont celles fournies par le service de géocodage du Géoportail. Dans le cas de consultations d'un autre service, d'autres propriétés peuvent être retournées. Paramètres de la fonction onFailure() La fonction onFailure() prend en paramètre un objet ayant les propriétés suivantes: Propriété Type Valeur status Number Code HTTP de retour du serveur. message String Message de retour du serveur. Exemples d'utilisations : Exemple 1 : recherche des coordonnées d'un localisant sur le serveur de géocodage du Géoportail Gp.services.geocode({ apiKey:"CLEF_API", location : "rue pasteur, Saint-Mandé", onSuccess : function(geocodedLocations){ if(geocodedLocations.legth > 0){ console.log(geocodedLocations[0]) ; } }, onFailure : function(response){ alert("Erreur "+ response.status + " : " + response.message) } }) ; Exemple 2 : recherche structurée des coordonnées d'un localisant. Limite aux 5 premiers résultats. Adresses reçues en texte libre. 34/94 Gp.services.geocode({ apiKey:"CLEF_API", location : { street:"rue pasteur", city : "Saint-Mandé" }, maximumResponses : 5, returnFreeForm : true, onSuccess : function(geocodedLocations){ if(geocodedLocations.legth > 0){ alert(geocodedLocations[0].freeForm) } }, onFailure : function(response){ alert("Erreur "+ response.status + " : " + response.message) } }) ; Exemple 3 : Recherche d'adresses ou toponymes avec un filtre attributaire la limitant au département des Bouches-du-Rhône. Gp.services.geocode({ apiKey:"CLEF_API", location : "rey arles", filterOptions : { type:['StreetAddress','PointOfInterest'], departement :"13" }, onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") } }) ; Exemple 4 : Recherche d'une parcelle cadastrale avec un filtre géographique exprimée en Lambert 93 (EPSG:2154). Gp.services.geocode({ apiKey:"CLEF_API", location : "000BO01297", srs : "EPSG:2154", filterOptions : { type:['CadastralParcel'], bbox :{ left : 735394, right : 884191, top : 6326325, bottom : 6236944 } }, onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") } }) ; Exemple 5 : Interrogation en mode AJAX (protocole XHR) et utilisation d'un proxy. Gp.services.geocode({ apiKey:"CLEF_API", 35/94 location : "rue pasteur, Saint-Mandé", httpMethod : "GET", protocol : "XHR", proxyUrl :"/proxy.php?url=" onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") } }) ; Exemple 6 : Envoi d'une requête en POST. Utilisation d'un proxy. Gp.services.geocode({ apiKey:"CLEF_API", location : "rue pasteur, Saint-Mandé", httpMethod : "POST", proxyUrl :"/proxy.php?url=" onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") } }) ; Exemple 7 : Utilisation d'une autre URL pour le serveur de Géocodage. Gp.services.geocode({ location : "rue pasteur, Saint-Mandé", serverUrl : "http://pp-gpp3-wxs-ignfr.aw.atosorigin.com/CLEF_API/geoportail/ols", onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") } }) ; 36/94 Geocodage inverse Il s'agit de proposer une couche logicielle permettant l'utilisation du service de géocodage indirect. Cette couche logicielle devra envoyer une requête correctement construite au serveur de géocodage indirect selon des paramètres passés par le développeur et, parser la réponse du serveur, pour présenter au développeur les résultats. Cas d'utilisation Il peut rechercher un toponyme et/ou une adresse à proximité d'une position. Il peut utiliser plusieurs méthodes et protocoles pour faire cette recherche. La réponse du serveur, après avoir été analysée et structurée, lui sera communiquée pour qu'il puisse ensuite effectuer le traitement qu'il souhaite. Mise en oeuvre L'utilisation se fera par l'appel de la fonction statique. Gp.services.reverseGeocode(reverseGeocodeOptions) La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Propriété Type Opt. Valeur position Object({x:Floa obligatoire t,y:Float}) Abscisse et ordonnée du point de référence pour le calcul de proximité exprimées dans le système de référence spécifié par le srs. srs String Système de coordonnées dans lequel les paramètres géographiques en entrée sont exprimés. La réponse du service sera alors aussi exprimée dans ce système de coordonnées. optionnel Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'. filterOptions Object optionnel Les propriétés possibles de cet objet sont décrites ciaprès. returnFreeForm Boolean optionnel Indique si l'on souhaite en réponse un localisant exprimé en texte libre plutôt que dans une forme structurée. Pas de valeur par défaut. La valeur par défaut sera donc celle du service : 'false' pour le Géoportail. maximumResponses Number optionnel Nombre de réponses maximal que l'on souhaite recevoir. Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 25. Propriétés de l'objet filterOptions: Propriété bbox Type Object Valeur Emprise dans laquelle on souhaite effectuer la recherche. Les propriétés 37/94 possibles de cet objet sont décrites ci-après. Pas de valeur par défaut. circle Object Cercle dans lequel on souhaite effectuer la recherche. Les propriétés possibles de cet objet sont décrites ci-après. Pas de valeur par défaut. polygon Array({x:Float,y:F Polygone dans lequel on souhaite effectuer la recherche. Liste des loat}) couples x et y pour chaque point constituant le polygone. Pas de valeur par défaut. type Array(String) Type de l'objet recherché. Le service de géocodage du Géoportail permet de rechercher des 'PostionOfInterest' pour des toponymes, des 'StreetAddress' pour des adresses postales et/ou des 'CadastralParcel' pour des parcelles cadastrales. D'autres types pourront être rajoutés selon l'évolution du service. Par défaut, type = ['StreetAddress']. Propriétés de l'objet bbox: Propriété Type Opt. Valeur left Float obligatoire Abscisse du côté gauche de la BBOX right Float obligatoire Abscisse du côté droit de la BBOX. top Float obligatoire Ordonnée supérieure de la BBOX. bottom Float obligatoire Ordonnée inférieure de la BBOX. Propriétés de l'objet circle: Propriété Type Opt. Valeur x Float obligatoire Abscisse du centre du cercle de recherche. y Float obligatoire Ordonnée du centre du cercle de recherche. radius Float obligatoire Rayon du cercle de recherche. Paramètre de la fonction onSuccess() La fonction onSuccess() prend en paramètre un objet contenant la réponse du service possédant les propriétés suivantes: Propriété geocodedLocations Type Array({Objet}) Valeur Liste des localisants géolocalisés. Les propriétés possibles de cet objet sont décrites ci-après. Propriétés des objets de geocodedLocations 38/94 Propriété Type Valeur position Object({x:Float, y:Float}) Abscisse du résultat dans le système de coordonnées demandé. searchCenterDistance Float Distance entre le point de référence et le résultat (dépend du système de coordonnées). commune String Ville du résultat. department String Département du résultat. insee Number Code INSEE du résultat. matchType String Indique comment a été fait le géocodage : "street number" (à l'adresse exacte), "street enhanced" (à l'adresse avec interpolation entre les bornes de début et de fin du tronçon), "street" (à la rue sans interpolation), "city" (à la commune). municipality String Municipalité du résultat. Propriétés spécificiques aux adresses postales bbox Array(Object) Emprise de l'adresse dans le système de coordonnées demandé. number String Numéro de l'adresse (avec répétiteur s'il y a lieu). postalCode Number Code postal de l'adresse. quality String Indicateur de qualité du géocodage (pour plus d'infos http://api.ign.fr/tech-docs-js/fr/developpeur/search.html) street String Nom de la rue dans laquelle se trouve l'adresse. territoire String Code du territoire français où se situe l'adresse. Propriétés spécifiques aux toponymes bbox Array(Object) Emprise du toponyme dans le système de coordonnées demandé. importance Number Importance du toponyme. nature String Nature du toponyme. postalCode Number Code postal du toponyme. territoire String Code du territoire français où se situe le toponyme. Propriétés spécifiques aux parcelles cadastrales absorbedCity String Code commune absorbée de la parcelle : lorsqu'une parcelle est issue d'une ancienne commune qui a fusionné avec une autre. Sinon, le code vaut '000'. cadastralParcel String Nom de la parcelle. district String Arrondissement de la parcelle. sheet String Feuille de la parcelle. 39/94 Propriété Type Valeur number String Numéro de la parcelle retournée. section String Section de la parcelle. Les propriétés listées ci-dessus sont celles fournies actuellement par le service de géocodage du Géoportail. Paramètres de la fonction onFailure() La fonction onFailure() prend en paramètre un objet ayant les propriétés suivantes: Propriété Type Opt. Valeur status Number obligatoire Code HTTP de retour du serveur. message String obligatoire Message de retour du serveur. Exemples d'utilisation Exemple 1 : Recherche d'adresses proches d'un point. Gp.services.reverseGeocode({ apiKey:"CLEF_API", position : { x : 43,6779842, y : 4,621130 }, onSuccess : function(geocodedLocations){ console.log(geocodedLocations) }, onFailure : function(response){ alert("Erreur "response.status + " : " + response.message) } }) Exemple 2 : Recherche d'adresses proches d'un point. Limitation aux 5 premiers résultats. Adresses exprimées en texte libre. Gp.services.reverseGeocode ({ apiKey:"CLEF_API", position : { x : 43,6779842, y : 4,621130 }, maximumResponses : 5, returnFreeForm : true, onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") } }) Exemple 3 : Recherche d'adresses ou toponymes proches d'un point. Gp.services.reverseGeocode ({ apiKey:"CLEF_API", position : { x : 43,6779842, 40/94 y : 4,621130 }, filterOptions : { type:['StreetAddress','PointOfInterest'] } onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") } }) ; Exemple 4 : Recherche de parcelles proches d'un point dans une zone de recherche rectangulaire exprimée en Lambert 93. Gp.services.reverseGeocode ({ apiKey:"CLEF_API", position : { x : 755394, y : 6296944 } srs : "EPSG:2154", filterOptions : { type:['CadastralParcel'], bbox:{ left : 735394, right : 884191, top : 6326325, down : 6236944 } }, onSuccess : function(geocodedLocations){ alert(geocodedLocations.length + " réponses") ; } }) 41/94 Autocomplétion Il s'agit de proposer une couche logicielle permettant l'utilisation du service d'autocomplétion 5. Cette couche logicielle devra envoyer une requête correctement construite au serveur d'autocomplétion selon des paramètres passés par le développeur et, parser la réponse du serveur, pour présenter au développeur les résultats. Cas d'utilisation Le cas d'utilisation classique est le champ de saisie texte d'un moteur de recherche dans une application dont on veut qu'il propose des suggestions d'adresses ou de toponymes au fur et à mesure de la saisie. Les suggestions peuvent alors être ré-exploitées, soit pour récupérer les coordonnées qui y sont associées, soit comme critère de recherche pour le service de Géocodage du Géoportail (recherche plus pertinente et informations attributaires plus riches). Mise en oeuvre L'utilisation se fera par l'appel de la fonction statique. Gp.services.autocomplete(autocompleteOptions) La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Propriétés de l'objet autocompletOptions : Propriété Type Opt. Valeur text String obligatoire La chaîne de caractère à compléter. Cette chaîne n'est pas "URL encodée". C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête. filterOptions Object optionnel Les propriétés possibles de cet objet sont décrites ciaprès. maximumResponses Number optionnel Nombre de réponses maximales que l'on souhaite recevoir. Pas de valeur par défaut. La valeur par défaut sera donc celle du service : 10. Propriétés de l'objet filterOptions : Propriété type Type Array(String) Valeur Type de l'objet recherché. Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PostionOfInterest' et/ou des adresses postales 'StreetAddress'. D'autres types pourront être rajoutés selon l'évolution du service. Par défaut, type = ['StreetAddress']. territory Array(String) Limitation de la zone de recherche de localisants. Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse 'METROPOLE', aux DOMS TOMS 5 Le fonctionnement du service est précisé en annexes. 42/94 'DOMSTOMS', à une liste de codes de départements ou codes INSEE de communes. Pas de valeur par défaut. La valeur par défaut est donc celle du service. Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié. Paramètres de la fonction onSuccess(autocompleteResponse) La fonction onSuccess() prend en paramètre un objet ayant les propriétés suivantes: Propriété Type Valeur status String Message de retour du serveur. suggestedLocations Array({Objet}) Liste des localisants proposés par le service. Les propriétés possibles de cet objet sont décrites ci-après. Propriétés de l'objet suggestedLocations: Propriété Type Valeur position Object({x :Flo Longitude et latitude du résultat dans le système de coordonnées demandé. at, y :Float}) commune String Ville du résultat. fullText String Nom complet de l'adresse, du toponyme. poi String Propre aux toponymes. Nom du lieu. postalCode Number Propre aux adresses postales et toponymes. Code postal de l'adresse ou du toponyme géolocalisée. classification Integer Valeur fonction de la nature du localisant. Pour les communes, ce chiffre varie de 1 (capitale) à 6 (commune). Pour les autres toponyme, il est égal à 8. kind String Propre aux toponymes. Type de toponymes ( par exemple "préfecture", monument, "commune"... ). street String Propre aux adresses postales. Nom de la rue. Paramètres de la fonction onFailure() La fonction onFailure() prend en paramètre un objet ayant les propriétés suivantes: Propriété Type Valeur status Number Code HTTP de retour du serveur. message String Message de retour du serveur. 43/94 Exemples d'utilisations Exemple 1 : Demande de suggestions d'adresses commencant par "rue pasteur, Sai" . Gp.services.autocomplete({ apiKey:"CLEF_API", text : "rue pasteur, Sai", onSuccess : function(autocompleteResponse){ console.log(autocompleteResponse) }, onFailure : function(autocompleteResponse){ alert("Erreur "autocompleteResponse.status + " : " + autocompleteResponse.message) } }) ; Exemple 2 : Demande de suggestions d'adresses ou de toponymes commençant par "rue pasteur, Sai". Restriction de la recherche sur le département 94. Limitation du nombre de réponses. Gp.services.autocomplete ({ apiKey:"CLEF_API", text : "rue pasteur, Sai", filterOptions:{ type:['StreetAddress','PositionOfInterest'], territory :["94"] }, maximumResponses : 5, onSuccess : function(autocompleteResponse){ alert(autocompleteResponse.suggestedLocations.length + " réponses") } }) ; Exemple 3 : Utilisation du service de géocodage sur une autre URL. Gp.services.geocode({ text : "rue pasteur, Saint-Man", serverUrl : "http://pp-gpp3-wxs-i-ignfr.aw.atosorigin.com/CLEF_API/geoportail/ols/apis/completion" onSuccess : function(geocodedResponse){ alert(geocodedResponse.suggestedLocations.length + " réponses") } }) ; 44/94 Calcul d'itinéraires Il s'agit de proposer une couche logicielle permettant d'utiliser le service de calcul d'itinéraires du Géoportail6. Elle permet à l'utilisateur de passer ses paramètres en entrée du service et d'en récupérer l'itinéraire et les instructions dans une structure JSON en retour. Cas d'utilisation L'utilisateur est un développeur qui souhaite mettre en œuvre un formulaire permettant de saisir des points de départ et d'arrivée et de déterminer un itinéraire à partir du service de calcul d'itinéraires du Géoportail. Il souhaite pouvoir afficher la géométrie de l'itinéraire avec une API cartographique du marché. Mise en œuvre L'invocation du service se fait via l'appel d'une fonction statique Gp.services.route(routeOptions) La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Paramètre Type Opt. Valeur routePreference String Optionnel Mode de calcul à utiliser : * le plus rapide « fastest » * le plus court « shortest » * piéton « pedestrian » Par défaut : « fastest ». startPoint Object Obligatoire Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float} endPoint Object Obligatoire Point d'arrivé du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float} viaPoints Array(Object) Optionnel Liste de point intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau. Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float} vehicle String Optionnel Type de véhicule utilisé « voiture ». Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non. Par défaut, c'est la valeur voiture qui sera utilisée. Si routePreference vaut « pedestrian », alors le paramètre vehicle est ignoré. exclusions Array(String) Optionnel Critères d'exclusions à appliquer pour le calcul. On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »). provideGeometry Booléen Optionnel Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions. Par défaut : false. provideBbox Booléen Optionnel Indique si les instructions doivent être localisées par une bbox dans la réponse. Par défaut : true. 6 Une description du service est fournie en annexes. 45/94 Paramètre Type Opt. Valeur distanceUnit String Optionnel Unité dans laquelle les distances seront exprimées dans la réponse (« m » ou « km »). Par défaut : « km ». Paramètres de la fonction onSuccess : La fonction onSuccess prend un objet JSON en entrée, ayant les propriétés suivantes : Propriété Type Valeur totalTime float Durée totale de l'itinéraire (en secondes). totalDistance float Longueur totale de l'itinéraire (en « m » ou « km » selon le paramètre distanceUnit de la requête). bbox bbox Emprise (rectangle englobant) de l'itinéraire. routeGeometry geoJSON Géométrie de l'itinéraire. routeInstructions Array(Object) Liste des instructions le long de l'itinéraire. Les propriétés d'un objet d'instructions esont décrites dans le tableau suivant. Propriétés des instructions : Propriété Type Valeur duration Float Durée (en secondes) de l'instruction distance Float Longueur (en « m » ou « km » selon le paramètre distanceUnit de la requête) code String Code de l'instuction : - F : tout droit - B : demi-tour - L : tourner à gauche - R : tourner à droite - BL : tourner très à gauche - BR : tourner très à droite - FL : tourner légèrement à gauche - FR : tourner légèrement à droite - round_about_entry : entrée rond-point - round_about_exit : sortie rond-point : instruction String Texte de l'instruction (traduction du code + nom de la rue concernée) bbox bbox Emprise (rectangle englobant) de l'instruction. La présence de cette propriété est déterminée par le paramètre provideBbox de la requête. geometry geoJSON Géometrie de l'instruction. La présence de cette propriété est déterminée par le paramètre provideGeometry de la requête. Exemples d'utilisation Exemple 1 : Calcul d'itinéraire entre deux points donnés et affichage avec OpenLayers 3. Gp.services.route({ apiKey :'CLEF_API', startPoint : { x : 2.25, y : 45.12 46/94 }, endPoint : { x : 3.25, y : 48.12 }, onSuccess : function(route) { // cf. http://openlayers.org/en/master/examples/geojson.html var vectorSource = new ol.source.Vector({ features: (new ol.format.GeoJSON()).readFeatures(route.geometry) }); var vectorLayer = new ol.layer.Vector({ source: vectorSource }); // l'objet map est un objet ol.Map precedemment cree. map.addLayer(vectorLayer) ; } }) ; 47/94 Calcul d'isochrones / isodistances Il s'agit de proposer une couche logicielle permettant d'utiliser le service de calcul d'isochrones / isodistances du Géoportail7. Elle permet à l'utilisateur de passer ses paramètres en entrée du service et d'en récupérer la géométrie de la courbe calculée et ses caractéristiques dans une structure JSON en retour. Cas d'utilisation L'utilisateur est un développeur qui souhaite mettre en œuvre un formulaire permettant de saisir un point de départ des paramètres afin de déterminer une courbe ischrone ou isodistance à partir du service de calcul d'itinéraires du Géoportail. Il souhaite afficher cette courbe avec une API cartographique du marché. Mise en œuvre L'invocation du service se fait via l'appel d'une fonction statique : Gp.service.processIsoCurve(isoCurveOptions) La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Paramètre Type Opt. Valeur position Object Obligatoire Coordonnées du point de départ (ou d'arrivée) du calcul de courbe. Les coordonnées son exprimée sous la forme d'un objet : { x:float, y:float}. Le système de coordonnées est spécifié à l'aide du paramètre « srs ». srs String Optionnel Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et dans lequel la géométrie de la courbe résultante sera exprimée. Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ». graph String Optionnel Nom du graphe à utiliser pour le calcul (« pieton » ou « routier »). La valeur par défaut est : «routier» vehicle String Optionnel Profil de véhicule à utiliser pour le calcul. Pour l'instant, un seul seul type de véhicule est proposé par le service du Géoportail : « voiture ». Si graph vaut « pieton » alors le paramètre vehicle est ignoré. exclusions Array(String) Optionnel Critères d'exclusions à appliquer pour le calcul. On précise ici le type de tronçons que l'on ne veut pas que le calcul utilise (« Toll », « Bridge » ou « Tunnel »). time Float Conditionnel Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ». L'utilisation de ce paramètre entraine un calcul d'isochrone. S'il n'est pas spécifié alors le paramètre distance doit être renseigné pour déclencher un calcul d'isodistance. Si les deux paramètres sont renseignés, le paramètre 7 Une description du service est fournie en annexes. 48/94 Paramètre Type Opt. Valeur distance sera ignoré. distance Float Conditionnel Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ». L'utilisation de ce paramètre entraine un calcul d'isodistance. S'il n'est pas spécifié alors le paramètre time doit être renseigné pour déclencher un calcul d'isochrone. Si les deux paramètres sont renseignés, le paramètre distance sera ignoré. reverse Boolean Optionnel Indique si le point spécifié via le paramètre « location » doit être utilisé comme point d'arrivée (« true ») au lieu de point de départ du calcul (« false »). Par défaut, la valeur « false » est appliquée. smoothing Boolean Optionnel Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier. Par défaut, la valeur « false » est appliquée. holes Boolean Optionnel Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »). Par défaut, la valeur « false » est appliquée. Paramètres de la fonction onSuccess : La fonction onSuccess prend un objet JSON en entrée, ayant les propriétés suivantes : Propriété Type Valeur message String Message éventuel accompagnant la réponse du service status String Status de la réponse du service (« OK ») id String Identifiant de la requête à partir de laquelle la réponse a été calculée location Object Coordonnées du point de départ ou d'arrivée ({x:float, y:float}) exprimées dans le système de coordonnées spécifié via la propriété « srs ». srs String Système de coordonnées dans lequel les coordonnées de la réponse sont exprimées. time Float Durée utilisée pour le calcul dans le cas d'une isochrone distance Float Distance utilisée pour le calcul dans le cas d'une isodistance geometry geoJSON Géométrie de la courbe calculée. Exemples d'utilisation Exemple 1 : Calcul d'isochrone à partir d'un point donné et affichage avec OpenLayers 3. Gp.services.processIsoCurve({ apiKey :'CLEF_API', position : { x : 2.25, y : 45.12 }, time : 1000, onSuccess : function(isoCurve) { // cf. http://openlayers.org/en/master/examples/geojson.html var vectorSource = new ol.source.Vector({ 49/94 } features: (new ol.format.GeoJSON()).readFeatures(isoCurve.geometry) }); var vectorLayer = new ol.layer.Vector({ source: vectorSource }); // l'objet map est un objet ol.Map precedemment cree. map.addLayer(vectorLayer) ; }) ; 50/94 Services d'altimétrie Il s'agit de proposer une couche logicielle permettant d'utiliser le service d'altimétrie du Géoportail 8. Elle permettra à l'utilisateur de choisir le mode d'interrogation du service (API REST ou norme WPS), le protocole utilisé (XHR ou JSONP), la méthode HTTP – lorsque c'est possible- (GET ou POST), ou encore le format de sortie. Par défaut, on propose d'utiliser l'API REST, via le protocole JSONP. Cas d'utilisation L'utilisateur est un développeur web qui souhaite intégrer une fonctionnalité de calcul d'altitude dans son application. Par exemple, il souhaite pouvoir récupérer l'altitude de points saisis une carte intéractive par un internaute, ou encore proposer un profil altimétrique calculé à partir d'un échantillonage déterminé par ces points. Il fournit comme paramètres les coordonnées des points dont il souhaite connaître l'altitude, et éventuellement des paramètres concernant la méthode utilisée pour interroger le service. Mise en œuvre L'utilisation se fera par l'appel d'une seule fonction statique : Gp.services.getAltitude(altitudeOptions) On propose une seule fonction, qui gère les deux fonctionnalités du service (calcul d'altitudes simples : Elevation, ou avec échantillonnage : ElevationLine). La présence d'un paramètre « sampling », indiquant un pas d'échantillonnage ainsi que la présence de deux points minimum dans la requête, déclenchera la demande de calcul avec échantillonnage au service. Description : La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Paramètres de l'objet altitudeOptions en entrée de la fonction getAltitude : Paramètre Type Opt. Valeur outputFormat string Conditionnel Le format de la réponse du service alti : 'xml' ou 'json'. Ce paramètre déterminera l'extension '.xml' ou '.json' du service dans le cas de l'API REST, ou la valeur du paramètre 'format' dans le cas de la norme WPS. Nécessaire si serverUrl est renseigné, et qu'on souhaite passer par l'API REST, pour connaître le format dans lequel sera fournie la réponse (pour son traitement). Non nécessaire pour la norme WPS. Par défaut, ce paramètre vaut 'json'. positions Array({x,y}) Obligatoire Tableau contenant les coordonnées des points (CRS:84) dont on veut connaître les altitudes (ou à partir desquelles on va calculer le profil). Minimum 2 éléments si on souhaite calculer un profil altimétrique (ElevationLine). Maximum 50 éléments. sampling Integer Optionnel Nombre de points à utiliser pour déterminer le tracé d'un 8 Une description du service est fournie en annexes. 51/94 Paramètre Type Opt. Valeur profil altimétrique, compris entre 2 et 5000. A spécifier lorsqu'on souhaite accéder à cette fonctionnalité. Dans ce cas, les points fournis en entrée (au minimum de deux) servent à déterminer l'axe planimétrique le long duquel le profil doit être calculé. Si le paramètre sampling n'est pas spécifié ou moins de deux points sont fournis, c'est le service Elevation qui sera interrogé (altitudes simples calculées pour les points fournis). Une valeur de sampling strictement inférieure à 2 déclenchera un échantillonnage avec la valeur par défaut du service (3 points). api string Optionnel Manière d'accéder au service : 'REST' (via l'API REST) ou 'WPS' (via la norme WPS). Par défaut, on utilise l'API REST. zonly boolean Optionnel Permet de ne récupérer que les altitudes en sortie s'il vaut 'true'. Vaut 'false' par défaut. Paramètres de la fonction onSuccess : La fonction prend en paramètres un tableau contenant les informations des différents points (coordonnées, altitude, précision) fournis ou échantillonnés. Ce tableau est le même quel que soit le format de réponse du service spécifié. Paramètre Type Valeur elevations array({object}) Objet contenant les informations (lon, lat, z et acc) des points fournis, dans l'ordre dans lequel ils ont été fournis, et éventuellement des points échantillonnés. Propriétés du tableau elevations : Chaque attribut du tableau elevations est un objet dont les propriétés sont les suivantes : Paramètre Type Valeur lon float Longitude du point fourni (si zonly n'est pas spécifié). lat float Latitude du point fourni (idem) z float Altitude déterminée du point fourni acc float Précision de la valeur au point considéré (si zonly n'est pas spécifié).. Paramètres de la fonction onFailure : La fonction onFailure prend en paramètre un objet failureData avec les propriétés suivantes : Paramètre Type Valeur status number Code HTTP de retour du serveur, ou -1 si on est en timeout. (S'il vaut 200, c'est que l'erreur provient de la lecture des paramètres de la réponse.) message string Message d'erreur. Il peut s'agir de celui renvoyé par le service (not found, clé invalide, missing parameter), ou d'un message renvoyé par l'API, selon 52/94 Paramètre Type Valeur l'erreur (timeout, exception, structure non reconnue). Exemples d'utilisation Exemple 1 : Récupération de l'altitude d'un point à partir de ses coordonnées, et utilisation des fonctions de rappel. Gp.services.getAltitude({ apiKey: 'CLE_API', positions:[ {x:0.2367,y:48.0551} ], onSuccess: function(elevations){ // affiche les informations du point fourni console.log(elevations[0]); }, onFailure: function(erro){ console.log(error.message); } }) ; Exemple 2 : Récupération des altitudes seulement d'une série de points. Gp.services.getAltitude({ apiKey: 'CLE_API', positions:[ {x:0.2367,y:48.0551}, {x:1.2099,y:47.3354}, {x:2.157,y:46.607}, {x:3.3003,y:45.2644}, {x:4.3907,y:43.91} ], zonly:true, onSuccess: function(elevations){ console.log(elevations); } }) ; Exemple 3 : Récupération d'un profil altimétrique de 20 points, à partir de 5 points en entrée. Gp.services.getAltitude({ apiKey: 'CLE_API', positions:[ {x:0.2367,y:48.0551}, {x:1.2099,y:47.3354}, {x:2.157,y:46.607}, {x:3.3003,y:45.2644}, {x:4.3907,y:43.91} ], sampling:20, onSuccess: function(elevations){ // informations des points fournis ET échantillonnés console.log(elevations); } }) ; Exemple 4 : Accès au service en POST, via la norme WPS, et spécification d'un proxy. Gp.services.getAltitude({ apiKey: 'CLE_API', positions:[ 53/94 {x:0.2367,y:48.0551}, {x:1.2099,y:47.3354}, {x:2.157,y:46.607}, {x:3.3003,y:45.2644}, {x:4.3907,y:43.91}, (...) }) ; ], api:'WPS', httpMethod: 'POST', proxyURL: '/proxy/proxy.php?url=', onSuccess: function(elevations){ console.log(elevations); } Exemple 5 : Utilisation d'une autre URL de serveur, en WPS Gp.services.getAltitude({ serverUrl:'http://wxs.ign.fr/CLE_ALTI/alti/wps?service=WPS&version=1.0.0', positions:[ {x:0.2367,y:48.0551} ], api:'WPS', onSuccess: function(elevations){ console.log(elevations); } }) ; Exemple 6 : Utilisation d'une autre URL de serveur, en REST Gp.services.getAltitude({ serverUrl: 'http://wxs.ign.fr/CLE_API/alti/rest/Elevation.xml', outputFormat:'xml', positions:[ {x:0.2367,y:48.0551} ], api:'REST', onSuccess: function(elevations){ console.log(elevations); } }) ; 54/94 Service WCTS : connaître le domaine de validité d'un Système de coordonnées. Il s'agit de proposer une couche logicielle permettant d'utiliser l'opération getValidityArea du service de transformations de coordonnées du Géoportail9. Cas d'utilisation L'utilisateur invoque le service WCTS pour connaître le domaine de validité d'un système de coordonnées dont il fournit l'identifiant. Il reçoit en retour les coordonnées de l'emprise géographique (rectangle englobant) du système de coordonnées. Mise en œuvre L'utilisation se fera par l'appel d'une fonction statique : Gp.services.getSrsValidityArea(options) Description : La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Paramètres de l'objet options en entrée de la fonction srsValidityArea : Paramètre Type Opt. Valeur identifier String Obligatoire identifiant du système de coordonnées, compréhensible par le service (la liste des identifiants supportés est disponible à l'aide de l'opération DescribeProcess sur le processus GetValidityArea (http://wxs.ign.fr/CLEF/geoportail/wps? Service=WPS&Request=DescribeProcess&Version=1.0.0& Identifier=GetValidityArea ) Paramètres de la fonction onSuccess : La fonction onSuccess prend en paramètre un objet ayant les propriétés suivantes : Paramètre Type Valeur bbox array(Float) Objet contenant les coordonnées, exprimées longitudes, latitudes (EPSG:4326) du rectangle englobant décrivant la zone de validité, dans l'ordre suivant : [lonMin, latMin, lonMax, latMax]. Paramètres de la fonction onFailure : La fonction onFailure prend en paramètre un objet error avec les propriétés suivantes : Paramètre Type Valeur status number Code HTTP de retour du serveur, ou -1 si on est en timeout. (S'il vaut 200, c'est que l'erreur provient de la lecture des paramètres de la réponse.) message string Message d'erreur. Il peut s'agir de celui renvoyé par le service (not found, clé invalide, missing parameter), ou d'un message renvoyé par l'API, selon l'erreur (timeout, exception, structure non reconnue). 9 Une description du service est fournie en annexes. 55/94 Exemples d'utilisation Exemple 1 : Récupération du domaine de validité d'un SRS, et utilisation des fonctions de rappel. Gp.services.getSrsValidityArea ({ apiKey: 'CLE_API', identifier:'IGNF:LAMB93', onSuccess: function(validityArea){ // bbox du domaine de validité console.log(validityArea.bbox); }, onFailure: function(error){ console.log(error.message); } }) ; 56/94 Service WCTS : transformer des coordonnées Il s'agit de proposer une couche logicielle permettant d'utiliser l'opération « TransformCoordinates » du service de transformations de coordonnées du Géoportail10. Cas d'utilisation L'utilisateur invoque le service WCTS pour transformer les coordonnées d'une liste de points d'un système de coordonnées vers un autre dont il fournit les identifiants. Il reçoit en retour la liste des points avec leurs coordonnées exprimées dans le système de coordonnées cible. Mise en œuvre L'utilisation se fera par l'appel d'une fonction statique : Gp.services.transformCoordinates(options) Description : La fonction prend en paramètre d'entrée un objet dont les propriétés peuvent prendre les valeurs suivantes (en plus des propriétés générales décrites précédemment) : Paramètres de l'objet options en entrée de la fonction transformCoordinates : Paramètre Type Opt. Valeur sourceCRS String Optionnel Identifiant du système de coordonnées, compréhensible par le service (la liste des identifiants supportés est disponible à l'aide de l'opération DescribeProcess sur le processus TransformCoordinates (http://wxs.ign.fr/CLEF/geoportail/wps? Service=WPS&Request=DescribeProcess&Version=1.0.0& Identifier=TransformCoordinates ) Par défaut la valeur utilisée est : IGNF:LAMB93 targetCRS String Optionnel Identifiant du système de coordonnées, compréhensible par le service (la liste des identifiants supportés est disponible à l'aide de l'opération DescribeProcess sur le processus TransformCoordinates. (http://wxs.ign.fr/CLEF/geoportail/wps? Service=WPS&Request=DescribeProcess&Version=1.0.0& Identifier=TransformCoordinates ) Par défaut la valeur utilisée est : IGNF:LAMB93 points Array({x :Float, Obligatoire y:Float}) Liste des points dont on veut transformer les coordonnées. Chaque point est exprimé via un objet javascript ayant la structure suivante : {x : Float, y : Float}. nadgridMode String Comportement face aux grilles de changement de système de référence. Le mode « strict » applique la grille seulement entre les 2 datums correspondants à cette grille (comportement Circé : http://geodesie.ign.fr). Le mode « relax » applique toujours la grille dès qu’un des datums demandé correspond à cette grille (comportement Proj4). Par défaut, la valeur « relax » est appliquée. Optionnel Paramètres de la fonction onSuccess : La fonction onSuccess prend en paramètre un objet ayant les propriétés suivantes : 10 Une description du service est fournie en annexes. 57/94 Paramètre Type Valeur points Array({x:Float, y:Float}) Liste des points transformés. Elle est ordonnée dans le même ordre que la liste passée en paramètres Paramètres de la fonction onFailure : La fonction onFailure prend en paramètre un objet error avec les propriétés suivantes : Paramètre Type Valeur status number Code HTTP de retour du serveur, ou -1 si on est en timeout. message string Message d'erreur. Il peut s'agir de celui renvoyé par le service (not found, clé invalide, missing parameter), ou d'un message renvoyé par l'API, selon l'erreur (timeout, exception, structure non reconnue). Exemples d'utilisation Exemple 1 : Transformation des coordonnées d'une liste de points. Utilisation des fonctions de rappel. Gp.services.transformCoordinates ({ apiKey: 'CLE_API', sourceCRS:'EPSG:4326', targetCRS:'IGNF:LAMB93', points: [{x:2.0, y:45},{x:3.0, y:45}], onSuccess: function(results){ // bbox du domaine de validité console.log(results.points); }, onFailure: function(error){ console.log(error.message); } }) ; 58/94 Gp.formats : Gestion des formats relatifs aux services Les services de la plateforme Géoportail exposent selon les cas plusieurs interfaces pour exprimer les requêtes et formuler les réponses. L'API Géoportail Services propose une interface permettant de faire abstraction de ces protocoles de dialogue. Elle utilisera et exposera cependant des classes utilitaires permettant de gérer les différents formalismes, essentiellement lorsqu'il sagit d'exprimer des requêtes ou de traiter des réponses en XML (éventuellement encapsulé en JSON pour ces dernières). On proposera ainsi des classes dédiées au traitement : * du formalisme WPS pour les services d'altimétrie et WCTS ; * du standard OpenLS pour les services de Géocodage et de calcul d'itinéraires ; * de la syntaxe de réponse du service d'autoconfiguration ; * du formalisme XML propriétaire du service d'altimétrie du Géoportail. * des formalismes WKT et GML pour l'expression des géométries exposées par les différents services (Géocodage, Itinéraire, Isochrones / Isodistances, … ) ; * d'autres formats pourront être pris en charge en fonction de l'évolution des interfaces des services de la plateforme. Chacune de ces classes exposera : * des fonctions d'écriture au format XML, dans la syntaxe attendue par le service ; * des fonctions d'analyse des syntaxes XML relatives aux services ; * des fonctions d'écriture des réponses dans le format attendu en paramètre des fonctions de rappel onResponse associées à l'invocation des services par l'API. Packaging L'API Géoportail Services sera disponible sous la forme d'un fichier Javascript permettant d'accéder à toutes les fonctionnalités décrites dans ce document. 59/94 Annexes Principe du filtre JSONP Sur la plateforme Géoportail, le protocole JSONP est opérationnel pour des requêtes émises en HTTP GET. Il est activé lorsque le paramètre « callback » est ajouté à l'URL de la requête. Ce paramètre prend pour valeur le nom d'une fonction prenant en paramètre un objet JSON contenant la réponse du service. L'utilisation du paramètre callback=nomDeFonction a pour conséquence l'intégration de la réponse du service comme paramètre de l'appel javascript de la fonction nomDeFonction : nomDeFonction(réponse du service) Pour des services répondant uniquement en XML, l'utilisation du paramètre output=json est nécessaire et a pour conséquence l'encapsulation de la réponse du service dans une coquille JSON : { http : { status : code http de la réponse du service (200, 403, ...) error : }, xml : 'réponse brute du service' } Ce paramètre est inutile pour les services, comme l'autocomplétion, répondant nativement en json. L'utilisation du paramètre callback=nomDeFonction a alors pour conséquence l'intégration de la réponse du service encapsulée en JSON comme paramètre de l'appel javascript de la fonction nomDeFonction : nomDeFonction({http : {status:200, error:null},xml :'réponse du service'}) De ce fait, l'appel du service pourra se faire via l'intégration d'une balise <script> dans la page html, entrainant alors l'appel de la fonction qui va en traiter le résultat. < !-- script de traitement des résultats --> <script type='text/javascript'> function nomDeFonction(objResultat) { // traitement du resultat du service transmis dans l'objet objResultat.xml ... } < !-- appel du service --> </script> <script type='text/javascript' src='http://wxs.ign.fr/CLEF/service? parametres=valeurs&output=JSON&callback=nomDeFonction/> Un script javascript peut donc ainsi envoyer des requêtes vers les services de la plateforme Géoportail en intégrant dynamiquement cette dernière balise <script> dans la page tout en ayant pris soin d'implémenter la fonction de callback de traitement du résultat. Les appels du service ne seront alors pas bloqués par les contraintes de sécurité « cross-domain » des navigateurs. 60/94 Principe de l'auto-configuration L'infrastructure du Géoportail propose un service, dit d'auto-configuration qui, pour une ou plusieurs clés données, retourne des informations telles que : • les paramètres permettant de configurer une visualisation web par défaut (taille, territoire, couches à afficher) ; • les paramètres techniques (configuration des services WMTS : TileMatrixSets, listes des résolutions, configuration des territoires : emprise, centre de visualisation, ...) ; la liste des ressources (couches) disponibles et les informations permettant d'y accéder (url, emprises, échelles d'affichage, ...). Le service d’auto-configuration possède deux opérations. La première opération permet de récupérer un ensemble d’informations relatives à des couches agrégées et non-agrégées ainsi que des informations supplémentaires permettant d’initialiser la visualisation. La seconde opération permet, à partir de l’id d’une couche, d’obtenir des informations plus détaillées pour les couches agrégées. Il est ainsi possible de récupérer le détail de l’agrégat, les intervalles temporels des données, etc. Pour chaque ressource retournée par le service, un champ "more" permet de savoir s’il est possible de demander la seconde opération afin d’avoir des détails supplémentaires sur la ressource. Accès au service : 1ère opération : On accède au service via une URL du type : http://wxs.ign.fr/CLE/autoconf/?keys=CLE,CLE2,… Les clés sont passées en paramètres afin de ne récupérer que les ressources sur lesquelles elles ont les droits. Si aucune clé n'est spécifiée, la description de toutes les ressources exposées par l'infrastructure Géoportail est retournée. Paramètre valeur CLE La clé de contrat API principale détenue par l’utilisateur (optionnel) ?keys=CLE2,... La liste des clés secondaires, séparées par des virgules (optionnel) Le service est requêtable en GET et le format de sortie est paramétrable à l’aide du paramètre optionnel output qui peut prendre les valeurs suivantes : xml (valeur par défaut) ou json. Par exemple : http://wxs.ign.fr/CLE/autoconf/?output=json&callback=nomDeFonction Remarque : l'utilisation du paramètre callback=nomDeFonction a pour conséquence l'intégration de la réponse du service encapsulée en JSON comme paramètre de l'appel javascript de la fonction nomDeFonction : nomDeFonction({http : {status:200, error:null},xml :'réponse du service'}) 61/94 2ème opération : La seconde opération du service prend les mêmes paramètres si on ne spécifie pas de clé de contrat, mais en ajoutant l'identifiant de la couche (unique) dont on souhaite connaître les informations supplémentaires à la fin de l'url, de la façon suivante : http://wxs.ign.fr/autoconf/id/LAYER_ID Pour récupérer les informations associées à une clé de contrat, plus spécifiques, l'url est plus complexe (règles de réécriture à changer éventuellement) : http://wxs.ign.fr/autoconf/api/autoConf/service/xml/CLE/id/LAYER_ID Paramètre valeur LAYER_ID L'identifiant unique de la couche agrégée CLE La clé de contrat API principale détenue par l’utilisateur (optionnel) L'identifiant de la couche est l'id qui est retourné par la première opération du service. Les couches agrégées sont repérables grâce au champ aggregate="aggregate" dans la description de la ressource, et le champ more="more" qui permet de savoir si la deuxième opération est disponible pour cette ressource. Exemple de requête : http://wxs.ign.fr/autoconf/id/GEOGRAPHICALGRIDSYSTEMS.MAPS.3D$GEOPORTAI L:OGC:WMTS@aggregate Remarques : • d'autres ressources semblent disponibles pour cette deuxième opération du service, mais ne sont pas identifiées comme telles dans la réponse de la première autoconf (pas de champ more ou aggregate). • Actuellement, les ressources agrégées sont disponibles uniquement pour le service d'autoconfiguration (les ressources WMTS ne sont par exemple pas encore accessibles en WMTS), et seules certaines d'entre elles peuvent être associées à une clé de contrat API , et donc accessibles par un utilisateur. Réponse du service : La réponse du service est un fichier XML dont la structure hérite du standard OGC Web Map Context. Des informations plus détaillées sur ce standard peuvent être trouvées sur le site de l'OGC : http://www.opengeospatial.org/standards/wmc. • Comportement sans clé : le service retourne l’intégralité des couches ou agrégats ou éléments d’agrégats disponibles et les paramètres API pour chaque couche ; • Comportement avec une clé : le service retourne l’intégralité des couches disponibles pour la clé et les paramètres API pour chaque couche ; • Comportement avec plusieurs clés : le service retourne l’intégralité des couches disponibles pour les clés et les paramètres API pour chaque couche ; • Comportement avec une clé ou plusieurs clés invalides : le service renvoie une exception 62/94 'La clé est invalide ou ne dispose d'aucun droit'. Le paramètre output=json permet l'encapsulation de la réponse dans un objet JSON, du type : { http : { status : code http de la réponse du service (200, 403, ...) error : }, xml : 'réponse brute du service' } Mise en cache des informations Afin de répondre à des exigences de performance, un cache a été mis en place devant le service. Ainsi, les réponses de l'auto-configuration pour une couche donnée sont stockées dans le cache dès qu'elles ont été requêtées une fois. Les réponses suivantes sont ainsi retournées rapidement sans sollicitation du service. Dès qu'une publication de ressource a lieu, le cache expire et les nouvelles requêtes arrivant lancent la régénération des réponses XML et la mise en cache. Structure des données : La structure de la réponse est la même pour la première et la deuxième opération du service. Dans le cas de la deuxième opération, seules les couches agrégées de la ressource interrogée sont détaillées. La structure générale est la suivante : ViewContext > General > Window > BoundingBox > Title > Extension > gpp:General > gpp:Theme > gpp:defaultGMLGFIStyleUrl > gpp:Territories > gpp:Territory > gpp:defaultCRS > gpp:AdditionalCRS > gpp:AdditionalCRS > (...) > gpp:BoundingBox > sld:MinScaleDenominator > sld:MaxScaleDenominator > gpp:Resolution > gpp:Center > gpp:x > gpp:y > gpp:DefaultLayers > gpp:DefaultLayer > gpp:DefaultLayer > (...) > gpp:Territory 63/94 > (...) > gpp:TileMatrixSets > wmts:TileMatrixSet > ows:Identifier > ows:SupportedCRS > wmts:TileMatrix > ows:Identifier > wmts:ScaleDenominator > wmts:TopLeftCorner > wmts:TileWidth > wmts:TileHeight > wmts:MatrixWidth > wmts:MatrixHeight > gpp:Resolutions (*) > gpp:Services > Server > OnlineResource > LayerList > Layer > Server > OnlineResource > Name > Title > Abstract > SRS > sld:MinScaleDenominator > sld:MaxScaleDenominator > FormatList > Format > StyleList > Style > Name > Title > DimensionList > Dimension > Extension > gpp:Layer > gpp:Constraints > gpp:Thematics > gpp:Thematic > gpp:InspireThematics > gpp:InspireThematic > gpp:BoundingBox > gpp:AdditionalCRS > gpp:Originators > gpp:Originator > gpp:Attribution > gpp:Logo > gpp:URL > gpp:Constraints > gpp:Constraint > gpp:CRS > gpp:BoundingBox > sld:MinScaleDenominator > sld:MaxScaleDenominator > gpp:Legends > gpp:Legend > sld:MinScaleDenominator 64/94 > gpp:LegendURL > OnlineResource > gpp:QuickLook > OnlineResource > wmts:TileMatrixSetLink > wmts:TileMatrixSet > wmts:TileMatrixSetLimits > wmts:TileMatrixLimits > wmts:TileMatrix > wmts:MinTileRow > wmts:MaxTileRow > wmts:MinTileCol > wmts:MaxTileCol > gpp:MetadataURL > OnlineResource > gpp:Keys > gpp:Key > (…) (*) ces résolutions sont toujours celles correspondant au CRS WGS84 (EPSG 4326). 65/94 Schéma des données renvoyées par le service 66/94 67/94 Service de Géocodage Le service de géocodage du Géoportail est basé sur le standard OpenLS (version 1.2). Il est disponible à l'url suivante :http://wxs.ign.fr/CLE_API/geoportail/ols? Il se décline sous deux formes : directe et inverse. Géocodage Direct Le géocodage direct permet de : - déterminer la position d'un localisant, ou de lister plusieurs positions pouvant correspondre à ce localisant - d'indiquer le nombre de positions pouvant correspondre au localisant - de donner des informations sur la qualité des positions trouvées. - classer les résultats en fonction de leur pertinence. Les requêtes peuvent être envoyées soit en HTTP POST ou GET. Dans ce dernier cas, le protocole JSONP peut aussi être utilisé. La réponse retournée est en XML éventuellement encapsulée dans une coquille JSON(P). La structure de données relatives au géocodage direct manipulées par le service (requêtes et réponses) est modélisée dans le schéma suivant. 68/94 Exemple de requête OpenLS : <RequestHeader sessionID="" srsName="epsg:4326"/> <Request maximumResponses="30" methodName="GeocodeRequest" version="1.2" requestID=""> <GeocodeRequest returnFreeForm="false"> <Address countryCode="StreetAddress"> <StreetAddress> <Building number="36"/> <Street>rue gérald rey</Street> </StreetAddress> <Place type="Municipality">arles</Place> <PostalCode>13200</PostalCode> <Department>13</Department> <gml:envelope> <gml:pos>43.682765684094534 4.604832911570827</gml:pos> <gml:pos>43.686676004569826 4.614145541270513</gml:pos> </gml:envelope> </Address> </GeocodeRequest> </Request> Illustration 1: Modèle du service de géocodage direct du Géoportail Exemple de réponse OpenLS <GeocodeResponseList numberOfGeocodedAddresses="1"> <GeocodedAddress> <gml:Point> <gml:pos>43.684079 4.607426</gml:pos> </gml:Point> <Address countryCode="StreetAddress"> <StreetAddress> <Building number="36"/> <Street>r gerald rey</Street> </StreetAddress> <Place type="Municipality">Arles</Place> <Place type="Qualite">Plaque adresse</Place> <Place type="ID">ADRNIVX_0000000264458864</Place> <Place type="Departement">13</Place> <Place type="Bbox">4.607426;43.684079;4.607426;43.684079</Place> <Place type="Commune">Arles</Place> <Place type="INSEE">13004</Place> <Place type="Territoire">FXX</Place> <Place type="ID_TR">TRONROUT0000000040743444</Place> <PostalCode>13200</PostalCode> </Address> <GeocodeMatchCode accuracy="0.9495000000000001" matchType="Street number"/> </GeocodeResponseList> Géocodage inverse Le service de géocodage du Géoportail est basé sur le standard OpenLS (version 1.2). Il est disponible à l'url suivante :http://wxs.ign.fr/CLE_API/geoportail/ols? Il permet de déterminer des localisants (adresses, toponymes, parcelles cadastrales, etc) proches d'un point donné, à l'intérieur d'un cercle, d'un rectangle ou d'un polygone, et de les classer en fonction de leur proximité et de leur type (commune en premier lorsqu'il s'agit de toponyme). La structure de données relatives au géocodage inverse manipulées par le service (requêtes et réponses) est modélisée dans le schéma suivant. 70/94 Exemple de requête OpenLS Exemple de réponse OpenLS <ReverseGeocodeRequest> <Position> <gml:Point xmlns:gml="http://www.opengis.net/gml"> <gml:pos>43.67981385532074 4.621169951900729</gml:pos> </gml:Point> <Polygon xmlns="http://www.opengis.net/gml"> <exterior> <LinearRing> <pos>43.67965091175271 4.620933917507425</pos> <pos>43.67965091175271 4.621405986294034</pos> <pos>43.67997679844624 4.621405986294034</pos> <pos>43.67997679844624 4.620933917507425</pos> <pos>43.67965091175271 4.620933917507425</pos> </LinearRing> </exterior> </Polygon> </Position> <ReverseGeocodeResponse> <ReverseGeocodedLocation> <gml:Point> <gml:pos>43.679842 4.621130</gml:pos> </gml:Point> <Address countryCode="StreetAddress"> <StreetAddress> <Building number="20"/> <Street>r anibert</Street> </StreetAddress> <Place type="Municipality">Arles</Place> <Place type="Qualite">Plaque adresse</Place> <Place type="Departement">13</Place> <Place type="Bbox">4.621130;43.679842;4.621130;43.679842</Place> <Place type="Commune">Arles</Place> <Place type="INSEE">13004</Place> <Place type="Territoire">FXX</Place> <PostalCode>13200</PostalCode> </Address> <xlsext:ExtendedGeocodeMatchCode>Street number</xlsext:ExtendedGeocodeMatchCode> <SearchCentreDistance value="5.44"/> </ReverseGeocodedLocation> </ReverseGeocodeResponse> <ReverseGeocodePreference>StreetAddress</Rev erseGeocodePreference> </ReverseGeocodeRequest> Illustration 2: Modèle du service de géocodage inverse du Géoportail Service d'Autocomplétion La plateforme Géoportail propose un service dit d'autocomplétion disponible à l'url suivante : http://wxs.ign.fr/CLE_API/ols/apis/completion? Il permet de : - suggérer des localisants (adresses ou des toponymes) probables à partir d'une chaine de caractères incomplète. - filtrer les localisants proposés par territoire ou zone géographique, - classer les résultats en fonction de leur pertinence. Les requêtes sont envoyées en GET. La réponse retournée est en JSON. Le protocole JSONP peut être utilisé. 72/94 Exemple de réponse Exemple de requête : { "status":"OK", "results":[{ "country":"StreetAddress", "city":"Saint-Malo", "x":-2.004141, "y":48.655722, "zipcode":"35400", "street":"2 av pasteur", "classification":7, "kind":"", "fulltext": "2 av pasteur, 35400 Saint-Malo" }] http://wxs.ign.fr/VOTRE_LICENCE/ols/apis/completi on?text=2%2C%20avenue%20pasteur%20saint %20m&type=StreetAddress&maximumResponses=1 } Illustration 3: Modèle du service d'autocomplétion Service de calcul altimétrique La plate-forme Géoportail met en œuvre un service dit d'altimétrie qui permet de retourner les altitudes en un ou plusieurs points ou de déterminer un ensemble d'altitudes le long d'un tracé afin d'obtenir le profil altimétrique de ce tracé. Principe du service de calcul altimétrique Le service de calcul altimétrique du Géoportail repose sur une API REST et sur le standard OGC Web Processing Service (WPS – version 1.0.0). Il y a donc deux manières d'interroger le service : via l'API REST ou via la norme WPS. Il permet de : • retourner les altitudes d'un ou plusieurs points • déterminer un ensemble d'altitudes le long d'un tracé afin d'obtenir le profil altimétrique de ce tracé. Comme l'accès au service de calcul altimétrique est protégé par le contrôle des droits d'accès, l'URL de la requête doit contenir la clef associée au contrat qui autorise l'accès aux ressources du service altimétrique. Détermination de l'altitude d'un ou plusieurs points 1. Accès au service - API REST On accède au service via une URL du type : http://wxs.ign.fr/CLE/alti/rest/elevation.{format}? où : CLE correspond à la clé de contrat API, format désigne le format de récupération de la réponse : les formats disponibles sont XML et JSON. Les requêtes peuvent être envoyées en GET. • • - Norme WPS On accède au service via l'URL : http://wxs.ign.fr/CLE/alti/wps?service=WPS&version=1.0.0 Où CLE est la clé de contrat API. Les requêtes peuvent être envoyées en HTTP POST ou GET, et la réponse peut être récupérée en XML ou en JSON. Par défaut (si le format n'est pas spécifié), la réponse est retournée en JSON. Dans le cas d'une requête GET, on peut aussi utiliser le protocole JSONP. 2. Paramètres en entrée Les paramètres suivants sont communs aux différentes méthodes d'interrogation du service altimétrique, seule la manière dont ils sont spécifiés diffère. 74/94 Paramètre Type Opt. Valeur lon Liste de décimaux Obligatoire Liste des longitudes des points (crs:84) dont on veut (une au connaître les altitudes, délimitées au choix par des minimum) virgules, points-virgules, ou barres verticales (''|''). Maximum 50. lat Liste de décimaux Obligatoire Liste des latitudes des points (crs:84) dont on veut (une au connaître les altitudes, délimitées par le même minimum) caractère que les longitudes. Autant de lat que de lon (ci-dessus), et maximum 50. delimiter Texte Optionnel Caractère utilisé pour séparer les latitudes et longitudes dans leurs listes respectives. Par défaut : barre verticale ('' | ''). zonly Booléen Optionnel Si ce paramètre vaut 'true', le service renverra uniquement un tableau contenant les altitudes des points demandés. S'il vaut true, le service renverra une réponse étendue (cf. ci-dessous). Par défaut : vaut false. indent Booléen Optionnel Booléen qui indique si la réponse sera indentée ou non. Par défaut : vaut false crs texte Optionnel Projection des coordonnées en sortie. La valeur par défaut est 'CRS:84'. En réalité, ce paramètre ne semble pas être fonctionnel, le résultat en sortie est identique si on spécifie un crs différent... Les paramètres suivants ne peuvent être utilisés que dans le cas d'une requête GET (REST ou WPS) : Paramètre Type Opt. Valeur output Texte Optionnel Permet de spécifier le format en sortie (XML ou JSON). Particulièrement utile si l'on veut encapsuler la réponse XML dans une coquille JSON. On interroge alors le service en XML (dans l'url), et le paramètre output=json. callback Texte Optionnel Nom de la fonction de traitement de la réponse en JSON (natif ou xml encapsulé). Ce paramètre est nul par défaut. Le paramètre suivant ne peut être utilisé que dans le cas d'une requête via la norme WPS (GET ou POST) : Paramètre format Type texte Opt. Optionnel Valeur Permet de spécifier le format de sortie (XML ou JSON). 75/94 Paramètre Type Opt. Valeur Par défaut, c'est le format JSON qui sera utilisé. 3. Structure de la requête - API REST Les paramètres ci-dessus sont passés à la suite de l'URL spécifiée du service, séparés par le caractère '&'. Exemple : http://wxs.ign.fr/CLE/alti/rest/elevation.xml? lon=0.2367,2.1570&lat=48.0551,46.6077&delimiter=,&indent=true - Norme WPS Dans le cas de la méthode GET, plusieurs paramètres doivent être passés dans l'URL : request, identifier, datainputs et rawdataoutputs. Deux autres paramètres sont optionnels : output et callback (pour une encapsulation JSONP). C'est dans le paramètre datainputs que l'on va spécifier les paramètres ci-dessus, séparés par des points-virgules (lon, lat, delimiter, format, ident, zonly, crs). Exemple : http://wxs.ign.fr/CLE/alti/wps?service=WPS&version=1.0.0 &request=Execute &identifier=gs:WPSElevation &datainputs=lon=0.2367|2.1570;lat=48.0551|46.6077;format=xml;indent=true &rawdataoutput=result &output=json &callback=loadJSONP Dans le cas de la méthode POST, le corps de la requête doit avoir une structure semblable à la suivante : <?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> 76/94 </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> 4. Paramètres en sortie Quel que soit le mode d'interrogation du service, la réponse est une liste d'éléments, qui contiennent respectivement les valeurs d'altitude déterminées pour les points demandés, dans l'ordre dans lequel les points ont été fournis. • réponse simple : uniquement les altitudes (z) • réponse étendue : la longitude (lon) et la latitude (lat) du point, l’altitude du point considéré (z) en mètres, et la précision de la valeur au point considéré (acc). Paramètre Type Opt. Valeur lon Nombre décimal Optionnel Longitude du point fourni lat Nombre décimal Optionnel Latitude du point fourni z Nombre décimal Obligatoire Altitude déterminée du point fourni acc Nombre Optionnel Précision de la valeur au point considéré. décimal Ces paramètres sont présentés différemment selon le format de sortie spécifié (XML, JSON). Exemple de réponse XML La réponse est une liste d'éléments elevation contenant les informations des points demandés. <elevations> 77/94 <elevation> <lon>0.2367</lon> <lat>48.0551</lat> <z>96.35</z> <acc>2.5</acc> </elevation> <elevation> <lon>2.157</lon> <lat>46.6077</lat> <z>207.52</z> <acc>2.5</acc> </elevation> </elevations> Exemple d'encapsulation de la réponse XML dans une coquille JSON La réponse est un objet JSON, contenant la réponse XML ci-dessus dans sa propriété "xml". { "http":{"status":200,"error":null}, "xml":"<elevations><elevation><lon>0.2367</lon><lat>48.0551</lat><z>96.35</z><a cc>2.5</acc></elevation><elevation><lon>2.157</lon><lat>46.6077</lat><z>207.52< /z><acc>2.5</acc></elevation></elevations>" } Exemple de réponse JSON La réponse est un tableau elevations contenant les informations des points demandés. {"elevations": [ { "lon": 0.2367, "lat": 48.0551, "z": 96.35, "acc": 2.5 }, { "lon": 2.157, "lat": 46.6077, "z": 207.52, "acc": 2.5 } ]} Exemple de réponse via le protocole JSONP (réponse du service en XML) La réponse est un objet JSON contenant d'une part les informations sur la requête HTTP, et d'autre part la réponse XML, encapsulée dans une chaîne de caractères. loadJSON({ "http":{ "status":200, "error":null }, "xml":"<elevations><elevation><lon>0.2367</lon><lat>48.0551</lat><z>96.35< /z><acc>2.5</acc></elevation><elevation><lon>2.157</lon><lat>46.6077</lat><z>20 7.52</z><acc>2.5</acc></elevation></elevations>" }) 78/94 5. Messages d'erreur En cas d'erreur du service (code HTTP différent de 200, par exemple si l'URL est invalide (not found) ou si la clé est invalide (forbidden)), la réponse est au format XML. S'il manque des paramètres (lon et lat notamment), ou s'ils ne sont pas correctement spécifiés, le service renvoie une réponse en HTTP 200, contenant le message d'erreur. Dans le cas de l'API REST, la réponse est au format XML ou JSON, selon le format spécifié (Elevation.xml ou Elevation.json). Dans le cas de la norme WPS, la réponse est au format XML, et contient l'exception Java retournée. Détermination du profil altimétrique d'une courbe 1. Accès au service - API REST On accède au service via une URL du type : http://wxs.ign.fr/CLE/alti/rest/elevationLine.{format}? où les formats disponibles sont toujours XML et JSON, et CLE la clé de contrat API. Les requêtes peuvent être envoyées en GET. - Norme WPS L'URL d'accès au service est la même que dans le cas de détermination d'altitudes simples : http://wxs.ign.fr/CLE/alti/wps?service=WPS&version=1.0.0 où CLE est la clé de contrat API. Les requêtes peuvent être envoyées en HTTP POST ou GET, et la réponse peut être récupérée en XML ou en JSON. Dans le cas d'une requête GET, on peut aussi utiliser le protocole JSONP pour encapsuler la réponse XML dans une coquille JSON. 2. Paramètres en entrée Les paramètres en entrée sont en partie les mêmes que pour déterminer de simples altitudes de points : lon, lat, delimiter, indent, crs, output, callback. (Il n'est plus possible de ne demander que l'altitude avec zonly). S'y ajoute le paramètre suivant sampling : Paramètre sampling Type entier Opt. Optionnel Valeur Nombre de points constituant l’échantillonnage, compris entre 2 et 5000. Par défaut, ce paramètre vaut 3. 3. Structure de la requête Différences par rapport au premier cas (détermination d'altitudes de points fournis) : - API REST La requête est similaire au premier cas, le paramètre sampling peut être ajouté à la liste des paramètres. Exemple : 79/94 http://wxs.ign.fr/CLE/alti/rest/elevationLine.json? sampling=5&lon=0.2367|2.1570|4.3907&lat=48.0551|46.6077|43.91 - Norme WPS Dans le cas de la méthode GET, le paramètre identifier doit être modifié si l'on souhaite bénéficier de l'échantillonnage : identifier=WPSLineElevation et non plus WPSElevation. De plus, le paramètre sampling peut être ajouté dans datainputs. Exemple : http://wxs.ign.fr/CLE/alti/wps? service=WPS&version=1.0.0 &request=Execute &identifier=gs:WPSLineElevation &datainputs=lon=0.2367|2.1570;lat=48.0551|46.6077;format=xml; indent=true;sampling=5 &rawdataoutput=result &output=json &callback=loadJSONP Dans le cas de la méthode POST, il faut de même préciser WPSLineElevation comme identifier, et spécifier éventuellement le paramètre sampling comme nouvel élément input. Exemple (extrait) : <?xml version="1.0" encoding="UTF-8"?> <wps:Execute version="1.0.0" service="WPS" (…) <ows:Identifier>gs:WPSLineElevation</ows:Identifier> <wps:DataInputs> (…) <wps:Input> <ows:Identifier>sampling</ows:Identifier> <wps:Data> <wps:LiteralData>5</wps:LiteralData> </wps:Data> </wps:Input> </wps:DataInputs> <wps:ResponseForm> <wps:RawDataOutput> <ows:Identifier>result</ows:Identifier> </wps:RawDataOutput> </wps:ResponseForm> </wps:Execute> 4. Paramètres en sortie La réponse du service a la même structure que si l'on souhaitait récupérer seulement les altitudes des points fournis : elle présente cette fois les informations de l'ensemble des points constituant l'échantillonnage (lon, lat, z et acc). Exemple de réponse JSON : La réponse contient les informations de 5 points d'échantillonnage (seulement 3 points spécifiés dans la requête). {"elevations": [ {"lon": 0.2367,"lat": 48.0551,"z": 96.35,"acc": 2.5}, 80/94 ]} {"lon": {"lon": {"lon": {"lon": 1.20996836,"lat": 47.33546691,"z": 62.06,"acc": 2.5}, 2.157,"lat": 46.6077,"z": 207.52,"acc": 2.5}, 3.30030144,"lat": 45.26446777,"z": 638.09,"acc": 2.5}, 4.3907,"lat": 43.91,"z": 182.6,"acc": 2.5} Modèle de données du service altimétrique Modèle des données renvoyées par le service altimétrique 81/94 Service de calcul d'itinéraires Le service de calcul d'itinéraires déployé sur la plateforme géoportail permet de déterminer un itinéraire entre un point de départ et un point d'arrivée en utilisant les données routières issues de la BDTopo enrichies d'informations issues d'autres bases de données IGN. Syntaxe, protocoles d'accès Le service est interogeable selon le standard OpenLS version 1.2 dont il implémente la partie « Route Service ». Des extensions ont été définies pour répondre aux spécificités de la solution serveur et des données utilisées pour la mise en œuvre du service. Il est aussi accessible selon une syntaxe propriétaire via une API REST. Il est accessible en HTTP GET et POST. Lorsqu'on utilise l'interface OpenLS, les requêtes sont exprimées en XML. Dans tous les cas (OpenLS ou API REST), les réponses sont exprimées en XML. Comme pour les autres services répondant en XML, l'adjonction aux requêtes du paramètre output=JSON permet l'encapsulation de la réponse dans une coquille JSON décrite précédemment. L'ajout supplémentaire du paramètre callback permet de mettre en œuvre le protocole JSONP comme décrit précédemment. Données Requête Une requête envoyée au service de calcul d'itinéraire comprend les éléments suivants : Paramètre description routePreference Mode de caclul : « fastest », « shortest » ou « pedestrian » startPoint Point de départ (coordonnées exprimées en WGS84G) endPoint Point d'arrivée (coordonnées) viaPoint Liste de points intermédiaires avoidFeature Liste de types de tronçons à ne pas emprunter (« tollway », « tunnel » ou « bridge ») vehicle Type de véhicule utilisé (« car ») : cette valeur détermine le profil de véhicule utilisé pour le calcul par le service (tronçons autorisés / non autorisés, vitesses par tronçons, ...) expectedStartTime Date et heure de départ provideGeometry Indique si l'on souhaite avoir la géométrie associée à chaque instruction dans la réponse (duplication par rapport à l'itinéraire complet) provideBoundingBox Indique si l'on souhaite avoir les emprises géométriques (rectangle englobant) de chacune des instructions distanceUnit Unité dans lesquelles la distance est exprimée (« m » ou « km ») 82/94 Exemple de requête exprimée en OpenLS : <?xml version="1.0" encoding="UTF-8"?> <xls:XLS xmlns:xls="http://www.opengis.net/xls" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:gml="http://www.opengis.net/gml" xmlns:xlsext="http://www.opengis.net/xlsext" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/xls http://schemas.opengis.net/ols/1.1.0/RouteService.xsd" version="1.1" xls:lang="en"> <xls:RequestHeader/> <xls:Request methodName="RouteRequest" requestID="123456789" version="1.1"> <xls:DetermineRouteRequest distanceUnit="KM"> <xls:RoutePlan> <xls:RoutePreference>Fastest</xls:RoutePreference> <xlsext:vehicle name="Car" /> <xls:WayPointList> <xls:StartPoint><xls:Position><gml:Point srsName="EPSG:4326"><gml:pos>2.29993 48.87228</gml:pos></gml:Point></xls:Position></xls:StartPoint> <xls:EndPoint><xls:Position><gml:Point srsName="EPSG:4326"><gml:pos>-1.53604 47.21548</gml:pos></gml:Point></xls:Position></xls:EndPoint> </xls:WayPointList> </xls:RoutePlan> <xls:RouteInstructionsRequest provideGeometry="true"/> <xls:RouteGeometryRequest/> </xls:DetermineRouteRequest> </xls:Request> </xls:XLS> Réponse Une réponse du service comprend les informations suivantes : Propriété Description totalTime Durée totale de l'itinéraire totalDistance Longueur de l'itinéraire (exprimée dans l'unité demandée dans la requête) boundingBox Emprise de l'itinéraire routeGeometry Géométrie de l'itinéraire (liste de segments) RouteInstructionList : liste des instructions le long de l'itinéraire. Une instruction comprend les éléments suivants. duration Durée de l'instruction distance Distance concernée par l'instruction description Code de l'instruction : - F : tout droit - B : demi-tour - L : tourner à gauche - R : tourner à droite - BL : tourner très à gauche - BR : tourner très à droite 83/94 Propriété Description - FL : tourner légèrement à gauche - FR : tourner légèrement à droite - round_about_entry : entrée rond-point - round_about_exit : sortie rond-point: instruction Texte de l'instruction (traduction du code + nom de la rue concernée) boundingBox Emprise de l'instruction routeInstructionGeometry Géométrie (liste de points) de l'uinstruction Exemple de réponse exprimée en OpenLS : <XLS version="1.2" xsi:schemaLocation="http://www.opengis.net/xls http://schemas.opengis.net/ols/1.2/olsAll.xsd"> <ResponseHeader/> <Response requestID="123456789" version="1.2"> <DetermineRouteResponse> <RouteSummary> <BoundingBox> <gml:pos>2.42339 48.844522</gml:pos> <gml:pos>2.440009 48.84741</gml:pos> </BoundingBox> <TotalTime>PT4M54.290S</TotalTime> <TotalDistance uom="KM" value="1.65902"/> </RouteSummary> <RouteGeometry> <gml:LineString> <gml:pos>2.423390 48.844620</gml:pos> <gml:pos>2.423403 48.844619</gml:pos> <gml:pos>2.423439 48.844772</gml:pos> <gml:pos>2.423659 48.845732</gml:pos> (...) <gml:pos>2.439979 48.847082</gml:pos> <gml:pos>2.439979 48.847122</gml:pos> <gml:pos>2.439989 48.847202</gml:pos> <gml:pos>2.440009 48.847362</gml:pos> <gml:pos>2.439656 48.847384</gml:pos> <gml:pos>2.439660 48.847410</gml:pos> </gml:LineString> </RouteGeometry> <RouteInstructionsList lang="fr"> <RouteInstruction duration="PT32S"> <BoundingBox> <gml:pos>2.423390 48.844619</gml:pos> <gml:pos>2.423699 48.845932</gml:pos> </BoundingBox> <distance uom="KM" value="0.148"/> <Instruction> AVENUE PASTEUR</Instruction> <RouteInstructionGeometry> <gml:LineString> <gml:pos>2.423390 48.844620</gml:pos> <gml:pos>2.423403 48.844619</gml:pos> <gml:pos>2.423439 48.844772</gml:pos> <gml:pos>2.423659 48.845732</gml:pos> <gml:pos>2.423699 48.845932</gml:pos> </gml:LineString> </RouteInstructionGeometry> 84/94 </RouteInstruction> <RouteInstruction description="R" duration="PT2M39S"> <BoundingBox> <gml:pos>2.423699 48.844602</gml:pos> <gml:pos>2.438659 48.845932</gml:pos> </BoundingBox> <distance uom="KM" value="1.104"/> <Instruction>Tourner à droite AVENUE DE PARIS</Instruction> <RouteInstructionGeometry> <gml:LineString> <gml:pos>2.423699 48.845932</gml:pos> <gml:pos>2.424199 48.845892</gml:pos> (...) <gml:pos>2.437909 48.844652</gml:pos> <gml:pos>2.438659 48.844602</gml:pos> </gml:LineString> </RouteInstructionGeometry> </RouteInstruction> (...) <RouteInstruction description="L" duration="PT25S"> <BoundingBox> <gml:pos>2.439656 48.847362</gml:pos> <gml:pos>2.440009 48.847410</gml:pos> </BoundingBox> <distance uom="KM" value="0.028"/> <Instruction>Tourner à gauche null</Instruction> <RouteInstructionGeometry> <gml:LineString> <gml:pos>2.440009 48.847362</gml:pos> <gml:pos>2.439656 48.847384</gml:pos> <gml:pos>2.439660 48.847410</gml:pos> </gml:LineString> </RouteInstructionGeometry> </RouteInstruction> </RouteInstructionsList> </DetermineRouteResponse> </Response> </XLS> 85/94 Service de calcul d'isochrones / isodistances Le service de calcul d'isochrones / isodistances déployé sur la plateforme géoportail permet de déterminer un ensemble de lieux que l'on peut atteindre à partir d'un point et selon un temps (isochrone) ou une distance (isodistance) donnés en utilisant les données routières issues de la BDTopo enrichies d'informations issues d'autres bases de données IGN. Syntaxe, protocoles d'accès Le service est interogeable selon une syntaxe propriétaire via une API de type REST. Il est accessible en HTTP GET et POST. L'interface REST permet d'émettre des requêtes en GET dans l'URL ou en POST en XML ou en JSON. La réponse est exprimée soit en XML soit directement en JSON. En POST / XML, une encapsulation de la requête dans une enveloppe SOAP est possible. Lorsque la réponse est en XML, l'adjonction aux requêtes du paramètre output=JSON permet l'encapsulation de la réponse dans une coquille JSON décrite précédemment. L'ajout supplémentaire du paramètre callback permet de mettre en œuvre le protocole JSONP comme décrit précédemment. Données Requête Une requête envoyée au service de calcul d'isochrones / isodistances comprend les éléments suivants : Paramètre description id Identifiant de la requête location Point d'arrivée ou de départ. srs Système de coordonnées du point de départ / arrivée graphName Nom du graphe à utiliser : une seule valeur possible correspondant à BD-TOPO. profileName Profil de véhicule : seul le profil « voiture » disponible. rejectFlags Critères d'exclusion (« Toll » : péage, « Tunnel », « Bridge ») type Type de calcul attendu : « time », si on souhaite un calcul d'isochrone ; « distance » si on souhaite un calcul d'isodistance. time Durée maximum du trajet, exprimée en seconde (utilisée pour les isochrones). distance Distance maximum du trajet, exprimée en metres (utilisée pour les isodistances). reverse Indique si le point « location » sert de de destination (« true ») ou de point de départ (« false ») 86/94 Paramètre description smoothing Indique si on souhaite un lissage de la géométrie retournée (« true »). holes Indique si on acepte des trous dans la géométrie retournée (« true »). Exemple de requête exprimée en XML : <?xml version="1.0" encoding="UTF-8"?> <isochronRequest> <id>1</id> <location> <x>2.324230</x> <y>48.803256</y> </location> <srs></srs> <graphName></graphName> <profileId></profileId> <profileName></profileName> <rejectFlags></rejectFlags> <rejectFlags></rejectFlags> <!--...more "rejectFlags" elements...--> <exclusions> <exclusion></exclusion> <exclusion></exclusion> <!--...more "exclusion" elements...--> </exclusions> <method></method> <time>50</time> <distance></distance> <reverse></reverse> <smoothing></smoothing> <holes></holes> </isochronRequest> Réponse Une réponse du service comprend les informations suivantes : Propriété Description id Identifiant de l'iscchrone / distance location Point de départ ou d'arrivée de l'isochrone / distance srs Système de coordonnées des coordonnées en sortie time Durée maximum pour l'isochrone distance Distance maximum pour l'isodistance wktGeometry Géométrie de l'isochrone / distance, au format WKT. status Statut de la réponse Exemple de réponse formatée en XML : <isochronResult> <status>OK</status> 87/94 <id>1</id> <location>2.32423,48.803256</location> <srs/> <time>50</time> <wktGeometry>POLYGON ((2.324091 48.803926, 2.324735 48.803926, 2.324735 48.804354, 2.322804 48.804354, 2.322804 48.803497, 2.321516 48.803497, 2.321516 48.803926, 2.320873 48.803926, 2.320873 48.803497, 2.320229 48.803497, 2.320229 48.804354, 2.320873 48.804354, 2.320873 48.805211, 2.320229 48.805211, 2.320229 48.806069, 2.320873 48.806069, 2.320873 48.80564, 2.321516 48.80564, 2.321516 48.806069, 2.32216 48.806069, 2.32216 48.805211, 2.322804 48.805211, 2.322804 48.80564, 2.323447 48.80564, 2.323447 48.806497, 2.324091 48.806497, 2.324091 48.806069, 2.324735 48.806069, 2.324735 48.806497, 2.325379 48.806497, 2.325379 48.807354, 2.326022 48.807354, 2.326022 48.80864, 2.326666 48.80864, 2.326666 48.806926, 2.326022 48.806926, 2.326022 48.80564, 2.32731 48.80564, 2.32731 48.805211, 2.328597 48.805211, 2.328597 48.804354, 2.327954 48.804354, 2.327954 48.804783, 2.326666 48.804783, 2.326666 48.805211, 2.326022 48.805211, 2.326022 48.804354, 2.326666 48.804354, 2.326666 48.803926, 2.326022 48.803926, 2.326022 48.803497, 2.325379 48.803497, 2.325379 48.803068, 2.324091 48.803068, 2.324091 48.803926))</wktGeometry> </isochronResult> 88/94 Service de transformations de coordonnées (WCTS) Le service de transformation de coordonnées de la plateforme Géoportail permet de transformer un jeu de coordonnées d'un système de référence à un autre. Syntaxe, protocoles d'accès Le service est conforme au standard WPS de l’OGC http://www.opengeospatial.org/standards/wps Il se base sur le document Inspire WCTS11 Conformément au standard WPS, il expose les opérations : • GetCapabilities : Permet de connaître les capacités du service • DescribeProcess : Permet d’obtenir la description d’un processus • Execute : qui permet d'effectuer les opérations spécifiques (processus) de transformation de coordonnées : ◦ GetValidityArea : Permet d’obtenir la zone de validité d’un CRS. ◦ TransformCoordinates : Transforme des coordonnées. Processus GetValidityArea Requête Exemple de requête POST pour GetValidityArea <?xml version="1.0" encoding="UTF-8"?> <wps:Execute service="WPS" version="1.0.0" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0/wpsExecute_request.xsd"> <ows:Identifier>GetValidityArea</ows:Identifier> <wps:DataInputs> <wps:Input> <ows:Identifier>CRS</ows:Identifier> <wps:Data> <wps:LiteralData>{crs}</wps:LiteralData> </wps:Data> </wps:Input> </wps:DataInputs> <wps:ResponseForm> <wps:ResponseDocument lineage="{lineage}"> <wps:Output> <ows:Identifier>ValidityArea</ows:Identifier> </wps:Output> </wps:ResponseDocument> <!-- OU --> <wps:RawDataOutput> 11 http://inspire.ec.europa.eu/reports/ImplementingRules/network/Draft_Technical_Guidance_Coordinate_Transforma tion_Services_v1.0.pdf 89/94 <ows:Identifier>ValidityArea</ows:Identifier> </wps:RawDataOutput> </wps:ResponseForm> </wps:Execute> Réponse Réponse si « ResponseForm » est en mode « ResponseDocument » : <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <wps:ExecuteResponse xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:ns4="http://www.w3.org/1999/xlink" xml:lang="fr" version="1.0.0" service="WPS"> <wps:Process wps:processVersion="1"> <ows:Identifier>GetValidityArea</ows:Identifier> </wps:Process> <wps:ProcessOutputs> <wps:Output> <ows:Identifier>ValidityArea</ows:Identifier> <wps:Data> <wps:ComplexData>{-5.5,10.0,41.0,52.0}</wps:ComplexData> </wps:Data> </wps:Output> </wps:ProcessOutputs> </wps:ExecuteResponse> Réponse si « ResponseForm » est en mode « RawDataOutput » : {-5.5,10.0,41.0,52.0} Processus TransformCoordinates Requête Exemple de requête POST pour TransformCoordinates <?xml version="1.0" encoding="UTF-8"?> <wps:Execute service="WPS" version="1.0.0" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0/wpsExecute_request.xsd"> <ows:Identifier>TransformCoordinates</ows:Identifier> <wps:DataInputs> <!-- Bloc SourceCRS --> <wps:Input> <ows:Identifier>SourceCRS</ows:Identifier> <wps:Data> <wps:LiteralData>{sourcecrs}</wps:LiteralData> </wps:Data> </wps:Input> <!-- Bloc TargetCRS --> <wps:Input> <ows:Identifier>TargetCRS</ows:Identifier> <wps:Data> <wps:LiteralData>{targetcrs}</wps:LiteralData> 90/94 </wps:Data> </wps:Input> <!-- Bloc NadgridMode --> <wps:Input> <ows:Identifier>NadgridMode</ows:Identifier> <wps:Data> <wps:LiteralData>{nadgridmode}</wps:LiteralData> </wps:Data> </wps:Input> <!-- Bloc InputData --> <wps:Input> <ows:Identifier>InputData</ows:Identifier> <wps:Data> <wps:ComplexData> {points} </wps:ComplexData> </wps:Data> </wps:Input> </wps:DataInputs> <wps:ResponseForm> <wps:ResponseDocument lineage="{lineage}"> <wps:Output> <ows:Identifier>TransformedData</ows:Identifier> </wps:Output> </wps:ResponseDocument> <!-- OU --> <wps:RawDataOutput> <ows:Identifier>TransformedData</ows:Identifier> </wps:RawDataOutput> </wps:ResponseForm> </wps:Execute> Réponse Réponse si « ResponseForm » est en mode « ResponseDocument » : <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <wps:ExecuteResponse xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:ns4="http://www.w3.org/1999/xlink" xml:lang="fr" version="1.0.0" service="WPS"> <wps:Process wps:processVersion="1"> <ows:Identifier>TransformCoordinates</ows:Identifier> </wps:Process> <wps:ProcessOutputs> <wps:Output> <ows:Identifier>TransformedData</ows:Identifier> <wps:Data> <wps:ComplexData> 621202.7315498911, 6433917.946033287</wps:ComplexData> </wps:Data> </wps:Output> </wps:ProcessOutputs> </wps:ExecuteResponse> 91/94 Réponse si « ResponseForm » est en mode « RawDataOutput » : 621202.7315498911, 6433917.946033287 92/94