Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 23 October 2014 11:12

0liv
Participant occasionnel
Date d'inscription: 27 Nov 2013
Messages: 29

Légende en fonction de l'échelle dans SLD

Bonjour à tous,
J'ai un problème auquel je suis confronté régulièrement depuis que je fais de la mise en forme de données pour une diffusion en WMS:

Je dois afficher une couche, ici des cours d'eau, et je désire changer la symbologie en fonction de l'échelle afin que la représentation soit esthétique à différents seuils de zoom. Avec les paramètres "MinScaleDenominator" et "MaxScaleDenominator". Je créé donc plusieurs règles, chacune étant limité par une échelle max et min, et je définis mes propriétés graphiques pour chaque règle.

Code:

<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
<sld:NamedLayer>
<sld:Name>cagm-cagm-coursdeau-troncon_cd2</sld:Name>
<sld:UserStyle>
<sld:Name>Defaut</sld:Name>
<sld:FeatureTypeStyle>

<sld:Rule>
<sld:Name>class_ext-gen9020</sld:Name>
<sld:Title>Cours d'eau</sld:Title>
<sld:MinScaleDenominator>500000</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>8080000</sld:MaxScaleDenominator>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke-dasharray">10.0 0</sld:CssParameter>
<sld:CssParameter name="stroke">#0000FF</sld:CssParameter>
<sld:CssParameter name="stroke-width">0.5</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>

<sld:Rule>
<sld:Name>Defaut</sld:Name>
<sld:Title>Cours d'eau</sld:Title>
<sld:MinScaleDenominator>120000</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>499000</sld:MaxScaleDenominator>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke-dasharray">10.0 0</sld:CssParameter>
<sld:CssParameter name="stroke">#0000FF</sld:CssParameter>
<sld:CssParameter name="stroke-width">1</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>

<sld:Rule>
<sld:Name>class_ext-gen7635</sld:Name>
<sld:Title>Cours d'eau</sld:Title>
<sld:MinScaleDenominator>250</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>121200</sld:MaxScaleDenominator>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke-dasharray">10.0 0</sld:CssParameter>
<sld:CssParameter name="stroke">#0000FF</sld:CssParameter>
<sld:CssParameter name="stroke-width">2</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>
</sld:StyledLayerDescriptor>

Le problème, c'est qu'une fois affichée, la requête GetLegendGraphic renvoit les 3 classes dans la légende, peut importe le seuil de zoom. J'obtiens donc 3 fois la classe "Cours d'eau" avec une symbologie différente pour chaque classe:
[img]http://img4.hostingpics.net/pics/5030812014102311h1024.png[/img]

Si je supprime les balises <name> et <title>, la légende contient tout de même 3 éléments non nommés (je n'en ai supprimé que 2 dans l'exemple):
[img]http://img4.hostingpics.net/pics/3762442014102311h0939.png[/img]

Ma question est donc, est ce que vous savez si il est possible de créer des classes de symbologie graphique, qui s'affichent dans la légende en fonction de l'échelle? A savoir que la légende n'affiche que la classe qui est comprise dans le seuil de zoom actuel de l'utilisateur de l'application.

Merci d'avance!

Hors ligne

 

Pied de page des forums

Powered by FluxBB