我想根据图层中的某些属性显示具有多种样式的图层地图,但不知道如何。如果我在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} );
答案 0 :(得分:0)
在您的代码段中,我假设您要提供GeoServer提供的WMS层。在这种情况下,您将收到服务器呈现的图像文件,并且样式是Geoserver(SLD)的一部分。在客户端(OpenLayers),您只能为Vector功能设置样式。
您可以为图层定义不同的样式(SLD),并通过更改WMS查询参数在样式之间切换(请参阅http://docs.geoserver.org/latest/en/user/services/wms/reference.html)。