001: /*
002: * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI
003: * for visualizing and manipulating spatial features with geometry and attributes.
004: *
005: * Copyright (C) 2003 Vivid Solutions
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * as published by the Free Software Foundation; either version 2
010: * of the License, or (at your option) any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU General Public License for more details.
016: *
017: * You should have received a copy of the GNU General Public License
018: * along with this program; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
020: *
021: * For more information, contact:
022: *
023: * Vivid Solutions
024: * Suite #1A
025: * 2328 Government Street
026: * Victoria BC V8T 5G5
027: * Canada
028: *
029: * (250)385-6040
030: * www.vividsolutions.com
031: */
032:
033: package com.vividsolutions.jump.util.io;
034:
035: import java.io.*;
036: import java.util.List;
037:
038: import com.vividsolutions.jump.feature.BasicFeature;
039: import com.vividsolutions.jump.feature.Feature;
040: import com.vividsolutions.jump.feature.FeatureCollection;
041: import com.vividsolutions.jump.feature.FeatureUtil;
042: import com.vividsolutions.jump.io.*;
043:
044: /**
045: * Provides an easy way to read spatial data from a GML document. Attributes
046: * are not read. Simply pass in a Reader on the GML, and the names of the
047: * various tags. A List of Geometries will be returned.
048: */
049: public class SimpleGMLReader {
050: public SimpleGMLReader() {
051: }
052:
053: /**
054: * @param gml a Reader on an XML document containing GML
055: * @param collectionElement the name of the feature-collection tag
056: * @param featureElement the name of the feature tag
057: * @param geometryElement the name of the geometry tag
058: * @return a List of Geometries
059: */
060: public List toGeometries(Reader gml, String collectionElement,
061: String featureElement, String geometryElement)
062: throws Exception {
063: GMLInputTemplate template = template(collectionElement,
064: featureElement, geometryElement);
065: GMLReader gmlReader = new GMLReader();
066: gmlReader.setInputTemplate(template);
067:
068: return FeatureUtil.toGeometries(gmlReader.read(gml)
069: .getFeatures());
070: }
071:
072: private GMLInputTemplate template(String collectionElement,
073: String featureElement, String geometryElement)
074: throws IOException, ParseException {
075: String s = "";
076: s += "<?xml version='1.0' encoding='UTF-8'?>";
077: s += "<JCSGMLInputTemplate>";
078: s += ("<CollectionElement>" + collectionElement + "</CollectionElement>");
079: s += ("<FeatureElement>" + featureElement + "</FeatureElement>");
080: s += ("<GeometryElement>" + geometryElement + "</GeometryElement>");
081: s += "<ColumnDefinitions></ColumnDefinitions>"; //no attributes read
082: s += "</JCSGMLInputTemplate>";
083:
084: GMLInputTemplate template = new GMLInputTemplate();
085: StringReader sr = new StringReader(s);
086:
087: try {
088: template.load(sr);
089: } finally {
090: sr.close();
091: }
092:
093: return template;
094: }
095:
096: /**
097: * @param gml
098: * @see #toGeometries(Reader, String, String, String)
099: */
100: public List toGeometries(String gml, String collectionElement,
101: String featureElement, String geometryElement)
102: throws Exception {
103: StringReader r = new StringReader(gml);
104:
105: try {
106: return toGeometries(r, collectionElement, featureElement,
107: geometryElement);
108: } finally {
109: r.close();
110: }
111: }
112:
113: /**
114: * Reads a GML file that is in FME format.
115: * @return the contents of the file, including both spatial and attribute data
116: */
117: public FeatureCollection readFMEFile(File file) throws Exception {
118: FMEGMLReader fmeGMLReader = new FMEGMLReader();
119: FileReader fileReader = new FileReader(file);
120: GMLInputTemplate inputTemplate;
121:
122: try {
123: BufferedReader bufferedReader = new BufferedReader(
124: fileReader);
125:
126: try {
127: inputTemplate = fmeGMLReader.getGMLInputTemplate(
128: bufferedReader, file.getPath());
129: } finally {
130: bufferedReader.close();
131: }
132: } finally {
133: fileReader.close();
134: }
135:
136: GMLReader gmlReader = new GMLReader();
137: gmlReader.setInputTemplate(inputTemplate);
138:
139: FeatureCollection fc;
140: fileReader = new FileReader(file);
141:
142: try {
143: BufferedReader bufferedReader = new BufferedReader(
144: fileReader);
145:
146: try {
147: fc = gmlReader.read(bufferedReader);
148: } finally {
149: bufferedReader.close();
150: }
151: } finally {
152: fileReader.close();
153: }
154:
155: return fc;
156: }
157: }
|