Académique Documents
Professionnel Documents
Culture Documents
Leaflet / OpenLayers)
L’extension ‘qgis2web’ a de nombreuses limitations et ne peut pas faire tout ce que ces
deux puissantes bibliothèques peuvent faire mais c’est un excellent point de départ dans
un processus de cartographie en ligne de base à partir duquel vous pourrez personnaliser
davantage.
• l'écriture d'une page HTML simple avec Leaflet pour afficher des cartes avec fond
de plan au choix
• (et pour les rapides) utiliser Leaflet et/ou OpenLayers pour accéder à d'autres
sources de données (exemple WMS IGN)
Des exemples des pages sont sur le site du stage (cafesig.ulb.ac.be) : Programmation ►
Langages de programmation & Onglet : HTML-CSS/Java Script/PHP - pour les pages
Web dynamiques, dans la sous-section : Pages HTML exemple
Ainsi vous pouvez sauvegarder ces pages exemples sur votre ordinateur et les ouvrir
dans un éditeur de texte pour modifier certains éléments (retirer une couche, retirer des
contrôles, ajouter un autre contrôle, changer la zone affichée, ajouter une autre couche
WMS d'un autre serveur, etc). Pour voir l’effet, il suffit de recharger la carte dans un
navigateur.
Note !
• Pour voir le contenu html d’une page : Ctrl-U ou via le menu (Développement→
Code source de la page) ou encore via un clic droit (en dehors de la carte)
• Pour éditer un fichier .html, il faut faire un clique-droit sur le fichier -> Ouvrir avec
une autre application et choisir Editeur de texte.
1. Créer une page web utilisant l'extension ' Qgis2web'
• Quand vous avez fait un choix de couches et de symbologie, utilisez le plugin pour
choisir les paramètres et l’apparence désirée (appuyer sur le bouton d’aperçu de
mise à jour) et exporter le tout (après avoir sélectionner un dossier de votre choix).
Les exemples ci-dessous sont en Leaflet version 1.2 et en OpenLayers version 2. Les
liens vers les versions les plus récentes de la librairie Leaflet sont disponibles sur
http://leafletjs.com/examples/quick-start/
& pour OpenLayers sur http://openlayers.org/en/latest/doc/quickstart.html
integrity="sha512-lInM/apFSqyy1o6s89K4iQUKg6ppXEgsVxT35HbzUupEVRh2
Eu9Wdl4tHj7dZO0s1uvplcYGmt3498TtHq+log=="
crossorigin=""></script>
<style>#mapid { height: 800px; }</style>
</head>
<body>
<div id="mapid"></div>
<script>
var mymap = L.map('mapid').setView([50.847, 4.350],
13);
var OpenStreetMap_Mapnik =
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{
maxZoom: 19,
attribution: '© <a
href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
});
OpenStreetMap_Mapnik.addTo(mymap);
marker1.bindPopup("Campus du Solbosch").openPopup();
marker2.bindPopup("Campus de la Plaine");
marker3.bindPopup("Campus Erasme");
var popup = L.popup()
.setLatLng([50.847, 4.350])
.setContent("Bienvenue sur ma carte.")
.openOn(mymap);
</head>
<body>
</body>
</html>
Par défaut, l’élément n’a pas de hauteur, il faut donc lui en fixer une en ajoutant une
instruction de style dans l’en-tête :
<style>
#mapid { height: 700px; }
</style>
Fond de carte
Choisir un fond de carte parmi ceux proposés sur le Web pour Leaflet. La page suivante
en offre une sélection et permet de les tester avant de les intégrer :
http://leaflet-extras.github.io/leaflet-providers/preview/
Lorsque le choix est fait, copier le morceau de code fourni dans la partie script de la page
web afin de créer un élément avec le fond de carte :
var OpenStreetMap_Mapnik = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{
maxZoom: 19, attribution: '© <a
href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
});
Puis, ajouter cet élément ‘fond de carte’ à la carte créée grâce à l’instruction
addTo(mymap) :
OpenStreetMap_Mapnik.addTo(mymap);
Voici un exemple utilisant le serveur WMS de l'IGN : Pages HTML exemple ->
OpenLayers WMS
<html><body>
<div id="Demo_WMS_IGN"></div>
<script
src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script>
map = new OpenLayers.Map("Demo_WMS_IGN", {maxExtent: new
OpenLayers.Bounds(150000,165000,154000,170000), units: 'meters',
projection:
"EPSG:31370"});
var topo10 = new OpenLayers.Layer.WMS( "IGN Topo 1:10.000",
"http://www.ngi.be/testbed/wms/top10r_l72_fr", {layers:
'0'} );
var topo50 = new OpenLayers.Layer.WMS( "IGN Topo 1:50.000",
"http://www.ngi.be/testbed/wms/top50r_l72_fr", {layers:
'0'} );
var topo100 = new OpenLayers.Layer.WMS( "IGN Topo 1:100.000",
"http://www.ngi.be/testbed/wms/top100r_l72_fr", {layers: '0'}
);
map.addLayers([topo10, topo50, topo100]);
var lonLat = new OpenLayers.LonLat(151131,166852);
map.setCenter(lonLat, 2);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.PanZoomBar());
</script>
</body></html>
<html><body>
Indique que ce qui suit est du HTML et que le corps de la page commence
(</body></html> indique la fin de ces instructions)
<div id="Demo_WMS_IGN"></div>
Création d'un élément qui contiendra la carte et qui s'appelle (arbitrairement)
«Demo_WMS_IGN»
<script
src="http://www.openlayers.org/api/OpenLayers.js"></script>
L'information pour le navigateur sur la localisation du code source de la bibliothèque
OpenLayers utilisée. Ce code source contient les fonctions utilisées dans le reste du code.
<script>
Marque le début de notre script JavaScript, donc de notre «programme» de composition
de carte.
map = new OpenLayers.Map("Demo_WMS_IGN", {maxExtent: new
OpenLayers.Bounds(150000,165000,154000,170000), units: 'meters',
projection:
"EPSG:31370"});
Crée une nouvelle carte OpenLayers avec comme paramètre le nom de l'élément div dans
lequel il faut l'insérer («Demo_WMS_IGN») ainsi que l'information de projection et
d'extension de la zone couverte par la carte (nécessaire pour avoir le paramètre bbox que
vous connaissez déjà). Ici la carte
est directement définie dans le système de projection Lambert belge 1972 (code 31370) et
avec une extension maximale. On ne peut donc pas zoomer au-delà de cette extension.
var topo10 = new OpenLayers.Layer.WMS( "IGN Topo 1:10.000",
"http://www.ngi.be/testbed/wms/top10r_l72_fr", {layers: '0'} );
var topo50 = new OpenLayers.Layer.WMS( "IGN Topo 1:50.000",
"http://www.ngi.be/testbed/wms/top50r_l72_fr", {layers: '0'} );
var topo100 = new OpenLayers.Layer.WMS( "IGN Topo 1:100.000",
"http://www.ngi.be/testbed/wms/top100r_l72_fr", {layers: '0'} );
Création de trois couches en appelant le serveur WMS de l'IGN. Les paramètres sont un
nom arbitraire («IGN Topo 1:10.000»), l'adresse du serveur et la ou les couche(s) que l'on
souhaite afficher. Une adresse de serveur peut contenir plusieurs couches, mais le
serveur de l'IGN ne proposait jusque 2015 qu'une couche (layer = 0) par adresse.
L'information concernant chaque couche est assignée à une variable (topo10, topo50,
topo100).
map.addLayers([topo10, topo50, topo100]);
Ajout des trois couches (représentées par leur variable respective) à la carte.
var lonLat = new OpenLayers.LonLat(151131,166852);
Crée une nouvelle variable lonLat et lui donne les coordonnées d'un point défini en
Lambert belge 1972.
map.setCenter(lonLat, 2);
Centre la carte sur les coordonnés contenues dans la variable lonLat et met le niveau de
zoom à 2.
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.PanZoomBar());
Ajout de trois contrôles sur la page: un outil pour changer l'affichage entre les trois
couches, un outil pour afficher la position de la souris en bas à droite, et une barre de
zoom. Voir http://dev.openlayers.org/releases/OpenLayers2.11/doc/apidocs/files/
OpenLayers-js.html pour une liste de contrôles disponibles (cliquer sur Controls ) droite
<script>
Marque la fin notre script JavaScript, donc de notre «programme» de composition de
carte.
<html><body>
<div id="demoMap"></div>
<script
src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script
src="http://openstreetmap.org/openlayers/OpenStreetMap.js"></scrip
t>
<script>
var lonLat = new
OpenLayers.LonLat(4.39790,50.82010).transform(new
OpenLayers.Projection("EPSG:4326"), new
OpenLayers.Projection("EPSG:900913"));
map = new OpenLayers.Map("demoMap");
map.addLayer(new OpenLayers.Layer.OSM());
map.setCenter(lonLat, 18);
markers.addMarker(new OpenLayers.Marker(lonLat));
</script>
</body></html>
map.addLayer(new OpenLayers.Layer.OSM());
Ajoute à la carte une nouvelle couche OpenStreetMap (OSM).
map.setCenter(lonLat, 18);
Centre la carte sur les coordonnés contenues dans la variable lonLat et met le niveau de
zoom à 18.
Si vous voulez remplacer cette coordonnée par une autre définie, par exemple, par une
adresse, vous pouvez faire ce que l'on appelle un géocodage de cette adresse. Une
manière de le faire est via l'API Google (voir ci-dessous), soit en formulant soi-même
l'interrogration par URL, soit en passant par des sites proposant ce genre de service,
comme par exemple http://batchgeo.com/fr/
(en cherchant «batch geocoding» dans Google, on peut en trouver d'autres).
La logique est assez similaire à l'exemple précédent. Voici quelques différences notables:
var gsat = new OpenLayers.Layer.Google( "Google Satellite",
{type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}
);
Création d'une variable « gsat» définissant une nouvelle couche de type Google, ici de
type SATELLITE.
L'API Google Maps est aussi derrière une bonne partie des sites de géocodage en ligne. Il
est d'ailleurs possible de faire du géocodage à la volée en Javascript (donc en entrant
une adresse dans votre script au lieu d'une coordonnée). Pour plus d'information,
consultez la documentation et la multitude de didacticiels en ligne.
N.B. En fait, nous avons déjà fait appel à cet API dans la version OpenLayers avec Google
puisque OpenLayers doit utiliser quelques fonctions de Google pour pouvoir accéder aux
cartes de cet opérateur:
<script src="http://maps.google.com/maps/api/js?v=3.2&sensor=false"></script>