我面临的问题是如何使用SLD格式的样式从geoserver样式化WMS。我想添加SLD定义为变量${SLD}从外部。js文件:
const sld = `<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" version="1.0.0" xmlns:ogc="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld">
<sld:UserLayer>
...
<sld:ColorMap type="ramp">
<sld:ColorMapEntry quantity="0" label ="0" color="#000000"/>
<sld:ColorMapEntry quantity="1200" label="1200" color="#d7191c"/>
</sld:ColorMap>
...
</sld:UserLayer>
</StyledLayerDescriptor>
export default sld
main.js中的代码是:
import sld from "./SLD_styles/style1"
...
const wmsSource2 = new TileWMS({
url: "https://...",
params: {
LAYERS: "workSpace:layerName",
STYLES: undefined,
SLD_BODY: encodeURIComponent(sld),
},
serverType: "geoserver",
crossOrigin: "anonymous",
})
我试过很多方法来达到那个目的,但都没有成功。谁能告诉我,SLD到底应该是什么样子?可能我在匹配名称,isDefault参数等方面有问题。
谢谢,彼得亚雷
Import sld变量工作正常。我已经尝试使用SLD: url从。SLD文件导入,但也没有成功。
复选框样式;和"图书馆模式";(SLD规范的一部分)在GeoServer文档中:
https://docs.geoserver.org/maintain/en/user/styling/sld/working.html外部样式
特别地,你的样式可能没有被使用,因为你在库模式:
- SLD必须使用与LAYERS参数 中使用的名称相同的NamedLayer。
- UserStyle必须与STYLES中使用的相同名称匹配(或者跳过使用STYLES,并在SLD中将样式标记为默认)
下面是一个使用URL中的样式名的工作示例:
https://gs-main.geosolutionsgroup.com/geoserver/topp/wms?service=WMS& version = 1.1.0&请求= GetMap&层= topp % 3 astates& bbox = -124.73142200000001% 2 c24.955967 % 2 c - 66.969849 % 2 c49.371735&宽度= 768,身高= 330,srs = EPSG % 3 a4326&风格= popgray&格式=应用程序/openlayers& sld = https://gs-main.geosolutionsgroup.com/geoserver/styles/popgray.sld