Код SLD не работает, но не отображается сообщение об ошибке - PullRequest
1 голос
/ 24 октября 2019

Я написал код SLD для стилизации слоя карты, который хранится в GeoServer. Окно ввода GeoServer для SLD не показывает никаких сообщений об ошибках, но когда я открываю свою карту в OpenLayers, она не показывает карту так, как я хочу. В этом случае я намереваюсь раскрасить полигоны страны, похожие на уровень безопасности, который является десятичным в моей базе данных postgres, чтобы в конечном итоге опасные регионы были похожи на красные, а безопасные - на зеленые.

Мой код:

<!-- Template taken from: http://docs.geoserver.org/stable/en/user/styling/sld/cookbook/polygons.html#attribute-based-polygon -->
<?xml version="1.0" encoding="UTF-8"?>
<sld:UserStyle 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">
  <sld:Title/>
  <FeatureTypeStyle>
     <Rule>
       <Name>HighRisk</Name>
       <Title>WGI &lt; -0.5</Title>
       <ogc:Filter>
         <ogc:PropertyIsLessThan>
           <ogc:PropertyName>wgi</ogc:PropertyName>
           <ogc:Literal>-0.5</ogc:Literal>
         </ogc:PropertyIsLessThan>
       </ogc:Filter>
       <PolygonSymbolizer>
         <Fill>
           <CssParameter name="fill">#fc8d59</CssParameter>
         </Fill>
       </PolygonSymbolizer>
     </Rule>
     <Rule>
       <Name>MediumRisk</Name>
       <Title>WGI &gt; -0.5 und &lt; 0.5</Title>
       <ogc:Filter>
         <ogc:And>
           <ogc:PropertyIsGreaterThanOrEqualTo>
             <ogc:PropertyName>wgi</ogc:PropertyName>
             <ogc:Literal>-0.5</ogc:Literal>
           </ogc:PropertyIsGreaterThanOrEqualTo>
           <ogc:PropertyIsLessThan>
             <ogc:PropertyName>wgi</ogc:PropertyName>
             <ogc:Literal>0.5</ogc:Literal>
           </ogc:PropertyIsLessThan>
         </ogc:And>
       </ogc:Filter>
       <PolygonSymbolizer>
         <Fill>
           <CssParameter name="fill">#ffffbf</CssParameter>
         </Fill>
       </PolygonSymbolizer>
     </Rule>
     <Rule>
       <Name>LowRisk</Name>
       <Title>WGI &gt; 0.5</Title>
       <ogc:Filter>
         <ogc:PropertyIsGreaterThan>
           <ogc:PropertyName>WGI</ogc:PropertyName>
           <ogc:Literal>0.5</ogc:Literal>
         </ogc:PropertyIsGreaterThan>
       </ogc:Filter>
       <PolygonSymbolizer>
         <Fill>
           <CssParameter name="fill">#91cf60</CssParameter>
         </Fill>
       </PolygonSymbolizer>
     </Rule>
      <Rule>
        <Title>Boundary</Title>
        <LineSymbolizer>
          <Stroke>
            <CssParameter name="stroke-width">0.2</CssParameter>
            <CssParameter name="stroke">#e2e2e2</CssParameter>
          </Stroke>
        </LineSymbolizer>
        <TextSymbolizer>
          <Label>
            <ogc:PropertyName>STATE_ABBR</ogc:PropertyName>
          </Label>
          <Font>
            <CssParameter name="font-family">Times New Roman</CssParameter>
            <CssParameter name="font-style">Normal</CssParameter>
            <CssParameter name="font-size">14</CssParameter>
          </Font>
          <LabelPlacement>
            <PointPlacement>
              <AnchorPoint>
                <AnchorPointX>-0.5</AnchorPointX>
                <AnchorPointY>0.5</AnchorPointY>
              </AnchorPoint>
            </PointPlacement>
          </LabelPlacement>
        </TextSymbolizer>
        </Rule>
   </FeatureTypeStyle>
</sld:UserStyle>

К сожалению, моя карта выглядит так:

enter image description here

Любая помощь и советы приветствуются!

1 Ответ

1 голос
/ 28 октября 2019

Во-первых, в моем случае ваш SLD не был правильно проверен на моем GeoServer.

Вам не хватает StyledLayerDescriptor -Tag вокруг них всех и NamedLayer -тег вокруг UserStyle . Кроме того, был закрывающий тег для sld: Title , который не является необходимым и может позволить интерпретатору завершиться с некоторыми ошибками.

Похоже, GeoServer возвращается к стилю по умолчанию, который является серой заливкой и черным штрихом.

Я думаю, что ваш SLD должен быть примерно таким, GeoServer проверяет его так же правильно и может даже создать легенду для этого.

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
    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">
  <NamedLayer>
    <Name>A named Layer</Name>
    <UserStyle>
      <Title>Dangerous and safe regions</Title>
      <FeatureTypeStyle>
       <Rule>
         <Name>HighRisk</Name>
         <Title>WGI &lt; -0.5</Title>
         <ogc:Filter>
           <ogc:PropertyIsLessThan>
             <ogc:PropertyName>wgi</ogc:PropertyName>
             <ogc:Literal>-0.5</ogc:Literal>
           </ogc:PropertyIsLessThan>
         </ogc:Filter>
         <PolygonSymbolizer>
           <Fill>
             <CssParameter name="fill">#fc8d59</CssParameter>
           </Fill>
         </PolygonSymbolizer>
       </Rule>
       <Rule>
         <Name>MediumRisk</Name>
         <Title>WGI &gt; -0.5 und &lt; 0.5</Title>
         <ogc:Filter>
           <ogc:And>
             <ogc:PropertyIsGreaterThanOrEqualTo>
               <ogc:PropertyName>wgi</ogc:PropertyName>
               <ogc:Literal>-0.5</ogc:Literal>
             </ogc:PropertyIsGreaterThanOrEqualTo>
             <ogc:PropertyIsLessThan>
               <ogc:PropertyName>wgi</ogc:PropertyName>
               <ogc:Literal>0.5</ogc:Literal>
             </ogc:PropertyIsLessThan>
           </ogc:And>
         </ogc:Filter>
         <PolygonSymbolizer>
           <Fill>
             <CssParameter name="fill">#ffffbf</CssParameter>
           </Fill>
         </PolygonSymbolizer>
       </Rule>
       <Rule>
         <Name>LowRisk</Name>
         <Title>WGI &gt; 0.5</Title>
         <ogc:Filter>
           <ogc:PropertyIsGreaterThan>
             <ogc:PropertyName>WGI</ogc:PropertyName>
             <ogc:Literal>0.5</ogc:Literal>
           </ogc:PropertyIsGreaterThan>
         </ogc:Filter>
         <PolygonSymbolizer>
           <Fill>
             <CssParameter name="fill">#91cf60</CssParameter>
           </Fill>
         </PolygonSymbolizer>
       </Rule>
        <Rule>
          <Title>Boundary</Title>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke-width">0.2</CssParameter>
              <CssParameter name="stroke">#e2e2e2</CssParameter>
            </Stroke>
          </LineSymbolizer>
          <TextSymbolizer>
            <Label>
              <ogc:PropertyName>STATE_ABBR</ogc:PropertyName>
            </Label>
            <Font>
              <CssParameter name="font-family">Times New Roman</CssParameter>
              <CssParameter name="font-style">Normal</CssParameter>
              <CssParameter name="font-size">14</CssParameter>
            </Font>
            <LabelPlacement>
              <PointPlacement>
                <AnchorPoint>
                  <AnchorPointX>-0.5</AnchorPointX>
                  <AnchorPointY>0.5</AnchorPointY>
                </AnchorPoint>
              </PointPlacement>
            </LabelPlacement>
          </TextSymbolizer>
          </Rule>
     </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

Также убедитесь, что вы установили стиль по умолчанию для слоя в самом GeoServer или отправили стилей -Параметр в запросе, который создает OpenLayers.

Надеюсь, что я помог здесь, дайте мне знать, если яЯ ошибаюсь, или это, кажется, не работает.

...