Statistics
| Revision:

root / trunk / libraries / libGPE-GML / src / org / gvsig / gpe / gml / parser / sfp0 / geometries / PosListTypeBinding.java @ 18773

History | View | Annotate | Download (2.91 KB)

1
package org.gvsig.gpe.gml.parser.sfp0.geometries;
2

    
3
import java.io.IOException;
4

    
5
import org.gvsig.gpe.gml.GMLTags;
6
import org.gvsig.gpe.gml.GPEDefaultGmlParser;
7
import org.gvsig.gpe.gml.parser.v2.geometries.DoubleTypeBinding;
8
import org.gvsig.gpe.gml.utils.CompareUtils;
9
import org.kxml2.io.KXmlParser;
10
import org.xmlpull.v1.XmlPullParser;
11
import org.xmlpull.v1.XmlPullParserException;
12

    
13
public class PosListTypeBinding {
14
        
15
        public double[][] parse(XmlPullParser parser,GPEDefaultGmlParser handler) throws XmlPullParserException, IOException  {
16
                boolean endFeature = false;
17
                int currentTag;
18
                String TUPLES_SEPARATOR  = GMLTags.GML_DEFAULT_TUPLES_SEPARATOR;
19
                String COORDINATES_DECIMAL = GMLTags.GML_DEFAULT_COORDINATES_DECIMAL;        
20
                
21
                int dimension = GMLTags.GML_DEFAULT_DIMENSION;
22
                int coordenada = 0;
23
                
24
                double[][] aCoordinates = null;
25
                
26
                for (int i=0 ; i<parser.getAttributeCount() ; i++){
27
                        if (parser.getAttributeName(i).compareTo(GMLTags.GML_DIMENSION) == 0){
28
                            dimension = Integer.valueOf(parser.getAttributeValue(i)).intValue();
29
                        }
30
                }                
31

    
32
                String tag = parser.getName();
33
                currentTag = parser.getEventType();
34

    
35
                while (!endFeature){
36
                        switch(currentTag){
37
                        case KXmlParser.START_TAG:
38
                                if (CompareUtils.compareWithOutNamespace(tag,GMLTags.GML_POSLIST)){
39
                                        parser.next();                                                
40
                                        //String[] coordinates = parser.getText().trim().split(TUPLES_SEPARATOR);
41
                                        String[] coordinates = org.gvsig.gpe.gml.utils.StringUtils.splitString(parser.getText().trim(),TUPLES_SEPARATOR);
42
                                        //Create new double arrays depending on dimension and number of coordinates
43
                                        aCoordinates = new double[3][coordinates.length/dimension];
44
                                        int i = 0;
45
                                        int tupla = 0;
46
                                        while (i<coordinates.length-1)
47
                                        {
48
                                                for (int j = 0; j < 3; j++)
49
                                                {
50
                                                        String coordinate[] = coordinates[i].trim().split(TUPLES_SEPARATOR);
51
                                                        switch (coordenada){
52
                                                        case 0:
53
                                                                aCoordinates[coordenada][tupla] = DoubleTypeBinding.parse(coordinate[0],COORDINATES_DECIMAL);
54
                                                                coordenada ++;
55
                                                                if (i<coordinates.length-1)
56
                                                                        i++;
57
                                                                break;
58
                                                        case 1:
59
                                                                aCoordinates[coordenada][tupla] = DoubleTypeBinding.parse(coordinate[0],COORDINATES_DECIMAL);
60
                                                                coordenada ++;
61
                                                                if (i<coordinates.length-1)
62
                                                                        i++;
63
                                                                break;
64
                                                        case 2:
65
                                                                if (dimension == 3){
66
                                                                        aCoordinates[coordenada][tupla] = DoubleTypeBinding.parse(coordinate[0],COORDINATES_DECIMAL);
67
                                                                        if (i<coordinates.length-1)
68
                                                                                i++;
69
                                                                }
70
                                                                else{
71
                                                                        aCoordinates[coordenada][tupla] = 0.0;
72
                                                                }
73
                                                                coordenada=0;
74
                                                                break;
75
                                                        }
76
                                                }        
77
                                                tupla ++;
78
                                        }
79
                                }
80
                                break;
81
                        case KXmlParser.END_TAG:
82
                                if (CompareUtils.compareWithOutNamespace(tag,GMLTags.GML_POSLIST)){                                                
83
                                        endFeature = true;
84
                                }
85
                                break;
86
                        case KXmlParser.TEXT:                                        
87

    
88
                                break;
89
                        }
90
                        if (!endFeature){                                        
91
                                currentTag = parser.next();
92
                                tag = parser.getName();
93
                        }
94
                }                        
95
                return aCoordinates;        
96
        }
97
}