Expresiones compuestas de MapLibre
Combinar expresiones
Mostrar estaciones inactivas o en mantenimiento en gris.
paint: {
'circle-radius': 8,
'circle-color': [
'case',
['!=',['get','status'],'active'],
'#999999',
[
'interpolate',
['linear'],
['get','pm10'],
0, '#2ecc71',
80, '#e74c3c'
]
]
}
Ejercicio práctico
Example
Modificar la expresión para que las estaciones inactive sean rojas.
Mapa bivariado (crimen violento vs propiedad)
Crear un mapa donde:
color = combinación de ambos tipos de crimen
Clasificar cada variable
Ejemplo:
violent_crimes
0–1000 → bajo
1000–3000 → medio
>3000 → alto
property_crimes
0–5000 → bajo
5000–10000 → medio
>10000 → alto
Expresión MapLibre
paint: {
'circle-radius': 10,
'circle-color': [
'case',
['all',
['>', ['get','violent_crimes'], 3000],
['>', ['get','property_crimes'], 10000]
], '#7f0000',
['all',
['>', ['get','violent_crimes'], 3000],
['<=', ['get','property_crimes'], 10000]
], '#d7301f',
['all',
['<=', ['get','violent_crimes'], 3000],
['>', ['get','property_crimes'], 10000]
], '#fc8d59',
'#fee0d2'
]
}
Ejercicio práctico
Example
Cambiar el tamaño de los círculos según el crime_rate
'circle-radius': [
'interpolate',
['linear'],
['get','crime_rate'],
400,6,
900,18
]
Estilo dependiente del zoom
map.addLayer({
id: "landuse",
type: "fill",
source: "landuse",
paint: {
"fill-color": [
"interpolate",
["linear"],
["zoom"],
5,
"#dddddd",
10,
[
"match",
["get", "class"],
"residential",
"#f2c9a1",
"industrial",
"#d1b3ff",
"commercial",
"#a1d99b",
"park",
"#74c476",
"#cccccc",
],
],
"fill-opacity": 0.7,
},
});
Ejercicio práctico
Example
Usar los datos de landuse.geojson para hacer que:
- A bajo zoom todos los usos son similares
- A nivel de zoom intermedio solo diferenciar
residentialeindustrial - A alto zoom se diferencian claramente
Ejercicio entregable
Atlas Urbano Interactivo 2pt
Diseñar un mapa interactivo en MapLibre GL JS que represente:
- Jerarquía urbana (
cities) - Estructura funcional del territorio (
landuse) - Calidad ambiental (
stations)
Requisitos
- Integrar las 3 sources:
cities,landuseystations - Contener al menos:
- 3 layers tipo
circleosymbol - 1 layer tipo
fill - 1 filtro (
filter) - 5 expresiones distintas
- 1 expresión que combine
zoom+ atributo - 1 manejo explícito de valores nulos (
coalesceocase) - 1 interpolación cuantitativa (
interpolate) - 1 clasificación nominal (
match)
- 3 layers tipo
El mapa debe organizarse en tres niveles visuales:
Base territorial (landuse)
Objetivo: representar la estructura urbana sin dominar la escena.
Requisitos:
- Color categórico por
landuse - Opacidad dependiente de
density - Simplificación visual a bajo zoom
Sistema urbano (cities)
Objetivo: jerarquizar núcleos urbanos.
Requisitos:
- Tamaño proporcional a
population - Color dependiente de
capital - Texto visible solo a partir de cierto zoom.
Calidad del aire (stations)
Objetivo: representar riesgo ambiental.
Requisitos:
- Mostrar solo estaciones activas
- Color dependiente de
pm10 - Manejo de valores nulos
- Radio dependiente de zoom
🧭 Rúbrica de evaluación — MapLibre GL JS (2 puntos)
📊 Distribución general
| Criterio | Puntuación |
|---|---|
| 1. Integración de datos (sources) | 0.3 |
| 2. Estructura de layers | 0.4 |
| 3. Uso de expresiones | 0.7 |
| 4. Diseño cartográfico por niveles | 0.5 |
| 5. Calidad técnica y coherencia | 0.1 |
| TOTAL | 2.0 |
1. Integración de datos (0.3 pt)
| Nivel | Descripción |
|---|---|
| 0.3 | Integra correctamente las 3 sources (cities, landuse, stations) y se visualizan |
| 0.2 | 3 sources con pequeños errores de configuración |
| 0.1 | Solo 2 sources funcionales |
| 0.0 | 1 o ninguna source funcional |
2. Estructura de layers (0.4 pt)
Subcriterios:
- 3 layers tipo circle o symbol
- 1 layer tipo fill
- 1 filtro (filter)
| Nivel | Descripción |
|---|---|
| 0.4 | Cumple todos los requisitos correctamente |
| 0.3 | Falta 1 elemento |
| 0.2 | Faltan 2 elementos |
| 0.1 | Implementación muy incompleta |
| 0.0 | No cumple |
3. Uso de expresiones (0.7 pt)
Subcriterios:
- ≥ 5 expresiones distintas
- Expresión combinando zoom + atributo
- Uso de coalesce o case (nulos)
- Uso de interpolate
- Uso de match
| Nivel | Descripción |
|---|---|
| 0.7 | Cumple todos los requisitos correctamente |
| 0.6 | Falta 1 tipo de expresión |
| 0.5 | Faltan 2 requisitos |
| 0.3 | Uso básico pero incompleto |
| 0.1 | Uso muy limitado o incorrecto |
| 0.0 | No usa expresiones correctamente |
4. Diseño cartográfico por niveles (0.5 pt)
4.1 Base territorial — landuse (0.15 pt)
| Nivel | Descripción |
|---|---|
| 0.15 | Color categórico por landuse + opacidad dependiente de density + simplificación visual a bajo zoom |
| 0.10 | Falta uno de los elementos |
| 0.05 | Implementación básica |
| 0.0 | Incorrecto o inexistente |
4.2 Sistema urbano — cities (0.15 pt)
| Nivel | Descripción |
|---|---|
| 0.15 | Tamaño proporcional a population + color dependiente de capital + texto visible según zoom |
| 0.10 | Falta uno de los elementos |
| 0.05 | Implementación parcial |
| 0.0 | Incorrecto o inexistente |
4.3 Calidad del aire — stations (0.20 pt)
| Nivel | Descripción |
|---|---|
| 0.20 | Filtro de estaciones activas + color dependiente de pm10 + manejo de nulos + radio dependiente de zoom |
| 0.15 | Falta uno de los elementos |
| 0.10 | Faltan dos elementos |
| 0.05 | Implementación mínima |
| 0.0 | Incorrecto o inexistente |
5. Calidad técnica y coherencia (0.1 pt)
| Nivel | Descripción |
|---|---|
| 0.1 | Código limpio, consistente, sin errores y bien organizado |
| 0.05 | Pequeños errores o inconsistencias |
| 0.0 | Código confuso o con errores graves |
⚖️ Reglas de penalización global
- ❌ No usar expresiones → máximo 0.8
- ❌ No separar correctamente los 3 niveles → máximo 1.2
- ❌ Mapa no funcional → 0 automático
🧠 Criterios cualitativos (feedback)
No puntúan directamente, pero se tendrán en cuenta:
- Claridad visual y jerarquía cartográfica
- Uso adecuado de simbología (evitar saturación)
- Uso del zoom como variable narrativa
- Legibilidad de etiquetas