/** * @param shapeReader */ private static Pair<RTree<Long>, Boolean> createIndex( SHPReader shapeReader ) { Envelope env = shapeReader.getEnvelope(); // use 128 values per rect. RTree<Long> result = new RTree<Long>( createEnvelope( env ), -1 ); // to work around Java's non-existent variant type LOG.debug( "Read envelopes from shape file..." ); Pair<ArrayList<Pair<float[], Long>>, Boolean> p = shapeReader.readEnvelopes(); LOG.debug( "done reading envelopes." ); result.insertBulk( p.first ); return new Pair<RTree<Long>, Boolean>( result, p.second ); }
private void rebuildRtrees() { ftToIndex.clear(); for ( FeatureType ft : ftToFeatures.keySet() ) { FeatureCollection fc = ftToFeatures.get( ft ); Envelope env = fc.getEnvelope(); if ( env != null ) { RTree<Feature> index = new RTree<Feature>( toFloats( env ), 16 ); List<Pair<float[], Feature>> fBboxes = new ArrayList<Pair<float[], Feature>>( fc.size() ); for ( Feature f : fc ) { Envelope fEnv = f.getEnvelope(); if ( fEnv != null ) { float[] floats = toFloats( fEnv ); fBboxes.add( new Pair<float[], Feature>( floats, f ) ); } } index.insertBulk( fBboxes ); ftToIndex.put( ft, index ); } } }