Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / main / java / org / gvsig / fmap / dal / feature / impl / MemorySpatialIndexProvider.java @ 40435

History | View | Annotate | Download (2.76 KB)

1
package org.gvsig.fmap.dal.feature.impl;
2

    
3
import java.util.List;
4

    
5
import org.gvsig.fmap.dal.exception.DataException;
6
import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
7
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
8
import org.gvsig.fmap.dal.feature.spi.index.AbstractFeatureIndexProvider;
9
import org.gvsig.fmap.geom.Geometry;
10
import org.gvsig.fmap.geom.GeometryLocator;
11
import org.gvsig.fmap.geom.SpatialIndex;
12
import org.gvsig.fmap.geom.primitive.Envelope;
13
import org.gvsig.fmap.geom.primitive.NullGeometry;
14

    
15
public class MemorySpatialIndexProvider extends AbstractFeatureIndexProvider {
16

    
17
        public static final String NAME = "MemorySpatialIndexProvider";
18
        
19
        private SpatialIndex index = null;
20
        
21
        public MemorySpatialIndexProvider() {
22
                
23
        }
24
        
25
    public void initialize() {
26
            try {
27
                        this.index = GeometryLocator.getGeometryManager().createDefaultMemorySpatialIndex();
28
                } catch (Exception e) {
29
                        throw new RuntimeException();
30
                }
31
    }
32

    
33
    public void delete(Object o, FeatureReferenceProviderServices fref) {
34
        Geometry geom = (Geometry) o;
35
        this.index.remove(geom, fref.getOID());
36
    }
37

    
38
    public void insert(Object o, FeatureReferenceProviderServices fref) {
39
        if (o == null || o instanceof NullGeometry) {
40
            return;
41
        }
42
        Geometry geom = (Geometry) o;
43
        this.index.insert(geom, fref.getOID());
44

    
45
    }
46

    
47
    public List match(Object value) throws FeatureIndexException {
48
        Envelope env = null;
49
        if (value instanceof Envelope) {
50
            env = (Envelope) value;
51
        } else {
52
            if (value instanceof Geometry) {
53
                env = ((Geometry) value).getEnvelope();
54
            }
55
        }
56
        return new LongList(this.index.queryAsList(env));
57
        
58
    }
59

    
60
    public List match(Object min, Object max) {
61
        throw new UnsupportedOperationException(
62
            "Can't perform this kind of search.");
63
    }
64

    
65
    public List nearest(int count, Object value) throws FeatureIndexException {
66
        throw new UnsupportedOperationException(
67
            "Can't perform this kind of search.");
68
    }
69

    
70
    public boolean isMatchSupported() {
71
        return true;
72
    }
73

    
74
    public boolean isNearestSupported() {
75
        return false;
76
    }
77

    
78
    public boolean isNearestToleranceSupported() {
79
        return false;
80
    }
81

    
82
    public boolean isRangeSupported() {
83
        return false;
84
    }
85

    
86
    public List nearest(int count, Object value, Object tolerance)
87
        throws FeatureIndexException {
88
        throw new UnsupportedOperationException();
89
    }
90

    
91
    public List range(Object value1, Object value2)
92
        throws FeatureIndexException {
93
        throw new UnsupportedOperationException();
94
    }
95

    
96
    public void clear() throws DataException {
97
        this.index.removeAll();
98
    }
99
 }