/** * Precondition: parser cursor positioned on a geometry property (ej, {@code gml:Point}, etc) * * <p>Postcondition: parser gets positioned at the end tag of the element it started parsing the * geometry at * * @return * @throws FactoryException * @throws NoSuchAuthorityCodeException * @throws IOException * @throws XmlPullParserException */ private Geometry parseGeom() throws NoSuchAuthorityCodeException, FactoryException, XmlPullParserException, IOException { final QName startingGeometryTagName = new QName(parser.getNamespace(), parser.getName()); int dimension = crsDimension(2); CoordinateReferenceSystem crs = crs(DefaultGeographicCRS.WGS84); Geometry geom; if (GML.Point.equals(startingGeometryTagName)) { geom = parsePoint(dimension, crs); } else if (GML.LineString.equals(startingGeometryTagName)) { geom = parseLineString(dimension, crs); } else if (GML.Polygon.equals(startingGeometryTagName)) { geom = parsePolygon(dimension, crs); } else if (GML.MultiPoint.equals(startingGeometryTagName)) { geom = parseMultiPoint(dimension, crs); } else if (GML.MultiLineString.equals(startingGeometryTagName)) { geom = parseMultiLineString(dimension, crs); } else if (GML.MultiSurface.equals(startingGeometryTagName)) { geom = parseMultiSurface(dimension, crs); } else if (GML.MultiPolygon.equals(startingGeometryTagName)) { geom = parseMultiPolygon(dimension, crs); } else { throw new IllegalStateException("Unrecognized geometry element " + startingGeometryTagName); } parser.require( END_TAG, startingGeometryTagName.getNamespaceURI(), startingGeometryTagName.getLocalPart()); return geom; }