X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.core%2Fsrc%2Forg%2Fargeo%2Fapp%2Fgeo%2FGpxUtils.java;h=645b08bda8d9ed13b05c4488e1c3ad326e3f660f;hb=9803af38d9ec2eccc2cb5e01a276cbf2edd0d50c;hp=be028d3f4a79bd65be30b935514074920b81b94d;hpb=07d4329086be993ff25fc6342c97b681b2e07433;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.core/src/org/argeo/app/geo/GpxUtils.java b/org.argeo.app.core/src/org/argeo/app/geo/GpxUtils.java index be028d3..645b08b 100644 --- a/org.argeo.app.core/src/org/argeo/app/geo/GpxUtils.java +++ b/org.argeo.app.core/src/org/argeo/app/geo/GpxUtils.java @@ -2,8 +2,14 @@ package org.argeo.app.geo; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.StringTokenizer; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -25,7 +31,7 @@ import org.xml.sax.helpers.DefaultHandler; /** Utilities around the GPX format. */ public class GpxUtils { - public static SimpleFeature parseGpxToPolygon(InputStream in) { + public static SimpleFeature parseGpxToPolygon(InputStream in) throws IOException { try { final SimpleFeatureType TYPE = DataUtilities.createType("Area", "the_geom:Polygon:srid=4326"); SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE); @@ -33,7 +39,6 @@ public class GpxUtils { GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); List coordinates = new ArrayList<>(); SAXParserFactory factory = SAXParserFactory.newInstance(); - Double[] startCoord = new Double[2]; SAXParser saxParser = factory.newSAXParser(); saxParser.parse(in, new DefaultHandler() { @@ -57,11 +62,37 @@ public class GpxUtils { featureBuilder.add(polygon); SimpleFeature area = featureBuilder.buildFeature(null); return area; - } catch (ParserConfigurationException | SAXException | IOException | SchemaException e) { + } catch (ParserConfigurationException | SAXException | SchemaException e) { throw new RuntimeException("Cannot convert GPX", e); } } + public static void writeGeoShapeAsGpx(String geoShape, OutputStream out) throws IOException { + Objects.requireNonNull(geoShape); + Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); + writer.append(""); + StringTokenizer stSeg = new StringTokenizer(geoShape.trim(), ";"); + while (stSeg.hasMoreTokens()) { + StringTokenizer stPt = new StringTokenizer(stSeg.nextToken().trim(), " "); + String lat = stPt.nextToken(); + String lng = stPt.nextToken(); + String alt = stPt.nextToken(); + // String precision = stPt.nextToken(); + writer.append("'); + writer.append("").append(alt).append(""); + writer.append(""); + } else { + writer.append("/>"); + } + } + writer.append(""); + writer.flush(); + } + /** Singleton. */ private GpxUtils() { }