2015-10-20 27 views
1

一般:
是否有可能以不同的樣式從一個單一的WMS查詢一些WMS功能基礎上,定製列表過濾器或其他參數?特別

在WMS查詢,返回的功能集合的光柵(即風格的紅色圓點點),wms features
我希望的GeoServer到differrently風格(藍點)的確定只是一個特徵與WMS發送HTTP-REQ參數要求
enter image description here
保持其他集合中的默認風格
並避免使用兩根WMS的重疊:
enter image description here造型由WMS請求參數

+0

正如[http://docs.geoserver.org/stable/en/user/styling/sld-working.html]中所述:「可以使用SLD_BODY =樣式直接在WMS GetMap GET請求中提供SLD文檔參數,SLD XML必須是URL編碼的「,對於您來說它是否是一個有效的場景,通過適當的過濾器爲每個請求動態創建SLD? – Fbma

+0

@Fbma我認爲這將全球重新設置圖層,我編輯我的Q,因爲它可能不清楚.. – aleclofabbro

+0

好吧,我明白了......重疊可以通過設置第一個過濾器作爲第二個的否定;) – aleclofabbro

回答

3

一個更快的(也可能是更容易)的方式比@ FMBA的建議是使用默認顏色和第二時間過濾和高亮風格兩次請求層,一旦。您可以在一個請求中執行此操作,也可以發出兩個請求,以便瀏覽器可以緩存默認圖層並僅重新獲取高光。

對於它看起來像第一個請求:

http://....../wms?service=wms&.....&layers=dots,dots&styles=,highlight&cql_filter=INCLUDE;INTERSECT(the_geom,%20POINT%20(-74.817265%2040.5296504)) 

這就要求層(點)兩次,一次用默認的樣式(或者你可以在這裏使用一個命名樣式太),然後用突出風格。最後,你必須提供兩個過濾器(第一個只是返回所有內容)。

而在第二個,你會像往常一樣添加另一個圖層。

+0

這絕對比我的更好更簡單的解決方案! ;) – Fbma

+0

太棒了,你剛剛擊中它! – aleclofabbro

+0

@iant:原Q中的例子可能會引起誤解,導致«selected»風格與«unselected»風格相同,是否適用於不同的形狀或僅與兩個wms重疊?[編輯Q進一步澄清] – aleclofabbro

1

您可以同時使用這兩個過濾器和變量替換。 你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"> 
    <!-- a Named Layer is the basic building block of an SLD document --> 
    <NamedLayer> 
    <Name>default_point</Name> 
    <UserStyle> 
    <!-- Styles can have names, titles and abstracts --> 
     <Title>Default Point</Title> 
     <Abstract>A sample style that draws a point</Abstract> 
     <FeatureTypeStyle> 
     <Rule> 
      <Name>rule1</Name> 
      <Title>Red Square</Title> 
      <PointSymbolizer> 
       <Graphic> 
       <Mark> 
        <WellKnownName>square</WellKnownName> 
        <Fill> 
        <CssParameter name="fill">#FF0000</CssParameter> 
        </Fill> 
       </Mark> 
       <Size>6</Size> 
      </Graphic> 
      </PointSymbolizer> 
     </Rule> 
     <Rule> 
      <Name>rule2</Name> 
      <Title>Blue Square</Title> 
      <ogc:Filter> 
      <ogc:PropertyIsEqualTo> 
      <ogc:PropertyName>name</ogc:PropertyName> 
      <ogc:Function name="env"> 
       <ogc:Literal>element</ogc:Literal> 
      </ogc:Function> 
      </ogc:PropertyIsEqualTo> 
      </ogc:Filter> 
      <PointSymbolizer> 
       <Graphic> 
       <Mark> 
        <WellKnownName>square</WellKnownName> 
        <Fill> 
        <CssParameter name="fill">#0000FF</CssParameter> 
        </Fill> 
       </Mark> 
       <Size>6</Size> 
      </Graphic> 
      </PointSymbolizer> 
     </Rule> 
     </FeatureTypeStyle> 
    </UserStyle> 
    </NamedLayer> 
</StyledLayerDescriptor> 

看到,我們在「ENV」參數使用稱爲「元素」(如我們在SLD中定義)的參數(在請求結束)至極,你可以用「name_yo_want_to_filter」的屬性「名」的值賦給在WMS請求的值,因此只有特徵將呈現爲藍色,像這樣:

http://your_geoserver/wms?LAYERS=your_layer&STYLES=&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG%3A25830&BBOX=177329.45520721,4198063.2254456,177681.24924735,4198495.164411&WIDTH=417&HEIGHT=512&env=element:name_yo_want_to_filter 

記住,「FID '不會是一個有效的參數,因爲它通常是隱藏的,所以geoserver不會接受它的'PropertyIsEqualTo'過濾器。

編號:http://docs.geoserver.org/latest/en/user/styling/sld-extensions/substitution.html 編號:http://docs.geoserver.org/latest/en/user/styling/sld-reference/filters.html

+0

好吧, @iant的aswer真的很適合我的特定問題,但是+1也適用於您的非常有用的提示! – aleclofabbro