3 votos

GeoServer ralentiza la representación de líneas con borde

He publicado algunos shapefiles incluyendo características de línea usando GeoServer y les he dado estilo con trazo y etiqueta simples. Para aplicar un borde fino alrededor de las carreteras, he utilizado otro 'FeatureTypeStyle' de acuerdo con la sección de bordes de Libro de cocina SLD como sigue:

<!-- border -->
<se:FeatureTypeStyle>
    <se:Rule> 
      <se:LineSymbolizer>
        <se:Stroke>
          <se:SvgParameter name="stroke">#d9d5cd</se:SvgParameter>
          <se:SvgParameter name="stroke-width">7</se:SvgParameter>
          <se:SvgParameter name="stroke-linejoin">round</se:SvgParameter>
          <se:SvgParameter name="stroke-linecap">round</se:SvgParameter>
        </se:Stroke>
      </se:LineSymbolizer>
    </se:Rule>
</se:FeatureTypeStyle>
<!-- line -->
<se:FeatureTypeStyle>
    <se:Rule>
      <se:LineSymbolizer>
        <se:Stroke>
          <se:SvgParameter name="stroke">#F5F1E6</se:SvgParameter>
          <se:SvgParameter name="stroke-width">5</se:SvgParameter>
          <se:SvgParameter name="stroke-linejoin">round</se:SvgParameter>
          <se:SvgParameter name="stroke-linecap">round</se:SvgParameter>
        </se:Stroke>
      </se:LineSymbolizer>
      <se:TextSymbolizer>
        <se:Label>
          <ogc:PropertyName>name</ogc:PropertyName>
        </se:Label>
        <se:LabelPlacement>
          <se:LinePlacement>
            <se:PerpendicularOffset> 0 </se:PerpendicularOffset>
          </se:LinePlacement>
        </se:LabelPlacement>
        <se:Fill>
          <se:SvgParameter name="fill">#523735</se:SvgParameter>
        </se:Fill>
        <se:VendorOption name="followLine">true</se:VendorOption>
        <se:VendorOption name="maxAngleDelta">90</se:VendorOption>
      </se:TextSymbolizer>
    </se:Rule>
</se:FeatureTypeStyle>

Cuando aplico el borde de línea, el tiempo de renderizado de los azulejos WMS aumenta en comparación con la situación de líneas simples. ¿Cómo puedo conseguir un rendimiento de renderizado óptimo?

3voto

Mephisztoe Puntos 1182

Cuando he intentado validar tu código en mi GeoServer, he obtenido una serie de errores de análisis que me han guiado para escribir un código completamente válido.

Como se puede ver en el enlace que acabas de indicar, tu código debe estar escrito correctamente, siguiendo las recomendaciones del manual.

El código corregido y completamente funcional es el siguiente:

 <?xml version="1.0" encoding="UTF-8"?>
 <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">
  <!-- a Named Layer is the basic building block of an SLD document -->
  <NamedLayer>
    <Name>line_test_style</Name>
    <UserStyle>
    <!-- Styles can have names, titles and abstracts -->
      <Title>Line_Test_Style</Title>
      <Abstract>A sample style that draws a line</Abstract>
      <!-- FeatureTypeStyles describe how to render different features -->
      <!-- A FeatureTypeStyle for rendering lines -->
<!-- border -->
<FeatureTypeStyle>
    <Rule> 
      <LineSymbolizer>
        <Stroke>
          <CssParameter name="stroke">#d9d5cd</CssParameter>
          <CssParameter name="stroke-width">7</CssParameter>
          <CssParameter name="stroke-linejoin">round</CssParameter>
          <CssParameter name="stroke-linecap">round</CssParameter>
        </Stroke>
      </LineSymbolizer>
    </Rule>
</FeatureTypeStyle>
<!-- line -->
<FeatureTypeStyle>
    <Rule>
      <LineSymbolizer>
        <Stroke>
          <CssParameter name="stroke">#F5F1E6</CssParameter>
          <CssParameter name="stroke-width">5</CssParameter>
          <CssParameter name="stroke-linejoin">round</CssParameter>
          <CssParameter name="stroke-linecap">round</CssParameter>
        </Stroke>
      </LineSymbolizer>
      <TextSymbolizer>
        <Label>
          <ogc:PropertyName>name</ogc:PropertyName>
        </Label>
        <LabelPlacement>
          <LinePlacement>
            <PerpendicularOffset> 0 </PerpendicularOffset>
          </LinePlacement>
        </LabelPlacement>
        <Fill>
          <CssParameter name="fill">#523735</CssParameter>
        </Fill>
        <VendorOption name="followLine">true</VendorOption>
        <VendorOption name="maxAngleDelta">90</VendorOption>
      </TextSymbolizer>
    </Rule>
</FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

Tenga en cuenta que, según el manual, un estilo correcto debe contener la información de cabecera y pie de página del SLD.

En la siguiente imagen puedes ver el estilo definido, después de haberlo aplicado a una de mis capas. Aunque el estilo que has definido es más elaborado que el predeterminado, no he notado molestos retrasos de renderizado en mi sistema.

enter image description here

3voto

Adam Ernst Puntos 6939

Dibujar carreteras con un borde (o carcasa) siempre llevará (casi) el doble de tiempo que dibujar una carretera con una sola línea. Simplemente, porque el renderizador tiene que dibujar cada línea dos veces (hay algunos aumentos de velocidad de almacenamiento en caché que es la razón por la que no es exactamente dos veces).

Para evitar que esta ralentización resulte molesta para sus usuarios, debería utilizar una dependencia de escala para evitar que se dibujen demasiadas carreteras a la vez.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X