10 votos

Etiqueta de polígono repetida para cada baldosa

Estoy usando el GeoWebCache autónomo para servir mosaicos desde un GeoServer remoto. Mi problema es que la etiqueta del polígono se añade a cada uno de los mosaicos servidos, en lugar de sólo una vez en el centroide del polígono.

He encontrado un post que trata el tema:
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeated-for-each-tile-td4995203.html

La primera respuesta mencionaba una posible solución:

"En definitiva, sugiero utilizar un motor de renderizado de azulejos (GeoWebCache, MapProxy, TileCache) de todos modos, en lugar de solicitar imágenes pequeñas de GeoServer y que el motor de renderizado de azulejos haga el corte de azulejos después. Tendrá que enviar menos peticiones a GeoServer (1 imagen grande en lugar de múltiples imágenes pequeñas), por lo que esto acelera el tiempo total de creación de la caché de mosaicos."

El problema es que no pude encontrar cómo hacerlo consultando la documentación de GeoWebCache, y el post mencionado no explica la forma de implementarlo.

También encontré un Correo electrónico: con una respuesta que enlace con el Documentación de GeoWebCache "Tiled pero mi código ya utiliza todos los atributos necesarios y la etiqueta sigue apareciendo varias veces:

var Layer_1874 = new OpenLayers.Layer.WMS(
    'Grundkort',
    '/wms10.ashx'
    , {
        format: 'image/png',
        srs: 'EPSG:25832',
        layers: 'ballerupkommune_grundkort_bk',
        tiled: true,
        tilesOrigin: '698804,6173460'
    }
    , {
        displayInLayerSwitcher: true,
        isBaseLayer: true,
        transitionEffect: 'resize',
        displayOutsideMaxExtent: true,
        visibility: false
    }
);

¿Alguien tiene una idea?

0 votos

¿Puede mostrarnos el archivo SLD que está utilizando? Eso controla cómo se muestran las etiquetas en una capa WMS.

17voto

Martin Duys Puntos 121

A continuación se muestra un ejemplo de regla SLD que coloca una etiqueta en el centro de la geometría de un elemento. Esto utiliza la función ogc:Function llamada "centroid" para colocar la etiqueta. Puede leer más sobre las funciones SLD en el GeoServer docs y se dan algunos ejemplos aquí .

<sld:Rule>
      <MaxScaleDenominator>5000</MaxScaleDenominator>
      <sld:TextSymbolizer>
        <sld:Geometry>
          <ogc:Function name="centroid">
            <ogc:PropertyName>the_geom</ogc:PropertyName>
          </ogc:Function>
        </sld:Geometry>
        <sld:Label>
          <ogc:PropertyName>LOT_NAME</ogc:PropertyName>
        </sld:Label>
        <sld:Font>
          <sld:CssParameter name="font-family">Arial</sld:CssParameter>
          <sld:CssParameter name="font-size">11</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>
                <ogc:Literal>0.0</ogc:Literal>
              </sld:AnchorPointX>
              <sld:AnchorPointY>
                <ogc:Literal>0.5</ogc:Literal>
              </sld:AnchorPointY>
            </sld:AnchorPoint>
            <sld:Rotation>
              <ogc:Literal>0</ogc:Literal>
            </sld:Rotation>
          </sld:PointPlacement>
        </sld:LabelPlacement>
        <sld:Halo>
          <sld:Radius>
            <ogc:Literal>1.0</ogc:Literal>
          </sld:Radius>
          <sld:Fill>
            <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
          </sld:Fill>
        </sld:Halo>
        <sld:VendorOption name="conflictResolution">true</sld:VendorOption>
        <sld:VendorOption name="goodnessOfFit">0</sld:VendorOption>
        <sld:VendorOption name="autoWrap">60</sld:VendorOption>
      </sld:TextSymbolizer>
    </sld:Rule>

Además, el Libro de cocina SLD es una gran referencia. Una cosa que puede hacerte tropezar es el orden de las etiquetas en el SLD. Para la regla TextSymbolizer de arriba puedes ver el orden requerido mirando en la definición del esquema. No se preocupe, ¡no da tanto miedo! Simplemente busque "textsymbolizer" en ese archivo .xsd y encontrará fácilmente la etiqueta "sequence". Allí verás que las referencias a los elementos coinciden con el orden de mi ejemplo. (Nota: No he utilizado el atributo "fill" del simbolizador de texto, mi relleno sólo se aplica al halo).

1voto

Jimmy Chandra Puntos 3562

El cálculo de etiquetas con resolución de colisiones (apartar etiquetas del camino o eliminar las de menor prioridad para que no se solapen) requiere conocer todas las etiquetas que podrían colisionar con la etiqueta que estás dibujando, todas las etiquetas que podrían colisionar con ellas, etcétera. Así que, en general, o bien tienes que calcular todas las etiquetas a la vez mirando cada característica, o dividir el mapa en bloques con etiquetas calculadas dentro de cada bloque.

Por defecto, GeoWebCache utiliza un bloque de 4x4 baldosas llamado "metatile". Cuando solicitas un mosaico que no está en la caché, GWC solicitará todo el metatile como una gran imagen desde el backend y luego dividirá el metatile en mosaicos que almacenará en caché. Puedes ajustar el factor de metatile al configurar una capa. Los metatiles más grandes proporcionan etiquetas más atractivas, pero aumentan la latencia de una pérdida de caché. Si no está utilizando la resolución de colisión de etiquetas en el backend, puede establecer el metatile a 1x1.

También puedes decirle a GWC que añada un canalón alrededor del metatile, que es el espacio extra que se cortará. Es arriesgado hacer esto si tiene activada la resolución de colisión de etiquetas, ya que una etiqueta puede colocarse de forma diferente o incluso eliminarse por completo al otro lado del límite de un metatile. Sin embargo, si tiene etiquetas que están totalmente fijas en su posición y nunca se suprimen para evitar colisiones, puede utilizar un canal ancho para permitir que las etiquetas crucen los límites de las baldosas. Esto tendrá un coste de rendimiento, ya que GeoServer tendrá que renderizar un mosaico más grande.

Puede establecer el metatiling y el medianil en la pestaña Capa de mosaico de la configuración de capas, o bien puede establecer el valor predeterminado que se utilizará para las nuevas capas en la página Valores predeterminados de caché.

Para desactivar la resolución de conflictos, puede utilizar la opción conflictResolution en sus estilos.

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