Siguiendo el anterior post “Creación de mapas base para visores webmapping con QGIS (parte I)” en el que creamos nuestras propias teselas basadas en un raster utilizando el plugin QTiles de QGIS.
En esta entrada vamos a continuar el proceso y explicaremos cómo utilizar estas teselas para utilizarlas como mapa base personalizados en OpenLayers y Leaflet, las librerías web mapping de referencia.
Podemos utilizar las teselas raster en cualquier librería que soporte un esquema de teselas XYZ y superponer posteriormente otras capas vectoriales sobre ellas.
Para demostrar la usabilidad y portabilidad de estas teselas, añadiremos las teselas creadas en el anterior post como un mapa base personalizado tanto en OpenLayers como en Leaflet.
Añadiendo las teselas raster en OpenLayers
En este caso es necesario hacer uso de la clase ol.layer.Tile y como fuente de datos ol.source.XYZ.
ol.source.XYZ es la fuente de capa para datos teselados con URL en un formato XYZ que se definen en una plantilla de URL.
De forma predeterminada, esto sigue una malla de Google ámpliamente utilizada donde x 0 e y 0 están en la parte superior izquierda.
Podemos subir las teselas a un servidor e incluir como dirección URL la del servidor. Ejemplo utilizando las teselas de Thunderforest:
new ol.layer.Tile({ source: new ol.source.XYZ({ url: 'https://{a-c}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png' + '?apikey=Your API key from http://www.thunderforest.com/docs/apikeys/ here' }) })
Pero como tenemos guardadas las teselas en el equipo, la URL será el directorio local:
new ol.layer.Tile({ 'title': 'Natural Earth', 'type': 'base', source: new ol.source.XYZ({ url: 'C://Temp/QTiles/HYP_50M_SR_W/{z}/{x}/{y}.png', attributions: [new ol.Attribution({html: 'Made with Natural Earth and QTiles'})] }) });
El código completo:
<!doctype html> <html lang="en"> <head> <script src="http://openlayers.org/en/v4.0.1/build/ol.js" type="text/javascript"></script> <link rel="stylesheet" href="http://openlayers.org/en/v4.0.1/css/ol.css"> <style> .map { width: 100%; height: 500px; } </style> </head> <body> <h2>Teselas raster en OpenLayers</h2> <div id="map"></div> <script type="text/javascript"> var tiles = new ol.layer.Tile({ 'title': 'Natural Earth', 'type': 'base', source: new ol.source.XYZ({ url: 'C://Temp/QTiles/HYP_50M_SR_W/{z}/{x}/{y}.png', attributions: [new ol.Attribution({html: 'Made with Natural Earth and QTiles'})] }) }); var map = new ol.Map({ target: 'map', renderer: 'canvas', layers: [tiles], view: new ol.View({ center: [0,0], zoom: 3 }) }); </script> </body> </html>
Añadiendo las teselas raster en Leaflet
En Leaflet casi siempre todo es más sencillo. En este caso concreto lo es porque para añadir las capas teselas prescindimos del uso de una clase para la fuente de datos, basta simplemente con el uso de la clase L.TileLayer.
Su sintaxis es:
L.tileLayer( <String> urlTemplate, <TileLayer options> options? )
La urlTemplate es una cadena de texto con el formato:
http://{s}.mapdomain.org/{z}/{x}/{y}.png,
La {s} permitirá a uno de los subdominios del dominio principal que sea utilizado. Estos se utilizan normalmente en secuencia para cargar el mapa más rápido al permitir múltiples solicitudes paralelas.
La {z} declara el nivel de zoom y el {x} y {y} definen las coordenadas de las teselas.
Ejemplo utilizando las teselas de OpenStreetMap:
var oms = new L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png');
Ejemplo utilizando nuestras propias teselas:
var tiles = L.tileLayer('file:///C://Temp/QTiles/HYP_50M_SR_W/{z}/{x}/{y}.png', { maxZoom: 5, tms: false, attribution: 'Made with Natural Earth and QTiles' });
Código completo:
<!DOCTYPE html> <html> <meta charset="utf-8" /> <head> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.0/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet@1.0.0/dist/leaflet.js"></script> <style> #map { width: 100%; height: 600px; box-shadow: 5px 5px 5px #888; } </style> </head> <body> <div id="map"></div> <script> var tiles = L.tileLayer('file:///C://Temp/QTiles/HYP_50M_SR_W/{z}/{x}/{y}.png', { maxZoom: 5, tms: false, attribution: 'Made with Natural Earth and QTiles' }); var map = L.map('map', { center: [41.66, -4.72], zoom: 4, layers: [tiles] }); </script> </body> </html>
Licenciado en Geografía. Máster en Sistemas de Información Geográfica. Consultor GIS desde el año 2004. En MappingGIS desde el año 2012 para ayudarte a impulsar tu perfil GIS y diferenciarte de la competencia. Echa un vistazo a todos nuestros cursos de SIG online.