Sure. The issue tracker is here: - http://jira.codehaus.org/browse/GEOT
Sign up (these are the same steps you use to report an issue BTW). Create an issue along the lines of "LeanFeatureCollection implementation", and attach your code. While I could create the issue myself and attach your code as coming from email it is easier for me to accept via Jira as it is then a clearly your intent to make the code available. There are step by step instructions for reporting an issue in the user guide: - http://docs.codehaus.org/display/GEOTDOC/10+Communication+and+Support With respect to Java3D there was a summer of code project (still on spike) that may be an interesting starting point. - http://svn.osgeo.org/geotools/trunk/spike/zzorn Jody On 23/04/2010, at 2:46 AM, Oliver Gottwald wrote: > Jody, > > Please send me the steps for posting a patch. I have multiple things going > on multiple fronts so possible it would formulate faster if you head up the > patch. I still would like to know the process. Just let me know how you > want to proceed. > > From my Lean example it does not take into account filters or queries. I > guess that is partially why I named it with Lean :-) > > Over the last 6 months this forum has been really helpful. I'm really > pleased that you would like to add some of my efforts. > > Another thing that I've built but need to extract out into a simple example > is an acetate layer implementation (for drawing graphics over layers). In > time I will get an example out there. > > Also I've briefly looked at integration of geotools with Java3d via a couple > simple programs. > I see that in the future as being something I work more on. > > Oliver > > -----Original Message----- > From: "Jody Garnett" <[email protected]> > Sent: Thursday, April 22, 2010 9:56am > To: "Oliver Gottwald" <[email protected]> > Cc: "Andrea Aime" <[email protected]>, "geouser" > <[email protected]> > Subject: Re: [Geotools-gt2-users] What FeatureCollection for Large Data Sets?? > > Hi Oliver: > > Andrea sent me over to say hi; I was looking at > http://jira.codehaus.org/browse/GEOT-3051 today (trying to make a few less > casts and generics for those using GeoTools - especially when learning) and > he sent me in your direction. > > I am one of the developer enthusiastic about providing a selection of > implementation for datastore implementors; and GeoTools users to work from. > And would be keen to gather up implementations like this for the code base. > > Could I ask you to submit this as a patch? > > I am also really keen to see an implementation backed onto a JTS Spatial > index :-) > > As for DefaultFeatureColleciton it originally had a HashMap which was faster; > but it was changed to a TreeMap (sorted by feature id) to better match > shapefile which also keeps its features in order. What can I say we were > defining an API at a time; and now that it is works we should encourage a > range of implementations to suite different tasks. > > Jody > > On 21/04/2010, at 7:49 AM, Oliver Gottwald wrote: > >> Andrea thanks again for your help. A colleague and I cranked this out a >> little while ago. >> >> The following is a Lean(Low Processing) Solution to population of a >> FeatureCollection: >> Minimal Testing..... >> >> Below is the following: LeanFeatureCollection.java, LeanFeatureSource.java, >> and a snipped from a Test Cast: >> >> //LeanFeatureCollection >> >> package org.geotools.demo; >> >> >> import java.util.ArrayList; >> import java.util.Iterator; >> import java.util.List; >> import java.util.NoSuchElementException; >> >> import org.geotools.feature.FeatureIterator; >> import org.geotools.feature.collection.AbstractFeatureCollection; >> import org.geotools.geometry.jts.ReferencedEnvelope; >> import org.opengis.feature.simple.SimpleFeature; >> import org.opengis.feature.simple.SimpleFeatureType; >> import org.opengis.geometry.BoundingBox; >> >> >> >> @SuppressWarnings("unchecked") >> public class LeanFeatureCollection extends AbstractFeatureCollection { >> >> private List<SimpleFeature> features = new ArrayList<SimpleFeature>(); >> private ReferencedEnvelope bounds = null; >> >> protected LeanFeatureCollection(SimpleFeatureType schema) { >> super(schema); >> } >> >> >> @Override >> public int size() { >> return features.size(); >> } >> >> @Override >> protected Iterator openIterator() { >> Iterator it = features.iterator(); >> return it; >> } >> >> @Override >> protected void closeIterator(Iterator close) { >> // nothing to do there >> } >> >> >> @Override >> public boolean add(SimpleFeature f) { >> >> //maintain the bounds >> BoundingBox boundingBox = f.getBounds(); >> if (bounds == null){ >> bounds = new ReferencedEnvelope( >> boundingBox.getMinX(), boundingBox.getMaxX(), >> boundingBox.getMinY(), boundingBox.getMaxY(), >> schema.getCoordinateReferenceSystem()); >> } else { >> bounds.expandToInclude(boundingBox.getMinX(), >> boundingBox.getMinY()); >> bounds.expandToInclude(boundingBox.getMaxX(), >> boundingBox.getMaxY()); >> } >> >> return features.add(f); >> } >> >> @Override >> public void clear() { >> // maintain the bounds >> bounds = null; >> super.clear(); >> } >> >> @Override >> public FeatureIterator<SimpleFeature> features() { >> return new LeanFeatureCollectionIterator(features); >> } >> >> @Override >> public ReferencedEnvelope getBounds() { >> return bounds; >> } >> >> @Override >> public boolean isEmpty() { >> return features.isEmpty(); >> } >> >> private class LeanFeatureCollectionIterator implements >> FeatureIterator<SimpleFeature> { >> private Iterator<SimpleFeature> iter; >> >> public LeanFeatureCollectionIterator(List<SimpleFeature> features) { >> iter = features.iterator(); >> } >> >> public void close() { >> // do nothing >> } >> >> public boolean hasNext() { >> return iter.hasNext(); >> } >> >> public SimpleFeature next() throws NoSuchElementException { >> return iter.next(); >> } >> } >> } >> >> >> //LeanFeatureSource.java >> package org.geotools.demo; >> >> import java.awt.RenderingHints.Key; >> import java.io.IOException; >> import java.util.HashSet; >> import java.util.Set; >> >> import org.geotools.data.DataAccess; >> import org.geotools.data.FeatureListener; >> import org.geotools.data.FeatureSource; >> import org.geotools.data.Query; >> import org.geotools.data.QueryCapabilities; >> import org.geotools.data.ResourceInfo; >> import org.geotools.feature.CollectionListener; >> import org.geotools.feature.FeatureCollection; >> import org.geotools.geometry.jts.ReferencedEnvelope; >> import org.opengis.feature.simple.SimpleFeature; >> import org.opengis.feature.simple.SimpleFeatureType; >> import org.opengis.feature.type.Name; >> import org.opengis.filter.Filter; >> >> >> public class LeanFeatureSource implements FeatureSource<SimpleFeatureType, >> SimpleFeature> { >> >> private LeanFeatureCollection features; >> >> public LeanFeatureSource(LeanFeatureCollection featureCollection) { >> this.features = featureCollection; >> } >> >> >> public void addFeatureListener(FeatureListener listener) { >> // throw new UnsupportedOperationException(); >> } >> >> public ReferencedEnvelope getBounds() throws IOException { >> return features.getBounds(); >> } >> >> public ReferencedEnvelope getBounds(Query query) throws IOException { >> return features.getBounds(); >> } >> >> public int getCount(Query query) throws IOException { >> return features.size(); >> } >> >> public DataAccess<SimpleFeatureType, SimpleFeature> getDataStore() { >> return null; >> } >> >> public FeatureCollection<SimpleFeatureType, SimpleFeature> getFeatures() >> throws IOException { >> return features; >> } >> >> public FeatureCollection<SimpleFeatureType, SimpleFeature> getFeatures( >> Query query) throws IOException { >> return features; >> } >> >> public FeatureCollection<SimpleFeatureType, SimpleFeature> getFeatures( >> Filter filter) throws IOException { >> return features; >> } >> >> public ResourceInfo getInfo() { >> return null; >> } >> >> public Name getName() { >> return null; >> } >> >> public QueryCapabilities getQueryCapabilities() { >> return null; >> } >> >> public SimpleFeatureType getSchema() { >> return features.getSchema(); >> } >> >> public Set<Key> getSupportedHints() { >> return new HashSet<Key>(); >> } >> >> public void removeFeatureListener(FeatureListener listener) { >> // throw new UnsupportedOperationException(); >> } >> } >> >> >> //Test Case Snipped >> //let IDE define imports >> //getPointStyle set to null >> public class DisplayPoint { >> static StyleFactory styleFactory = >> CommonFactoryFinder.getStyleFactory(null); >> static FilterFactory filterFactory = >> CommonFactoryFinder.getFilterFactory(null); >> >> static final CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84; >> static final int MAX_NAME_LENGTH = 20; >> >> public static void main(String[] args) throws Exception { >> DisplayPoint displayPoint = new DisplayPoint(); >> //TreeMapHandler - Object I have internally for TreeMap Handling >> TreeMapHandler tmHandler = new TreeMapHandler(); >> //data.csv file of xyz points >> //allPoints is a TreeMap of XyzPoint Objects >> TreeMap allPoints = tmHandler.getTreeMap("/data.csv"); >> >> LeanFeatureCollection collection = >> displayPoint.getPointFeature(allPoints); >> >> LeanFeatureSource featureSource = new LeanFeatureSource(collection); >> Style pointStyle = displayPoint.createPointStyle(); >> MapLayer m = new DefaultMapLayer(featureSource, pointStyle); >> >> MapContext map = new DefaultMapContext(); >> map.setTitle("The Point"); >> map.addLayer(featureSource, pointStyle); >> >> JMapFrame.showMap(map); >> } >> >> >> public LeanFeatureCollection getPointFeature(TreeMap allPoints) throws >> Exception { >> SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); >> typeBuilder.setName("mytype"); >> typeBuilder.setCRS(crs); >> typeBuilder.add("route", Point.class); >> typeBuilder.length(MAX_NAME_LENGTH).add("name", String.class); >> final SimpleFeatureType TYPE = typeBuilder.buildFeatureType(); >> >> GeometryFactory factory = JTSFactoryFinder.getGeometryFactory(null); >> SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE); >> >> LeanFeatureCollection collection = new LeanFeatureCollection(TYPE); >> >> Collection cl = allPoints.values(); >> Iterator it = cl.iterator(); >> while (it.hasNext()){ >> XyzPoint xyz = (XyzPoint)it.next(); >> Point point = factory.createPoint( new >> Coordinate(xyz.getX(),xyz.getY())); >> >> featureBuilder.set("name",xyz.getName()); >> featureBuilder.add(point); >> >> SimpleFeature f = featureBuilder.buildFeature(null); >> >> >> >> collection.add(f); >> } >> return collection; >> } >> >> private Style createPointStyle() { >> return null; >> } >> } >> ------------------------------------------------------------------------------ >> _______________________________________________ >> Geotools-gt2-users mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users >
------------------------------------------------------------------------------
_______________________________________________ Geotools-gt2-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
