Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.sqlite / org.gvsig.sqlite.provider / src / test / java / org / gvsig / sqlite / dal / operations / sql / TestSTDistance.java @ 47579

History | View | Annotate | Download (5.92 KB)

1
package org.gvsig.sqlite.dal.operations.sql;
2

    
3
import java.util.List;
4
import junit.framework.TestCase;
5
import org.cresques.cts.IProjection;
6
import org.gvsig.expressionevaluator.Expression;
7
import org.gvsig.expressionevaluator.ExpressionUtils;
8
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
9
import org.gvsig.fmap.crs.CRSFactory;
10
import org.gvsig.fmap.dal.DALLocator;
11
import org.gvsig.fmap.dal.DataManager;
12
import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
13
import org.gvsig.fmap.dal.feature.FeatureQuery;
14
import org.gvsig.fmap.dal.feature.FeatureStore;
15
import org.gvsig.fmap.dal.feature.FeatureType;
16
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
17
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
18
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
19
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
20
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
21
import org.gvsig.fmap.geom.Geometry;
22
import org.gvsig.fmap.geom.GeometryUtils;
23
import org.gvsig.fmap.geom.primitive.Point;
24
import org.gvsig.sqlite.dal.TestUtils;
25
import org.gvsig.sqlite.dal.geopackage.index.GeopackageIndexRTree;
26
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
27
import org.slf4j.Logger;
28
import org.slf4j.LoggerFactory;
29

    
30
public class TestSTDistance extends TestCase {
31

    
32
  private static final Logger LOGGER = LoggerFactory.getLogger(TestSTDistance.class);
33

    
34
  public TestSTDistance(String testName) {
35
    super(testName);
36
  }
37

    
38
  @Override
39
  protected void setUp() throws Exception {
40
    super.setUp();
41
    new DefaultLibrariesInitializer().fullInitialize();
42
  }
43

    
44
  @Override
45
  protected void tearDown() throws Exception {
46
    super.tearDown();
47
  }
48

    
49
  public void testSTDistanceWithoutSpatialIndex() throws Exception {
50
    JDBCHelper helper = TestUtils.createJDBCHelper();
51
    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
52
    OperationsFactory operations = helper.getOperations();
53

    
54
    List<String> expectedSQLs = TestUtils.getSQLs("testSTDistance.sql");
55
    
56
    FeatureStore sourceStore = TestUtils.openSourceStore1();
57

    
58
    TableReference table = operations.createTableReference(
59
            "dbtest", 
60
            sqlbuilder.default_schema(), 
61
            "test", 
62
            null
63
    );
64
    FeatureType featureType = sourceStore.getDefaultFeatureType();
65

    
66
    FeatureQuery query = sourceStore.createFeatureQuery();
67

    
68
    IProjection proj = CRSFactory.getCRS("EPSG:4326");
69
    
70
    Point point = GeometryUtils.createPoint(0, 40);
71
    Geometry buffer = point.buffer(1);
72
    
73

    
74
    DataManager dataManager = DALLocator.getDataManager();
75
    DALExpressionBuilder dalBuilder = dataManager.createDALExpressionBuilder();
76
    GeometryExpressionBuilder builder = dalBuilder.expression();
77
    String filter = builder.ST_Intersects(
78
            builder.geometry(buffer, proj), 
79
            builder.column(featureType.getDefaultGeometryAttributeName())
80
    ).toString();
81
    String sortBy = builder.ST_Distance(
82
            builder.geometry(buffer), 
83
            builder.column(featureType.getDefaultGeometryAttributeName())
84
    ).toString();
85
    Expression sortByExpression = ExpressionUtils.createExpression(sortBy);
86

    
87
    query.setFilter(filter);
88
    query.getOrder().add(sortByExpression, true);
89
    query.setLimit(1);
90

    
91
    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
92
            table,
93
            null,
94
            null,
95
            query,
96
            featureType,
97
            featureType,
98
            0,
99
            0, 
100
            0
101
    );
102
    String sql = resultSetForSetProvider.getSQL();
103
    System.out.println("###### SQL:"+sql);
104
    System.out.println("###### EXP:"+expectedSQLs.get(0));
105
    
106
    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(0), sql);
107
  }
108

    
109
  public void testSTDistanceWithSpatialIndex() throws Exception {
110
    JDBCHelper helper = TestUtils.createJDBCHelper();
111
    JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
112
    OperationsFactory operations = helper.getOperations();
113

    
114
    List<String> expectedSQLs = TestUtils.getSQLs("testSTDistance.sql");
115
    
116
    FeatureStore sourceStore = TestUtils.openSourceStore1();
117

    
118
    TableReference table = operations.createTableReference(
119
            "dbtest", 
120
            sqlbuilder.default_schema(), 
121
            "test", 
122
            null
123
    );
124
    FeatureType featureType = sourceStore.getDefaultFeatureType();
125
    GeopackageIndexRTree index = new GeopackageIndexRTree();
126
    index.setHasIndex(featureType.getDefaultGeometryAttribute(), true);
127

    
128
    FeatureQuery query = sourceStore.createFeatureQuery();
129

    
130
    IProjection proj = CRSFactory.getCRS("EPSG:4326");
131
    
132
    Point point = GeometryUtils.createPoint(0, 40);
133
    Geometry buffer = point.buffer(1);
134
    
135

    
136
    DataManager dataManager = DALLocator.getDataManager();
137
    DALExpressionBuilder dalBuilder = dataManager.createDALExpressionBuilder();
138
    GeometryExpressionBuilder builder = dalBuilder.expression();
139
    String filter = builder.ST_Intersects(
140
            builder.geometry(buffer, proj), 
141
            builder.column(featureType.getDefaultGeometryAttributeName())
142
    ).toString();
143
    String sortBy = builder.ST_Distance(
144
            builder.geometry(buffer), 
145
            builder.column(featureType.getDefaultGeometryAttributeName())
146
    ).toString();
147
    Expression sortByExpression = ExpressionUtils.createExpression(sortBy);
148

    
149
    query.setFilter(filter);
150
    query.getOrder().add(sortByExpression, true);
151
    query.setLimit(1);
152

    
153
    ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
154
            table,
155
            null,
156
            null,
157
            query,
158
            featureType,
159
            featureType,
160
            0,
161
            0, 
162
            0
163
    );
164
    String sql = resultSetForSetProvider.getSQL();
165
    System.out.println("###### SQL:"+sql);
166
    System.out.println("###### EXP:"+expectedSQLs.get(1));
167
    
168
    assertEquals("ResultSetForSetProvider SQL", expectedSQLs.get(1), sql);
169
  }
170

    
171
}