2015-02-08 5 views
1

Я использую geotools, но мой тестовый класс не работает. Я просто хочу отобразить одиночную Linestring на Mapcontent, но когда я добавляю свой DefaultFeatureCollection, я просто получаю ошибки.geotools, DefaultFeatureCollection Ошибка при добавлении в MapContent

Вот мой простой код;

public class Test2 extends JFrame { 
Test2() throws ParseException { 
    super(); 
    Dimension d = new Dimension(400, 400); 
    setMinimumSize(d); 

    MapContent map = new MapContent(); 
    JMapPane mapPane = new JMapPane(map); 

    add(mapPane); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    pack(); 
    setVisible(true); 

    WKTReader wktReader = new WKTReader(); 

    SimpleFeatureTypeBuilder sfTypeBuilder = new SimpleFeatureTypeBuilder(); 

    sfTypeBuilder.setName("testType"); 
    sfTypeBuilder.setCRS(null); 
    sfTypeBuilder.add("pointProperty", LineString.class); 

    SimpleFeatureType featureType = sfTypeBuilder.buildFeatureType(); 

    SimpleFeatureBuilder sfBuilder = new SimpleFeatureBuilder(featureType); 

    sfBuilder.add(wktReader.read("LINESTRING (20 10, 20 30, 50 30)")); 
    SimpleFeature feature = sfBuilder.buildFeature("id1"); 

    DefaultFeatureCollection testColletion = new DefaultFeatureCollection(
      null, null); 
    testColletion.add(feature); 
    System.out.println(testColletion.isEmpty()); 



    StyleBuilder sb = new StyleBuilder(); 
    org.geotools.styling.Style style = sb.createStyle(); 
    Mark mark = sb.createMark(StyleBuilder.MARK_CIRCLE, Color.RED, 
      Color.BLACK, 1); 
    PointSymbolizer pointSymb = sb.createPointSymbolizer(sb.createGraphic(
      null, mark, null, 1, 15, 0)); 
    FeatureTypeStyle fts = sb 
      .createFeatureTypeStyle((Symbolizer) pointSymb); 
    style.featureTypeStyles().add(fts); 
    org.geotools.styling.Font font = sb 
      .createFont("Arial", false, true, 12); 
    TextSymbolizer ts = sb.createTextSymbolizer(Color.BLACK, font, "name"); 
    fts.rules().get(0).symbolizers().add(ts); 

    // FeatureLayer der Karte hinzufügen 

    Layer layer1 = new FeatureLayer(testColletion, style); 


      // Error when i add the Layer to the Map and run the Main     //Method) 
    map.addLayer(layer1); 
    System.out.println(map.layers()); 


} 

public static void main(String[] args) { 
    try { 
     Test2 t = new Test2(); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

} 
+0

Я не могу отображать содержимое на карте .... Я не знаю, как обращаться с другой коллекцией, как SimpleFeatureCollection, потому что ее интерфейс ... Может быть, мне нужен SimpleFeatureCollection, чтобы добавить мою Linestring на карту ... –

+1

какие ошибки вы получаете? Вы можете получить больше/лучших ответов, когда показываете свои ошибки, вместо того, чтобы ожидать, что все будут запускать ваш код в первую очередь. – cello

ответ

1

Ошибка - Could not find 'name' in the FeatureType (http://www.opengis.net/gml:testType), available attributes are: [pointProperty] на самом деле довольно самообучающийся. Вы использовали атрибут в своем стиле, который не входит в вашу функцию. Поэтому либо добавьте имя в точку, либо закомментируйте строку, в которой вы добавляете текстовый символ:

// TextSymbolizer ts = sb.createTextSymbolizer(Color.BLACK, font, "name"); 
// fts.rules().get(0).symbolizers().add(ts); 

И все будет работать нормально.