Revision 44198 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/CalculateEnvelopeOfColumnOperation.java
CalculateEnvelopeOfColumnOperation.java | ||
---|---|---|
6 | 6 |
import java.sql.Statement; |
7 | 7 |
import org.apache.commons.lang3.StringUtils; |
8 | 8 |
import org.cresques.cts.IProjection; |
9 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
10 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Variable; |
|
9 | 11 |
import org.gvsig.fmap.dal.exception.DataException; |
10 | 12 |
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException; |
11 | 13 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper; |
12 | 14 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils; |
13 | 15 |
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference; |
14 | 16 |
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase; |
17 |
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE; |
|
15 | 18 |
import org.gvsig.fmap.geom.Geometry; |
16 | 19 |
import org.gvsig.fmap.geom.primitive.Envelope; |
17 | 20 |
|
... | ... | |
70 | 73 |
// https://alastaira.wordpress.com/2011/07/26/determining-the-geographic-extent-of-spatial-features-in-a-sql-server-table/ |
71 | 74 |
// |
72 | 75 |
JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder(); |
76 |
ExpressionBuilder expbuilder = sqlbuilder.expression(); |
|
77 |
|
|
73 | 78 |
sqlbuilder.select().column().value( |
74 |
sqlbuilder.getAsGeometry(
|
|
75 |
sqlbuilder.ST_ExtentAggregate(
|
|
76 |
sqlbuilder.column(columnName)
|
|
79 |
expbuilder.as_geometry(
|
|
80 |
expbuilder.ST_ExtentAggregate(
|
|
81 |
expbuilder.column(columnName)
|
|
77 | 82 |
) |
78 | 83 |
) |
79 | 84 |
); |
... | ... | |
87 | 92 |
if (StringUtils.isEmpty(baseFilter)) { |
88 | 93 |
if (limit != null) { |
89 | 94 |
sqlbuilder.select().where().set( |
90 |
sqlbuilder.ST_Intersects(
|
|
91 |
sqlbuilder.ST_Envelope(
|
|
92 |
sqlbuilder.column(columnName)
|
|
95 |
expbuilder.ST_Intersects(
|
|
96 |
expbuilder.ST_Envelope(
|
|
97 |
expbuilder.column(columnName)
|
|
93 | 98 |
), |
94 |
sqlbuilder.ST_Envelope(
|
|
95 |
sqlbuilder.geometry(limit.getGeometry(), crs)
|
|
99 |
expbuilder.ST_Envelope(
|
|
100 |
expbuilder.geometry(limit.getGeometry(), crs)
|
|
96 | 101 |
) |
97 | 102 |
) |
98 | 103 |
); |
99 | 104 |
} |
100 | 105 |
} else { |
101 |
sqlbuilder.select().where().set( sqlbuilder.custom(baseFilter) );
|
|
106 |
sqlbuilder.select().where().set( expbuilder.custom(baseFilter) );
|
|
102 | 107 |
if (limit != null) { |
103 | 108 |
sqlbuilder.select().where().and( |
104 |
sqlbuilder.ST_Intersects(
|
|
105 |
sqlbuilder.ST_Envelope(
|
|
106 |
sqlbuilder.column(columnName)
|
|
109 |
expbuilder.ST_Intersects(
|
|
110 |
expbuilder.ST_Envelope(
|
|
111 |
expbuilder.column(columnName)
|
|
107 | 112 |
), |
108 |
sqlbuilder.ST_Envelope(
|
|
109 |
sqlbuilder.geometry(limit.getGeometry(), crs)
|
|
113 |
expbuilder.ST_Envelope(
|
|
114 |
expbuilder.geometry(limit.getGeometry(), crs)
|
|
110 | 115 |
) |
111 | 116 |
) |
112 | 117 |
); |
113 | 118 |
} |
114 | 119 |
} |
115 |
|
|
120 |
sqlbuilder.setProperties( |
|
121 |
Variable.class, |
|
122 |
PROP_TABLE, table |
|
123 |
); |
|
116 | 124 |
String sql = sqlbuilder.select().toString(); |
117 | 125 |
|
118 | 126 |
Statement st = null; |
Also available in: Unified diff