2016-01-29 23 views
1

Кому-нибудь дается несколько советов о том, как отображать легенду для шейп-файла в JMapFrame из Geotools? Я уже создал стиль для шейп-файла, и мне нужен способ рассказать пользователям о том, как определяется стиль, из чего вытекает необходимость легенды.показать легенду с Geotools JMapFrame

Существует пакет org.geotools.legend. Но я не знаю, как его использовать.

Спасибо!

ответ

1

Вам необходимо пройти через Style s FeatureTypeStyles s Rule s Symbolizer s и нарисовать представительную функцию для каждого из них. Что-то вроде:

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); 
     } 
    } 
    } 

И затем вы можете нарисовать эти изображения на JPanel или карту.

Для полностью обработанного примера см., Как GeoServer создает ответ на getLegendGraphic request.

Смежные вопросы