对于SimpaleFeatureCollection类型,未定义方法add(SimpleFeature)

时间:2016-08-08 05:52:13

标签: java geotools geotiff

我正在尝试实现一个用于向量化的程序,其中我有以下编译时错误。我使用的是GeoTools 14.4。

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

完整的源代码是here

实际上我复制了2个类RasterToVectorFactory.javaRasterToVectorProcess.java,其余的是我的GeoTiff 14.4代码,我的错误如下。

  

对于类型SimpaleFeatureCollection

,方法add(SimpleFeature)未定义

2 个答案:

答案 0 :(得分:0)

我尝试使用以下代码作为解决方法。

但是在他的网站上提供代码的作者说代码不起作用!!

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

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

答案 1 :(得分:0)

将SimpleFeatureCollection的声明更改为DefaultFeatureCollection类

{{1}}