2016-08-08 15 views
0

Ich versuche, ein Programm für die Vektorisierung zu implementieren, wo ich folgende Kompilierungszeitfehler habe. Ich benutze GeoTools 14.4. Ich kopierte 2 Klassen RasterToVectorFactory.java und RasterToVectorProcess.java und der Rest ist mein GeoTiff 14,4-Code, wo ich unter Fehler habenDie Methode hinzufügen (SimpleFeature) ist nicht definiert für den Typ SimpaleFeatureCollection

private SimpleFeatureCollection assembleFeatures(GridCoverage2D grid, int band, 
     boolean insideEdges, SimpleFeatureType type, ProgressListener monitor) { 
    if (monitor == null) { 
     monitor = new NullProgressListener(); 
    } 

    SimpleFeatureCollection features = FeatureCollections.newCollection(); 

    SimpleFeatureBuilder builder = new SimpleFeatureBuilder(type); 

    Point2D p = new Point2D.Double(); 
    double[] bandData = new double[grid.getNumSampleDimensions()]; 

    polygonizer.add(lines); 
    Collection polygons = polygonizer.getPolygons(); 
    final int size = polygons.size(); 
    try { 
     float progressScale = 100.0f/size; 
     monitor.started(); 

     int index = 0; 
     for (Iterator i = polygons.iterator(); i.hasNext(); index++) { 

      if (monitor.isCanceled()) { 
       throw new CancellationException(); 
      } 
      monitor.progress(progressScale * index); 

      Polygon poly = (Polygon) i.next(); 
      InteriorPointArea ipa = new InteriorPointArea(poly); 
      Coordinate c = ipa.getInteriorPoint(); 
      Point insidePt = geomFactory.createPoint(c); 

      if (!poly.contains(insidePt)) { 
       // try another method to generate an interior point 
       boolean found = false; 
       for (Coordinate ringC : poly.getExteriorRing().getCoordinates()) { 
        c.x = ringC.x + cellWidthX/2; 
        c.y = ringC.y; 
        insidePt = geomFactory.createPoint(c); 
        if (poly.contains(insidePt)) { 
         found = true; 
         break; 
        } 
       } 

       if (!found) { 
        throw new IllegalStateException("Can't locate interior point for polygon"); 
       } 
      } 

      p.setLocation(c.x, c.y); 
      bandData = grid.evaluate(p, bandData); 

      if (!isOutside(bandData[band])) { 
       builder.add(poly); 

       if (insideEdges) { 
        builder.add(bandData[band]); 
       } else { 
        builder.add(INSIDE_FLAG_VALUE); 
       } 
       features.add(builder.buildFeature(null)); 
       // here it gives error "The method add(SimpleFeature) is undefined for the type SimpaleFeatureCollection" 
      } 
     } 
     return features; 
    } finally { 
     monitor.complete(); 
    } 
} 

Der vollständige Quellcode ist here

Eigentlich.

Verfahren add (SimpleFeature) undefiniert ist für den Typ SimpaleFeatureCollection

+0

bei Javadoc Suche nach [SimpleFeatureCollection] (http://docs.geotools.org/stable/javadocs/org/geotools/data/simple/ SimpleFeatureCollection.html) und es ist superinterface [FeatureCollection] (http://docs.geotools.org/stable/javadocs/org/geotools/feature/FeatureCollection.html), ich sehe keine 'add' Methode – binoternary

Antwort

0

ich versuchte folgenden Code als Behelfslösung verwenden.

Aber der Autor, der Code auf seiner Website zur Verfügung gestellt, sagt der Code wird nicht funktionieren !!

//features.add(builder.buildFeature(null)); 

//add 
System.out.println("adding..."); 
SimpleFeature feature = builder.buildFeature(null); 
((Collection<SimpleFeature>) features).add(feature); 
0

ändern Erklärung SimpleFeatureCollection zu DefaultFeatureCollection Klasse

DefaultFeatureCollection features = new DefaultFeatureCollection("your_id",type);