Statistics
| Revision:

root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.algorithm / src / main / java / es / unex / sextante / tridimensional / line3DFromTable / Line3DFromTableAlgorithm.java @ 59

History | View | Annotate | Download (4.04 KB)

1

    
2

    
3
package es.unex.sextante.tridimensional.line3DFromTable;
4

    
5
import java.util.ArrayList;
6

    
7
import com.vividsolutions.jts.geom.Coordinate;
8
import com.vividsolutions.jts.geom.GeometryFactory;
9
import com.vividsolutions.jts.geom.LineString;
10

    
11
import es.unex.sextante.core.GeoAlgorithm;
12
import es.unex.sextante.core.Sextante;
13
import es.unex.sextante.dataObjects.IRecord;
14
import es.unex.sextante.dataObjects.IRecordsetIterator;
15
import es.unex.sextante.dataObjects.ITable;
16
import es.unex.sextante.dataObjects.IVectorLayer;
17
import es.unex.sextante.exceptions.GeoAlgorithmExecutionException;
18
import es.unex.sextante.exceptions.OptionalParentParameterException;
19
import es.unex.sextante.exceptions.RepeatedParameterNameException;
20
import es.unex.sextante.exceptions.UndefinedParentParameterNameException;
21
import es.unex.sextante.outputs.OutputVectorLayer;
22

    
23

    
24
public class Line3DFromTableAlgorithm
25
         extends
26
            GeoAlgorithm {
27

    
28
   public static final String TABLE  = "TABLE";
29
   public static final String XFIELD = "XFIELD";
30
   public static final String YFIELD = "YFIELD";
31
   public static final String ZFIELD = "ZFIELD";
32
   public static final String RESULT = "RESULT";
33

    
34

    
35
   @Override
36
   public boolean processAlgorithm() throws GeoAlgorithmExecutionException {
37

    
38
      final int j;
39
      int iFieldX, iFieldY, iFieldZ;
40
      ITable table;
41
      String[] sFields;
42
      Class[] types;
43

    
44
      table = m_Parameters.getParameterValueAsTable(TABLE);
45
      iFieldX = m_Parameters.getParameterValueAsInt(XFIELD);
46
      iFieldY = m_Parameters.getParameterValueAsInt(YFIELD);
47
      iFieldZ = m_Parameters.getParameterValueAsInt(ZFIELD);
48

    
49
      sFields = new String[] { "ID" };
50
      types = new Class[] { Integer.class };
51

    
52
      final IVectorLayer output = getNewVectorLayer(RESULT, Sextante.getText("3DLineFromTable"), IVectorLayer.SHAPE_TYPE_LINE,
53
               types, sFields);
54
      final ArrayList<Coordinate> coordsArray = new ArrayList<Coordinate>();
55
      final IRecordsetIterator iter = table.iterator();
56
      final GeometryFactory geomFac = new GeometryFactory();
57
      while (iter.hasNext()) {
58
         try {
59
            final IRecord record = iter.next();
60
            final String sX = record.getValue(iFieldX).toString();
61
            final String sY = record.getValue(iFieldY).toString();
62
            final String sZ = record.getValue(iFieldZ).toString();
63
            final double dX = Double.parseDouble(sX);
64
            final double dY = Double.parseDouble(sY);
65
            final double dZ = Double.parseDouble(sZ);
66
            coordsArray.add(new Coordinate(dX, dY, dZ));
67
         }
68
         catch (final NumberFormatException e) {
69
         }
70
      }
71
      iter.close();
72

    
73
      if (coordsArray.size() > 1) {
74
         final LineString line = geomFac.createLineString(coordsArray.toArray(new Coordinate[0]));
75
         output.addFeature(line, new Object[] { new Integer(1) });
76
      }
77
      else {
78
         throw new GeoAlgorithmExecutionException(Sextante.getText("LessThanTwoPointsInTable"));
79
      }
80

    
81
      return !m_Task.isCanceled();
82

    
83
   }
84

    
85

    
86
   @Override
87
   public void defineCharacteristics() {
88

    
89
      this.setName(Sextante.getText("3DLineFromTable"));
90
      setGroup(Sextante.getText("3D"));
91

    
92
      try {
93
         m_Parameters.addInputTable(TABLE, Sextante.getText("Table"), true);
94
         m_Parameters.addTableField(XFIELD, Sextante.getText("X"), TABLE);
95
         m_Parameters.addTableField(YFIELD, Sextante.getText("Y"), TABLE);
96
         m_Parameters.addTableField(ZFIELD, Sextante.getText("Z"), TABLE);
97
         addOutputVectorLayer(RESULT, Sextante.getText("Result"), OutputVectorLayer.SHAPE_TYPE_LINE);
98
      }
99
      catch (final RepeatedParameterNameException e) {
100
         Sextante.addErrorToLog(e);
101
      }
102
      catch (final UndefinedParentParameterNameException e) {
103
         Sextante.addErrorToLog(e);
104
      }
105
      catch (final OptionalParentParameterException e) {
106
         Sextante.addErrorToLog(e);
107
      }
108

    
109
   }
110

    
111

    
112
   @Override
113
   public boolean isActive() {
114

    
115
      return false;
116

    
117
   }
118

    
119

    
120
}