1 votos

estilo de las características del clúster (por el retorno del valor de la función)

¿Es posible insertar el valor de retorno de la función en el campo de la propiedad? Me gustaría que el estilo de las características del clúster depende de las temperaturas medias. Mi código:

    var highRule = new OpenLayers.Rule({
filter: new OpenLayers.Filter.Comparison({
    type: OpenLayers.Filter.Comparison.GREATER_THAN,
    property: "${val}", <---------THIS------------------------------------------>
    value: 15
}),
symbolizer: {
    fillColor: colors.high,
    fillOpacity: 0.9, 
    strokeColor: colors.s_high,
    strokeOpacity: 0.2,
    strokeWidth: 15,
    pointRadius: "${point_radius}",
    label: "${val}", //°C",
    labelAlign: "cm",       
    labelOutlineWidth: 0.5,
    fontColor: "#00376d",
    fontOpacity: 1,
    fontSize: "10px",
    fontWeight: "bold"
}

    });

    var style_temp = new OpenLayers.Style(null, {
rules: [singleRule, lowRule, middleRule, highRule],
context: {
            val: function(feature) {
                if(feature.cluster.length > 1) {
                    var sumValue = 0;
                    for (var i=0; i<feature.cluster.length;i++) 
                    {
                        sumValue += parseFloat(feature.cluster[i].attributes.tzewn);
                    }
                    var averageValue = (sumValue/feature.cluster.length).toFixed(1);
                    return averageValue+"\n°C  "; 
                                                } 
                else  
                    var Value = feature.cluster[0].attributes.tzewn;
                    return Value+"\n°C  ";
                                    },
            point_radius: function(feature) {
                if(feature.cluster.length > 1) 
                    return (feature.cluster.length/9) + 10; 
                else  return  8;
            }
    }}  );

Este código no funciona, por lo que la sintaxis ---> propiedad: "${val}" <--- no es correcta.

1voto

Larry Puntos 6257

Y la solución del problema:

    var style_temp = new OpenLayers.Style(
{
    fillColor: "${fill}", <-------additional variable------------>
    fillOpacity: 0.6, 
    strokeColor: "${fill}",<-------additional variable------------>
    strokeOpacity:1,
    strokeWidth: 4,
    pointRadius: "${point_radius}",
    label: "${val}\n°C",
    labelAlign: "cm",
    labelOutlineWidth: 0.5,
    fontColor: "#00006d",
    fontOpacity: 1,
    fontSize: "9px",
    fontWeight: "bold"
}, {
context: {

        val: function(feature) {

                if(feature.cluster.length > 1) {
                    var sumValue = 0;
                    var counter = 0;
                    for (var i=0; i<feature.cluster.length; i++) 
                    {
                        if (feature.cluster[i].attributes.tzewn)

                        {   sumValue += parseFloat(feature.cluster[i].attributes.tzewn);
                            counter += 1;
                        }

                    }
                    if (sumValue)
                    {
                        var averageValue = (sumValue/counter).toFixed(1);
                        return averageValue;
                    } else {
                        return "-";
                    }
                                                } 
                else  
                    if (feature.cluster[0].attributes.tzewn)
                    {var Value = feature.cluster[0].attributes.tzewn;
                    return Value;
                    }
                    else {return "-";};
                                    },
             <------------calculate aditional variable fill------------->
            fill: function(feature) {
                if(feature.cluster.length > 1) {
                    var sumValue = 0;
                    var counter = 0;
                    for (var i=0; i<feature.cluster.length; i++) 
                    {
                        if (feature.cluster[i].attributes.tzewn)

                        {   sumValue += parseFloat(feature.cluster[i].attributes.tzewn);
                            counter += 1;
                        }

                    }
                    var averageValue = (sumValue/counter).toFixed(1);
                    if (averageValue < 6)
                        {
                            return "#009cff"; //blue
                        }
                    else if (averageValue >= 6 && averageValue < 9)
                        {
                            return "#ec7d3f"; // orange
                        } 
                    else if (averageValue >= 9 )
                        {
                            return "#ff4a4a"; // red
                        } 
                    else { return "#8a8a8a"; }// grey                   
                    }
                else { 
                    var Value = 0;
                    Value = feature.cluster[0].attributes.tzewn;
                        if (Value < 6)
                            {
                                return "#009cff"; //blue
                            }
                        else if (Value >= 6 && Value < 9)
                            {
                                return "#ec7d3f"; // orange
                            } 
                        else if (Value >= 9 )
                            {
                                return "#ff4a4a"; // red
                            } 
                        else { return "#8a8a8a"; }// grey 
                }
                },
            point_radius: function(feature) {
                if(feature.cluster.length > 1) 
                    return (feature.cluster.length/9) + 12; 
                else  return  12;
            }

}} );

0voto

Kate Brazier Puntos 11

Viendo este ejemplo, no parece que se utilice el marcado cuando se accede a la propiedad. Sin embargo, podría ser porque está definida en la etiqueta en otra parte del mismo estilo: http://dev.openlayers.org/releases/OpenLayers-2.11/examples/style-rules.js

así que cambia la línea

property: "${val}",

a

property: "val",

¿Y ver si funciona?

Bueno, para ser honesto estoy disparando desde la cadera aquí. Pero podría funcionar =)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X