Statistics
| Revision:

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
}