Search in sources :

Example 6 with Parser

use of org.geotools.xml.Parser in project spatial-portal by AtlasOfLivingAustralia.

the class AreaUploadShapefile method getKMLPolygonAsWKT.

/**
 * parse a KML containing a single placemark, or a placemark in a folder, into WKT.
 *
 * @param kmldata
 * @return WKT if valid, null on error, empty string "" when placemark not matched.
 */
private static String getKMLPolygonAsWKT(String kmldata) {
    try {
        Parser parser = new Parser(new org.geotools.kml.v22.KMLConfiguration());
        SimpleFeature f = (SimpleFeature) parser.parse(new StringReader(kmldata));
        Collection placemarks = (Collection) f.getAttribute(StringConstants.FEATURE);
        Geometry g = null;
        SimpleFeature sf = null;
        // for <Placemark>
        if (!placemarks.isEmpty() && !placemarks.isEmpty()) {
            sf = (SimpleFeature) placemarks.iterator().next();
            g = (Geometry) sf.getAttribute("Geometry");
        }
        // for <Folder><Placemark>
        if (g == null && sf != null) {
            placemarks = (Collection) sf.getAttribute(StringConstants.FEATURE);
            if (placemarks != null && !placemarks.isEmpty()) {
                g = (Geometry) ((SimpleFeature) placemarks.iterator().next()).getAttribute("Geometry");
            } else {
                placemarks = (Collection) sf.getAttribute("Folder");
                if (placemarks != null && !placemarks.isEmpty()) {
                    g = (Geometry) ((SimpleFeature) placemarks.iterator().next()).getAttribute("Geometry");
                }
            }
        }
        if (g != null) {
            WKTWriter wr = new WKTWriter();
            String wkt = wr.write(g);
            return wkt.replace(" (", "(").replace(", ", ",").replace(") ", ")");
        } else {
            return "";
        }
    } catch (SAXException e) {
        LOGGER.error("KML spec parse error", e);
    } catch (ParserConfigurationException e) {
        LOGGER.error("error converting KML to WKT", e);
    } catch (Exception e) {
        LOGGER.error("error reading KML", e);
    }
    return null;
}
Also used : WKTWriter(com.vividsolutions.jts.io.WKTWriter) SimpleFeature(org.opengis.feature.simple.SimpleFeature) ParseException(com.vividsolutions.jts.io.ParseException) SuspendNotAllowedException(org.zkoss.zk.ui.SuspendNotAllowedException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) SAXException(org.xml.sax.SAXException) Parser(org.geotools.xml.Parser) SAXException(org.xml.sax.SAXException) Geometry(com.vividsolutions.jts.geom.Geometry) Collection(java.util.Collection) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException)

Aggregations

ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)6 Parser (org.geotools.xml.Parser)6 SAXException (org.xml.sax.SAXException)6 IOException (java.io.IOException)5 StringReader (java.io.StringReader)4 ByteArrayInputStream (java.io.ByteArrayInputStream)3 InputStream (java.io.InputStream)3 Configuration (org.geotools.xml.Configuration)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 JAXBException (javax.xml.bind.JAXBException)2 DocumentBuilder (javax.xml.parsers.DocumentBuilder)2 Result (javax.xml.transform.Result)2 Source (javax.xml.transform.Source)2 TransformerException (javax.xml.transform.TransformerException)2 TransformerFactoryConfigurationError (javax.xml.transform.TransformerFactoryConfigurationError)2 DOMSource (javax.xml.transform.dom.DOMSource)2 StreamResult (javax.xml.transform.stream.StreamResult)2 Geometry (org.locationtech.jts.geom.Geometry)2 Document (org.w3c.dom.Document)2 InputSource (org.xml.sax.InputSource)2