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