/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.data.shapefile.shp.xml;
import java.io.IOException;
import java.io.InputStream;
import org.geotools.data.shapefile.FileReader;
import org.geotools.data.shapefile.ShpFileType;
import org.geotools.data.shapefile.ShpFiles;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import com.vividsolutions.jts.geom.Envelope;
public class ShpXmlFileReader implements FileReader {
Document dom;
/**
* Parse metadataFile (currently for bounding box information).
* <p>
*
* </p>
*
* @param shapefileFiles
* @throws JDOMException
* @throws IOException
*/
public ShpXmlFileReader(ShpFiles shapefileFiles) throws JDOMException,
IOException {
SAXBuilder builder = new SAXBuilder(false);
InputStream inputStream = shapefileFiles.getInputStream(
ShpFileType.SHP_XML, this);
try {
dom = builder.build(inputStream);
} finally {
inputStream.close();
}
}
public Metadata parse() {
return parseMetadata(dom.getRootElement());
}
protected Metadata parseMetadata(Element root) {
Metadata meta = new Metadata();
meta.setIdinfo(parseIdInfo(root.getChild("idinfo")));
return meta;
}
protected IdInfo parseIdInfo(Element element) {
IdInfo idInfo = new IdInfo();
Element bounding = element.getChild("spdom").getChild("bounding");
idInfo.setBounding(parseBounding(bounding));
Element lbounding = element.getChild("spdom").getChild("lbounding");
idInfo.setLbounding(parseBounding(lbounding));
return idInfo;
}
protected Envelope parseBounding(Element bounding) {
if (bounding == null)
return new Envelope();
double minX = Double.parseDouble(bounding.getChildText("westbc"));
double maxX = Double.parseDouble(bounding.getChildText("eastbc"));
double minY = Double.parseDouble(bounding.getChildText("southbc"));
double maxY = Double.parseDouble(bounding.getChildText("northbc"));
return new Envelope(minX, maxX, minY, maxY);
}
public String id() {
return "Shp Xml Reader";
}
}