отображать легенду с помощью Geotools JMapFrame

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

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

Спасибо!


person stevenhz    schedule 29.01.2016    source источник


Ответы (1)


Вам нужно перебрать Styles FeatureTypeStyless Rules Symbolizers и нарисовать репрезентативную функцию для каждого из них. Что-то типа:

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.

person Ian Turton    schedule 30.01.2016