Salut,
Bon je vais essayer d'être assez clair quand à mes objectifs et mon problème, c'est pas simple.
Mon but est d'animer en temps (semi) réel (=toutes les secondes) une carto de traffic routier. En gros dans un premier temps je veux faire clignoter des feux.
J'ai donc un shapefile de point (ou polygon rond) représentant mes feux. Je veux ensuite selon un évenement "état de mon feu" changer le style du point n° x(et attention d'un seul point evidemmment).
Donc dans un premier temps, je défini des attributs "N°_Feu" et "Etat" dans mon dbf (lié au shapefile); et je défini des règles de style de mes points dans mon fichier .sld (lié au shape également). J'ai donc qui dit genre : "si mon attribut "Etat" est à 0 alors je suis rouge, si mon attribut "Etat" est à 1 alors je suis vert"...
<!-- RULE FOR GREEN STATE -->
<Rule>
<Name>rule1</Name>
<Filter>
<PropertyIsEqualTo>
<PropertyName>navig</PropertyName>
<Literal>0</Literal>
</PropertyIsEqualTo>
</Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xmlnslink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="file:/C:\DEV\workspace\ExampleGeoToolsAPI\img\fgreen.png"/>
<Format>image/png</Format>
</ExternalGraphic>
<Size>15.0</Size>
</Graphic>
</PointSymbolizer>
</Rule>
Ensuite dans mon code quand je reçois mon évenement "le feux N°1 est à l'état 1" je met à jour l'attribut "Etat" de mon shape. ça se fait très bien avec des filtres :
Filter filter1 = StyledFilters.createCompareEqualFilter("N°_Feu", 1);
//ça defini un filtre qui me retourne uniquement le point de N° feu 1
((FeatureStore)source).modifyFeatures("Etat",Integer.toString(current_state), filter1);
//Pour changer la valeur de l'attribut Etat
Bref voila, donc tout marche bien, sauf que le FeatureStore ne trouve rien de mieux à faire que de changer "en dur", donc directmeent dans le fichier la valeur de l'attribut au lieu de faire le changement en mémoire. Donc ça veut dire que pour X animations, j'ai X écritures dans le fichier !! et ça c pas possible en terme de perf ( et en plus ça plante quand ça va trop vite)
Donc je voulais savoir s'il existait un moyen de changer la valeur d'un attribut d'une feature en mémoire et que ça se répercute sur la map (JMapPane)
Merci
Manu
Partager