Statistics
| Revision:

root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.algorithm / src / main / java / es / unex / sextante / vectorTools / InPolygonSpatialJoinB / NearestNeighbourFinder.java @ 59

History | View | Annotate | Download (1.65 KB)

1
package es.unex.sextante.vectorTools.InPolygonSpatialJoinB;
2

    
3
import java.util.List;
4

    
5
import com.vividsolutions.jts.geom.Envelope;
6
import com.vividsolutions.jts.geom.Geometry;
7
import com.vividsolutions.jts.index.strtree.STRtree;
8

    
9
import es.unex.sextante.core.ITaskMonitor;
10
import es.unex.sextante.core.Sextante;
11
import es.unex.sextante.dataObjects.IFeature;
12
import es.unex.sextante.dataObjects.IFeatureIterator;
13
import es.unex.sextante.dataObjects.IVectorLayer;
14
import es.unex.sextante.exceptions.IteratorException;
15

    
16
public class NearestNeighbourFinder {
17

    
18
   private final STRtree m_Tree;
19
   private final int     m_iShapes;
20

    
21

    
22
   public NearestNeighbourFinder(final IVectorLayer layer,
23
                                 final ITaskMonitor task) throws IteratorException {
24

    
25
      int i;
26
      final float x, y;
27

    
28
      task.setProgressText(Sextante.getText("Creating_index"));
29

    
30
      m_Tree = new STRtree();
31

    
32
      m_iShapes = layer.getShapesCount();
33
      i = 0;
34
      final IFeatureIterator iter = layer.iterator();
35
      while (iter.hasNext() && !task.isCanceled()) {
36
         final IFeature feature = iter.next();
37
         final Geometry geom = feature.getGeometry();
38
         final Envelope bounds = geom.getEnvelopeInternal();
39
         m_Tree.insert(bounds, feature);
40
         if (i % 100 == 0) {
41
            task.setProgress(i, m_iShapes);
42
         }
43
         i++;
44
      }
45
      iter.close();
46
   }
47

    
48

    
49
   public IFeature[] getClosestPoints(final Geometry geom) {
50

    
51
      final Envelope search = geom.getEnvelopeInternal();
52
      final List<IFeature> list = m_Tree.query(search);
53

    
54
      return list.toArray(new IFeature[0]);
55

    
56
   }
57

    
58
}