root / branches / v2_0_0_prep / extensions / extGPE-gvSIG / src / org / gvsig / fmap / dal / store / gpe / handlers / FmapContentHandler.java @ 34899
History | View | Annotate | Download (23.6 KB)
1 | 27499 | jpiera | package org.gvsig.fmap.dal.store.gpe.handlers; |
---|---|---|---|
2 | |||
3 | 27636 | jpiera | import java.io.File; |
4 | 27499 | jpiera | import java.io.IOException; |
5 | import java.util.ArrayList; |
||
6 | import java.util.HashMap; |
||
7 | import java.util.Iterator; |
||
8 | import java.util.List; |
||
9 | import java.util.Map; |
||
10 | |||
11 | 30752 | jpiera | import org.cresques.cts.IProjection; |
12 | 34026 | jpiera | import org.jfree.util.Log; |
13 | import org.slf4j.Logger; |
||
14 | import org.slf4j.LoggerFactory; |
||
15 | |||
16 | 27499 | jpiera | import org.gvsig.fmap.dal.DataTypes; |
17 | 28113 | jpiera | import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
18 | 27499 | jpiera | import org.gvsig.fmap.dal.feature.EditableFeatureType; |
19 | import org.gvsig.fmap.dal.feature.Feature; |
||
20 | import org.gvsig.fmap.dal.feature.FeatureType; |
||
21 | 30752 | jpiera | import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider; |
22 | 29292 | jmvivo | import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
23 | 27499 | jpiera | import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices; |
24 | import org.gvsig.fmap.dal.store.gpe.GPEStoreProvider; |
||
25 | import org.gvsig.fmap.dal.store.gpe.model.GPEElement; |
||
26 | import org.gvsig.fmap.dal.store.gpe.model.GPEFeature; |
||
27 | import org.gvsig.fmap.geom.Geometry; |
||
28 | 34026 | jpiera | import org.gvsig.fmap.geom.Geometry.SUBTYPES; |
29 | import org.gvsig.fmap.geom.Geometry.TYPES; |
||
30 | 27499 | jpiera | import org.gvsig.fmap.geom.GeometryLocator; |
31 | import org.gvsig.fmap.geom.GeometryManager; |
||
32 | import org.gvsig.fmap.geom.aggregate.MultiCurve; |
||
33 | import org.gvsig.fmap.geom.aggregate.MultiPoint; |
||
34 | import org.gvsig.fmap.geom.aggregate.MultiSurface; |
||
35 | import org.gvsig.fmap.geom.exception.CreateEnvelopeException; |
||
36 | import org.gvsig.fmap.geom.exception.CreateGeometryException; |
||
37 | import org.gvsig.fmap.geom.primitive.Curve; |
||
38 | import org.gvsig.fmap.geom.primitive.Envelope; |
||
39 | import org.gvsig.fmap.geom.primitive.GeneralPathX; |
||
40 | import org.gvsig.fmap.geom.primitive.Point; |
||
41 | import org.gvsig.fmap.geom.primitive.Surface; |
||
42 | 32051 | jpiera | import org.gvsig.gpe.lib.api.parser.IAttributesIterator; |
43 | import org.gvsig.gpe.lib.api.parser.ICoordinateIterator; |
||
44 | import org.gvsig.gpe.lib.api.parser.IGPEErrorHandler; |
||
45 | import org.gvsig.gpe.lib.impl.parser.GPEContentHandler; |
||
46 | 27499 | jpiera | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
47 | *
|
||
48 | * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
|
||
49 | *
|
||
50 | * This program is free software; you can redistribute it and/or
|
||
51 | * modify it under the terms of the GNU General Public License
|
||
52 | * as published by the Free Software Foundation; either version 2
|
||
53 | * of the License, or (at your option) any later version.
|
||
54 | *
|
||
55 | * This program is distributed in the hope that it will be useful,
|
||
56 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
57 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
58 | * GNU General Public License for more details.
|
||
59 | *
|
||
60 | * You should have received a copy of the GNU General Public License
|
||
61 | * along with this program; if not, write to the Free Software
|
||
62 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
63 | *
|
||
64 | * For more information, contact:
|
||
65 | *
|
||
66 | * Generalitat Valenciana
|
||
67 | * Conselleria d'Infraestructures i Transport
|
||
68 | * Av. Blasco Ib??ez, 50
|
||
69 | * 46010 VALENCIA
|
||
70 | * SPAIN
|
||
71 | *
|
||
72 | * +34 963862235
|
||
73 | * gvsig@gva.es
|
||
74 | * www.gvsig.gva.es
|
||
75 | *
|
||
76 | * or
|
||
77 | *
|
||
78 | * IVER T.I. S.A
|
||
79 | * Salamanca 50
|
||
80 | * 46005 Valencia
|
||
81 | * Spain
|
||
82 | *
|
||
83 | * +34 963163400
|
||
84 | * dac@iver.es
|
||
85 | */
|
||
86 | /* CVS MESSAGES:
|
||
87 | *
|
||
88 | * $Id$
|
||
89 | * $Log$
|
||
90 | *
|
||
91 | */
|
||
92 | /**
|
||
93 | * @author Jorge Piera LLodr? (jorge.piera@iver.es)
|
||
94 | */
|
||
95 | public class FmapContentHandler extends GPEContentHandler { |
||
96 | 34134 | jpiera | private static final Logger LOG = LoggerFactory.getLogger(FmapContentHandler.class); |
97 | 27636 | jpiera | |
98 | 34026 | jpiera | private HashMap featureSet = null; |
99 | private EditableFeatureType featureType = null; |
||
100 | private FeatureStoreProviderServices store = null; |
||
101 | private GPEStoreProvider storeProvider = null; |
||
102 | private GeometryManager geomManager = GeometryLocator.getGeometryManager();
|
||
103 | private int featureId = 0; |
||
104 | private Envelope envelope = null; |
||
105 | private File file = null; |
||
106 | private IProjection srs = null; |
||
107 | private int geometryType = 0; |
||
108 | 27636 | jpiera | |
109 | 34026 | jpiera | public FmapContentHandler(IGPEErrorHandler errorHandler, FeatureStoreProviderServices store,
|
110 | GPEStoreProvider storeProvider, File file, IProjection srs, int geometryType) { |
||
111 | super();
|
||
112 | setErrorHandler(errorHandler); |
||
113 | this.store = store;
|
||
114 | this.storeProvider = storeProvider;
|
||
115 | this.file = file;
|
||
116 | this.srs = srs;
|
||
117 | this.geometryType = geometryType;
|
||
118 | } |
||
119 | 27636 | jpiera | |
120 | 34026 | jpiera | public int getFeaturesCount(){ |
121 | return featureSet.size();
|
||
122 | } |
||
123 | 27636 | jpiera | |
124 | 34026 | jpiera | public Feature getFeatureAt(int index){ |
125 | return (Feature)featureSet.get(new Integer(index)); |
||
126 | } |
||
127 | 27636 | jpiera | |
128 | 34026 | jpiera | public EditableFeatureType getFeatureType(){
|
129 | return featureType;
|
||
130 | } |
||
131 | 27636 | jpiera | |
132 | 27499 | jpiera | |
133 | 34026 | jpiera | /**
|
134 | * @return the featureSet
|
||
135 | */
|
||
136 | public HashMap getFeatureSet() { |
||
137 | return featureSet;
|
||
138 | } |
||
139 | 27499 | jpiera | |
140 | 34026 | jpiera | /*
|
141 | * (non-Javadoc)
|
||
142 | * @see org.gvsig.gpe.parser.GPEContentHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, org.gvsig.gpe.parser.IAttributesIterator, java.lang.Object, java.lang.Object)
|
||
143 | */
|
||
144 | public Object startLayer(String id, String namespace, String name, |
||
145 | String description, String srs, IAttributesIterator iterator, Object parentLayer, Object box) { |
||
146 | if (featureSet == null){ |
||
147 | featureSet = new HashMap(); |
||
148 | } |
||
149 | if (envelope == null){ |
||
150 | try {
|
||
151 | envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D); |
||
152 | } catch (CreateEnvelopeException e) {
|
||
153 | Log.error("Error creating the envelope", e);
|
||
154 | } |
||
155 | } |
||
156 | return featureSet;
|
||
157 | } |
||
158 | 27636 | jpiera | |
159 | 34026 | jpiera | /*
|
160 | * (non-Javadoc)
|
||
161 | * @see org.gvsig.gpe.IGPEContentHandler#endLayer(java.lang.Object)
|
||
162 | */
|
||
163 | public void endLayer(Object layer) { |
||
164 | storeProvider.setEnvelope(envelope); |
||
165 | } |
||
166 | 27636 | jpiera | |
167 | 34026 | jpiera | /*
|
168 | * (non-Javadoc)
|
||
169 | * @see org.gvsig.gpe.parser.GPEContentHandler#startPoint(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
170 | */
|
||
171 | public Object startPoint(String id, ICoordinateIterator coords, String srs) { |
||
172 | return createPoint(coords);
|
||
173 | } |
||
174 | 27499 | jpiera | |
175 | 34026 | jpiera | private Point createPoint(ICoordinateIterator coords){ |
176 | double[] buffer = new double[coords.getDimension()]; |
||
177 | try {
|
||
178 | coords.hasNext(); |
||
179 | coords.next(buffer); |
||
180 | Point point = null; |
||
181 | if (coords.getDimension() == 2){ |
||
182 | point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
|
||
183 | }else if (coords.getDimension() == 3){ |
||
184 | 34899 | jpiera | point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM3D);
|
185 | 34026 | jpiera | } |
186 | for (int i=0 ; i<buffer.length ; i++){ |
||
187 | point.setCoordinateAt(i, buffer[i]); |
||
188 | } |
||
189 | return point;
|
||
190 | } catch (IOException e) { |
||
191 | getErrorHandler().addError(e); |
||
192 | } catch (CreateGeometryException e) {
|
||
193 | getErrorHandler().addError(e); |
||
194 | } |
||
195 | return null; |
||
196 | } |
||
197 | 27499 | jpiera | |
198 | 34026 | jpiera | private Point createPoint(double[] buffer){ |
199 | try {
|
||
200 | Point point = null; |
||
201 | if (buffer.length == 2){ |
||
202 | point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
|
||
203 | }else if (buffer.length == 3){ |
||
204 | 34899 | jpiera | point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM3D);
|
205 | 34026 | jpiera | } |
206 | for (int i=0 ; i<buffer.length ; i++){ |
||
207 | point.setCoordinateAt(i, buffer[i]); |
||
208 | } |
||
209 | return point;
|
||
210 | }catch (CreateGeometryException e) {
|
||
211 | getErrorHandler().addError(e); |
||
212 | } |
||
213 | return null; |
||
214 | } |
||
215 | 27636 | jpiera | |
216 | 27499 | jpiera | |
217 | 34026 | jpiera | /* (non-Javadoc)
|
218 | * @see org.gvsig.gpe.parser.GPEContentHandler#startLineString(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
219 | */
|
||
220 | public Object startLineString(String id, ICoordinateIterator coords, |
||
221 | String srs) {
|
||
222 | return createCurve(coords);
|
||
223 | } |
||
224 | 27636 | jpiera | |
225 | 34026 | jpiera | private Curve createCurve(ICoordinateIterator coords){
|
226 | GeneralPathX gp = createGeneralPathX(coords); |
||
227 | try {
|
||
228 | Curve curve = null;
|
||
229 | if (coords.getDimension() == 2){ |
||
230 | curve = (Curve) geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D); |
||
231 | }else if (coords.getDimension() == 3){ |
||
232 | 34899 | jpiera | curve = (Curve) geomManager.create(TYPES.CURVE, SUBTYPES.GEOM3D); |
233 | 34026 | jpiera | } |
234 | curve.setGeneralPath(gp); |
||
235 | return curve;
|
||
236 | } catch (CreateGeometryException e) {
|
||
237 | getErrorHandler().addError(e); |
||
238 | } |
||
239 | return null; |
||
240 | } |
||
241 | 27636 | jpiera | |
242 | 34026 | jpiera | private GeneralPathX createGeneralPathX(ICoordinateIterator coords){
|
243 | GeneralPathX gp = new GeneralPathX();
|
||
244 | if (coords == null){ |
||
245 | return gp;
|
||
246 | } |
||
247 | double[] buffer = new double[coords.getDimension()]; |
||
248 | try {
|
||
249 | if (coords.hasNext()){
|
||
250 | coords.next(buffer); |
||
251 | gp.moveTo(buffer[0], buffer[1]); |
||
252 | } |
||
253 | while(coords.hasNext()){
|
||
254 | coords.next(buffer); |
||
255 | gp.lineTo(buffer[0], buffer[1]); |
||
256 | } |
||
257 | } catch (IOException e) { |
||
258 | getErrorHandler().addError(e); |
||
259 | } |
||
260 | return gp;
|
||
261 | } |
||
262 | 27499 | jpiera | |
263 | 34026 | jpiera | /* (non-Javadoc)
|
264 | * @see org.gvsig.gpe.parser.GPEContentHandler#startPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
265 | */
|
||
266 | 27636 | jpiera | |
267 | 34026 | jpiera | public Object startPolygon(String id, ICoordinateIterator coords, String srs) { |
268 | return createSurface(coords);
|
||
269 | } |
||
270 | 27499 | jpiera | |
271 | 34026 | jpiera | private Surface createSurface(ICoordinateIterator coords){
|
272 | GeneralPathX gp = createGeneralPathX(coords); |
||
273 | try {
|
||
274 | Surface surface = null;
|
||
275 | if (coords.getDimension() == 2){ |
||
276 | surface = (Surface) geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D); |
||
277 | }else if (coords.getDimension() == 3){ |
||
278 | 34899 | jpiera | surface = (Surface) geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM3D); |
279 | 34026 | jpiera | } |
280 | surface.setGeneralPath(gp); |
||
281 | return surface;
|
||
282 | } catch (CreateGeometryException e) {
|
||
283 | getErrorHandler().addError(e); |
||
284 | } |
||
285 | return null; |
||
286 | } |
||
287 | 27636 | jpiera | |
288 | 27499 | jpiera | |
289 | 34026 | jpiera | /* (non-Javadoc)
|
290 | * @see org.gvsig.gpe.parser.GPEContentHandler#startInnerPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
291 | */
|
||
292 | public Object startInnerPolygon(String id, ICoordinateIterator coords, |
||
293 | String srs) {
|
||
294 | return createSurface(coords);
|
||
295 | } |
||
296 | 27499 | jpiera | |
297 | 34026 | jpiera | /*
|
298 | * (non-Javadoc)
|
||
299 | * @see org.gvsig.gpe.IGPEContentHandler#addGeometryToFeature(java.lang.Object, java.lang.Object)
|
||
300 | */
|
||
301 | public void addGeometryToFeature(Object geometry, Object feature) { |
||
302 | ((GPEFeature)feature).setGeometry((Geometry)geometry); |
||
303 | } |
||
304 | 27499 | jpiera | |
305 | 34026 | jpiera | /*
|
306 | * (non-Javadoc)
|
||
307 | * @see org.gvsig.gpe.IGPEContentHandler#addBboxToLayer(java.lang.Object, java.lang.Object)
|
||
308 | */
|
||
309 | public void addBboxToLayer(Object bbox, Object layer) { |
||
310 | // if (layer != null){
|
||
311 | // GPEBBox gpeBBox = (GPEBBox)bbox;
|
||
312 | // if (gpeBBox.getSrs() != null){
|
||
313 | // IProjection projection = null;
|
||
314 | // try{
|
||
315 | // CRSFactory.getCRS(gpeBBox.getSrs());
|
||
316 | // }catch(Exception e){
|
||
317 | // //If the CRS factory has an error.
|
||
318 | // }
|
||
319 | // if ((projection != null) && (!(projection.equals(((FLayer)layer).getProjection())))){
|
||
320 | // //TODO reproyectar la bbox y asignarsela a la capa
|
||
321 | // }
|
||
322 | // }
|
||
323 | // ((IGPEDriver)layer).setExtent(gpeBBox.getBbox2D());
|
||
324 | // }
|
||
325 | } |
||
326 | 27499 | jpiera | |
327 | 34026 | jpiera | /*
|
328 | * (non-Javadoc)
|
||
329 | * @see org.gvsig.gpe.IGPEContentHandler#addElementToFeature(java.lang.Object, java.lang.Object)
|
||
330 | */
|
||
331 | public void addElementToFeature(Object element, Object feature) { |
||
332 | GPEElement gpeElement = (GPEElement)element; |
||
333 | ((GPEFeature)feature).addElement(gpeElement); |
||
334 | } |
||
335 | 27499 | jpiera | |
336 | 34026 | jpiera | /*
|
337 | * (non-Javadoc)
|
||
338 | * @see org.gvsig.gpe.IGPEContentHandler#addFeatureToLayer(java.lang.Object, java.lang.Object)
|
||
339 | */
|
||
340 | public void addFeatureToLayer(Object feature, Object layer) { |
||
341 | GPEFeature gpefeature = (GPEFeature)feature; |
||
342 | Envelope currentEnvelope = gpefeature.getEnvelope(); |
||
343 | if (featureType == null){ |
||
344 | createFeatureType(gpefeature); |
||
345 | 27499 | jpiera | |
346 | 34026 | jpiera | //Initialize the envelope
|
347 | try {
|
||
348 | envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D); |
||
349 | } catch (CreateEnvelopeException e) {
|
||
350 | getErrorHandler().addError(e); |
||
351 | } |
||
352 | //Calculates the envelope
|
||
353 | envelope = currentEnvelope; |
||
354 | }else{
|
||
355 | //Calculates the envelope
|
||
356 | if (currentEnvelope != null){ |
||
357 | envelope.add(currentEnvelope); |
||
358 | } |
||
359 | } |
||
360 | //If it is null is a multilayer: not supported yet
|
||
361 | if (layer != null){ |
||
362 | 34134 | jpiera | FeatureProvider data = new DefaultFeatureProvider(featureType.getNotEditableCopy(), storeProvider.createNewOID());
|
363 | Map elements = gpefeature.getelements();
|
||
364 | Iterator keys = elements.keySet().iterator();
|
||
365 | String gid = gpefeature.getId();
|
||
366 | data.setOID(gid); |
||
367 | while (keys.hasNext()){
|
||
368 | String elementName = (String)keys.next(); |
||
369 | data.set(elementName, ((GPEElement)elements.get(elementName)).getValue()); |
||
370 | 34026 | jpiera | } |
371 | 34134 | jpiera | data.setDefaultGeometry(gpefeature.getGeometry()); |
372 | data.set(featureType.getDefaultGeometryAttributeIndex(), gpefeature.getGeometry()); |
||
373 | ((HashMap)layer).put(gid, data);
|
||
374 | 34026 | jpiera | } |
375 | } |
||
376 | 27636 | jpiera | |
377 | 34026 | jpiera | private void createFeatureType(GPEFeature gpefeature){ |
378 | Map elements = gpefeature.getelements();
|
||
379 | Iterator keys = elements.keySet().iterator();
|
||
380 | featureType = store.createFeatureType(); |
||
381 | //Adding the Geometry field
|
||
382 | EditableFeatureAttributeDescriptor attributeDescriptor = featureType.add("the_geom", DataTypes.GEOMETRY).setGeometryType(geometryType);
|
||
383 | attributeDescriptor.setGeometrySubType(SUBTYPES.GEOM2D); |
||
384 | attributeDescriptor.setSRS(srs); |
||
385 | featureType.setDefaultGeometryAttributeName("the_geom");
|
||
386 | //Adding the ID
|
||
387 | featureType.add("gid", DataTypes.LONG);
|
||
388 | featureType.setHasOID(true);
|
||
389 | while (keys.hasNext()){
|
||
390 | String elementName = (String)keys.next(); |
||
391 | if (!elementName.equals("the_geom")){ |
||
392 | featureType.add(elementName, DataTypes.STRING); |
||
393 | } |
||
394 | } |
||
395 | FeatureType defaultType = featureType.getNotEditableCopy(); |
||
396 | List types = new ArrayList(1); |
||
397 | types.add(defaultType); |
||
398 | this.store.setFeatureTypes(types, defaultType);
|
||
399 | } |
||
400 | 27499 | jpiera | |
401 | 34026 | jpiera | /*
|
402 | * (non-Javadoc)
|
||
403 | * @see org.gvsig.gpe.IGPEContentHandler#addInnerPolygonToPolygon(java.lang.Object, java.lang.Object)
|
||
404 | */
|
||
405 | public void addInnerPolygonToPolygon(Object innerPolygon, Object Polygon) { |
||
406 | //((Geometry)Polygon).addGeometry((GPEGeometry)innerPolygon);
|
||
407 | } |
||
408 | 27499 | jpiera | |
409 | 34026 | jpiera | /*
|
410 | * (non-Javadoc)
|
||
411 | * @see org.gvsig.gpe.IGPEContentHandler#addNameToFeature(java.lang.String, java.lang.Object)
|
||
412 | */
|
||
413 | public void addNameToFeature(String name, Object feature) { |
||
414 | 27499 | jpiera | |
415 | 34026 | jpiera | } |
416 | 27499 | jpiera | |
417 | 34026 | jpiera | /*
|
418 | * (non-Javadoc)
|
||
419 | * @see org.gvsig.gpe.IGPEContentHandler#addParentElementToElement(java.lang.Object, java.lang.Object)
|
||
420 | */
|
||
421 | public void addParentElementToElement(Object parent, Object element) { |
||
422 | 27499 | jpiera | |
423 | 34026 | jpiera | } |
424 | 27499 | jpiera | |
425 | 34026 | jpiera | /*
|
426 | * (non-Javadoc)
|
||
427 | * @see org.gvsig.gpe.IGPEContentHandler#addSrsToLayer(java.lang.String, java.lang.Object)
|
||
428 | */
|
||
429 | public void addSrsToLayer(String srs, Object Layer) { |
||
430 | // this.srs = srs;
|
||
431 | } |
||
432 | 27499 | jpiera | |
433 | |||
434 | 34026 | jpiera | /* (non-Javadoc)
|
435 | * @see org.gvsig.gpe.parser.GPEContentHandler#startBbox(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
436 | */
|
||
437 | public Object startBbox(String id, ICoordinateIterator coords, String srs) { |
||
438 | Envelope envelope = null;
|
||
439 | try {
|
||
440 | if (coords.getDimension() == 2){ |
||
441 | envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D); |
||
442 | }else if (coords.getDimension() == 3){ |
||
443 | 34899 | jpiera | envelope = geomManager.createEnvelope(SUBTYPES.GEOM3D); |
444 | 34026 | jpiera | } |
445 | double[] buffer = new double[coords.getDimension()]; |
||
446 | 27636 | jpiera | |
447 | 34026 | jpiera | if (coords.hasNext()){
|
448 | coords.next(buffer); |
||
449 | envelope.setLowerCorner(createPoint(buffer)); |
||
450 | } |
||
451 | if (coords.hasNext()){
|
||
452 | coords.next(buffer); |
||
453 | envelope.setUpperCorner(createPoint(buffer)); |
||
454 | } |
||
455 | } catch (IOException e) { |
||
456 | getErrorHandler().addError(e); |
||
457 | } catch (CreateEnvelopeException e) {
|
||
458 | getErrorHandler().addError(e); |
||
459 | } |
||
460 | return envelope;
|
||
461 | } |
||
462 | 27636 | jpiera | |
463 | 34026 | jpiera | /*
|
464 | * (non-Javadoc)
|
||
465 | * @see org.gvsig.gpe.parser.GPEContentHandler#startElement(java.lang.String, java.lang.String, java.lang.Object, org.gvsig.gpe.parser.IAttributesIterator, java.lang.Object)
|
||
466 | */
|
||
467 | public Object startElement(String namespace, String name, Object value, |
||
468 | IAttributesIterator attributesIterator, Object parentElement) {
|
||
469 | 34144 | jpiera | return new GPEElement(name, value, (GPEElement)parentElement); |
470 | 34026 | jpiera | } |
471 | 27499 | jpiera | |
472 | 34026 | jpiera | /*
|
473 | * (non-Javadoc)
|
||
474 | * @see org.gvsig.gpe.parser.GPEContentHandler#startFeature(java.lang.String, java.lang.String, java.lang.String, org.gvsig.gpe.parser.IAttributesIterator, java.lang.Object)
|
||
475 | */
|
||
476 | public Object startFeature(String id, String namespace, String name, |
||
477 | IAttributesIterator attributes, Object layer){
|
||
478 | String sId;
|
||
479 | if (id == null){ |
||
480 | sId = new String(new Long(featureId).toString()); |
||
481 | }else{
|
||
482 | sId = id; |
||
483 | } |
||
484 | featureId++; |
||
485 | //Check the xml schema...
|
||
486 | // for (int i=0 ; i<schemas.size() ; i++){
|
||
487 | // IXSSchema schema = schemas.get(i);
|
||
488 | // IXSElementDeclaration element = schema.getElementDeclarationByName(namespace, name);
|
||
489 | // if (element != null){
|
||
490 | // featureType = store.createFeatureType();
|
||
491 | // IXSTypeDefinition type = element.getTypeDefinition();
|
||
492 | // if (type instanceof IXSComplexTypeDefinition){
|
||
493 | // IXSComplexTypeDefinition complexType = (IXSComplexTypeDefinition)type;
|
||
494 | // complexType.getContentType().
|
||
495 | // }
|
||
496 | //
|
||
497 | // featureType.add("the_geom", DataTypes.GEOMETRY).setGeometryType(TYPES.GEOMETRY);
|
||
498 | // featureType.setDefaultGeometryAttributeName("the_geom");
|
||
499 | // featureType.setHasOID(true);
|
||
500 | // while (keys.hasNext()){
|
||
501 | // String elementName = (String)keys.next();
|
||
502 | // featureType.add(elementName, DataTypes.STRING);
|
||
503 | // }
|
||
504 | // FeatureType defaultType = featureType.getNotEditableCopy();
|
||
505 | // List types = new ArrayList(1);
|
||
506 | // types.add(defaultType);
|
||
507 | // this.store.setFeatureTypes(types, defaultType);
|
||
508 | //
|
||
509 | // //Initialize the envelope
|
||
510 | // try {
|
||
511 | // envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
|
||
512 | // } catch (CreateEnvelopeException e) {
|
||
513 | // getErrorHandler().addError(e);
|
||
514 | // }
|
||
515 | // }
|
||
516 | // }
|
||
517 | return new GPEFeature(sId, |
||
518 | name, name); |
||
519 | } |
||
520 | 27499 | jpiera | |
521 | 34026 | jpiera | /* (non-Javadoc)
|
522 | * @see org.gvsig.gpe.parser.GPEContentHandler#startLinearRing(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
523 | */
|
||
524 | public Object startLinearRing(String id, ICoordinateIterator coords, |
||
525 | String srs) {
|
||
526 | return createSurface(coords);
|
||
527 | } |
||
528 | 27499 | jpiera | |
529 | 34026 | jpiera | /*
|
530 | * (non-Javadoc)
|
||
531 | * @see org.gvsig.gpe.IGPEContentHandler#startMultiPoint(java.lang.String, java.lang.String)
|
||
532 | */
|
||
533 | public Object startMultiPoint(String id, String srs) { |
||
534 | try {
|
||
535 | return geomManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
|
||
536 | } catch (CreateGeometryException e) {
|
||
537 | getErrorHandler().addError(e); |
||
538 | } |
||
539 | return null; |
||
540 | } |
||
541 | 27499 | jpiera | |
542 | 34026 | jpiera | /*
|
543 | * (non-Javadoc)
|
||
544 | * @see org.gvsig.gpe.IGPEContentHandler#addPointToMultiPoint(java.lang.Object, java.lang.Object)
|
||
545 | */
|
||
546 | public void addPointToMultiPoint(Object point, Object multiPoint) { |
||
547 | ((MultiPoint)multiPoint).addPoint((Point)point);
|
||
548 | } |
||
549 | 27499 | jpiera | |
550 | 34026 | jpiera | /*
|
551 | * (non-Javadoc)
|
||
552 | * @see org.gvsig.gpe.IGPEContentHandler#startMultiLineString(java.lang.String, java.lang.String)
|
||
553 | */
|
||
554 | public Object startMultiLineString(String id, String srs) { |
||
555 | super.startMultiLineString(id, srs);
|
||
556 | try {
|
||
557 | return geomManager.create(TYPES.MULTICURVE, SUBTYPES.GEOM2D);
|
||
558 | } catch (CreateGeometryException e) {
|
||
559 | getErrorHandler().addError(e); |
||
560 | } |
||
561 | return null; |
||
562 | } |
||
563 | 27499 | jpiera | |
564 | 34026 | jpiera | /*
|
565 | * (non-Javadoc)
|
||
566 | * @see org.gvsig.gpe.IGPEContentHandler#addLineStringToMultiLineString(java.lang.Object, java.lang.Object)
|
||
567 | */
|
||
568 | public void addLineStringToMultiLineString(Object lineString, Object multiLineString) { |
||
569 | ((MultiCurve)multiLineString).addCurve((Curve)lineString); |
||
570 | } |
||
571 | 27499 | jpiera | |
572 | 34026 | jpiera | /*
|
573 | * (non-Javadoc)
|
||
574 | * @see org.gvsig.gpe.IGPEContentHandler#startMultiPolygon(java.lang.String, java.lang.String)
|
||
575 | */
|
||
576 | public Object startMultiPolygon(String id, String srs) { |
||
577 | super.startMultiPolygon(id, srs);
|
||
578 | try {
|
||
579 | return geomManager.create(TYPES.MULTISURFACE, SUBTYPES.GEOM2D);
|
||
580 | } catch (CreateGeometryException e) {
|
||
581 | getErrorHandler().addError(e); |
||
582 | } |
||
583 | return null; |
||
584 | } |
||
585 | 27499 | jpiera | |
586 | 34026 | jpiera | /*
|
587 | * (non-Javadoc)
|
||
588 | * @see org.gvsig.gpe.IGPEContentHandler#addPolygonToMultiPolygon(java.lang.Object, java.lang.Object)
|
||
589 | */
|
||
590 | public void addPolygonToMultiPolygon(Object polygon, Object multiPolygon) { |
||
591 | ((MultiSurface)multiPolygon).addSurface((Surface)polygon); |
||
592 | } |
||
593 | 27499 | jpiera | |
594 | 34026 | jpiera | /* (non-Javadoc)
|
595 | * @see org.gvsig.gpe.GPEContentHandler#addCurveToMultiCurve(java.lang.Object, java.lang.Object)
|
||
596 | */
|
||
597 | public void addCurveToMultiCurve(Object curve, Object multiCurve) { |
||
598 | ((MultiCurve)multiCurve).addCurve((Curve)curve); |
||
599 | } |
||
600 | 27499 | jpiera | |
601 | 34026 | jpiera | /* (non-Javadoc)
|
602 | * @see org.gvsig.gpe.GPEContentHandler#addSegmentToCurve(java.lang.Object, java.lang.Object)
|
||
603 | */
|
||
604 | public void addSegmentToCurve(Object segment, Object curve) { |
||
605 | ((Curve)curve).addVertex((Point)segment);
|
||
606 | } |
||
607 | 27499 | jpiera | |
608 | 34026 | jpiera | /* (non-Javadoc)
|
609 | * @see org.gvsig.gpe.parser.GPEContentHandler#startCurve(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
610 | */
|
||
611 | public Object startCurve(String id, ICoordinateIterator coords, String srs) { |
||
612 | return createCurve(coords);
|
||
613 | } |
||
614 | 27499 | jpiera | |
615 | 34026 | jpiera | /* (non-Javadoc)
|
616 | * @see org.gvsig.gpe.GPEContentHandler#startCurve(java.lang.String, java.lang.String)
|
||
617 | */
|
||
618 | public Object startCurve(String id, String srs) { |
||
619 | return createCurve(null); |
||
620 | } |
||
621 | 27499 | jpiera | |
622 | 34026 | jpiera | /* (non-Javadoc)
|
623 | * @see org.gvsig.gpe.GPEContentHandler#startMultiCurve(java.lang.String, java.lang.String)
|
||
624 | */
|
||
625 | public Object startMultiCurve(String id, String srs) { |
||
626 | try {
|
||
627 | return geomManager.create(TYPES.MULTICURVE, SUBTYPES.GEOM2D);
|
||
628 | } catch (CreateGeometryException e) {
|
||
629 | getErrorHandler().addError(e); |
||
630 | } |
||
631 | return null; |
||
632 | } |
||
633 | 27499 | jpiera | |
634 | 34026 | jpiera | /* (non-Javadoc)
|
635 | * @see org.gvsig.gpe.GPEContentHandler#addGeometryToMultiGeometry(java.lang.Object, java.lang.Object)
|
||
636 | */
|
||
637 | public void addGeometryToMultiGeometry(Object geometry, Object multiGeometry) { |
||
638 | ((MultiCurve)multiGeometry).addCurve((Curve)geometry); |
||
639 | } |
||
640 | 27499 | jpiera | |
641 | 34026 | jpiera | /* (non-Javadoc)
|
642 | * @see org.gvsig.gpe.GPEContentHandler#startMultiGeometry(java.lang.String, java.lang.String)
|
||
643 | */
|
||
644 | public Object startMultiGeometry(String id, String srs) { |
||
645 | try {
|
||
646 | return geomManager.create(TYPES.AGGREGATE, SUBTYPES.GEOM2D);
|
||
647 | } catch (CreateGeometryException e) {
|
||
648 | getErrorHandler().addError(e); |
||
649 | } |
||
650 | return null; |
||
651 | } |
||
652 | 27636 | jpiera | |
653 | 34026 | jpiera | /**
|
654 | * @return a new OID
|
||
655 | */
|
||
656 | public Object createNewOID() { |
||
657 | featureId++; |
||
658 | return String.valueOf(featureId); |
||
659 | } |
||
660 | 27499 | jpiera | |
661 | 34026 | jpiera | /**
|
662 | * @param envelope the envelope to set
|
||
663 | */
|
||
664 | public void setEnvelope(Envelope envelope) { |
||
665 | this.envelope = envelope;
|
||
666 | } |
||
667 | |||
668 | /**
|
||
669 | * @param featureType the featureType to set
|
||
670 | */
|
||
671 | public void setFeatureType(EditableFeatureType featureType) { |
||
672 | this.featureType = featureType;
|
||
673 | } |
||
674 | 27499 | jpiera | } |