2016-03-21 5 views
1

У меня есть многоточечная геометрия (единственная геометрия, содержащая несколько точек), и я хочу поместить метку на каждую из точек (метка всегда одна и та же). Можно ли добиться этого с помощью SLD? В настоящий момент метка отображается только в одной точке.SLD - метка места на каждой многоточечной связи

Мой SLD выглядит следующим образом:

<?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>Multipoint with labels</Name> 
    <UserStyle> 
     <Title>Default Point</Title> 
     <Abstract>A sample style that draws a point</Abstract> 
     <FeatureTypeStyle> 
     <Rule> 
      <Name>rule1</Name> 
      <Title>Red Square</Title> 
      <Abstract>A 6 pixel square with a red fill and no stroke</Abstract> 
      <PointSymbolizer> 
      <Graphic> 
       <Mark> 
       <WellKnownName>square</WellKnownName> 
       <Fill> 
        <CssParameter name="fill">#FF0000</CssParameter> 
       </Fill> 
       </Mark> 
       <Size>6</Size> 
      </Graphic> 
      </PointSymbolizer> 
      <TextSymbolizer> 
      <Label>NAME</Label> 
      </TextSymbolizer> 
     </Rule> 
     </FeatureTypeStyle> 
    </UserStyle> 
    </NamedLayer> 
</StyledLayerDescriptor> 

ответ

0

По умолчанию метка двигателя GeoServer идет на много хлопот, чтобы не маркировать несколько раз на одной и той же функции, так что это трудно!

я, наконец, удалось его с помощью следующей (безобразно) SLD:

<Rule> 
     <Title>Capitals</Title> 
       <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>0</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
     <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>1</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
     <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>2</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
       <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>3</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
    </Rule> 

Однако это предполагает, что вы знаете, сколько очков есть в вашей самой большой многоточечным, и что весьма мала (в противном случае это много копии & паста).

Я изначально надеялся, что смогу использовать vertices function или, возможно, labelAllGroup vendor option, но, к сожалению, не работал с несколькими точками.

+0

Благодарим вас за предложения. Я не знаю, сколько очков будет в геометрии, но это лучше, чем ничего. После ваших предложений я пошел искать какую-то функцию _iterate_, которая будет проходить через _numGeometries_ и отображать все метки геометрии, но, к сожалению, ее не удалось найти. –