I'm working with a shapefile having about 85.000 features. I need to select some of these using a filter and then showing these on a map. Now... If I draw the entire shapefile's features the creation of the map, the zooming and moving around is fast but if I select, even only 100, features from the SimpleFeatureSource, these steps are really slow. Here is how I select, for example, the first 1000 features and then draw:
The execution stuks at Layer layer = new FeatureLayer (features, style);
and at JMapFrame.showMap(map);
public static void main(String[] args) {
File file = JFileDataStoreChooser.showOpenFile("shp", null);
if (file == null) return;
try{
FileDataStore store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource featureSource = store.getFeatureSource();
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
String[] selection = new String[1000];
for(int i=0; i<selection.length; i++){
selection[i] = i+"";
}
ArrayList<Filter> match = new ArrayList<Filter>();
for (String name : selection) {
Filter aMatch = ff.equal(ff.property("ID"), ff.literal(name), false);
match.add(aMatch);
}
Filter filter = ff.or(match);
SimpleFeatureCollection features = featureSource.getFeatures(filter);
// Create a map content and add our shapefile to it
MapContent map = new MapContent();
map.setTitle("Quickstart");
Style style = SLD.createSimpleStyle(features.getSchema());
Layer layer = new FeatureLayer(features, style);
map.addLayer(layer);
// Now display the map
JMapFrame.showMap(map);
}catch (Exception e)
{
e.printStackTrace();
}
Are there some faster way to do this? ......