Geoserver Sld 无法正常工作

Posted

技术标签:

【中文标题】Geoserver Sld 无法正常工作【英文标题】:Geoserver Sld Not Working Correctly 【发布时间】:2014-05-21 12:54:43 【问题描述】:

我使用 Geoserver,并为我的图层使用 SLD

我的 sld 文件是

<?xml version="1.0" encoding="UTF-8"?><sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
  <sld:NamedLayer>
    <sld:Name>Default Styler</sld:Name>
    <sld:UserStyle>
      <sld:Name>Default Styler</sld:Name>
      <sld:FeatureTypeStyle>
        <sld:Name>name</sld:Name>
        <sld:Rule>
          <sld:Name>Without Label</sld:Name>
          <sld:MinScaleDenominator>10000.0</sld:MinScaleDenominator>
          <sld:MaxScaleDenominator>70000.0</sld:MaxScaleDenominator>
          <sld:PointSymbolizer>
            <sld:Graphic>
              <sld:Mark>
                <sld:WellKnownName>circle</sld:WellKnownName>
                <sld:Fill>
                  <sld:CssParameter name="fill">#CC3300</sld:CssParameter>
                </sld:Fill>
              </sld:Mark>
              <sld:Size>8</sld:Size>
            </sld:Graphic>
          </sld:PointSymbolizer>
        </sld:Rule>
        <sld:Rule>
          <sld:Name>With Label</sld:Name>
          <sld:MaxScaleDenominator>10000.0</sld:MaxScaleDenominator>
          <sld:PointSymbolizer>
            <sld:Graphic>
              <sld:Mark>
                <sld:WellKnownName>circle</sld:WellKnownName>
                <sld:Fill>
                  <sld:CssParameter name="fill">#CC3300</sld:CssParameter>
                </sld:Fill>
              </sld:Mark>
              <sld:Size>12</sld:Size>
            </sld:Graphic>
          </sld:PointSymbolizer>
          <sld:TextSymbolizer>
            <sld:Label>
              <ogc:PropertyName>str_name</ogc:PropertyName>
            </sld:Label>
            <sld:Font>
              <sld:CssParameter name="font-family">Times</sld:CssParameter>
              <sld:CssParameter name="font-size">14</sld:CssParameter>
              <sld:CssParameter name="font-style">normal</sld:CssParameter>
              <sld:CssParameter name="font-weight">bold</sld:CssParameter>
            </sld:Font>
            <sld:LabelPlacement>
              <sld:PointPlacement>
                <sld:AnchorPoint>
                  <sld:AnchorPointX>0.5</sld:AnchorPointX>
                  <sld:AnchorPointY>0.0</sld:AnchorPointY>
                </sld:AnchorPoint>
                <sld:Displacement>
                  <sld:DisplacementX>0</sld:DisplacementX>
                  <sld:DisplacementY>5</sld:DisplacementY>
                </sld:Displacement>
              </sld:PointPlacement>
            </sld:LabelPlacement>
            <sld:Fill>
              <sld:CssParameter name="fill">#CC0000</sld:CssParameter>
            </sld:Fill>
          </sld:TextSymbolizer>
        </sld:Rule>
      </sld:FeatureTypeStyle>
    </sld:UserStyle>
  </sld:NamedLayer>
</sld:StyledLayerDescriptor>

但有时点的标签会交替显示/隐藏。例如

放大 16

放大 17

18 倍放大

这个场景和我的 SLD 不一样。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

你的地图是平铺的吗?如果是这样,标签可能会因为它们跨越图块边界而消失(因为代码无法可靠地预测标签的其他部分是否会出现在附近的图块中)。

【讨论】:

感谢您的回复,是的,地图平铺了,我正在根据您的建议进行测试

以上是关于Geoserver Sld 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Geoserver 上的动态 SLD

利用 uDig 生成 GeoServer 可用的 SLD 渲染文件

利用 uDig 生成 GeoServer 可用的 SLD 渲染文件

利用 uDig 生成 GeoServer 可用的 SLD 渲染文件

Geoserver SLD 样式 - propertyName 中的空格

如何在Geoserver中测试SLD样式文件的正确性