Revision 11205 trunk/libraries/libGPE-KML/src/org/gvsig/gpe/kml/bindings/PlaceMarketBinding.java
PlaceMarketBinding.java | ||
---|---|---|
1 | 1 |
package org.gvsig.gpe.kml.bindings; |
2 | 2 |
|
3 | 3 |
import java.io.IOException; |
4 |
import java.util.LinkedHashMap; |
|
5 | 4 |
|
6 |
import org.gvsig.exceptions.BaseException; |
|
7 |
import org.gvsig.gpe.gml.factories.IGeometriesFactory; |
|
8 |
import org.gvsig.gpe.kml.KmlAttributesMap; |
|
9 |
import org.gvsig.gpe.kml.KmlFeaturesIterator; |
|
5 |
import org.gvsig.gpe.kml.GPEKmlParser; |
|
10 | 6 |
import org.gvsig.gpe.kml.KmlTags; |
11 |
import org.gvsig.gpe.kml.binfings.geometries.LineStringTypeBinding; |
|
12 |
import org.gvsig.gpe.kml.binfings.geometries.PointTypeBinding; |
|
13 |
import org.gvsig.gpe.kml.binfings.geometries.PolygonTypeBinding; |
|
14 |
import org.gvsig.gpe.kml.engine.IReaderFile; |
|
7 |
import org.gvsig.gpe.kml.bindings.geometries.LineStringTypeBinding; |
|
8 |
import org.gvsig.gpe.kml.bindings.geometries.PointTypeBinding; |
|
9 |
import org.gvsig.gpe.kml.bindings.geometries.PolygonTypeBinding; |
|
15 | 10 |
import org.gvsig.gpe.kml.exceptions.KmlBodyParseException; |
16 | 11 |
import org.kxml2.io.KXmlParser; |
12 |
import org.xmlpull.v1.XmlPullParser; |
|
17 | 13 |
import org.xmlpull.v1.XmlPullParserException; |
18 | 14 |
|
19 | 15 |
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana |
... | ... | |
60 | 56 |
* |
61 | 57 |
* $Id$ |
62 | 58 |
* $Log$ |
63 |
* Revision 1.1 2007-03-07 08:19:10 jorpiell |
|
59 |
* Revision 1.2 2007-04-13 13:16:21 jorpiell |
|
60 |
* Add KML reading support |
|
61 |
* |
|
62 |
* Revision 1.1 2007/03/07 08:19:10 jorpiell |
|
64 | 63 |
* Pasadas las clases de KML de libGPE-GML a libGPE-KML |
65 | 64 |
* |
66 | 65 |
* Revision 1.1 2007/02/28 11:48:31 csanchez |
... | ... | |
77 | 76 |
/** |
78 | 77 |
* @author Jorge Piera Llodr? (piera_jor@gva.es) |
79 | 78 |
*/ |
80 |
public class PlaceMarketBinding extends AbstractComplexBinding{
|
|
79 |
public class PlaceMarketBinding { |
|
81 | 80 |
|
82 |
public PlaceMarketBinding(IGeometriesFactory gFactory) { |
|
83 |
super(gFactory); |
|
84 |
} |
|
85 |
|
|
86 |
public Object parse(IReaderFile reader) throws BaseException { |
|
81 |
public static void parse(XmlPullParser parser,GPEKmlParser handler) throws KmlBodyParseException { |
|
87 | 82 |
boolean endFeature = false; |
88 |
int currentTag; |
|
89 |
Object feature = null; |
|
83 |
int currentTag; |
|
90 | 84 |
|
91 |
try { |
|
92 |
String tag = reader.getName(); |
|
93 |
currentTag = reader.getEventType(); |
|
94 |
|
|
95 |
while (!endFeature){ |
|
96 |
switch(currentTag){ |
|
97 |
case KXmlParser.START_TAG: |
|
98 |
if (tag.compareTo(KmlTags.PLACEMARK) == 0){ |
|
99 |
feature = parsePlaceMarketBody(reader); |
|
100 |
endFeature = true; |
|
101 |
} |
|
102 |
break; |
|
103 |
case KXmlParser.END_TAG: |
|
104 |
if (tag.compareTo(KmlTags.PLACEMARK) == 0){ |
|
105 |
endFeature = true; |
|
106 |
} |
|
107 |
break; |
|
108 |
case KXmlParser.TEXT: |
|
109 |
|
|
110 |
break; |
|
111 |
} |
|
112 |
if (!endFeature){ |
|
113 |
currentTag = reader.next(); |
|
114 |
tag = reader.getName(); |
|
115 |
} |
|
116 |
} |
|
117 |
} catch (XmlPullParserException e) { |
|
118 |
throw new KmlBodyParseException(e); |
|
119 |
} catch (IOException e) { |
|
120 |
throw new KmlBodyParseException(e); |
|
121 |
} |
|
122 |
return feature; |
|
123 |
} |
|
124 |
|
|
125 |
private Object parsePlaceMarketBody(IReaderFile reader) throws KmlBodyParseException { |
|
126 |
boolean endFeature = false; |
|
127 |
int currentTag; |
|
128 |
Object geometry = null; |
|
85 |
Object feature = handler.getContentHandler().startFeature(null, null); |
|
129 | 86 |
|
130 |
//We have to add the default values for this feature |
|
131 |
KmlAttributesMap values = new KmlAttributesMap(); |
|
132 |
values.put(KmlTags.FOLDER_NAME,KmlFeaturesIterator.getCurrentFolder()); |
|
133 |
values.put(KmlTags.NAME,""); |
|
134 |
values.put(KmlTags.DESCRIPTION,""); |
|
135 |
values.put(KmlTags.VISIBILITY,""); |
|
136 |
values.put(KmlTags.LOOKAT,new LinkedHashMap()); |
|
137 |
|
|
138 |
|
|
139 | 87 |
try { |
140 |
currentTag = reader.next();
|
|
141 |
String tag = reader.getName();
|
|
88 |
String tag = parser.getName();
|
|
89 |
currentTag = parser.getEventType();
|
|
142 | 90 |
|
143 | 91 |
while (!endFeature){ |
144 | 92 |
switch(currentTag){ |
145 |
case KXmlParser.START_TAG:
|
|
93 |
case KXmlParser.START_TAG: |
|
146 | 94 |
if (tag.compareTo(KmlTags.NAME) == 0){ |
147 |
reader.next();
|
|
148 |
values.put(KmlTags.NAME,reader.getText());
|
|
95 |
parser.next();
|
|
96 |
handler.getContentHandler().addNameToFeature(feature,parser.getText());
|
|
149 | 97 |
}else if (tag.compareTo(KmlTags.DESCRIPTION) == 0){ |
150 |
reader.next();
|
|
151 |
values.put(KmlTags.DESCRIPTION,reader.getText());
|
|
98 |
parser.next();
|
|
99 |
String description = parser.getText();
|
|
152 | 100 |
}else if (tag.compareTo(KmlTags.VISIBILITY) == 0){ |
153 |
reader.next();
|
|
154 |
values.put(KmlTags.VISIBILITY,reader.getText());
|
|
101 |
parser.next();
|
|
102 |
String visibility = parser.getText();
|
|
155 | 103 |
}else if (tag.compareTo(KmlTags.LOOKAT) == 0){ |
156 |
LinkedHashMap lootAtParams = (LinkedHashMap)new LookAtBinding(getGFactory()).parse(reader); |
|
157 |
values.put(KmlTags.LOOKAT,lootAtParams); |
|
104 |
LookAtBinding.parse(parser, handler); |
|
158 | 105 |
}else if (tag.compareTo(KmlTags.STYLEURL) == 0){ |
159 |
|
|
106 |
parser.next(); |
|
107 |
String styleURL = parser.getText(); |
|
160 | 108 |
}else if (tag.compareTo(KmlTags.POINT) == 0){ |
161 |
geometry = new PointTypeBinding(getGFactory()).parse(reader);
|
|
109 |
PointTypeBinding.parse(parser, handler);
|
|
162 | 110 |
}else if (tag.compareTo(KmlTags.LINESTRING) == 0){ |
163 |
geometry = new LineStringTypeBinding(getGFactory()).parse(reader);
|
|
111 |
LineStringTypeBinding.parse(parser, handler);
|
|
164 | 112 |
}else if (tag.compareTo(KmlTags.POLYGON) == 0){ |
165 |
geometry = new PolygonTypeBinding(getGFactory()).parse(reader);
|
|
113 |
PolygonTypeBinding.parse(parser, handler);
|
|
166 | 114 |
} |
167 | 115 |
break; |
168 | 116 |
case KXmlParser.END_TAG: |
169 |
if (tag.compareTo(KmlTags.PLACEMARK) == 0){ |
|
117 |
if (tag.compareTo(KmlTags.PLACEMARK) == 0){
|
|
170 | 118 |
endFeature = true; |
119 |
handler.getContentHandler().endFeature(feature); |
|
171 | 120 |
} |
172 | 121 |
break; |
173 | 122 |
case KXmlParser.TEXT: |
... | ... | |
175 | 124 |
break; |
176 | 125 |
} |
177 | 126 |
if (!endFeature){ |
178 |
currentTag = reader.next();
|
|
179 |
tag = reader.getName();
|
|
127 |
currentTag = parser.next();
|
|
128 |
tag = parser.getName();
|
|
180 | 129 |
} |
181 | 130 |
} |
182 | 131 |
} catch (XmlPullParserException e) { |
183 | 132 |
throw new KmlBodyParseException(e); |
184 | 133 |
} catch (IOException e) { |
185 | 134 |
throw new KmlBodyParseException(e); |
186 |
} |
|
187 |
return getGFactory().createSimpleFeature("KMLFeature",null,values,geometry); |
|
135 |
} |
|
188 | 136 |
} |
189 | 137 |
} |
Also available in: Unified diff