如何显示具有多种样式的一个图层地图

时间:2014-10-26 09:24:02

标签: javascript coding-style

我想根据图层中的某些属性显示具有多种样式的图层地图,但不知道如何。如果我在geoserver中使用SLD我只显示一种样式,我尝试用javascript(基于Openlayer库)编写一些东西,如下所示,但它没有用,代码对图层映射没有任何影响。任何建议将不胜感激。


    //create a style object
    var style = new OpenLayers.Style();
    //rule used for all polygons

    var rule_p1 = new OpenLayers.Rule({
        filter: new OpenLayers.Filter.Comparison({
        type: OpenLayers.Filter.Comparison.EQUAL_TO,
        property: "vi_tri",
        value: "1",
        }),
        symbolizer: {
        fillColor: "#00FF00",
        fillOpacity: 0.6,
        strokeColor: "#FF0000",
        strokeWidth: 2,
        strokeDashstyle: "solid",
        }
    });
    var rule_p2 = new OpenLayers.Rule({
        filter: new OpenLayers.Filter.Comparison({
        type: OpenLayers.Filter.Comparison.EQUAL_TO,
        property: "vi_tri",
        value: "2",
        }),
        symbolizer: {
        fillColor: "#40FF00",
        fillOpacity: 0.6,
        strokeColor: "#FF0000",
        strokeWidth: 2,
        strokeDashstyle: "solid",
        }
    });
    var rule_p3 = new OpenLayers.Rule({
        filter: new OpenLayers.Filter.Comparison({
        type: OpenLayers.Filter.Comparison.EQUAL_TO,
        property: "vi_tri",
        value: "3",
        }),
        symbolizer: {
        fillColor: "#80FF00",
        fillOpacity: 0.6,
        strokeColor: "#FF0000",
        strokeWidth: 2,
        strokeDashstyle: "solid",
        }
    });
    var rule_p4 = new OpenLayers.Rule({
        filter: new OpenLayers.Filter.Comparison({
        type: OpenLayers.Filter.Comparison.EQUAL_TO,
        property: "vi_tri",
        value: "4",
        }),
        symbolizer: {
        fillColor: "#FFFF00",
        fillOpacity: 0.6,
        strokeColor: "#FF0000",
        strokeWidth: 2,
        strokeDashstyle: "solid",
        }
    });
    style.addRules([rule_p1, rule_p2, rule_p3, rule_p4]);
    mybinh = new OpenLayers.Layer.WMS(
            "Lớp Mỹ Bình", urlmapfile,
            {
            LAYERS: 'demo:mybinh',
            transparent:"true",
            format: format,
            styleMap: style
            },
            {singleTile: true, ratio: 1, isBaseLayer: false} 
    );

1 个答案:

答案 0 :(得分:0)

在您的代码段中,我假设您要提供GeoServer提供的WMS层。在这种情况下,您将收到服务器呈现的图像文件,并且样式是Geoserver(SLD)的一部分。在客户端(OpenLayers),您只能为Vector功能设置样式。

您可以为图层定义不同的样式(SLD),并通过更改WMS查询参数在样式之间切换(请参阅http://docs.geoserver.org/latest/en/user/services/wms/reference.html)。