Introducción
En este artículo, exploraremos cómo extender OpenLayers con la biblioteca ol-maplibre-layer para cargar estilos de un servicio MVT (Mapbox Vector Tile), utilizando archivos de extensión .json.
La librería ol-maplibre-layer permite cargar un mapa de MapLibre GL como una capa de OpenLayers.
Maplibre GL JS es una biblioteca JavaScript de código abierto para el renderizado de mapas vectoriales. Surgió como una bifurcación de Mapbox GL JS después de que Mapbox cambió la licencia de su biblioteca.
🌐 Openlayers
🌐 ol-maplibre-layer
🌐 MapLibre GL
Entorno de Desarrollo
- Creación de un proyecto en vitejs
npm create vite@latest
.
✔ Select a framework: › Vanilla
✔ Select a variant: › JavaScript
-
Eliminación del archivo counter tras comprobar que el entorno funciona correctamente (
npm run dev
). -
Instalar las bibliotecas necesarias
npm i @geoblocks/ol-maplibre-layer ol maplibre-gl
. -
Creación del mapa de openlayers.
- Sustituir el código del archivo style.css.
html,
body,
.map {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
-
Crear
<div class="map" id="map"></div>
en el archivo index.html -
Creación de un mapa básico.
import 'ol/ol.css';
import './style.css';
import Map from 'ol/Map.js';
import View from 'ol/View.js';
const map = new Map({
target: 'map',
layers: [],
view: new View({
center: [924582, 5950164],
zoom: 8,
}),
})
Creación de la capa mapLibre
Esta capa corresponde al mapa de MapLibre GL que se cargará como una capa de OpenLayers.
import {MapLibreLayer} from '@geoblocks/ol-maplibre-layer';
layers: [
new MapLibreLayer({
mapLibreOptions: {
style:
'https://vectortiles.geo.admin.ch/styles/ch.swisstopo.leichte-basiskarte_world.vt/style.json',
},
}),
],
Fuente de datos (.json)
📘 Doc MapLibre GL Archivo JSON
Ejemplo de JSON que acepta la propiedad style de MapLibre.
{
"version": 8,
"sources": {
"my-source": {
"type": "vector",
"tiles": [
"https://example.com/tiles/{z}/{x}/{y}.pbf"
]
}
},
"layers": [
{
"id": "water",
"type": "fill",
"source": "my-source",
"source-layer": "water",
"paint": {
"fill-color": "#0000FF",
"fill-opacity": 0.3
}
},
{
"id": "buildings",
"type": "fill",
"source": "my-source",
"source-layer": "building",
"paint": {
"fill-color": "#888888",
"fill-opacity": 0.5
}
}
]
}
Métodos útiles para modificar los estilos y propiedades:.
- setPaintProperty
const layer = new MapLibreLayer(params);
layer.mapLibreMap.setLayoutProperty(layer, property, value);
- setLayoutProperty
const layer = new MapLibreLayer(params);
layer.mapLibreMap.setPaintProperty(layer, property, value);
Error al importar la librería con Webpack .mjs
Error al intentar importar la librería import { MapLibreLayer } from '@geoblocks/ol-maplibre-layer'
error por consola export 'MapLibreLayer' (imported as 'MapLibreLayer') was not found in '@geoblocks/ol-maplibre-layer' (module has no exports)
.
Añadir el siguiente código en la configuración de webpack para resolver el problema:
module: {
rules: [
{
test: /node_modules\/@geoblocks\/.*\.m?js/,
type: "javascript/auto",
},
{
test: /node_modules\/@geoblocks\/.*\.m?js/,
resolve: {
fullySpecified: false,
},
},
]