CP-090-06
COMBINACION COROPLETAS - PROPORTIONAL - Caso alternativo
by SIGC
HTML
<script src="https://sigc.desarrollo.guadaltel.es/mapea5/js/mapea.ol.min.js"></script>
<link rel="stylesheet" href="https://sigc.desarrollo.guadaltel.es/mapea5/assets/css/mapea.ol.min.css">
<script src="https://sigc.desarrollo.guadaltel.es/mapea5/js/configuration.js"></script>
<div id="map"></div>
CSS
html,
body {
margin: 0;
padding: 0;
height: 100%;
overflow: hidden;
}
JavaScript
// Caso de pruebas
let mapajs = M.map({
'container': 'map',
"controls": ["layerswitcher"],
"layer": ["OSM"]
});
let layer = new M.layer.WFS({
name: "Municipios",
url: "https://clientes.guadaltel.es/desarrollo/geossigc/wfs?",
namespace: "mapea",
name: "da_municipio_pol",
legend: "Municipios - CATEGORĂŤAS",
geometry: 'POLYGON',
});;
mapajs.addLayers(layer);
let options = {
attribute: "gid",
maxRadius: 25,
minRadius: 8
};
const getMaxMinValues = function(features, attribute) {
let [minValue, maxValue] = [undefined, undefined];
let filteredFeatures = features.filter(feature =>
!isNaN(feature.getAttribute(attribute))).map(f => parseInt(f.getAttribute(attribute)));
let index = 1;
if (!M.utils.isNullOrEmpty(filteredFeatures)) {
minValue = filteredFeatures[0];
maxValue = filteredFeatures[0];
while (index < filteredFeatures.length - 1) {
let posteriorValue = filteredFeatures[index + 1];
minValue = (minValue < posteriorValue) ? minValue : posteriorValue;
maxValue = (maxValue < posteriorValue) ? posteriorValue : maxValue;
index++;
}
}
return [minValue, maxValue];
}
const proportionalFunction = function(feature, options) {
let value = parseFloat(feature.getAttribute(options.attribute));
return calcProportion(value, options.minValue, options.maxValue, options.minRadius, options.maxRadius);
}
/**
* Funcion matematica que calcula la proporcion de un valor en base a minRadius,
* maxRadius, minValue, maxValue
*/
const calcProportion = ((value, minValue, maxValue, minRadius, maxRadius) =>
(((value - minValue) * (maxRadius - minRadius)) / (maxValue - minValue)) + minRadius);
layer.on(M.evt.LOAD, function() {
/**
* Valor minimo y maximo de los features
*/
let [minValue, maxValue] = getMaxMinValues(layer.getFeatures(), options.attribute);
options.minValue = minValue;
options.maxValue = maxValue;
layer.getFeatures().forEach(f => f.setAttribute('porcentaje',...