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 |
} |