Hi all,

I caught a typo in my code snippet that I just sent regarding the spatial
query.  It should have read where location replaces newGeometry:

     Geometry geom = (Geometry)
 feature.getAttribute(schema.getGeometryDescriptor().getLocalName());
     if (location.intersects(geom)) {
       fCollection.add(feature);
     }
   }

I was cutting and pasting and put the wrong snippet in the email, so this
typo did not cause the problem i'm experiencing.

Sorry about the possible confusion,
Wade



> Hi all,
>
> I’m attempting to run a program that dynamically adds and modifies
> features in a shapefile, where I decide on which features get modified
> through a spatial index query with a Quadtree.
>
> When testing the code, if I:
>
> (1) create a new feature,
>
>   fStore.addFeatures(DataUtilities.collection( newFeature ));
>   spatialIndex.insert( bounds, newFeature );
>
> (2) query that feature’s location (spatialIndex.query(…)) to get the
> feature, and then
>
> (3) try to remove that feature in the same instance (through
> featureStore.removeFeatures()),
>
> It creates the feature fine, but doesn’t remove it.  However, if I run two
> separate instances of my class where I create the feature in the first,
> and then remove it in the second, it works fine.  E.g.,
>
>   MyFeatureClass mfc = new MyFeatureClass ();
>   mfc.createFeature();
>   MyFeatureClass mfc2 = new MyFeatureClass ();
>   mfc2.modifyFeature();
>
>
> Checking into this further, I noticed that this only happens in my code
> when I use the Quadtree spatial index to query my features.  E.g., if I
> query my spatial index based on the coordinate of where I created my new
> feature,
>
>   Point location = geofactory.createPoint(coord);
>   List<SimpleFeature> hits =
> spatialIndex.query(location.getEnvelopeInternal());
>   SimpleFeature feature;
>   for (int i = 0; i < hits.size(); i++) {
>     feature= hits.get(i);
>     Geometry geom = (Geometry)
> feature.getAttribute(schema.getGeometryDescriptor().getLocalName());
>     if (newGeometry.intersects(geom)) {
>       fCollection.add(feature);
>     }
>   }
>
>   Set<FeatureId> removeFeatureSet = new HashSet<FeatureId>();
>   FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2( null );
>
>   iterator = fCollection.features();
>   while( iterator.hasNext()){
>     SimpleFeature feature = iterator.next();
>     removeFeatureSet.add( ff.featureId(feature.getID()));
>     spatialIndex.remove( bounds, feature );
>   }
>   removeFilter = ff.id( removeFeatureSet);
>   fStore.removeFeatures(removeFilter);
>
>
>
> Alternatively, if I query my to-remove features straight from the feature
> source instead of getting them from the spatial index, it works fine.
> E.g.,
>
>   Filter filter= ff.intersects(ff.property(geometryPropertyName),
> ff.literal(newGeometry));
>   fCollection = fSource.getFeatures( filter );
>   …(as above)… removeFeatures(removeFilter);
>
> I would like to use a Spatial Index for querying because I’ll be doing a
> lot of location-based queries for features on a large dataset, but I also
> need to modify the shapefile frequently.  Can the JTS Quadtree be used to
> query and return features that will then get modified in the same
> instance?  Or do I need to get features straight from the feature source
> insead of the spatial index when modifying?  If anyone has any suggestions
> I would greatly appreciate it.  I can send the full code if anyone would
> like to see.
>
> Thanks,
> Wade
>
>
>
> ------------------------------------------------------------------------------
> Enter the BlackBerry Developer Challenge
> This is your chance to win up to $100,000 in prizes! For a limited time,
> vendors submitting new applications to BlackBerry App World(TM) will have
> the opportunity to enter the BlackBerry Developer Challenge. See full
> prize
> details at: http://p.sf.net/sfu/Challenge
> _______________________________________________
> Geotools-gt2-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>



------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to