GeoServer Style修改怎么解决

GeoServer Style修改怎么解决,第1张

前段时间使用GEOSERVER发布SHP格式文件时,记录里的中文是乱码。上网GOOGLE了下,发现了两种解决方法:

1)将shp文件导入postgresql,使用UTF-8格式

2)修改geotools源代码

各自试了下,感觉两种方式都太麻烦。相信如果这个真是问题的话,那些大大早就改了。

于是,研究出了另一种解决方式,果然,geoserver提供了编码选择的地方,具体方法如下:

每个shp文件发布成一个Stores(好像只有这样charset选向才起作用),URL设成shp文件的全路径,包括文件名,如:E:\test_map\cyeq\ROAD_REGION.shp,再将charset改成GBK,好像使用SHP的默认的是GBK,再去layers里添加发布就行了,点GML可以查看里面的中文是否已正常显示,如果不对再修改charset的试试。

在 layerPreview 中,找到对应图层,用 openlayers 打开

是“读不出来”还是“读出一片全白的区域“,还是”直接让你下载一个WMS文件“

如果是最后一种情况,将那个下载的 wms 文件用 文本文件 打开,里面有报错提示,然后贴出来,我们再分析

通过SLD_BODY动态改变geoserver的图层样式

分类专栏:  开源WebGIS

版权

目录

要点

使用

取标准样式

修改为自定义规则

GetMap使用

URL调用方式

Openlayers调用方式

GetLegendGraphic使用

访问报错问题

geoserver的WMS服务支持url参数上传sld_body来动态定义访问图层的样式,本文以GetMap以及GetLegendGraphic为例进行说明。

要点

一定要注意样式格式的正确性,样式不能有缩进,否则容易报错

图层名称一定要在UserLayer里的Name体现

样式文本不要过大,url有字数上限

尽量使用程序生成需要的样式文本,不要自行编辑

使用

取标准样式

先从geoserver取下来标准的polygon样式,目的是保证格式正确性,标准样式如下:

<?xml version="1.0"encoding="UTF-8"?>

xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"

xmlns="http://www.opengis.net/sld"

xmlns:ogc="http://www.opengis.net/ogc"

xmlns:xlink="http://www.w3.org/1999/xlink"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!-- a Named Layer is the basic building block of an SLD document -->

default_polygon

<!-- Styles can have names, titles and abstracts -->

Default Polygon

A sample style that draws a polygon

<!-- FeatureTypeStyles describe how to render different features -->

<!-- A FeatureTypeStyle for rendering polygons -->

rule1

Gray Polygon with Black Outline

A polygon with a gray fill and a 1 pixel black outline

#AAAAAA

#000000

1

修改为自定义规则

将Rule部分修改或扩充多个,以满足自身需求为准,举例:

rule1

my title

key

1

key

5

#00ff00

1.0

GetMap使用

URL调用方式

记得要将sld_body转换URLEncode,同时不需要写layer参数。

http://localhost:8080/geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&sld_body=layer<%2FName>rule1<%2FName>title<%2FTitle><Filter><PropertyIsLessThan><PropertyName>key<%2FPropertyName><Literal>5<%2FLiteral><%2FPropertyIsLessThan><%2FFilter><PolygonSymbolizer><Fill><CssParameter%20name%3D"fill">%23ff0000<%2FCssParameter><CssParameter%20name%3D"fill-opacity">1.0<%2FCssParameter><%2FFill><Stroke%2F><%2FPolygonSymbolizer><%2FRule><%2FFeatureTypeStyle><%2FUserStyle><%2FNamedLayer><%2FStyledLayerDescriptor>&WIDTH=256&HEIGHT=256&SRS=EPSG%3A4326&STYLES=&BBOX=106.171875%2C21.796875%2C106.5234375%2C22.1484375

Openlayers调用方式

同样不需要写layer参数。

varsld ='你的样式文本'

varwms =newol.layer.Tile({

source:newol.source.TileWMS({

url:'http://localhost:8080/geoserver/wms',

params: {'VERSION':'1.1.1', sld_body: sld}

    })

})

GetLegendGraphic使用

这里要写layer参数,因为是必填的。

http://localhost:8080/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&sld_body=你的样式文本

访问报错问题

一般都是sld_body引起的,建议先用标准的样式进行测试,逐步修改样式,使用 XML格式化 网站进行测试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11231300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存