French Géoportail API

turnmaryΛογισμικό & κατασκευή λογ/κού

5 Ιουλ 2012 (πριν από 5 χρόνια και 16 μέρες)

2.989 εμφανίσεις

......................................................................................................................................
French Géoportail API
v. 1.3.0
User Guide
......................................................................................................................................
Institut National de l'Information
Géographique et Forestière - France
06/19/2012
T a b l e o f C o n t e n t s
i
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
Table of Contents
.......................................................................................................................................
1.
Table of Contents ........................................................... i
2.
Introduction ................................................................. 1
3.
First steps ................................................................... 6
4.
Layers ....................................................................... 16
4..1.
WMS-C layers ................................................................ 20
4..2.
WMTS layers ................................................................. 25
4..3.
KML, GPX and OSM layers ................................................... 29
4..4.
WMS layers .................................................................. 34
4..5.
WFS layers ................................................................... 35
5.
Layers manager ............................................................ 41
6.
Layers access .............................................................. 43
7.
Search engines ............................................................ 53
8.
Coordinates systems ...................................................... 56
9.
GPS positionning .......................................................... 62
10.
Multi-keys ................................................................... 66
11.
Multi-lingual use case ..................................................... 69
12.
Operating ................................................................... 71
13.
OpenLayers ................................................................ 78
14.
Advanced WMS-C layers .................................................. 80
15.
Advanced WMTS layers ................................................... 83
16.
API key ..................................................................... 86
17.
Advanced search engines ................................................. 92
18.
Multi-lingual and development ........................................... 104
19.
Using Flash API ........................................................... 105
20.
Flash API compilation .................................................... 109
21.
Best practices ............................................................. 112
22.
Upgrading JS API ......................................................... 115
23.
Upgrading Flash API ..................................................... 132
24.
Gallery ..................................................................... 136
25.
License ...................................................................
26.
Annex A - World Wind ................................................... 157
26.
Acces to WMS-C layers with QGIS ...................................... 163
T a b l e o f C o n t e n t s
ii
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
1 I n t r o d u c t i o n
1
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
1 Introduction
.......................................................................................................................................
1.1 Avant propos
API 2D
API Web 2D
API Web 2D en Javascript
API Web 2D en Flex
API 3D
L'API du Géoportail a pour but de permettre la superposition des couches métiers utilisateurs avec les
référentiels pour tous types d'applications.
Les informations contenues dans la présente documentation nécessitent à minima la connaissance
d'un certain nombre de technologies liées à l'information géographique et de l'information. Parmi ces
technologies, on trouvera :
• le Web : les technologies utilisées par l'API Web 2D relèvent principalement des mécanismes de
l'internet. Les flux d'informations proviennent de différents serveurs qui amènent l'information au
client Web privilégié : le butineur ;
• les langages de programmation côté butineur : les pages Web de l'API sont des pages
dynamiques qui utilisent 3 technologies de base :
• HyperText Markup Language (HTML) : il faut savoir écrire une page Web pour utiliser
l'API ;
• Cascading Style Sheet (CSS) : l'ergonomie d'une page Web repose sur ce langage, l'API
l'utilise fortement ;
• ECMA-262 et affiliés (JavaScript [1] / ActionScript [2]) : l'API Web 2D et ses composants
(comme OpenLayers) utilise ces langages de programmation. Il faut donc maîtriser au
moins l'un d'eux au minimum pour concevoir des pages Web utilisant l'API.
• les standards de l'ISO ( International Organization for Standardization), de l'OGC ( Open
Geospatial Consortium), de l'OSGeo ( Fondation Géospatiale Open Source ) : les services
géographiques utilisent ces standards ou normes, il s'agit donc d'en connaître l'existence et les
fonctionnements :
• Web Map Service - Cached ( WMS-C) : en l'absence d'un standard ISO/OGC, le Géoportail
a mis en oeuvre un service de cartographie tuilé pour servir à hautes performances les
données spécifié par MetaCarta. Ceci pourrait changer quand un standard émergera cette
demande à commentaires de l'OGC ;
• Web Map Service (WMS) : la cartographie par le réseau, ce service fournit principalement
des images (mais pas uniquement). Bien que le butineur bénéficie au travers de l'API de ce
type de services, un SIG est aussi potentiellement un client WMS ;
• Web Feature Service (WFS) : à l'instar d'une connexion à une base de données, un tel
service permet d'accéder à des bases de données géographiques par le réseau en utilisant
principalement le format GML (Geographic Markup Language). Le butineur bénéficie au
travers de l'API de ce type de service, mais un SIG est aussi potentiellement un client WFS ;
• Keyhole Markup Language (KML) : ce langage est en cours d'adoption entre l'OGC et
Google. Il est très utilisé dans Google Earth. Il est supporté par OpenLayers ;
• GPS eXchange Format (GPX) : ce langage supporté par l'API permet de récupérer des
traces GPS et de les afficher dans l'API.
1 I n t r o d u c t i o n
2
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
Les technologies listées ci-dessus ne sont pas les seules dans le domaine de la géomatique...
La figure suivante schématise le fonctionnement de l'API :
architecture
Le schéma ci-dessus décrit trois parties principales :
• les composants côté serveur :
Les entrepôts de données sont gérés ici. Ils peuvent être sous un gestionnaire de base de données
(postgreSQL, mySQL, Oracle, Informix, ArcSDE, etc ...) ou directement sur le système de
fichiers sous forme de répertoires de fichiers (cache, arborescences).
• les services :
Ces entrepôts sont accessibles par des services (Web Map Service, Web Feature Service, ...)
ou par des transferts HTTP classiques (Keyhole Markup Language, ...). Un autre composant
important réside côté service : le service de gestion de droits en information géographique
(connu aussi sous les vocables GeoDRM ou GeoRM). Ce service gère la licence en provenance
du client.
• les composants côté client :
L'API cliente est chargée ici.
Cette partie se connecte avec le service GeoDRM.
Les services du Géoportail (WMS-C, WMS, WFS) peuvent être connectés à des applications SIG.
Pour cela, il faut mettre en oeuvre un connecteur à notre GeoRM. Pour plus d'information, il faut nous
contacter à ' contact dot api at ign dot fr'.
1.2 API 2D
L'API 2D permet d'intégrer des référentiels Géoportail depuis les services fournis par l'infrastructure
du Géoportail.
1 I n t r o d u c t i o n
3
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
1.2.1 API Web 2D
L'API Web 2D du Géoportail est la déclinaison Web de l'API Géoportail permettant aux applications
Web de superposer les données utilisateurs avec les référentiels.
1.2.1.1 API Web 2D en Javascript
L'API Web 2D permet d'intégrer en quelques lignes une carte Géoportail sur n'importe quelle page
HTML.
Réalisée en JavaScript et basée sur la bibliothèque OpenLayers (logiciel libre sous licence BSD), elle
surcharge les librairies de ce dernier pour apporter de nouvelles fonctionnalités.
La présente documentation et les exemples de code associés se rapportent à la version 1.3.0 de
l'API Web 2D en Javascript.
Les livraisons sont construites sur différentes versions d'OpenLayers :
Date de livraison
Version
Fonctionnalités
20 février 2012
1.3
OpenLayers 2.11, introduction des
interfaces pour les visualisateurs,
d'un chargeur exposant des
fonctionnalités liées avec la version
2.0 à venir mi-2012.
Voir les évolutions.
17 janvier 2011
1.2
OpenLayers 2.10, les
données vectorielles sont
dorénavant chargés en utilisant
OpenLayers.Protocol et
OpenLayers.Strategy sans impact
sur l'API elle-même et pour se
rapprocher d'OpenLayers 3.0.
2 août 2010
1.1
OpenLayers 2.9.1.
15 mars 2010
1.0
OpenLayers 2.8, support
expérimental des ExtendedData
pour KML. Voir les évolutions.
Analyse des capacités WMS
(1.3.0) et WFS (1.1.0).
Les accès OpenLS sont
dorénavant protégés par GeoDRM.
6 mai 2009
1.0beta4
Séparation entre le visualisateur
et la carte en préparation de la
version 1.0 : il est nécessaire de
modifier les pages pour passer à
cette version comme indiqué dans
les évolutions.
Introduction des API minimum,
standard et étendue.
Ajout du support de la recherche
par OpenLS (Location Utility
Service). Expérimental.
1 I n t r o d u c t i o n
4
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
4 novembre 2008
1.0beta3
OpenLayers 2.7, support
préliminaire en écriture du format
Geoconcept export. Retrait de
Prototype et Script.aculo.us.|
Nouvelle barre d'édition et
nouveaux composants pour le
gestionnaire de couches.
Documentation basée sur
NaturalDocs.
Ouverture au zoom mondial.
1er juillet 2008
1.0beta2
OpenLayers 2.6, plus de
fonctionnalités au support du
format GPX.
4 juin 2008
1.0beta1
Corrections de quelques
boggues, quelques fonctionnalités
OpenLayers 2.6 et support
préliminaire du format GPX.
28 avril 2008
1.0beta
OpenLayers 2.5 avec le support
des projections.
Pour de plus amples informations, se rapporter aux évolutions.
Toutes ces fonctionnalités sont accessibles d'une manière très simple grâce à la classe
Geoportal.Map, qui encapsule toute la puissance de l'API derrière quelques méthodes.
Les développeurs peuvent également utiliser l'intégralité des fonctions OpenLayers.
• les composants côté client :
Pour le client Web 2D, son architecture interne est la suivante :
• Bibliothèques OpenSource utilisées :
• Prototype Javascript Framework (jusqu'à 1.0beta2),
• Script.aculo.us - Web 2.0 javascript (jusqu'à 1.0beta2),
• PROJ4JS,
• OpenLayers,
• NaturalDocs (depuis 1.0beta3)
• Sarissa (depuis 1.0beta3)
• la bibliothèque Geoportal
Cette bibliothèque met en oeuvre la charte graphique de l'API et se connecte avec le service
GeoDRM.
1.2.1.2 API Web 2D en Flex
Réalisée en Flex et basée sur le projet open source OPENSCALES (licence LGPL v3), l'API Web 2D
en MXML/ActionScript est en cours de conception. Un exemple est donné là.
L'IGN contribue à OPENSCALES avec la mise en oeuvre de la partie utile de la GeoAPI et des
connecteurs GeoDRM.
1.2.2 API 3D
Une preuve de concept de l'utilisation des flux 2D dans une application 3D est l'inclusion dans
Nasa World Wind des données du Géoportail.
1 I n t r o d u c t i o n
5
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
N1 JavaScript est une marque déposée par Sun MicroSystems Inc.
N2 ActionScript est une marque déposée par Adobe Inc.
2 F i r s t s t e p s
6
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
2 First steps
.......................................................................................................................................
2.1 Premiers pas
Avant d'accéder à l'API, il faut passer par les étapes suivantes :
• créer un compte
Suite à l'inscription, un courriel de confirmation est envoyé. Une fois confirmé, il suffit de se
connecter.
• créer un contrat
Les paramètres de création d'un contrat sont l'URL du site où elle va être déployée et le territoire
concerné par les données à afficher.
Une fois créé, un courriel de confirmation avec la licence est envoyé. Cette dernière donne accès
aux différentes couches cochées lors de la création du contrat.
Plusieurs licences peuvent être créées suivant les URLs, les territoires pour un même contrat.
2.1.1 API Web 2D en Javascript
2.1.1.1 Intégration de la visualisation IGN dans une page HTML
Pour pouvoir utiliser l'API IGN du Géoportail 2D dans une page HTML, il faut:
• Placer une balise script qui fait appel à la page de vérification de licence. Vous devez remplacer
le paramètre key par votre clé de licence;
• Remplacer le paramètre instance par le nom que vous voulez donner à la carte et qui vous servira
ensuite pour configurer cette carte. Ce nom sera celui de la variable Javascript de votre carte;
• Placer dans le corps de la page HTML une balise DIV dont les attributs ID class et style sont
renseignés comme dans le code qui suit;
• Définir la fonction Javascript initGeoportalMap() cette fonction sera exécutée au
chargement de la page pour initialiser votre carte;
L'exemple ci-dessous montre le code minimum nécessaire pour afficher une carte avec l'API :
2 F i r s t s t e p s
7
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
<!DOCTYPE html>
<html>
<head>
<title>API Geoportail - your personal map</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<style type="text/css"><!--/*--><![CDATA[/*><!--*/
div#viewerDiv {
width:800px;
height:600px;
background-color:white;
background-image:url(http://api.ign.fr/geoportail/api/js/VERSION/theme/geoportal/img/loading.gif);
background-position:center center;
background-repeat:no-repeat;
}
/*]]>*/--></style>
</head>
<body>
<div id="plancheCartographique"></div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
window.onload= function() {
Geoportal.load(
// div's ID:
'plancheCartographique',
// API's keys:
['VOTRE_LICENCE'],
{// map's center :
// longitude:
lon:2.731525,
// latitude:
lat:45.833333
}
);
};
//--><!]]></script>
<script
type="text/javascript"
src="http://api.ign.fr/geoportail/api/js/VERSION/Geoportal.js"
charset="utf-8">
<!-- -->
</script>
</body>
</html>
Le code HTML suivant contient tous les éléments nécessaires à l'inclusion d'une carte de l'API :
2 F i r s t s t e p s
8
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="plancheCartographique" style="width:800px;height:600px;"></div>
<script type="text/javascript"><!--
var iVIEWER= null;
function loadAPI() {
iVIEWER= new Geoportal.load(
"plancheCartographique",
['VOTRE_LICENCE'],
null,
null,
{
onView: initGeoportalMap,
layers:[
'LAYER_NAME'
],
layersOptions:{
'LAYER_NAME':{ ... }
}
}
);
}
function initGeoportalMap() {
// RETRIEVE the viewer :
var VIEWER= iVIEWER.getViewer();
//Cette fonction sera exécutée au chargement de la page HTML
//La carte doit y être créée et paramétrée
}
window.onload= loadAPI;
-->
</script>
<script
type="text/javascript"
src="http://api.ign.fr/geoportail/api/js/VERSION/Geoportal.js"
charset="utf-8">
<!-- -->
</script>
</body>
</html>
Le code précédent définit les éléments HTML nécessaires pour insérer une carte, mais ne
la génère pas. Pour réaliser cette opération, il faut instancier un objet Geoportal.Map dans
la fonction initGeoportalMap() définie ci-dessus. Le nom de la fonction à appeler est
geoportalLoad + nom de l'instance. Si le nom de l'instance est maCarte, la fonction qui sera
appelée sera geoportalLoadmaCarte(). Il est important de noter que l'appel au script avec
2 F i r s t s t e p s
9
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
votre clé de licence génère la variable Javascript passée en paramètre de instance, il n'est donc
pas besoin de la déclarer à nouveau.
2.1.1.2 Tester l'intégration sur un poste local
Une fois l'intégration à votre page web réalisée vous allez pouvoir tester son bon fonctionnement sur
votre poste local. Pour ce faire il est nécessaire d'équiper votre poste d'un serveur HTTP.
Une adresse de type http://localhost/maPageApi.html ou http://127.0.0.1/
maPageApi.html est en effet nécessaire pour accéder aux données des couches Géoportail.
Parmi les nombreux serveurs HTTP libres et gratuits disponibles aujourd'hui ( Apache, lighttpd, ...)
nous conseillons aux utilisateurs peu familiers avec ce type de technologies et travaillant sous
Microsoft Windows, l'utilisation de Zazou Mini Web Server.
Il vous suffit en effet de :
1ère étape :
Télécharger l'exécutable de Zazou Mini Web Server seul sur le site de Zazou Mini Web
Server
2ème étape :
Copier l'exécutable dans le dossier contenant votre site ou page web
Lancement Zazou Mini Web Server
3ème étape :
Lancer l'exécutable en double-cliquant sur celui-ci
2 F i r s t s t e p s
10
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
Lancement Zazou Mini Web Server
4ème étape :
Votre site/page est désormais accessible dans votre navigateur à l'adresse http://
localhost/
2 F i r s t s t e p s
11
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
Visualisation de la page
2.1.1.3 Pare-feux personnels
Il est important de noter que la présence d'un pare-feu actif sur la machine peut provoquer l'affichage
d'une carte vide ou "zébrée". Dans ce cas, il faut autoriser les flux en provenance de l'infrastructure du
Géoportail de passer votre pare-feu : *.ign.fr et *.geoportail.fr devraient donc être autorisés dans les
règles du pare-feu.
2.1.1.4 Versions de l'API
Le paramètre v, dont la valeur est VERSION dans l'exemple ci-dessus, est directement lié à la version
de l'API Géoportail standard :
v
Basée sur
Tailles minimum
(compressée)
standard
(compressée)
étendue
(compressée)
flash (compressée)
mobile (compressée)
État
2 F i r s t s t e p s
12
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
1.0beta
Cf. 1.0beta1
N/A (N/A)
N/A (N/A)
749ko (N/A)
N/A (N/A)
N/A (N/A)
Désactivé
Redirigé sur 1.3.0
1.0beta1
OpenLayers 2.5
N/A (N/A)
N/A (N/A)
749ko (N/A)
N/A (N/A)
N/A (N/A)
Désactivé
Redirigé sur 1.3.0
1.0beta2
OpenLayers 2.6
N/A (N/A)
N/A (N/A)
809ko (N/A)
N/A (N/A)
N/A (N/A)
Désactivé
Redirigé sur 1.3.0
1.0beta3
OpenLayers 2.7
N/A (N/A)
N/A (N/A)
925ko (N/A)
N/A (N/A)
N/A (N/A)
Désactivé
Redirigé sur 1.3.0
1.0beta4
OpenLayers 2.7
117ko ( 28ko)
641ko (149ko)
981ko (219ko)
N/A (N/A)
N/A (N/A)
Désactivé
Redirigé sur 1.3.0
1.0
OpenLayers 2.8
256ko ( 62ko)
920ko (215ko)
1400ko (301ko)
N/A (N/A)
N/A (N/A)
Désactivé
Redirigé sur 1.3.0
1.1
OpenLayers 2.9.1
283ko ( 69ko)
1100ko (252ko)
1500ko (335ko)
N/A (N/A)
N/A (N/A)
Désactivé
Redirigé sur 1.3.0
1.2
OpenLayers 2.10
296ko ( 73ko)
1100ko (264ko)
1600ko (354ko)
N/A (N/A)
N/A (N/A)
Activé
1.3.0
OpenLayers 2.11
413ko ( 90ko)
1500ko (340ko)
1900ko (450ko)
245ko ( 58ko)
1300ko (300ko)
Activé
Autre valeur
Erreur retournée à
l'application cliente
N/A (N/A)
N/A (N/A)
N/A (N/A)
N/A (N/A)
N/A (N/A)
N/A
La valeur du paramètre v peut être suivie de la chaîne " -m" pour obtenir l'API minimum.
La valeur du paramètre v peut être suivie de la chaîne " -e" pour obtenir l'API étendue.
2 F i r s t s t e p s
13
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
La valeur du paramètre v peut être suivie de la chaîne " -f" pour obtenir l'API flex (Flash).
La valeur du paramètre v peut être suivie de la chaîne " -g" pour obtenir l'API mobile (Javascript).
Si le butineur supporte l'en-tête HTTP " Accept-Encoding: gzip", alors l'API est retournée
compressée (son poids est réduit jusqu'à quatre fois la taille non compressée).
2.1.1.5 Types de visualisateur par défaut
Dans notre cas, on a passé dans la balise script instance=maCarte&amp;, donc l'appel se fera de
cette manière :
geoportalLoadmaCarte("plancheCartographique","normal");
Le premier paramètre à donner est le nom de la DIV dans laquelle sera insérée la carte. Les
paramètres suivant, tous optionnels, sont le type de carte souhaité, le territoire, la projection des
données et celle d'affichage des coordonnées.
Il existe 2 types de visualisateur :
• normal : carte de grande taille avec tous les panneaux visibles (gestionnaire de couche, boîte à
outils et panneau d'information);
• mini : carte de petite taille sans panneaux. Les déplacements et les zooms sont possibles via la
souris.
2.1.1.6 Systèmes de référence spatiale
Certains codes EPSG sont aussi autorisés (e.g., EPSG:2154 correspond au code IGNF:LAMB93). Les
codes sont définis via le projet PROJ4JS.
2.1.1.7 Divers
La carte ainsi générée est vide, il faut maintenant ajouter des couches de données. Pour ajouter les
couches auxquelles votre licence vous donne l'accès, il suffit d'insérer les lignes suivantes :
if(maCarte.allowedGeoportalLayers){
maCarte.addGeoportalLayers(maCarte.allowedGeoportalLayers);
}
ou, depuis la 1.0beta4 :
maCarte.addGeoportalLayers();
Il est important de retenir que les données sont affichées en projection équidistante cylindrique
IGNF:GEOPORTALxxx ( xxx étant le code du territoire) et que les informations en provenance
des contrôleurs (telle les coordonnées de la souris) sont exprimées dans le système de référence
géographique sous-jacent à la projection. Pour obtenir la projection des données, on utilise le
fragment de code suivant :
var projection_carte= maCarte.getMap().getProjection();
Pour obtenir le système d'affichage des contrôleurs, on utilise le fragment de code suivant :
var projection_ctrl= maCarte.getMap().getDisplayProjection();
Pour centrer l'affichage sur une coordonnées GPS, on utilise le fragment de code suivant :
maCarte.getMap().setCenterAtLonLat(longitude, latitude);
Dans cet exemple, longitude et latitude peuvent être :
• soit exprimées en degrés décimaux (Number) ;
2 F i r s t s t e p s
14
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
• soit exprimées en degrés sexagésimaux (String) avec les syntaxes suivantes :
\s?-?(\d{1,3})[.,°d]?\s?(\d{0,2})[']?\s?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?
\s?(\d{1,3})[.,°d]?\s?(\d{0,2})[']?\s?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?\s?([NSEW])?
Ainsi, pour se centrer sur le marégraphe de Marseille :
maCarte.getMap().setCenterAtLonLat("5d21'13,62161E", "43°16'43.56108 N");
La plupart des composants OpenLayers possède une méthode
transform(OpenLayers.Projection ini,OpenLayers.Projection fin), consulter la
documentation Openlayers pour de plus amples informations.
Ainsi, pour transformer un point en coordonnées géographiques type GPS en coordonnées de la carte,
on utilise le fragment de code suivant :
var p= new OpenLayers.LonLat(longitude, latitude);
p.transform(OpenLayers.Projection.CRS84, maCarte.getMap().getProjection());
L'objet Geoportal.Map possède d'autres méthodes qui vous permettent de configurer votre carte.
Pour les découvrir consulter la JSDoc de Geoportal.Map. Vous pouvez également consulter les
examples de cartes.
• CSS
Les styles par défaut de l'API Géoportail et d'OpenLayers (style.css) sont automatiquement
chargés par les API standard et étendue si nécessaire. En API minimum ou pour charger soi-
même les styles, il faut utiliser les URLs suivantes :
• CSS OpenLayers :
http://api.ign.fr/geoportail/api/js/VERSION/theme/default/style.css
http://api.ign.fr/geoportail/api/js/VERSION/theme/default/ie6-style.css
http://api.ign.fr/geoportail/api/js/VERSION/theme/default/google.css
http://api.ign.fr/geoportail/api/js/VERSION/theme/default/framedCloud.css
• ie6-style.css pour IE 6 ou moins (correction canal alpha png);
• google.css quand OpenLayers.Layer.Google est utilisée;
• framedCloud.css quand OpenLayers.Popup.FramedCloud est utilisée;
• CSS Geoportail :
http://api.ign.fr/geoportail/api/js/VERSION/theme/geoportal/style.css
http://api.ign.fr/geoportail/api/js/VERSION/theme/geoportal/standard.css
• standard.css surcharge les styles quand Geoportal.Viewer.Standard est utilisée.
L'exemple Changement de l'affichage montre comment charger les CSS.
Il est important de noter que les CSS sont par défaut calibrées pour une carte de 800 par 600
pixels. Il est fortement conseillé d'adapter les règles à d'autres tailles.
• Mode de compatibilité IE 8 :
Jusqu'à la version 1.0beta4 il est nécessaire d'insérer le fragment de code suivant pour le support
d'IE 8. Ce fragment doit être inséré avant toute autre balise meta. Il peut être inséré après la
balise title :
<!-- IE8 compatibility mode -->
<!--[if IE 8]>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<![endif]-->
2 F i r s t s t e p s
15
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
Ce fragment de code n'est plus utile depuis la version 1.2.
2.1.2 API et territoires
Le nom du territoire est un code ISO3166 alpha-3 :
• Codes standards de l'ISO 3166 alpha-3 du territoire. Les valeurs possibles sont :
ATF
Terres Arctiques Australes (non encore en
ligne)
FXX
France métropolitaine
GLP
Guadeloupe
GUF
Guyane
MTQ
Martinique
MYT
Mayotte
NCL
Nouvelle Calédonie
PYF
Polynésie Française
REU
Réunion
SPM
Saint Pierre et Miquelon
WLF
Wallis et Futuna
• Les valeurs suivantes sont des extensions de l'ISO 3166 alpha-3 pour le Géoportail :
ANF
Antilles Française (GLP, MTQ, SMA, SBA)
CRZ
Crozet
EUE
Union Européenne
KER
Kerguelen
SBA
Saint-Barthélémy
SMA
Saint-Martin
ASP
Saint-Paul-Amsterdam (non encore en ligne)
WLD
La Terre
La valeur par défaut est "FXX".
• Les projections de données et d'affichage sont une chaîne de caractères du type IGNF:Code
RIG. La documentation des codes RIG est içi. En l'absence de ces paramètres, l'API retrouve les
systèmes de coordonnées des données et géographique du territoire.
3 L a y e r s
16
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
3 Layers
.......................................................................................................................................
3.1 Identification des couches
3.1.1 Nom harmonisé des ressources
Les couches principales sont identifiées par les codes suivants :
Code
Nom
ADMINISTRATIVEUNITS.BOUNDARIES
Limites administratives
BUILDINGS.BUILDINGS
Constructions
CADASTRALPARCELS.PARCELS
Parcelles cadastrales
ELEVATION.SLOPES
MNT sous forme d'une image en teintes
hypsométriques
GEOGRAPHICALGRIDSYSTEMS.MAPS
Cartes scannées, quelque soit leur échelle (hors
INSPIRE)
GEOGRAPHICALNAMES.NAMES
Noms de lieux
HYDROGRAPHY.HYDROGRAPHY
Réseaux hydrographiques
ORTHOIMAGERY.ORTHOPHOTOS
Ortho-photographies, quelque soit leur résolution
ELEVATION.LEVEL0
Traits de côte
TRANSPORTNETWORKS.RAILWAYS
Réseaux ferroviaires
TRANSPORTNETWORKS.ROADS
Réseaux routiers
TRANSPORTNETWORKS.RUNWAYS
Pistes d'aéroports, d'aérodromes
UTILITYANDGOVERNMENTALSERVICES.ALL
Ouvrages et constructions gouvernementales
Les ressources pour les moteurs de recherches sont identifiées par les codes suivants :
Code
Nom
ADDRESSES.CROSSINGS
Adresses début-fin sur les tronçons de route
TOPONYMS.ALL
Dénominations géographiques
Ces codes sont basés sur la directive Européenne INSPIRE, annexes I à III à partir des noms des
thèmes. Dans le cadre de l'application de la directive, les services fourniront les noms harmonisés
prévus par INSPIRE. L'objectif est d'avoir des noms homogènes dans toute l'Europe pour faciliter la
mise en place des services d'accès aux données géographiques.
Les codes sont ajoutés/mis à jour avec les mises-à-jour de l'infrastructure Géoportail. Pour rester
informé sur les codes, il faut récupérer les capacités des services ad hoc (e.g., les capacités du WMS-
C sont là, et les capacités du WMS sont là). Ces codes sont préfixés par le code du territoire dans le
cas des services WMS.
D'autres codes apparaîtront dans les mois à venir.
3 L a y e r s
17
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
3.1.1.1 Types de services
L'API permet ou permettra d'accéder aux types de services suivants :
Type
Service d'accès
URLs des services
WMSC
WMS-C
WMS tuilé du Géoportail
service de consultation INSPIRE
WMS tuilé du pour le Ministère de
l'Education Nationale
WMTS
WMTS 1.0.0
N/A
WMS
WMS 1.1.1
WMS du Géoportail
service de consultation INSPIRE
WMS
WMS 1.3.0
WMS du Géoportail
service de consultation INSPIRE
WFS
WFS 1.0.0
N/A
WFS
WFS 1.1.0
N/A
WFS
WFS 2.0.0
N/A
OLS
OLS 1.0.0
service de recherche par adresse
service de recherche par nom
OLS
OLS 1.2.0
N/A
N/A
3.1.2 API Web 2D en Javascript
Ces codes sont véhiculés par la clef de licence. En fonction du contrat, ils peuvent donc ne pas tous
être disponibles. Ils peuvent être retrouvés via le tableau instance.allowedGeoportalLayers
dans l'API Javascript. L'extrait de code ci-dessous montre comment afficher les cartes sans
transparence et ne pas afficher les ortho-photographies :
if (maCarte.getMap().allowedGeoportalLayers) {
for (var i= 0; i<maCarte.getMap().allowedGeoportalLayers.length; i++) {
var overloaded_options= null;
var couche= maCarte.getMap().allowedGeoportalLayers[i];
if (couche.match(/^GEOGRAPHICALGRIDSYSTEMS.MAPS/)) {// maps
overloaded_options= {
opacity: 1.0
};
} else if (couche.match(/^ORTHOIMAGERY.ORTHOPHOTOS/)) {// orthophotos
overloaded_options= {
visibility: false
};
}
maCarte.addGeoportalLayer(couche,overloaded_options);
}
}
Se reporter à la documentation Javascript Catalogue.js pour trouver les valeurs par défaut de la
transparence et de la visibilité des couches.
3 L a y e r s
18
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
À partir de la version 1.0beta4, les noms standards des couches sont suffixés par ':' concaténé au type
du service donnant accès à la couche.
3.1.2.1 Échelles et niveaux de zoom
L'API supporte 21 niveaux de zoom. Les niveaux de zoom sont utilisés par l'API via les méthodes
setCenter*(). Le tableau ci-dessous indique pour les niveaux de zooms actifs la correspondance
avec les échelles :
Zoom
Échelle
Projection de la carte
0
Monde
IGNF:MILLER
1
Monde
IGNF:MILLER
2
Monde
IGNF:MILLER
3
Monde
IGNF:MILLER
4
Monde
IGNF:MILLER
5
État
IGNF:GEOPORTAL*
6
État
IGNF:GEOPORTAL*
7
État
IGNF:GEOPORTAL*
8
Département
IGNF:GEOPORTAL*
9
Département
IGNF:GEOPORTAL*
10
Département
IGNF:GEOPORTAL*
11
Département
IGNF:GEOPORTAL*
12
Ville
IGNF:GEOPORTAL*
13
Ville
IGNF:GEOPORTAL*
14
Ville
IGNF:GEOPORTAL*
15
Ville
IGNF:GEOPORTAL*
16
Rue
IGNF:GEOPORTAL*
17
Rue
IGNF:GEOPORTAL*
18
Rue
IGNF:GEOPORTAL*
19
Rue
IGNF:GEOPORTAL*
20
Maison
IGNF:GEOPORTAL*
Les projections IGNF:GEOPORTAL* sont compatibles avec les projections plate-carré. L'API
Géoportail étire/compresse les images pour faire la superposition (extension d'OpenLayers par IGNF).
Des codes EPSG non officiels peuvent être aussi utilisé en lieu et place des codes IGNF, voir là.
3.1.2.2 Attribution des propriétaires des données :
Pour toute couche qui peut être ajouter à la carte, l'API expose un mécanisme pour informer de
l'origine des données. Si OpenLayers utilise le paramètre attribution, l'API utilise un tableau de
distributeurs avec les propriétés suivantes pour chacun des distributeurs :
• logo : une chaîne de caractères identifiant le logo du distributeur. Cf. pictureUrl pour de plus
amples informations ;
3 L a y e r s
19
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
• pictureUrl : si définie, c'est l'URL de l'image. Si non définie, la propriété logo est utilisée pour
construire l'URL de l'image comme suit : http://www.geoportail.fr/legendes/logo_ +
logo + .gif ;
• url : l'URL du distributeur. La page web sera ouverte dans une nouvelle fenêtre ;
• extent : emprise d'application des données ;
• attribution : texte court relatif aux propriétaires des données.
4 W M S - C l a y e r s
20
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
4 WMS-C layers
.......................................................................................................................................
4.1 Utilisation de couches en WMS-C
Le support du WMS-C est assuré dans les APIs minimum, standard et étendue. La diffusion via le
protocole WMS-C est dépréciée pour la prochaine version des services du Géoportail.
4.1.1 Avant-propos
Il est important de noter que les couches du Géoportail sont dans une projection spécifique
(IGNF:GEOPORTAL*, IGNF:MILLER, Cf. RIG). En tant que tel, toute couche image en
superposition (comme les WMS, WMS-C et consorts) devra être :
• soit dans la même projection (obligatoire pour IGNF:MILLER);
• soit dans la projection plate-carré (EPSG:4326 ou équivalent).
L'API du Géoportail permet aussi d'afficher les couches du Géoportail (IGNF:GEOPORTAL*)
en plate-carré (IGNF:RGF93G qui est compatible avec EPSG:4326) et toute autre couche doit
être dans la même projection plate-carré.
4.1.2 API Web 2D en Javascript
4.1.2.1 Configuration
L'ajout d'une couche WMS-C s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"WMS-C",
nom_de_la_couche,
"url_du_wmsc",
parametres_du_wmsc,
options_couche
);
• le paramètre nom_de_la_couche contient le texte qui sera affiché dans le gestionnaire de
couches. Ce nom peut être une chaîne de caractères ou un objet permettant le support du (Cf.
multi-langues) ;
• le paramètre url_du_wmsc contient l'URL du WMS-C ;
• le paramètre parametres_du_wmsc contient tous les paramètres nécessaires au paramétrage du
service WMS-C comme layers, format, transparent, etc ...
• le paramètre options_couche contient les paramètres pour gérer le comportement de la couche
WMS-C comme gridOrigin, resolutions, projection, units, maxExtent, minZoomLevel,
maxZoomLevel, opacity, isBaseLayer, visibility, originators, etc ... Il est important de noter que
l'emprise maxExtent doit être exprimée dans le système de coordonnées projection.
• Le paramètre gridOrigin indique l'origine des tuiles. Par défaut, c'est le (0, 0) dans le
système de référence de coordonnées projection.
• Le paramètre resolutions indique les résolutions du cache. Par défaut, ce sont celles du
Géoportail :
Zoom
Résolution
(m)
Projection
Échelle
0
39135.7500000
MILLER
1 : 156 543
000
4 W M S - C l a y e r s
21
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
1
19567.8750000
MILLER
1 : 78 271
500
2
9783.9375000
MILLER
1 : 39 135
750
3
4891.9687500
MILLER
1 : 19 567
875
4
2445.9843750
MILLER
1 : 9 783
938
5
2048.0000000
GEOPORTAL###
1 : 8 192
000
6
1024.0000000
GEOPORTAL###
1 : 4 096
000
7
512.0000000
GEOPORTAL###
1 : 2 048
000
8
256.0000000
GEOPORTAL###
1 : 1 024
000
9
128.0000000
GEOPORTAL###
1 : 512 000
10
64.0000000
GEOPORTAL###
1 : 256 000
11
32.0000000
GEOPORTAL###
1 : 128 000
12
16.0000000
GEOPORTAL###
1 : 64 000
13
8.0000000
GEOPORTAL###
1 : 32 000
14
4.0000000
GEOPORTAL###
1 : 16 000
15
2.0000000
GEOPORTAL###
1 : 8 000
16
1.0000000
GEOPORTAL###
1 : 4 000
17
0.5000000
GEOPORTAL###
1 : 2 000
18
0.2500000
GEOPORTAL###
1 : 1 000
19
0.1250000
GEOPORTAL###
1 : 500
20
0.0625000
GEOPORTAL###
1 : 250
Les résolutions de la couche peuvent être différentes en nombre et en valeur, la classe
Geoportal.Layer.Grid se charge d'appeler la résolution la plus proche de celle du Géoportail
pour permettre la superposition.
Quoiqu'il en soit il n'y a pas de différence notable entre l'utilisation OpenLayers.Layer.WMS et
celle de Geoportal.Layer.WMSC excepté pour la gestion de la gestion des droits des données
géographiques qui sera :
• soit ajouté automagiquement par les APIs standard et étendue ;
• soit ajouté (par le développeur) comme suit (Cf. modes opératoires pour de plus amples
informations) :
• ajouter un paramètre GeoRM dans options_couche ;
• affecter le code qui suit au paramètre GeoRM :
4 W M S - C l a y e r s
22
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
GeoRM: Geoportal.GeoRMHandler.addKey(
gGEOPORTALRIGHTSMANAGEMENT.apiKey,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.url,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.ttl,
maCarte)
4.Exemple de superposition de cartes de la France et de l'Espagne :
L'extrait de code suivant montre l'affichage des données du Géoportail (WMS-C) en plate-carré avec
une superposition d'un service WMS-C espagnol, lui-aussi en plate-carré :
4 W M S - C l a y e r s
23
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
...
maCarte= new Geoportal.Viewer.Default("plancheCartographique", {
mode:"normal",
territory:"FXX",
projection:"IGNF:RGF93G"
});
...
var ideeResolutions= [
0.703125,
0.3515625,
0.17578125,
0.087890625,
0.0439453125,
0.02197265625,
0.010986328125,
0.0054931640625,
0.00274658203125,
0.001373291015625,
0.0006866455078125,
0.00034332275390625,
0.000171661376953125,
0.0000858306884765625,
0.00004291534423828125,
0.000021457672119140625,
0.0000107288360595703125,
0.00000536441802978515625,
0.000002682209014892578125,
0.0000013411045074462890625,
0.00000067055225372314453125,
0.000000335276126861572215625,
0.0000001676380634307861078125,
0.00000008381903171539305390625,
0.000000041909515857696526953125
];
var idee= maCarte.getMap().addLayer(
"WMS-C",
{
'IDEE-Base':
{
'fr':"Cartes de base IDEE",
'en':"IDEE base maps",
'es':"Cartografia base IGN"
}
},
"http://www.idee.es/wms-c/IDEE-Base/IDEE-Base",
{
layers:'Todas',
format:'image/png',
transparent:true
},
{
singleTile: false,
projection:'EPSG:4326',
// emprise en EPSG:4326 :
maxExtent: new OpenLayers.Bounds(-18.865234375,25.892578125,4.865234375,46.107421875),
gridOrigin: new OpenLayers.LonLat(0,0),
nativeResolutions:ideeResolutions.slice(0),
opacity:0.30,
units:'degrees',
isBaseLayer: false,
visibility:false,
originators:[
{
pictureUrl:'http://www.idee.es/images/Logo_IDEE.gif',
url:'http://www.idee.es/index.jsp?lang=FR'
}
]
});
...
4 W M S - C l a y e r s
24
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
5 W M T S l a y e r s
25
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
5 WMTS layers
.......................................................................................................................................
5.1 Utilisation de couches WMTS
Le support du WMTS est assuré dans les APIs minimum, standard et étendue.
5.1.1 Avant-propos
Il est important de noter que les couches du Géoportail sont dans une projection spécifique (Cf. Web
Mercator Sphérique ). En tant que tel, toute couche image en superposition (comme les WMS, WMTS,
TMS, WMS-C et consorts) devra être :
• soit dans la même projection ;
• soit dans la projection plate-carré (CRS:84 ou équivalent) ;
• soit dans les anciennes projections GEOPORTAL* (équidistant-cylindrique - dépréciée).
L'API du Géoportail permet aussi d'afficher les couches du Géoportail en plate-carré
(IGNF:RGF93G qui est compatible avec CRS:84) et toute autre couche doit être dans la même
projection plate-carré.
5.1.2 API Web 2D en Javascript
5.1.2.1 Configuration
L'ajout d'une couche WMTS s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"WMTS",
nom_de_la_couche,
"url_du_wmts",
parametres_du_wmts,
options_couche
);
• le paramètre nom_de_la_couche contient le texte qui sera affiché dans le gestionnaire de
couches. Ce nom peut être une chaîne de caractères ou un objet permettant le support du (Cf.
multi-langues) ;
• le paramètre url_du_wmts contient l'URL du WMTS ;
• le paramètre parametres_du_wmts contient tous les paramètres nécessaires au paramétrage du
service WMTS comme layer, style, format, etc ...
• le paramètre options_couche contient les paramètres pour gérer le comportement de la couche
WMTS comme tileOrigin, matrixSet, matrixIds, projection, units, maxExtent, minZoomLevel,
maxZoomLevel, opacity, isBaseLayer, visibility, originators, etc ... Il est important de noter que
l'emprise maxExtent doit être exprimée dans le système de coordonnées projection.
• Le paramètre tileOrigin indique l'origine des tuiles. Par défaut, c'est le (0, 0) dans le système
de référence de coordonnées projection.
• Le paramètre matrixIds indique les résolutions du cache. Par défaut, ce sont celles du
Géoportail en projection Web Mercator Sphérique :
5.Résolutions du Géoportail
Zoom
Résolution (m)
Échelle approximative
5 W M T S l a y e r s
26
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
0
156543.033928
1 : 559082264
1
78271.516964
1 : 279541132
2
39135.758482
1 : 139770566
3
19567.879241
1 : 69885283
4
9783.939621
1 : 34942642
5
4891.969810
1 : 17471321
6
2445.984905
1 : 8735660
7
1222.992453
1 : 4367830
8
611.496226
1 : 2183915
9
305.748113
1 : 1091958
10
152.874057
1 : 545979
11
76.437028
1 : 272989
12
38.218514
1 : 136495
13
19.109257
1 : 68247
14
9.554629
1 : 34124
15
4.777302
1 : 17062
16
2.388657
1 : 8531
17
1.194329
1 : 4265
18
0.597164
1 : 2133
19
0.298582
1 : 1066
20
0.149291
1 : 533
21
0.074646
1 : 267
Les résolutions de la couche peuvent être différentes en nombre et en valeur, la classe
Geoportal.Layer.Grid se charge d'appeler la résolution la plus proche de celle du Géoportail
pour permettre la superposition.
5.Exemple de superposition de cartes de la France et de l'Espagne :
L'extrait de code suivant montre l'affichage des données du Géoportail (WMTS) en Web Mercator
Sphérique avec une superposition d'un service WMS-C espagnol, lui en plate-carré :
5 W M T S l a y e r s
27
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
...
maCarte= new Geoportal.Viewer.Default("plancheCartographique", {
mode:"normal",
territory:"FXX"
});
...
var ideeResolutions= [
0.703125,
0.3515625,
0.17578125,
0.087890625,
0.0439453125,
0.02197265625,
0.010986328125,
0.0054931640625,
0.00274658203125,
0.001373291015625,
0.0006866455078125,
0.00034332275390625,
0.000171661376953125,
0.0000858306884765625,
0.00004291534423828125,
0.000021457672119140625,
0.0000107288360595703125,
0.00000536441802978515625,
0.000002682209014892578125,
0.0000013411045074462890625,
0.00000067055225372314453125,
0.000000335276126861572215625,
0.0000001676380634307861078125,
0.00000008381903171539305390625,
0.000000041909515857696526953125
];
var idee= maCarte.getMap().addLayer(
"WMS-C",
{
'IDEE-Base':
{
'fr':"Cartes de base IDEE",
'en':"IDEE base maps",
'es':"Cartografia base IGN"
}
},
"http://www.idee.es/wms-c/IDEE-Base/IDEE-Base",
{
layers:'Todas',
format:'image/png',
transparent:true
},
{
singleTile: false,
projection:'EPSG:4326',
// emprise en EPSG:4326 :
maxExtent: new OpenLayers.Bounds(-18.865234375,25.892578125,4.865234375,46.107421875),
gridOrigin: new OpenLayers.LonLat(0,0),
nativeResolutions:ideeResolutions.slice(0),
opacity:0.30,
units:'degrees',
isBaseLayer: false,
visibility:false,
originators:[
{
pictureUrl:'http://www.idee.es/images/Logo_IDEE.gif',
url:'http://www.idee.es/index.jsp?lang=FR'
}
]
});
...
5 W M T S l a y e r s
28
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
6 K M L, G P X a n d O S M l a y e r s
29
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
6 KML, GPX and OSM layers
.......................................................................................................................................
6.1 Utilisation de KML
Le support du KML est assuré dans les APIs minimum, standard et étendue.
6.1.1 API Web 2D en Javascript
6.1.1.1 Configuration
L'ajout de données KML s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"KML",
nom_de_la_couche,
"accès_au_kml",
options_kml,
options_popup
);
• le paramètre nom_de_la_couche contient le texte qui sera affiché dans le gestionnaire de
couches. Ce nom peut être une chaîne de caractère ou un objet permettant le support du (Cf.
multi-langues) ;
• le paramètre accès_au_kml contient le chemin d'accès aux données KML (Cf. utilisation d'un
proxy) ;
• le paramètre optionnel options_kml contient les informations permettant d'affiner le
comportement de la couche KML. Les options principales sont :
• visibility : true (la couche est affichée au chargement), false sinon ;
• minZoomLevel : zoom minimal (échelle la plus petite) d'affichage. Par défaut, c'est 0
(échelle monde entier) ;
• maxZoomLevel : zoom maximal (échelle la plus grande) d'affichage. Par défaut, c'est le
zoom correspondant à l'échelle maximale de la carte de base ;
• view : les paramètres de gestion de la couche :
• drop : ajoute un contrôleur permettant d'enlever la couche du gestionnaire. Mis à true
par défaut ;
• zoomToExtent : ajoute un contrôleur permettant de zoomer sur l'emprise du KML
chargé. Mis à true par défaut ;
• projection : la projection de gestion des données (Cf. internalProjection). Par défaut,
elle est mise à celle de la carte (au travers de la couche de base). Il est conseillé de ne pas
surcharger cette option ;
• preFeatureInsert : function appelée juste avant l'insertion de l'objet KML dans la couche.
Par défaut, c'est la fonction Geoportal.Popup.Anchored.setPointerCursorForFeature qui est
utilisée : elle change la nature du pointeur de la souris quant celle-ci est au dessus de l'objet
KML ;
• onFeatureInsert : fonction de création de la fiche d'objet KML. Par défaut, c'est la fonction
Geoportal.Popup.Anchored.createPopUpForKMLFeature qui est utilisée : elle utilise
les champs description et, si présent, name du KML. Les fiches sont portées par la classe
Geoportal.Popup.Anchored ;
• format : format gérant la lecture du KML. C'est OpenLayers.Format.KML ;
6 K M L, G P X a n d O S M l a y e r s
30
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
• formatOptions : options liées à la lecture du KML :
• internalProjection : la projection de la carte (au travers de la couche de base) ;
• extractAttributes : indicateur de lecture des informations KML. Par défaut, il est mis à
true. Si mis à false (valeur par défaut d'OpenLayers), la fiche de l'objet KML est vide ;
• extractStyles : indicateur de lecture des styles KML. Par défaut, il est mis à true. Si mis
à false, c'est au développeur d'ajouter les styles ;
• le paramètre optionnel options_popup contient les informations permettant d'affiner le
comportement des popups associées à la couche KML. Les options principales sont :
• onSelect : fonction appelée lors de la sélection d'un objet KML. Par défaut, c'est la fonction
Geoportal.Control.selectFeature qui est utilisée : elle affiche la fiche de l'objet ;
• onUnselect : fonction appelée lors de la désélection d'un objet KML. Par défaut, la fonction
Geoportal.Control.unselectFeature qui est utilisée : elle ferme la fiche et la libère ;
• hover : indicateur de sélection des objets. Par défaut, il faut cliquer (false) pour sélectionner
un objet KML ;
• preventDefaultBehavior : désactive la gestion des popups - laisse le développeur ajouter les
mécanismes de gestion des popups ;
Il est bien sûr possible d'utiliser directement OpenLayers pour créer une couche KML, puis de
l'ajouter à la carte Géoportail :
var kml= new OpenLayers.Layer.GML(
nom_de_la_couche,
"accès_au_fichier.kml",
options_kml
);
maCarte.getMap().addLayer(kml);
• options_kml regroupe tous les paramètres précédents, mais en obligeant à les remplir.
6 K M L, G P X a n d O S M l a y e r s
31
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
6.Modifier le rendu des fiches KML
Pour modifier le rendu et le comportement par défaut des fiches KML, il faut surcharger les options
preFeatureInsert, onFeatureInsert, onSelect, onUnselect, et, éventuellement, hover.
6.Performances
Les données présentes dans le KML sont chargées en mémoire de l'application. Le paramètre
extractAttributes peut être désactivé pour éviter de charger toutes les informations contenues dans le
fichier KML. Cette remarque s'applique aussi au paramètre extractStyles.
Il a été mesuré qu'au delà de 200 objets des ralentissements sont perceptibles.
Dans le cas de données KML volumineuses, il est conseillé de se tourner vers le WFS ou une
combinaison de WMS/WFS.
6.2 Utilisation de GPX
Le support du KML est assuré dans les APIs minimum, standard et étendu.
6.2.1 API Web 2D en Javascript
6.2.1.1 Configuration
L'ajout de données GPX (Cf. aussi spécifications GPX (en anglais) s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"GPX",
nom_de_la_couche,
"accès_au_gpx",
options_gpx,
options_popup
);
La signification des paramètres est la même que pour les données en KML aux changements suivant
près :
• format : format gérant la lecture du GPX. C'est Geoportal.Format.GPX. Cette classe supporte la
lecture de l'élément author et l'écriture des données GPX ;
• formatOptions : options liées à la lecture du GPX :
• internalProjection : la projection de la carte (au travers de la couche de base) ;
• extractWaypoints : lit les points. Par défaut, mis à true ;
• extractTracks : lit les traces. Par défaut, mis à true ;
• extractRoutes : lit les itinéraires. Par défaut, mis à true ;
• extractAttributes : indicateur de lecture des informations GPX. Par défaut, il est mis à true.
Si mis à false (valeur par défaut d'OpenLayers), la fiche de l'objet GPX est vide ;
• onFeatureInsert : fonction de création de la fiche d'objet GPX. Par défaut, c'est la fonction
Geoportal.Popup.Anchored.createPopUpForGPXFeature qui est utilisée : elle utilise
les champs présents desc, cmt, ele et name du GPX. Les fiches sont portées par la classe
Geoportal.Popup.Anchored ;
6.Modifier le rendu des fiches GPX
La procédure est identique à KML.
6 K M L, G P X a n d O S M l a y e r s
32
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
6.Performances
Les données présentes dans le GPX sont chargées en mémoire de l'application. Le paramètre
extractAttributes peut être désactivé pour éviter de charger toutes les informations contenues dans
le fichier KML. Cette remarque s'applique aussi aux paramètres extractWaypoints, extractTracks et
extractRoutes utilisés pour charger les objets de ces types.
Il a été mesuré qu'au delà de 200 objets des ralentissements sont perceptibles.
Dans le cas de données GPX volumineuses, il est conseillé de se tourner vers le WFS ou une
combinaison de WMS/WFS.
6.3 Utilisation d'OSM
Le support du format OSM est assuré dans les APIs minimum, standard et étendu.
6.3.1 API Web 2D en Javascript
6.3.1.1 Configuration
L'ajout de données OSM s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"OSM",
nom_de_la_couche,
"accès_au_osm",
options_osm,
options_popup
);
La signification des paramètres est la même que pour les données en KML aux changements suivant
près :
• format : format gérant la lecture du OSM. C'est OpenLayers.Format.OSM ;
• formatOptions : options liées à la lecture du OSM :
• internalProjection : la projection de la carte (au travers de la couche de base) ;
• checkTags : vérification des balises. Par défaut à false ;
• areaTags : liste des balises, ne s'applique que si checkTags est à true. Par défaut à null ;
6 K M L, G P X a n d O S M l a y e r s
33
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
• onFeatureInsert : fonction de création de la fiche d'objet OSM. Par défaut, c'est la fonction
Geoportal.Popup.Anchored.createPopUpForGMLFeature qui est utilisée : elle utilise les
champs présents de l'objets. Les fiches sont portées par la classe Geoportal.Popup.Anchored ;
6.Modifier le rendu des fiches OSM
La procédure est identique à KML.
6.Performances
Les données présentes dans le OSM sont chargées en mémoire de l'application. Il est conseillé de ne
pas utiliser les paramètres checkTags et areaTags qui alourdissent considérablement le chargement
initial des données.
Il a été mesuré qu'au delà de 200 objets des ralentissements sont perceptibles.
Dans le cas de données OSM volumineuses, il est conseillé de se tourner vers l' API OSM ou une
combinaison de WMS/API OSM.
7 W M S l a y e r s
34
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
7 WMS layers
.......................................................................................................................................
7.1 Utilisation de couches en WMS
Le support du WMS est assuré dans les APIs minimum, standard et étendue.
7.1.1 Avant-propos
Relisez l'avant-propos du WMS-C !
7.1.2 API Web 2D en Javascript
7.1.2.1 Configuration
L'ajout d'une couche WMS s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"WMS",
nom_de_la_couche,
"url_du_wms",
parametres_du_wms,
options_couche
);
• le paramètre nom_de_la_couche contient le texte qui sera affiché dans le gestionnaire de
couches. Ce nom peut être une chaîne de caractères ou un objet permettant le support du (Cf.
multi-langues) ;
• le paramètre url_du_wms contient l'URL du WMS ;
• le paramètre parametres_du_wms contient tous les paramètres nécessaires au paramétrage du
service WMS comme layers, format, transparent, etc ...
• le paramètre options_couche contient les paramètres pour gérer le comportement de la couche
WMS comme singleTile, projection, units, maxExtent, minZoomLevel, maxZoomLevel, opacity,
isBaseLayer, visibility, originators, etc ... Il est important de noter que l'emprise maxExtent doit
être exprimée dans le système de coordonnées projection.
Quoiqu'il en soit il n'y a pas de différence notable entre l'utilisation OpenLayers.Layer.WMS
et celle de Geoportal.Layer.WMS excepté pour la gestion de la gestion des droits des données
géographiques qui sera :
• soit ajouté automagiquement par les APIs standard et étendue ;
• soit ajouté (par le développeur) comme suit (Cf. modes opératoires pour de plus amples
informations) :
• ajouter un paramètre GeoRM dans options_couche ;
• affecter le code qui suit au paramètre GeoRM :
GeoRM: Geoportal.GeoRMHandler.addKey(
gGEOPORTALRIGHTSMANAGEMENT.apiKey,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.url,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.ttl,
maCarte)
8 W F S l a y e r s
35
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
8 WFS layers
.......................................................................................................................................
8.1 Utilisation de couches en WFS
Le support du WFS est assuré dans l'API étendue.
8.1.1 API Web 2D en Javascript
8.1.1.1 Configuration
L'ajout d'une couche WFS s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"WFS",
nom_de_la_couche,
"url_du_wfs",
parametres_du_wfs,
options_couche
);
• le paramètre nom_de_la_couche contient le texte qui sera affiché dans le gestionnaire de
couches. Ce nom peut être une chaîne de caractère ou un objet permettant le support du (Cf.
multi-langues) ;
• le paramètre url_du_wfs contient l'URL du WFS ;
• le paramètre parametres_du_wfs contient tous les paramètres nécessaires au paramétrage du
service WFS comme typename, filter, version, etc ...
• le paramètre options_couche contient les paramètres pour gérer le comportement de la couche
WFS comme ratio, projection, units, maxExtent, minZoomLevel, maxZoomLevel, isBaseLayer,
visibility, originators, etc ... Il est important de noter que l'emprise maxExtent doit être exprimée
dans le système de coordonnées projection. Un autre point important est que le support du WFS
utilise le format GML, le chargement des attributs des objets nécessite donc l'utilisation de
l'option extractAttributes à true (valeur par défaut). Les autres options utiles sont :
• styleMap : par défaut, l'API crée un légende INSPIRE : les points, lignes et polygones sont
en noir :
styleMap: new OpenLayers.StyleMap({
strokeColor: "black",
strokeWidth: 2,
strokeOpacity: 0.5,
fillOpacity: 0.2
fillColor: "black"
}
• onSelect, onUnselect, ... : l'API crée un sélecteur par survol par défaut en assignant à
l'option onSelect la valeur Geoportal.Control.hoverFeature : il ouvre une popup
avec un en-tête contenant la valeur de l'attribut name de l'objet et un corps contenant toutes
les valeurs attributaires.
Quoiqu'il en soit il n'y a pas de différence notable entre l'utilisation OpenLayers.Layer.WFS
et celle de Geoportal.Layer.WFS excepté pour la gestion de la gestion des droits des données
géographiques qui sera :
• soit ajouté automagiquement par les APIs standard et étendue ;
• soit ajouté (par le développeur) comme suit (Cf. modes opératoires pour de plus amples
informations) :
8 W F S l a y e r s
36
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
• ajouter un paramètre GeoRM dans options_couche ;
• affecter le code qui suit au paramètre GeoRM :
GeoRM: Geoportal.GeoRMHandler.addKey(
gGEOPORTALRIGHTSMANAGEMENT.apiKey,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.url,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.ttl,
maCarte)
8.Performances
Tout d'abord, relire cette FAQ peut aider à comprendre !
Voici quelques résultats de tests effectués sur un service WFS :
Taille de la réponse GetFeature
Nombre d'objets
Chargement
1.8Mo
205
échoué
564Ko
699
réussi
483Ko
36
réussi
283Ko
406
réussi
89Ko
89
réussi
Les diverses limitations sont une combinaison de plusieurs facteurs :
• Taille des géométries des objets : OpenLayers indique 2500 coordonnées, on va plus loin, mais
c'est surtout une limitation sur le nombre de coordonnées par objet qui prévaut;
• Type des objets : pour le rendu en particulier, les polygones, c'est lourd;
• Nombre d'objets : au delà de 200 objets, le refraichissement de l'affichage est ralenti, mais les
deux facteurs précédents sont prépondérants ...
• Taille de la réponse : il semble que la longueur maximale d'une chaîne Javascript soit "limitée".
Cette limitation dépend du navigateur (par exemple, sous Firefox 2, on ne peut avoir de chaîne
de plus d'un 1Mo). Jeter un oeil http://bytes.com/topic/javascript/answers/92088-max-allowed-
length-javascript-string}là pour de plus amples informations.
Finalement, que faire :
• limiter les plages d'affichage pour limiter le nombre d'objets;
• utiliser le paramètre maxFeatures pour ne pas charger trop d'objets;
• découper les couches d'objets par plage d'échelles (bases multi-échelles) pour ramener les bons
objets (pas trop, avec une géométrie ad hoc) ou le simuler avec Geoportal.Layer.Aggregate;
• implémenter alors les SuperOverlays}SuperOverlays pour les formats vecteurs;
• faire des cartes (WMS/Tile) et mettre les opérations GetFeature/GetFeatureInfo limitées à la
zone cliquée;
• passer à l'API Web 2D en ActionScript dès que prête !
8 W F S l a y e r s
37
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
8.Exemple de WFS : Sandre
La capture d'écran ci-dessus repose sur le fragment de code suivant :
8 W F S l a y e r s
38
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
function overRiver(feature) {
if (feature) {
if (!feature.popup) {
var ll= feature.geometry.getBounds().getCenterLonLat();
var me= maCarte.getMap().getExtent();
var inView= me.containsLonLat(ll,false);
if (!inView) {//hors de la visualisation
ll= me.getCenterLonLat();
}
feature.popup= new OpenLayers.Popup.FramedCloud(
"chicken",
ll,
null,
// on affiche l'attribut 'NAME' dans l'info-bulle :
"<div style='font-size:.75em'>" + feature.attributes['NAME']+ "</div>",
null,
false);
}
if (feature.popup) {
maCarte.getMap().addPopup(feature.popup,true);
}
}
}
function outRiver(feature) {
if (feature && feature.popup) {
feature.popup.destroy();
feature.popup= null;
}
}
...
var rwbodyStyle= new OpenLayers.StyleMap({
"default": new OpenLayers.Style({
strokeColor:'#0000ff',
strokeWidth:3
}),
"select": new OpenLayers.Style({
strokeColor:'#3399ff',
strokeWidth:3
})
});
var sandre= maCarte.getMap().addLayer(
"WFS",
{
'sandre.layer.name':
{
'de':"Wasser kurses",
'en':"Water courses",
'es':"Cursos de agua",
'fr':"Cours d'eau",
'it':"Corsi d'acqua"
}
},
"http://services.sandre.eaufrance.fr/geo/zonage-shp?",
{
typename: 'RWBODY'
},
{
projection: 'EPSG:4326',
units:'degrees',
// maxExtent est exprimée en EPSG:4326 :
maxExtent: new OpenLayers.Bounds(-180,-90,180,90),
minZoomLevel:10,
maxZoomLevel:15,
isBaseLayer: false,
visibility: false,
originators: [
{
logo:'sandre',
pictureUrl: 'logo_sandre.gif',
url: 'http://sandre.eaufrance.fr'
}
],
extractAttributes:true,
styleMap:rwbodyStyle,
onSelect: overRiver,
onUnselect: outRiver,
hover: true
}
);
8 W F S l a y e r s
39
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
8.Exemple de WFS version 2.0.0 : utilisation du JSON-P pour appel Cross-Domain
L'API permet d'accéder aux services WFS version 2.0.0. A partir de OpenLayers 2.11, un protocole
OpenLayers.Protocol.Script permet d'implémenter la technique JSONP pour utiliser les données d'un
service WFS situé sur un domaine différent de la page appelante sans configuration de proxy.
La capture d'écran ci-dessus repose sur le fragment de code suivant :
8 W F S l a y e r s
40
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
...
// WFS v2.0.0 avec protocole Script (requête Get/JSONP ne nécessitant pas de déclaration de proxyHost)
var wfs2 = maCarte.getMap().addLayer(new OpenLayers.Layer.Vector("States", {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.Script({
url : wfsUrl,
callbackKey: "callback",
callbackPrefix: "",
srsInBBOX: true,
format : new OpenLayers.Format.WFST.v2_0_0({
featureType: "arrondissement",
featureNS: featureNS
}),
params: {
service: "WFS",
version: "2.0.0",
srsName: "EPSG:4326",
request: "GetFeature",
typeNames: "sde:arrondissement",
output: "json"
},
filterToParams: function(filter, params) {
// example to demonstrate BBOX serialization
if (filter.type === OpenLayers.Filter.Spatial.BBOX) {
params.bbox = filter.value.toArray();
if (this.srsInBBOX && filter.projection) {
params.bbox.push((filter.projection instanceof OpenLayers.Projection) ?
filter.projection.getCode() : filter.projection);
}
}
return params;
},
parseFeatures: function(response, options) {
return this.format.read(response.xml);
}
})
}));
...
9 L a y e r s m a n a g e r
41
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
9 Layers manager
.......................................................................................................................................
9.1 Gestionnaire des couches
9.1.1 API Web 2D en Javascript
9.1.1.1 Paramétrage des couches et affichage
A la création d'une couche, il y a de nombreuses options. Certaines d'entre elle influencent
directement l'affichage dans l'interface du gestionnaire de couches :
• si l'une ou l'autre des options opacity ou view sont utilisées pour une couche, le gestionnaire de la
couche affiche (1). Cette barre permet d'afficher/masquer son contenu :
• (2) supporte l'option opacity quant elle est définie (entre 0.0 et 1.0, plus le nombre est
proche de 1.0, plus la couche est opaque) : la réglette permet de modifier la transparence de
la couche ;
• (3) supporte l'option view.drop quant elle est à true : un clic sur la poubelle retire
définitivement la couche du gestionnaire ;
• (4) supporte l'option view.zoomToExtent quant elle est à true : un clic sur l'icône effectue un
zoom arrière sur l'emprise totale de la couche.
• le nom de la couche (a) est systématiquement affiché, sauf si cette couche est marquée comme
baseLayer (auquel cas, elle n'apparaît jamais dans le gestionnaire de couches pour l'API du
Géoportail). Un clic sur le nom de la couche (a) ouvre une nouvelle fenêtre qui informe avec le
texte associé à l'option description et, éventuellement donne accès à au plus deux liens :
• sur une page web pour télécharger les données quant l'option dataURL contient cet URL ;
• sur une page web pour afficher les métadonnées quant l'option metadataURL contient cet
URL.
• l'activation de la couche (b) est liée à l'option visibility, mais pas seulement ! Il y a 4 cas d'état
d'activation de la couche :
• la couche n'est ni activée, ni visible à l'échelle courante :
• la couche n'est pas activée, mais potentiellement visible à l'échelle courante :
9 L a y e r s m a n a g e r
42
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
• la couche est activée et visible à l'échelle courante :
• la couche est activée, mais plus visible à l'échelle courante :
• changer l'ordre d'affichage de la couche est possible via (c). L'ordre des couches est l'inverse de
leur ordre d'insertion dans la carte (on empile les couches les uns sur les autres).
9.1.1.2 Changements dans la version 1.2 de l'API
Le gestionnaire d'options est maintenant différemment affiché :
lors d'un clic sur la roue crantée, le gestionnaire montre les options habituelles :
1 0 L a y e r s a c c e s s
43
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
10 Layers access
.......................................................................................................................................
10.1 Accès à des données non hébergées sur le serveur exposant l'API
10.1.1 API Web 2D en Javascript
10.1.1.1 Avant-propos
Ce chapitre étant plutôt technique, il convient de vérifier comment votre application accède aux
données, deux cas sont possibles :
• votre application et les données résident sur le même site : aucun problème, il suffit d'entrer le
chemin d'accès aux données. Par exemple : l'url de votre site est ' http://votre.site.web/
votreAppli.html', un fichier KML est situé dans ' http://votre.site.web/kml/
maCouche.kml', il suffit de créer une couche dont l'url est ' ./kml/maCouche.kml'.
• votre application et les données ne résident pas sur le même site : le proxy est obligatoire (et la
lecture de cette page aussi). Pour charger les données, OpenLayers (et donc l'API) utilise Ajax.
Les principes de sécurité font qu'il est interdit de lire des données sur un autre site que le site
ayant envoyé la page web. Pour effectuer cette lecture, il faut donc un service que votre site
web va mandater pour aller chercher les données : c'est le proxy (c'est une sorte de passe-plats).
Ce dernier est obligatoirement sur votre site. Par exemple : l'url de votre proxy sera ' http://
votre.site.web/proxy/monProxy.asp' (ou .php, ...). Il faut alors renseigner ce proxy dans
l'API :
maCarte.setProxyUrl('http://votre.site.web/proxy/monProxy.asp');
Où trouver un proxy? par exemple là. Vous pouvez aussi recopier le code mis en exemple dans
cette page.
10.1.1.2 Introduction
Pour charger une couche distante, un service mandataire (proxy) est obligatoire pour récupérer
les données pour le client. De manière générale, toutes données nécessitant d'être traitées par la
bibliothèque Javascript côté client a besoin de cette fonctionnalité. Ainsi les couches de type WFS,
KML, GPX, OpenLS, ... (c'est-à-dire toutes les réponses XML de services distants) sont gouvernées
par cette "proxyfication". OpenLayers ajoute à l'URL du service mandataire l'URL des données à
récupérer. Les exemples donnés ci-après utilisent la méthode GET avec le paramètre url pour passer
l'URL cible au service mandataire.
10.1.1.3 Pourquoi mettre en oeuvre un service mandataire ?
OpenLayers au travers d'AJAX effectue des requêtes contre divers services. Pour des raisons
de sécurité, il n'est pas possible d'effectuer de telles requêtes vers des serveurs se situant sur des
domaines DNS (FQDN) différents du domaine du serveur. Il n'est donc théoriquement pas possible
d'aller chercher des données WFS, KML, GPX sur un serveur externe du point de vue du client.
Cette restriction peut être contournée via l'utilisation d'un service mandataire hébergé sur le serveur de
l'API (celui hébergeant son site). Le principe est d'envoyer la requête AJAX non pas vers le serveur
cible, mais vers le serveur hébergeant le proxy. Celui-ci récupère la requête vers le service API et
l'envoie à son tour au service cible, sans utiliser la technologie AJAX, puis retourne le résultat vers le
client OpenLayers.
L'API Géoportail fonctionne sur ce principe. La classe Geoportal.Map propose une méthode
setProxyUrl() qui prend en argument l’URL du proxy à utiliser. Pour pouvoir utiliser des couches
1 0 L a y e r s a c c e s s
44
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
non situées sur le serveur API, il est donc nécessaire qu’un proxy soit disponible sur ce serveur et que
son URL soit transmise via l’utilisation de instance.setProxyUrl().
10.Utilisation du proxy JSP intégré au projet
L'API Géoportail proposait un proxy JSP et maintenant utilise une servlet xmlProxy. Si vous
disposez d’un moteur de servlets, vous pouvez copier ce proxy en local et l’utiliser.
1 0 L a y e r s a c c e s s
45
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
<%
if("GET".equals(request.getMethod())){
//execute the GET
String serverUrl= org.apache.commons.httpclient.util.URIUtil.decode(request.getParameter("url"));
java.net.URL url= new java.net.URL(serverUrl);
if (!"http".equals(url.getProtocol())) {
throw new javax.servlet.ServletException(
"only use HTTP Url's, please don't hack this server!");
}
java.io.InputStream in= url.openStream();
response.setContentType("text/xml");
byte[] buff= new byte[1024];
int count;
java.io.OutputStream o= response.getOutputStream();
while ((count= in.read(buff)) > -1) {
o.write(buff, 0, count);
}
o.flush();
o.close();
}else{
//execute the POST
try {
// Transfer bytes from in to out
java.io.PrintWriter o= response.getWriter();
java.io.InputStream in= request.getInputStream();
String serverUrl= org.apache.commons.httpclient.util.URIUtil.decode(request.getParameter("url"));
org.apache.commons.httpclient.HttpClient client= new org.apache.commons.httpclient.HttpClient();
org.apache.commons.httpclient.methods.PostMethod httppost=
new org.apache.commons.httpclient.methods.PostMethod(serverUrl);
String referrer= request.getHeader("referer");
if (referrer!=null) {
org.apache.commons.httpclient.Header h= new org.apache.commons.httpclient.Header("referer", referrer);
httppost.setRequestHeader("referer", referrer);
}
String ct= request.getHeader("Content-Type");
if (ct==null) {
ct= "application/xml";
}
httppost.setRequestHeader("Content-Type", ct);
httppost.setRequestEntity(new org.apache.commons.httpclient.methods.InputStreamRequestEntity(in));
String proxyHost = System.getProperty("http.proxyHost");
String proxyPort = System.getProperty("http.proxyPort");
client.getHostConfiguration().setProxy(proxyHost,Integer.parseInt(proxyPort));
client.executeMethod(httppost);
int code= httppost.getStatusCode();
if ((code >= org.apache.commons.httpclient.HttpStatus.SC_OK &&
code < org.apache.commons.httpclient.HttpStatus.SC_MULTIPLE_CHOICES)) {
response.setContentType("text/xml");
String responseBody= httppost.getResponseBodyAsString();
response.setContentLength(responseBody.length());
o.print( responseBody );
} else {
throw new javax.servlet.ServletException("Unexpected failure: " + httppost.getStatusLine().toString());
}
httppost.releaseConnection();
o.flush();
o.close();
} catch (java.io.IOException e) {
throw new javax.servlet.ServletException(e);
}
}
%>
1 0 L a y e r s a c c e s s
46
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
Par ailleurs, la JVM du moteur de servlets utilisé (Tomcat ou autre) peut être paramétrée pour utiliser
le proxy Internet de l'entreprise. Pour cela, il faut la lancer avec les options :
-Dhttp.proxyHost=<adresse_du_proxy> -Dhttp.proxyPort=<port_du_proxy>.
Pour la version de Tomcat incluse dans Eclipse, ces options sont à ajouter dans Window/Preferences/,
rubrique Tomcat, Paramétrages de la JVM, Ajouter aux paramètres de la JVM.
10.Utilisation d'un proxy PHP
L'utilisation d'un proxy PHP est possible pour les webmaisters qui ne disposent pas de moteur de
servlets. Le code suivant est un exemple de proxy PHP :
1 0 L a y e r s a c c e s s
47
©2 0 1 2, I n s t i t u t N a t i o n a l d e l'I n f o r m a t i o n G éo g r a p h i q u e e t F o r e s t i èr e - F r a n c e • A L L R I G H T S
R E S E R V E D.
<?php
// proxy http
// auteur: Marc Gauthier
// 02/09/2009
// les erreurs dans les log du serveur
// http://www.papygeek.com/download/53/
// Transfer-Encoding: chunked
//
// Didier Richard - IGN - dérivation pour publication
// (c) IGN 2010
// License : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
// ----------------------------------------------------------
// global variables :
$debug= 0;
$debug_html= 0;
$sUrl= '';
$sReponse= '';
// via un proxy d'entreprise/IP
$proxy_host= '';
$proxy_port= 80;
$content_types= array(
'application/vnd.google-earth.kml+xml',
'application/vnd.google-earth.kml',
//'application/vnd.google-earth.kmz', # TODO needs to unzip response ...
'application/vnd.ogc.se_xml',
'application/vnd.ogc.wms_xml',
'application/vnd.ogc.wfs_xml',