首页 / 实战手册 / 服务端与发布
SLD 传上去了,地图还是默认灰色
先看结论
在 GeoServer 里上传了 SLD,预览页面能看到效果,自己的 WMS 请求出来还是那套默认灰填充。
现象
GeoServer 日志中出现:
2026-10-29 11:03:12,441 WARN [geoserver.wms] -
No such style: roads_style
2026-10-29 11:03:12,443 INFO [geoserver.wms] -
Requested style roads_style is not available, using default style instead
返回的图片是 GeoServer 自动生成的灰色多边形,没有任何自定义颜色。
原因
| 原因 | 说明 |
|---|---|
| 样式名缺少工作区前缀 | 应写 workspace:roads_style |
| 样式未设为该图层默认 | 不传 STYLES 时用默认灰样式 |
| SLD 命名空间版本不匹配 | 1.0.0 与 1.1.0 的元素名不同 |
| 属性名拼错 | 过滤器读不到字段,规则全部不命中 |
| 几何类型不符 | 线样式套在多边形图层上,直接不绘制 |
排查过程
- 请求
GetCapabilities,搜索图层节点下的<Style>,确认样式名与是否默认。 - 在日志里搜
Requested style,确认实际生效的是哪一个。 - 用
DescribeFeatureType核对属性名大小写。
curl "http://127.0.0.1:8080/geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities" \
| grep -A 6 "<Layer>" | grep -E "Name|Style"
解决方案
请求时带完整样式名,工作区不能省:
GET /geoserver/wms?
SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap
&LAYERS=workspace:roads
&STYLES=workspace:roads_style
&SRS=EPSG:3857&BBOX=...&WIDTH=512&HEIGHT=512
&FORMAT=image/png
最省事的做法是把样式设为图层默认,这样前端不必每次拼样式名:
curl -u admin:password -X PUT \
"http://127.0.0.1:8080/geoserver/rest/workspaces/workspace/datastores/roads/file.shp/layers/roads" \
-H "Content-Type: application/json" \
-d '{"layer":{"defaultStyle":{"name":"roads_style"}}}'
上传 SLD 时确认根元素与命名空间对应版本。1.0.0 用
StyledLayerDescriptor 无前缀,1.1.0 需要 sld: 前缀:
<sld:StyledLayerDescriptor version="1.1.0"
xmlns:sld="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc">
<sld:NamedLayer>
<sld:Name>workspace:roads</sld:Name>
<sld:UserStyle>
<sld:Name>roads_style</sld:Name>
<sld:FeatureTypeStyle>
<sld:Rule>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">#2b8a3e</sld:CssParameter>
<sld:CssParameter name="stroke-width">2</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>
</sld:StyledLayerDescriptor>
用过滤器按属性着色时,属性名必须与 DescribeFeatureType 完全一致,
大小写敏感:
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>road_class</ogc:PropertyName>
<ogc:Literal>highway</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
验证
单张 GetMap 返回的图片颜色与 SLD 中定义一致。
日志里出现 Requested style ... is not available 消失。
GetCapabilities 中该样式标记为默认。
先看日志再改 SLD:GeoServer 明确写了“用了默认样式”, 说明样式文件本身可能没问题,问题在名字或默认设置上。
经纬志(2026)。《SLD 传上去了,地图还是默认灰色》。https://www.jingweizhi.com/cookbook/geoserver-sld-not-applied.html(访问日期 2026-11-03)。