2016-03-21 19 views
1

Çok noktalı bir geometrim var (birden çok nokta içeren tek bir geometri) ve her bir noktaya bir etiket yerleştirmek istiyorum (etiket her zaman aynıdır). Bunu SLD ile başarmak mümkün mü? Şu anda etiket sadece tek bir noktada görüntülenir.SLD - her bir çoklu işaretin üzerindeki yer etiketi

Benim SLD şöyle görünür: Varsayılan olarak

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

cevap

0

GeoServer etiket motor aynı özelliği birden çok kez etiketleyemezler için bir sürü sorun gider, bu nedenle bu zor!

Sonunda aşağıdaki (çirkin) SLD'yi kullanarak yönetilen:

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

Ancak bu sizin en büyük çok noktasında var kaç puan biliyor varsayar ve bu oldukça küçük (aksi takdirde bir çok şey & yapıştırın) yapıştırın.

Aslen vertices function veya muhtemelen labelAllGroup vendor option'u kullanabilmeyi umuyordum, ancak ne yazık ki birden çok nokta ile çalıştı.

+0

Önerileriniz için teşekkür ederiz. Bir geometride kaç tane nokta olacağını bilmiyorum, ama hiç yoktan iyidir. Önerilerinizden sonra, _numGeometries_ ile yinelenen ve tüm geometrinin etiketlerini gösteren bir tür _iterate_ işlevi aramaya gittim, ancak maalesef bulamadı. –