This works perfectly! I knew there had to be a simple way to solve this
problem, and your explanation helps me to understand things better. Since
there doesn't appear to be an example of this functionality in the code
snippets I hope this post can help people in the future to be able to use
this simple but essential functionality.
Thank you,
Hari
At 09:59 AM 12/2/2006, Andrea Aime wrote:
>Hari S. Khalsa ha scritto:
>>Does anyone know whether it is possible to read in only the features from
>>a point shapefile that are contained within a specific geometry?
>>I'm trying to read in business locations from a point shapefile that are
>>contained within a polygon using a Geometry filter. I've successfully
>>used the bounding Box filter and so I could use this to get all of the
>>points within the envelope of a polygon. Then I could traverse through
>>these points and get just the ones that are in the polygon. I'd rather
>>not go through this extra processing though. I'm including the (rough)
>>code that I've tried to use but with no success. If it is possible to do
>>what I'm trying, can someone point me at an example or guide me how to
>>modify my code below.
>>Thanks,
>>Hari
>> *public* FeatureCollection getBusinesses(Geometry businessArea, String
>> businessDataset)
>> {
>> *try* {
>> File businessFile = *new* File(businessDataset);
>> URL businessURL = businessFile.toURL();
>>
>> //get feature results
>> ShapefileDataStore store = *new* ShapefileDataStore(businessURL);
>> //feature type name is defaulted to the name of shapefile (without
>> extension
>> String name = store.getTypeNames()[0];
>> FeatureSource source = store.getFeatureSource(name);
>>
>> //source.getBounds().intersects((Envelope)businessArea.getEnvelope());
>>
>> FeatureCollection currentFeatures;
>> FilterFactory filterFactory = FilterFactoryFinder./createFilterFactory/();
>>
>> //GeometryFilter businessAreaFilter =
>> filterFactory.createGeometryFilter(FilterType.GEOMETRY_BBOX);
>> //GeometryFilter businessAreaFilter =
>> filterFactory.createGeometryFilter(FilterType.GEOMETRY_CONTAINS);
>> //GeometryFilter businessAreaFilter =
>> filterFactory.createGeometryFilter(FilterType.GEOMETRY_WITHIN);
>> GeometryFilter businessAreaFilter =
>> filterFactory.createGeometryFilter(AbstractFilter. /GEOMETRY_WITHIN/ );
>>
>> //businessAreaFilter.addRightGeometry(filterFactory.
>> // createBBoxExpression(overLappingEnvelope));
>>
>>
>>businessAreaFilter.addRightGeometry(filterFactory.createAttributeExpression(businessArea.toString()));
>
>Here lies the error, you want to compare against a constant, a literal,
>not an attribute of the features you're loading.
>
>businessAreaFilter.addRightGeometry(filterFactory.createLiteralExpression(businessArea)))
>
>should do the trick (haven't tested the above, let me know).
>
>Cheers
>Andrea
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users