Polygonbeschriftung für jede Kachel wiederholt


10

Ich verwende den eigenständigen GeoWebCache, um Kacheln von einem Remote-GeoServer bereitzustellen. Mein Problem ist, dass die Polygonbeschriftung zu jeder der bereitgestellten Kacheln hinzugefügt wird, anstatt nur einmal im Polygonschwerpunkt.

Ich habe einen Beitrag gefunden, in dem das Problem behandelt wird:
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeated-for-each-tile-td4995203.html

In der ersten Antwort wurde eine mögliche Lösung erwähnt:

"Alles in allem empfehle ich, ohnehin eine Kachel-Rendering-Engine (GeoWebCache, MapProxy, TileCache) zu verwenden, anstatt ein kleines Bild von GeoServer anzufordern und die Kachel-Rendering-Engine anschließend das Kacheln aufteilen zu lassen. Sie müssen weniger Anforderungen an GeoServer senden ( 1 großes Bild anstelle mehrerer kleiner Bilder), wodurch die Erstellungszeit des gesamten Kachel-Cache verkürzt wird. "

Das Problem ist, dass ich anhand der GeoWebCache-Dokumentation nicht herausfinden konnte, wie das geht, und der oben erwähnte Beitrag erklärt nicht, wie dies implementiert werden kann.

Ich habe auch einen Beitrag mit einer Antwort gefunden, die auf die GeoWebCache-Dokumentation "Tiled" verweist , aber mein Code verwendet bereits alle erforderlichen Attribute und das Label wird immer noch mehrmals angezeigt:

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
    }
);

Hat jemand eine Idee?


Können Sie uns die von Ihnen verwendete SLD-Datei zeigen? Hiermit wird gesteuert, wie Beschriftungen auf einer WMS-Ebene angezeigt werden.
Katahdin

Antworten:


16

Unten finden Sie ein Beispiel für eine SLD-Regel, mit der eine Beschriftung in der Mitte der Geometrie eines Features platziert wird. Dies verwendet die ogc: Funktion namens "centroid", um die Beschriftung zu platzieren. Weitere Informationen zu SLD-Funktionen finden Sie in den GeoServer- Dokumenten . Einige Beispiele finden Sie hier .

<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>

Auch das SLD-Kochbuch ist eine gute Referenz. Eine Sache, die Sie stolpern kann, ist die Reihenfolge der Tags im SLD. Für die obige TextSymbolizer-Regel können Sie die erforderliche Reihenfolge in der Schemadefinition anzeigen. Mach dir keine Sorgen, es ist nicht zu beängstigend! Suchen Sie einfach in dieser .xsd-Datei nach "Textsymbolizer", und Sie sollten das "Sequenz" -Tag leicht finden können. Dort werden Sie feststellen, dass die Elementreferenzen mit der Reihenfolge in meinem Beispiel übereinstimmen. (Hinweis: Ich habe das Attribut "Füllen" des Textsymbolisierers nicht verwendet, meine Füllung gilt nur für den Heiligenschein.)


1

Das Berechnen von Etiketten mit Kollisionsauflösung (Verschieben von Etiketten aus dem Weg oder Entfernen von Etiketten mit niedrigerer Priorität, damit sie sich nicht überlappen) erfordert Kenntnisse über jedes Etikett, das mit dem von Ihnen gezeichneten Etikett kollidieren könnte, jedes Etikett, das mit ihnen kollidieren könnte usw. . Im Allgemeinen müssen Sie entweder alle Beschriftungen gleichzeitig berechnen, indem Sie sich jedes Feature ansehen, oder die Karte in Blöcke mit Beschriftungen aufteilen, die in jedem Block berechnet werden.

Standardmäßig verwendet GeoWebCache einen 4x4-Kachelblock, der als "metatile" bezeichnet wird. Wenn Sie eine Kachel anfordern, die sich nicht im Cache befindet, fordert GWC die gesamte Metatile als ein großes Bild vom Backend an und schneidet die Metatile dann in Kacheln, die zwischengespeichert werden. Sie können den Metatile-Faktor beim Einrichten einer Ebene anpassen. Größere Metatiles sorgen für besser aussehende Beschriftungen, erhöhen jedoch die Latenz eines Cache-Fehlers. Wenn Sie im Back-End keine Etikettenkollisionsauflösung verwenden, können Sie die Metatilierung auf 1x1 festlegen.

Sie können GWC auch anweisen, eine Rinne um die Metatile hinzuzufügen, was zusätzlichen Platz bietet, der abgeschnitten wird. Dies ist riskant, wenn Sie die Auflösung von Etikettenkollisionen aktiviert haben, da ein Etikett möglicherweise anders positioniert oder sogar vollständig auf der anderen Seite einer flüchtigen Grenze entfernt wird. Wenn Sie Etiketten haben, die vollständig fixiert sind und niemals unterdrückt werden, um Kollisionen zu vermeiden, können Sie eine breite Rinne verwenden, damit die Etiketten die Kachelgrenzen überschreiten können. Dies hat Leistungskosten, da GeoServer eine größere Kachel rendern muss.

Sie können Metatiling und Rinne auf der Registerkarte Kachelebene der Ebenenkonfiguration festlegen, oder die Standardeinstellung, die für neue Ebenen verwendet wird, kann auf der Seite Caching-Standardeinstellungen festgelegt werden.

Um die Konfliktlösung zu deaktivieren, können Sie die conflictResolutionHerstelleroption in Ihren Stilen verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.