一、问题。Geoserver点图层配置SLD样式,ExternalGraphic设置SVG图标时,有些图标在地图上显示时,会显示不全或不显示。
如下图所示:
SVG图标如下:
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 84 84" style="enable-background:new 0 0 84 84;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#FFF;stroke-width:3;stroke-miterlimit:3;}
.st30{fill:#FFF;stroke:#FFF;stroke-width:3;stroke-miterlimit:0;}
</style>
<line class="st30" x1="42" y1="42" x2="42" y2="4"/>
<!-- cricle R62 -->
<circle class="st0" cx="42" cy="62" r="20"/>
</svg>
二、解决。后经过分析验证SVG图标显示不全由两个问题引起:
1、图标长宽比差别太大(比如20*8就不行,具体多少没验证,自己试验);
2、图标长宽一样但太大(比如500*500就不行,具体多少没验证,自己试验)。
问题1解决办法就是把长宽设置为一样,然后把图形居中即可。
问题2只想了个取巧解决方案,即在图标对角线加两个无法查觉的小点,如下SVG图标所示:
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 84 84" style="enable-background:new 0 0 84 84;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#FFF;stroke-width:3;stroke-miterlimit:3;}
.st30{fill:#FFF;stroke:#FFF;stroke-width:3;stroke-miterlimit:0;}
</style>
<circle class="st0" cx="0" cy="0" r="0.000001"/>
<circle class="st0" cx="84" cy="84" r="0.000001"/>
<line class="st30" x1="42" y1="42" x2="42" y2="4"/>
<!-- cricle R62 -->
<circle class="st0" cx="42" cy="62" r="20"/>
</svg>
新图标在地图上正常显示如下图所示: