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 / converstocode / GeometryToCode.java @ 47374
History | View | Annotate | Download (2.17 KB)
1 |
package org.gvsig.expressionevaluator.impl.converstocode; |
---|---|
2 |
|
3 |
import java.util.Map; |
4 |
import java.util.Objects; |
5 |
import org.cresques.cts.IProjection; |
6 |
import org.gvsig.expressionevaluator.Code; |
7 |
import org.gvsig.expressionevaluator.CodeBuilder; |
8 |
import org.gvsig.expressionevaluator.ConverterToCode; |
9 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
11 |
import org.gvsig.expressionevaluator.MutableCodes; |
12 |
import org.gvsig.fmap.geom.Geometry; |
13 |
|
14 |
/**
|
15 |
*
|
16 |
* @author jjdelcerro
|
17 |
*/
|
18 |
public class GeometryToCode implements ConverterToCode { |
19 |
|
20 |
@Override
|
21 |
public String getName() { |
22 |
return "Geometry"; |
23 |
} |
24 |
|
25 |
@Override
|
26 |
public boolean isApplicable(Object... os) { |
27 |
return os[0] instanceof Geometry; |
28 |
} |
29 |
|
30 |
@Override
|
31 |
public Code toCode(CodeBuilder builder, Object obj, Map props) { |
32 |
//ST_GEOMFROMTEXT
|
33 |
try {
|
34 |
if(obj == null){ |
35 |
return null; |
36 |
} |
37 |
Geometry geom = (Geometry) obj; |
38 |
IProjection proj = geom.getProjection(); |
39 |
if(proj == null){ |
40 |
MutableCodes args = builder.args(); |
41 |
args.add(builder.constant(geom.convertToWKT())); |
42 |
return builder.function("ST_GEOMFROMTEXT", args); |
43 |
} |
44 |
|
45 |
String abrev = geom.getProjection().getAbrev();
|
46 |
String srid = abrev.split(":")[1]; |
47 |
|
48 |
MutableCodes args = builder.args(); |
49 |
args.add(builder.constant(geom.convertToWKT())); |
50 |
Code.Callable geomFromText = builder.function("ST_GEOMFROMTEXT", args);
|
51 |
|
52 |
MutableCodes args2 = builder.args(); |
53 |
args2.add(geomFromText); |
54 |
args2.add(builder.constant(Integer.valueOf(srid)));
|
55 |
|
56 |
return builder.function("ST_SETSRID", args2); |
57 |
|
58 |
} catch (Exception ex) { |
59 |
throw new IllegalArgumentException("Can't convert geometry to code", ex); |
60 |
} |
61 |
} |
62 |
|
63 |
public static void selfRegister() { |
64 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getExpressionEvaluatorManager(); |
65 |
manager.registerCodeConverter(new GeometryToCode());
|
66 |
} |
67 |
|
68 |
} |