Skip to content

Composición

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

Es posible que una misma capa acepte más de un tipo de simbología a la vez. En esos casos hablamos de composiciones simbológicas, y algunos ejemplos de dichas composiciones podrían ser:

  • Una capa puntual con simbología básica definida para ella, que además está clusterizada.
  • Una capa categorizada por un atributo, con simbología proporcional en base a otro.
  • Una capa con simbología estadística de tartas, a la que se le aplica simbología proporcional para darle a cada tarta un tamaño diferente en base a un atributo del elemento.

composite

Sin embargo, no todas las combinaciones de estilos son posibles. Así por ejemplo, no tendría sentido aplicar en una misma capa una simbología por Coropleta y otra por Categorización, ya que ambas se pisarían.

Estas composiciones simbológicas están modeladas bajo la clase M.style.Composite, de la que heredan todas las simbologías sobre las que pueden añadirse simbologías adicionales:

  • M.style.Proportional
  • M.style.Choropleth
  • M.style.Category
  • M.style.Cluster

Dicha clase posee métodos específicos, heredados por tanto para los estilos anteriores, para la gestión de estilos adicionales:

Método Descripción
add(M.Style | Array<M.Style>): M.style.Composite Agrega uno o varios estilos adicionales al estilo
remove(M.Style | Array<M.Style>): M.style.Composite Elimina uno o varios estilos que estén agregados
getStyles(): Array<M.Style> Devuelve los estilos agregados a un estilo de tipo Composite

Veamos a continuación la implementación de uno de los ejemplos planteados inicialmente:

let map = M.map({
  container: "map"
});

// Capa puntual de Campamentos
var campamentos = new M.layer.WFS({
url: "http://geostematicos-sigc.juntadeandalucia.es/geoserver/sepim/ows?",
name: "campamentos",
legend: "Campamentos",
geometry: 'MPOINT'
});

map.addLayers(campamentos);

// Estilo genérico: puntos amarillos con borde rojo
let estilo_base = new M.style.Generic({
  point: {
    radius: 5,
    fill: {
      color: 'yellow',
      opacity: 0.5
    },
    stroke: {
      color: '#FF0000'
    }
  }
});

// Estilo cluster por defecto
let estilo_cluster = new M.style.Cluster();

// Cluster permite Composite, así que se le puede agregar el estilo base
let composite = estilo_cluster.add(estilo_base);

// Y asignamos a la capa la composición creada
campamentos.setStyle(composite);

Otro ejemplo, en el caso de querer usar un estilo categórico con otro base que se aplique a los valores no indicados en la definición de las categorías a representar:

let map = M.map({
  container: "map"
});

// Capa puntual de Campamentos
var campamentos = new M.layer.WFS({
  url: "http://geostematicos-sigc.juntadeandalucia.es/geoserver/tematicos/ows?",
  namespace: "tematicos",
  name: "ind_mun_simp",
  legend: "Municipios SIM",
  geometry: 'MPOLYGON'
});

map.addLayers(campamentos);

// Estilo basico: puntos amarillos con borde rojo
let estilo_base = new M.style.Generic({
  polygon: {
  fill: {
    color: '#000000',
    opacity: 0.0
  },
  stroke: {
    color: '#000000',
    opacity: 0.0
  }
}});

let verde = new M.style.Generic({polygon: {fill: {color: 'green'}}});
let amarillo = new M.style.Generic({polygon: {fill: {color: 'pink'}}});
let rojo = new M.style.Generic({polygon: {fill: {color: 'red'}}});
let azul = new M.style.Generic({polygon: {fill: {color: 'grey'}}});
let naranja = new M.style.Generic({polygon: {fill: {color: 'orange'}}});
let marron = new M.style.Generic({polygon: {fill: {color: 'brown'}}});
let magenta = new M.style.Generic({polygon: {fill: {color: '#e814d9'}}});
let morado = new M.style.Generic({polygon: {fill: {color: '#b213dd'}}});

// Creamos la simbología. El atributo "provincia" contiene el nombre
// de la provincia a la que pertenece cada feature
let categoryStyle = new M.style.Category("provincia", {
  "Almería": marron,
  "Cádiz": amarillo,
  "Córdoba": magenta,
  "Granada": verde,
  "Jaén": naranja,
  // "Málaga": azul,  -> No queremos representar Málaga en el categórico
  // "Sevilla": rojo, -> No queremos representar Sevilla en el categórico
});

// Se asocia primero el estilo transparente al categórico, lo que hará de estilo por defecto para los no seleccionados
categoryStyle.add(estilo_base);

campamentos.setStyle(categoryStyle);

Otra manera de aplicar varios estilos que permita la composición es añadir en el orden que se quieran, los estilos a la capa directamente, por ejemplo:

let map = M.map({
  container: "map"
});

// Capa puntual de Campamentos
var campamentos = new M.layer.WFS({
  url: "http://geostematicos-sigc.juntadeandalucia.es/geoserver/tematicos/ows?",
  namespace: "tematicos",
  name: "ind_mun_simp",
  legend: "Municipios SIM",
  geometry: 'MPOLYGON'
});

map.addLayers(campamentos);

// Estilo basico: puntos amarillos con borde rojo
let estilo_base = new M.style.Generic({
  polygon: {
  fill: {
    color: '#000000',
    opacity: 0.0
  },
  stroke: {
    color: '#000000',
    opacity: 0.0
  }
}});

let verde = new M.style.Generic({polygon: {fill: {color: 'green'}}});
let amarillo = new M.style.Generic({polygon: {fill: {color: 'pink'}}});
let rojo = new M.style.Generic({polygon: {fill: {color: 'red'}}});
let azul = new M.style.Generic({polygon: {fill: {color: 'grey'}}});
let naranja = new M.style.Generic({polygon: {fill: {color: 'orange'}}});
let marron = new M.style.Generic({polygon: {fill: {color: 'brown'}}});
let magenta = new M.style.Generic({polygon: {fill: {color: '#e814d9'}}});
let morado = new M.style.Generic({polygon: {fill: {color: '#b213dd'}}});

// Creamos la simbología. El atributo "provincia" contiene el nombre
// de la provincia a la que pertenece cada feature
let categoryStyle = new M.style.Category("provincia", {
  "Almería": marron,
  "Cádiz": amarillo,
  "Córdoba": magenta,
  "Granada": verde,
  "Jaén": naranja,
  // "Málaga": azul,  -> No queremos representar Málaga en el categórico
  // "Sevilla": rojo, -> No queremos representar Sevilla en el categórico
});

// Se asocia primero el estilo transparente a la capa
campamentos.setStyle(estilo_base);


// Se asocia posteriormente el categórico
campamentos.setStyle(categoryStyle);

vendorOptions

No permite vendorOptions.

Ejemplos:

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