Skip to content

MapLibre

Álvaro Ramírez edited this page Nov 21, 2024 · 4 revisions

MapLibre permite cargar estilos de un servicio Mapbox Vector Tile, utilizando archivos de extensión .json.

La fuente de datos tiene que seguir una estructura determina, estructura del documento de estilo.

{
    "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
            }
        }
    ]
}

1.- En el constructor del mapa:

// En modo cadena 
const mapLibre_string = "MapLibre*LEGEND_NAME*https://demotiles.maplibre.org/style.json*NAME_TEST*false*false*true*false*false*W3siaWQiOiJjb2FzdGxpbmUiLCJwYWludCI6W3sicHJvcGVydHkiOiJsaW5lLWNvbG9yIiwidmFsdWUiOiIjMDAwIn0seyJwcm9wZXJ0eSI6ImxpbmUtd2lkdGgiLCJ2YWx1ZSI6N31dfSx7ImlkIjoiY291bnRyaWVzLWxhYmVsIiwicGFpbnQiOlt7InByb3BlcnR5IjoidGV4dC1jb2xvciIsInZhbHVlIjoicmVkIn1dfV0="

const map = M.map({
  container: 'map',
  bbox: [268339.6976254622, 5219913.662610877, 347031.6182450511, 5241774.652700437],
  layers: ["OSM", mapLibre_string],
  projection: 'EPSG:3857*m',
});

// Instanciando la capa
const map2 = M.map({
  container: 'map',
  bbox: [268339.6976254622, 5219913.662610877, 347031.6182450511, 5241774.652700437],
  layers: [ 'OSM', 
    new M.layer.MapLibre({
      url: 'https://vt-mapabase.idee.es/files/styles/mapaBase_scn_color1_CNIG.json',
      name: 'Mapa Libre',
      legend: 'Mapa Libre'
  })
],
  projection: 'EPSG:3857*m',
});

2.- Mediante los métodos addMapLibre/addLayers:

// Instanciamos el mapa
const map = M.map({
  bbox: [268339.6976254622, 5219913.662610877, 347031.6182450511, 5241774.652700437],
  container: 'map',
  projection: 'EPSG:3857*m',
});


const layer = new M.layer.MapLibre({
  name: 'Mapa Libre DEMO',
  extract: true,
  url: 'https://demotiles.maplibre.org/style.json',
  legend: 'Mapa Libre DEMO Legend',
});

// La añadimos al mapa
map.addLayers(layer);
// También puede usarse map.addMapLibre(layer);
// En caso de que tuvieramos layer1, layer2 podríamos hacer
// map.addLayers([layer1, layer2]) o map.addMapLibre([layer1, layer2])

Parámetros:

  • name: nombre de la capa.
  • url: url del servicio.
  • legend: Nombre asociado en el árbol de contenidos, si usamos uno.
  • transparent: 'false' si es una capa base, 'true' en caso contrario.
  • isBase: 'true' si es una capa base, 'false' en caso contrario.
  • attribution: Atribución de la capa.
    • name. Nombre de la atribución
    • description. Descripción de la atribución.
    • url. URL de la atribución.
    • contentAttributions. Atribuciones por objetos geográficos, por defecto vacío.
    • contentType. Tipo de url de “contentAttributions” (KML o GeoJSON).
  • visibility: 'true' si la capa es visible, 'false' si queremos que no lo sea. En este caso la capa sería detectado por los plugins de tablas de contenidos y aparecería como no visible.
  • maxExtent: Restringe la visibilidad de la capa a una extensión.
  • projection: Proyección de fuente.
  • displayInLayerSwitcher: Indica si la capa se muestra en el selector de capas.
  • extract: opcional, activa la consulta por click en el objeto geográfico, por defecto falso.
  • maplibrestyle: Style JSON sin utilizar url.
  maplibrestyle: {
    version: 8,
    sources: {
      osm: {
        type: 'raster',
        tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'],
        tileSize: 256,
        attribution: '© OpenStreetMap Contributors',
        maxzoom: 19,
      },
    },
    layers: [
      {
        id: 'osm',
        type: 'raster',
        source: 'osm',
      },
    ],
  },
  • options: Estas opciones se mandarán a la implementación de la capa.

    • minZoom: Zoom mínimo aplicable a la capa.
    • maxZoom: Zoom máximo aplicable a la capa.
    • minScale: Escala mínima.
    • maxScale: Escala máxima.
    • minResolution: Resolución mínima.
    • maxResolution: Resolución máxima.
    • opacity: Opacidad de capa, por defecto 1.
    • disableBackgroundColor: Oculta el fondo de la capa.
      • valor false, color gris de fondo.
      • valor true, se aplica transparencia.
      • valor undefined, color original (definido en el json).
  • vendorOptions: Opciones para la biblioteca base (el código se envía directamente a la librería base para ejecutar la funcionalidad).

setPaintProperty y setLayoutProperty

Métodos creados para modificar los valores del json.

  • setPaintProperty: Modifica los estilos de la capa.
maplibre.setPaintProperty('coastline', 'line-color', '#000');
maplibre.setPaintProperty('coastline', 'line-width', 7);
maplibre.setPaintProperty('countries-label', 'text-color', 'red');
  • setLayoutProperty: Modifica las propiedades visuales de la capa.
maplibre.setLayoutProperty('fondo', 'visibility', 'visible');

No estará disponible el método .setStyle, en su lugar setMapLibreStyleFromId.

// Cambiar el json
 maplibre_001.maplibrestyle = 'https://demotiles.maplibre.org/style.json';

// Modificar estilos del json
const styles = [{
  id: 'coastline',
  paint: [{
    property: 'line-color', value: '#000',
  }, {
    property: 'line-width', value: 7,
  }],
}, {
  id: 'countries-label',
  paint: [{
    property: 'text-color', value: 'red',
  }],
}];
maplibre.setMapLibreStyleFromId(styles);

// Método get, parámetros: id || [id, id].
maplibre.getMapLibreStyleFromId('coastline')

Ejemplo:

const maplibre = new M.layers.MapLibre({
  name: 'Mapa Libre',
  extract: true,
  // visibility: true,
  // maxExtent: [-1259872.4694101033, 4359275.566199489, -85799.71494979598, 4620384.454821652],
  url: 'https://vt-mapabase.idee.es/files/styles/mapaBase_scn_color1_CNIG.json',
  /*
maplibrestyle: {
    version: 8,
    sources: {
      osm: {
        type: 'raster',
        tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'],
        tileSize: 256,
        attribution: '© OpenStreetMap Contributors',
        maxzoom: 19,
      },
    },
    layers: [
      {
        id: 'osm',
        type: 'raster',
        source: 'osm',
      },
    ],
  },
  */
  legend: 'Mapa Libre',
}, {
  // opacity: 0.5,
  // minZoom: 5,
  // maxZoom: 7,
  // minScale: 2000000,
  // maxScale: 7000000,
  // minResolution: 705.5551745557614,
  // maxResolution: 2469.443110945165,
  // disableBackgroundColor: false, // Color Gris
  // disableBackgroundColor: true, // Aplicada Transparencia
  // disableBackgroundColor: undefined, // Color Original
});

1.INICIO
   1.1. Componentes de la API-CNIG
   1.2. Documentación y Puntos de acceso
   1.3. Primeros pasos
   1.4. Diagrama API CNIG

2. MAPA
2.1. Capas

 ■ 2.1.1. Fuentes
   • 2.1.1.1. Capas vectoriales
     + Vector
     + WFS
     + GeoJSON
     + KML
     + MVT
     + OGCAPIFeatures
     + MBTilesVector
     + GenericVector
     + MapLibre
   • 2.1.1.2. Capas ráster
     + WMS
     + WMTS
     + TMS
     + XYZ
     + OSM
     + MBTiles
     + GenericRaster
     + GeoTIFF
   • 2.1.1.3. Capas rápidas
   • 2.1.1.4. Grupo de capas

 ■ 2.1.2. Simbolización
   • 2.1.2.1. Genérica
     + Puntos
     + Líneas
     + Polígonos
   • 2.1.2.2. Básica
     + Puntos
     + Líneas
     + Polígonos
   • 2.1.2.3. Avanzada
     + Coropletas
     + Proporcional
     + Categorías
     + Estadísticos
     + Mapas de Calor
     + Cluster
     + Línea de flujo
     + Composición

 ■ 2.1.3. Filtros

2.3.-Plugins

  > Creación de plugin en cliente

  » Tutorial de creación de un plugin

2.4. Paneles

  » Creación de panel desde cero sin controles

  » Tutorial Panel de un único control

  » Tutorial Panel de un único control con más de un botón

  » Tutorial Panel con más de un control

2.5. Eventos

  » Gestión de eventos
  » Gestión de eventos en controles personalizados

    2.6. Internacionalización

    2.7. Configuración

    2.8. Acceso librerías base

3. UTILIDADES

4. PROXY

5. API REST
 5.1. Parametrización API-REST
 5.2. Base de Datos API-REST
 5.3. API REST Actions
 5.4. Servicio de correos electrónicos
 5.5. Capas rápidas

6. PARAMETRIZACIÓN VISUALIZADORES

7. SOLUCIÓN DE PROBLEMAS

8. PROCESO DE VERSIONADO

9. GUÍA DE DESARROLLO
  > Guía para el desarrollo de API-CNIG
  » Tutorial desarrollo del núcleo de API-CNIG - (Cliente)
  > Guía de desarrollo de componentes
  » Tutorial desarrollo del núcleo de API-CNIG - (Servidor)
  > Guía de desarrollo de plugins
  » Tutorial desarrollo de plugins ya creados
  » Tutorial desarrollo de nuevos plugins
  > Guía de desarrollo de visualizadores con React

  > Compilación proyecto API-CNIG

Clone this wiki locally