2016-01-29 1 views
1

Quelqu'un doit-il donner des conseils sur l'affichage d'une légende pour un fichier de formes dans JMapFrame de Geotools? J'ai déjà créé le style pour le fichier de formes et j'ai besoin d'un moyen de dire aux utilisateurs comment le style est défini, qui sort le besoin de la légende.afficher la légende avec Geotools JMapFrame

Il existe un package org.geotools.legend. Mais je ne sais pas comment l'utiliser.

Merci!

Répondre

1

Vous devez parcourir les Style s FeatureTypeStyles s Rule s Symbolizer s et dessiner une caractéristique représentative pour chacun d'entre eux. Quelque chose comme:

private void drawLegend(BufferedImage img, Rule r) { 
    for (Symbolizer sym : r.symbolizers()) { 
     SimpleFeature feature = null; 
     if (sym instanceof LineSymbolizer) { 
     LineString line = drawer.line(new int[] { 1, 1, 10, 20, 20, 20 }); 
     feature = drawer.feature(line); 
     } else if(sym instanceof PolygonSymbolizer) { 
     Polygon p = drawer.polygon(new int[] { 1, 1, 1, 18, 18, 18, 18, 1, 1,1 }); 
     feature = drawer.feature(p); 
     } else if(sym instanceof PointSymbolizer || sym instanceof TextSymbolizer) { 
     Point p = drawer.point(10, 10); 
     feature = drawer.feature(p); 
     } 
     if(feature == null) 
     continue; 
     drawer.drawDirect(img, feature, r); 
     Graphics2D gr = img.createGraphics(); 
     gr.setColor(Color.BLACK); 
     if (r.getDescription() != null && r.getDescription().getTitle() != null) { 
     gr.drawString(r.getDescription().getTitle().toString(), 20, 18); 
     } 
    } 
    } 

Et puis vous pouvez dessiner ces images à un JPanel ou la carte.

Pour un exemple complet, voir comment GeoServer crée la réponse à getLegendGraphic request.