hey guys,

I need some help. I tried to intersect two feature collections. It should be
an overlay or explicitly a clipping process. I want to create new features
from intersection and add all features from both collection to it. I have
the following method. But it does not work proberly. What am I doing wrong?
I also read the help you mentioned, jody. But I still have problems.

        /**
         * method to intersect two layer with each other and write it into a 
shape
file
         * @return 
         * @throws Exception 
         */
        public File intersect(GISViewer viewer, FeatureSource<SimpleFeatureType,
SimpleFeature> featureSource) throws Exception {

                // initialize feature collection 
                featColl_adminUnit = featureSource.getFeatures(); 
                shapefile = new Shapefile();
                crs_INSPIRE = new CoordReferSyst();

                // create new shape file and reproject old one
                file = shapefile.reprojectToShapefile(viewer);
                store = FileDataStoreFinder.getDataStore(file);
                featSource_input = store.getFeatureSource();
                featColl_input = featSource_input.getFeatures();

                // create a new shape file with a slight modified schema
                fileNew = new File("TempFile.shp");
                factory = new ShapefileDataStoreFactory();
                create = new HashMap<String, Serializable>();
                create.put("url", fileNew.toURI().toURL());
                create.put("create spatial index", Boolean.TRUE);        
                newDataStore = factory.createNewDataStore(create);

                // get schema from feature source of input and administrative 
unit
                schema_input = featSource_input.getSchema();
                schema_adminUnit = featureSource.getSchema();

                sftb = new SimpleFeatureTypeBuilder();
                att_input = schema_input.getAttributeDescriptors();
                att_adminUnit = schema_adminUnit.getAttributeDescriptors();

                List<AttributeDescriptor> attributeList = new
ArrayList<AttributeDescriptor>();
                attributeList.addAll(att_input);
                attributeList.addAll(att_adminUnit);

                sftb.init(schema_output);
                sftb.setAttributes(attributeList);
                sftb.setCRS(crs_INSPIRE.crs_ETRS89_LAEA());
                sftb.setName(featSource_input.getName());

                schema_output = sftb.buildFeatureType();

                newDataStore.createSchema(schema_output);

                // carefully open an iterator and writer to process the results
                transaction = new DefaultTransaction("Convert");
                writer = 
newDataStore.getFeatureWriterAppend(schema_output.getTypeName(),
transaction);

                // initialize feature iterator
                iterator_input = featColl_input.features();
                iterator_adminUnit = featColl_adminUnit.features();

                Geometry out_geometry = null;

                try {
                        while (iterator_adminUnit.hasNext()) {

                                feature_adminUnit = iterator_adminUnit.next();
                                geometry_adminUnit = (Geometry)
feature_adminUnit.getAttribute("geometryAU");

                                while (iterator_input.hasNext()) {

                                        feature_input = iterator_input.next();
                                        copy = writer.next();
                                        geometry_input = (Geometry) 
feature_input.getDefaultGeometry();

                                        if 
(geometry_adminUnit.intersects(geometry_input)) {
                                                part_geometry = 
geometry_adminUnit.intersection(geometry_input);
                                                out_geometry = (out_geometry == 
null) ? part_geometry :
out_geometry.union(part_geometry);
                                        }

                                        if (out_geometry != null) {

                                                //we verify the geometry is a 
multi geometry
                                                Class geoClass = 
out_geometry.getClass();

                                                if (geoClass == Point.class) {
                                                } else if (geoClass == 
MultiPoint.class) {
                                                } else if (geoClass == 
LineString.class) {
                                                } else if (geoClass == 
MultiLineString.class) {
                                                } else if (geoClass == 
Polygon.class) {
                                                } else if (geoClass == 
MultiPolygon.class) {
                                                }

                                                GeometryFactory gf = new 
GeometryFactory();

                                                if (out_geometry instanceof 
Point) {
                                                        out_geometry = 
gf.createMultiPoint(new Point[]{(Point)
out_geometry});
                                                } else if (out_geometry 
instanceof LineString) {
                                                        out_geometry = 
gf.createMultiLineString(new LineString[]{(LineString)
out_geometry});
                                                } else if (out_geometry 
instanceof Polygon) {
                                                        out_geometry = 
gf.createMultiPolygon(new Polygon[]{(Polygon)
out_geometry});
                                                }                               
        
                                        }
                                        copy.setDefaultGeometry(out_geometry);
                                        writer.write();

                                }
                        }

                        transaction.commit();
                        JOptionPane.showMessageDialog(null, "Convert to 
Administrative Unit
complete");
                } catch (Exception problem) {
                        problem.printStackTrace();
                        transaction.rollback();
                        JOptionPane.showMessageDialog(null, "Convert to 
Administrative Unit
failed");
                } finally {
                        writer.close();
                        iterator_adminUnit.close();
                        iterator_input.close();
                        transaction.close();
                }
                return fileNew;
        }
-- 
View this message in context: 
http://osgeo-org.1803224.n2.nabble.com/Intersect-two-features-and-modelling-new-one-including-attributes-tp5201837p5301490.html
Sent from the geotools-gt2-users mailing list archive at Nabble.com.

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to