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;
}
Aggregations