Skip to content

Categorías

TeresaRP94 edited this page Nov 25, 2022 · 9 revisions

Un capa categorizada es una capa cuya simbología se establece asociando un estilo a cada elemento o feature en base al valor de un atributo del mismo.

Por tanto, para definir ese tipo de simbología, es necesario especificar al menos el Atributo del feature por el cual se va a realizar la categorización. Y de manera opcional, la relación de Valores/Estilos para la representación de los diferentes valores del atributo.

Así, para categorizar por ejemplo una capa poligonal de municipios de Andalucía, de modo que a cada elemento se le diera un color en función de la provincia a la que pertenece, que viene indicado en uno de sus atributos:

// Definimos los estilos de cada categoría. Como queremos diferenciar entre
// provincias, crearemos un color para cada una
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 simbologia. 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,
  "Sevilla": rojo,
  "Huelva": morado
});

layerMunicipios.setStyle(categoryStyle);

Donde M.style.Category recibe:

Parámetro Descripción
attributeName {string} - atributo que contiene el campo por el que categorizar
categoryStyles {object} - opcional - con las relaciones valor-estilo. Si no se especifica, se generarán estilos aleatorios para cada valor del atributo.

💡 Los estilos deben corresponder al tipo de geometría de la capa

Ejemplo funcional

No es necesario especificar estilo para todos los diferentes valores que pueda adoptar el atributo 'attributeName':

  • Si el valor del atributo de un feature no aparece en la lista de categoryStyles, ese feature se pintará con la simbología por defecto que tenga la capa.
  • El valor "other" en la lista de categoryStyles recogerá a todos los features cuyo atributo 'attributeName' tenga un valor que no se corresponda con ningún otro de la lista.

¿Y si quiero aplicar un estilo diferente y aleatorio a cada feature en función de un atributo, sin importarme qué estilo? Especifica únicamente el 'attributeName' en el constructor del estilo, sin indicar ningún parámetro 'categoryStyles': Estilos aleatorios.

Acceso y modificación de las propiedades del estilo

Se puede acceder a las propidades de un estilo Category ya existente, y modificar aquellos aspectos de la misma que se desee:

// La capa ya tiene el estilo asignado
let estiloCategory = capa.getStyle();

// Obtenemos las categorías existentes, y el atributo de categorización
// Podrían modificarse con los métodos 'set' equivalentes
let categorías = estiloCategory.getCategories();
let atributo = estiloCategory.getAttributeName();

// Cambiamos únicamente el estilo asociado a la categoría de "Sevilla"
estiloCategory.setStyleForCategory("Sevilla",amarillo);
Clone this wiki locally