Openlayers 在SLD中获取图层名称

Openlayers 在SLD中获取图层名称,openlayers,geoserver,sld,Openlayers,Geoserver,Sld,是否有任何元素或函数可用于获取SLD中的当前图层名称? 我们正在请求多个图层,并且希望每个图层使用相同的样式,但是根据图层的不同,有一些小的定制,例如颜色变化等 在没有为每种图层类型创建新的SLD的情况下,我找不到任何支持这种用例的文档。[WFS] 在这里,我为您做了一个示例,向您展示如何进行您提到的简单修改 在下面的示例中,我没有修改图层样式,而是修改了features样式,这与我刚刚发现的简单示例相同。因此,为了在您的案例中工作,您只需要获得图层样式并以与示例相同的方式进行更改 .地图{

是否有任何元素或函数可用于获取SLD中的当前图层名称? 我们正在请求多个图层,并且希望每个图层使用相同的样式,但是根据图层的不同,有一些小的定制,例如颜色变化等

在没有为每种图层类型创建新的SLD的情况下,我找不到任何支持这种用例的文档。

[WFS]

在这里,我为您做了一个示例,向您展示如何进行您提到的简单修改

在下面的示例中,我没有修改图层样式,而是修改了features样式,这与我刚刚发现的简单示例相同。因此,为了在您的案例中工作,您只需要获得图层样式并以与示例相同的方式进行更改


.地图{
高度:400px;
宽度:100%;
}
简单的风格变化
//要素的基础样式默认值
//特征
常数半径=20000;
常数cx=-80;
常数cy=35;
常量字体=[
'1.2em“无衬线”,无衬线',
'斜体1.2em“菲拉无”,衬线',
'斜体小大写粗体16px/2草书',
'小写粗体24px/1无衬线',
“说明”
];
const baseStyle=新的ol.style.style({
笔划:新的ol风格笔划({
颜色:“rgba(0,0,0,1)”,
宽度:1
}),
填充:新的ol.style.fill({
颜色:“rgba(0,0,0,0.1)”
}),
文本:新的ol.style.text({
笔划:新的ol.style.stroke({color:'#ffffff',width:3})
})
});
//地图
常量视图=新ol.视图({
中心:来自Lonlat的其他项目([cx-6,cy]),
缩放:7
});
const vlayer=新ol.layer.Vector({
source:new ol.source.Vector(),
风格:baseStyle
});
常量映射=新ol.map({
目标:“地图”,
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
}),
弗拉耶
],
看法
});
//添加功能
常量特征=[];
让专长、风格、填充、文字;
for(设i=0;i<20;i++){
专长=新的ol.功能({
几何:ol.几何多边形.圆形([cx-i,cy],半径)
.transform('EPSG:4326','EPSG:3857')
});
style=vlayer.getStyle().clone();
fill=vlayer.getStyle().getFill().clone();
fill.setColor(`rgba(${i*12},${i*12},${i*12},0.5)`)
样式。设置填充(填充);
text=vlayer.getStyle().getText().clone();
text.setFont(字体[i%font.length]);
setText(`${i}`);
style.setText(文本);
壮举设置风格(风格);
推(专长);
}
vlayer.getSource().addFeatures(features);
[WFS]

在这里,我为您做了一个示例,向您展示如何进行您提到的简单修改

在下面的示例中,我没有修改图层样式,而是修改了features样式,这与我刚刚发现的简单示例相同。因此,为了在您的案例中工作,您只需要获得图层样式并以与示例相同的方式进行更改


.地图{
高度:400px;
宽度:100%;
}
简单的风格变化
//要素的基础样式默认值
//特征
常数半径=20000;
常数cx=-80;
常数cy=35;
常量字体=[
'1.2em“无衬线”,无衬线',
'斜体1.2em“菲拉无”,衬线',
'斜体小大写粗体16px/2草书',
'小写粗体24px/1无衬线',
“说明”
];
const baseStyle=新的ol.style.style({
笔划:新的ol风格笔划({
颜色:“rgba(0,0,0,1)”,
宽度:1
}),
填充:新的ol.style.fill({
颜色:“rgba(0,0,0,0.1)”
}),
文本:新的ol.style.text({
笔划:新的ol.style.stroke({color:'#ffffff',width:3})
})
});
//地图
常量视图=新ol.视图({
中心:来自Lonlat的其他项目([cx-6,cy]),
缩放:7
});
const vlayer=新ol.layer.Vector({
source:new ol.source.Vector(),
风格:baseStyle
});
常量映射=新ol.map({
目标:“地图”,
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
}),
弗拉耶
],
看法
});
//添加功能
常量特征=[];
让专长、风格、填充、文字;
for(设i=0;i<20;i++){
专长=新的ol.功能({
几何:ol.几何多边形.圆形([cx-i,cy],半径)
.transform('EPSG:4326','EPSG:3857')
});
style=vlayer.getStyle().clone();
fill=vlayer.getStyle().getFill().clone();
fill.setColor(`rgba(${i*12},${i*12},${i*12},0.5)`)
样式。设置填充(填充);
text=vlayer.getStyle().getText().clone();
text.setFont(字体[i%font.length]);
setText(`${i}`);
style.setText(文本);
壮举设置风格(风格);
推(专长);
}
vlayer.getSource().addFeatures(features);

我有点混淆了问题的OL标记,您想使用OL更改样式吗?那你为什么需要SLD中的图层名呢?我们在客户端使用Openlayers TileWMS。如果有人能用Openlayers找到另一个解决方案,那就好了:)Openlayes社区有很多空间知识。同意。。让我看看我是否理解,您正在使用一个基本样式发布多个图层,您想知道如何基于图层更改OL中的某些样式属性,如颜色?没错!当然,我们可以为每一层使用一种新样式,而不是使用一种样式。将完全相同的样式复制24次(24层)似乎有点多余,但每个样式都有轻微的颜色或字体大小更改。我有点搞不懂问题的OL标记,您想使用OL对样式进行更改吗?那你为什么需要SLD中的图层名呢?我们在客户端使用Openlayers TileWMS。如果有人能找到另一个使用Openlayers的解决方案,那就是