svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.geometry / org.gvsig.expressionevaluator.geometry.lib / org.gvsig.expressionevaluator.geometry.lib.impl / src / main / java / org / gvsig / expressionevaluator / impl / function / spatial / STTransformFunction.java @ 44843
History | View | Annotate | Download (2.05 KB)
1 |
package org.gvsig.expressionevaluator.impl.function.spatial; |
---|---|
2 |
|
3 |
import org.apache.commons.lang3.Range; |
4 |
import org.cresques.cts.ICoordTrans; |
5 |
import org.cresques.cts.IProjection; |
6 |
import org.gvsig.expressionevaluator.DataTypes; |
7 |
import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
8 |
import org.gvsig.expressionevaluator.Interpreter; |
9 |
import org.gvsig.expressionevaluator.spi.AbstractGeometryFunction; |
10 |
import org.gvsig.fmap.crs.CRSFactory; |
11 |
import org.gvsig.fmap.geom.Geometry; |
12 |
import org.gvsig.tools.dataTypes.DataTypeUtils; |
13 |
|
14 |
public class STTransformFunction extends AbstractGeometryFunction { |
15 |
|
16 |
public STTransformFunction() {
|
17 |
super("OGC", "ST_Transform", Range.between(2,3)); |
18 |
} |
19 |
|
20 |
@Override
|
21 |
public boolean allowConstantFolding() { |
22 |
return true; |
23 |
} |
24 |
|
25 |
@Override
|
26 |
public Object call(Interpreter interpreter, Object[] args) throws Exception { |
27 |
IProjection to_proj = null;
|
28 |
IProjection from_proj = null;
|
29 |
Integer to_srid = null; |
30 |
Geometry geom = getGeom(args, 0);
|
31 |
switch(args.length) {
|
32 |
case 2: |
33 |
to_srid = (Integer) DataTypeUtils.coerce(DataTypes.INT, getObject(args, 1),null); |
34 |
if( to_srid==null ) { |
35 |
to_proj = CRSFactory.getCRS(getStr(args, 1));
|
36 |
} else {
|
37 |
to_proj = CRSFactory.getCRS("EPSG:"+to_srid);
|
38 |
} |
39 |
from_proj = geom.getProjection(); |
40 |
break;
|
41 |
|
42 |
case 3: |
43 |
to_srid = (Integer) DataTypeUtils.coerce(DataTypes.INT, getObject(args, 2),null); |
44 |
if( to_srid==null ) { |
45 |
to_proj = CRSFactory.getCRS(getStr(args, 2));
|
46 |
} else {
|
47 |
to_proj = CRSFactory.getCRS("EPSG:"+to_srid);
|
48 |
} |
49 |
from_proj = CRSFactory.getCRS(getStr(args, 1));
|
50 |
break;
|
51 |
|
52 |
default:
|
53 |
throw new ExpressionRuntimeException("Incorrect number of arguments."); |
54 |
} |
55 |
ICoordTrans ct = from_proj.getCT(to_proj); |
56 |
Geometry r = geom.cloneGeometry(); |
57 |
r.reProject(ct); |
58 |
return r;
|
59 |
} |
60 |
|
61 |
} |