/// <summary> /// Parses a GeometryCollection text. /// </summary> /// <param name="tokens">The list of tokens.</param> /// <param name="is3D">bool value indicating whether GeometryCollection being parsed has z-coordinate.</param> /// <param name="isMeasured">bool value indicating whether GeometryCollection being parsed has m-value.</param> /// <returns>A GeometryCollection specified by tokens.</returns> /// <remarks><![CDATA[<GeometryCollection text> ::= <empty set> | <left paren> <geometry tagged text> {<comma> <geometry tagged text>}* <right paren>]]></remarks> private static GeometryCollection <Geometry> ParseGeometryCollectionText(WktTokensBuffer tokens, bool is3D, bool isMeasured) { WktToken t = tokens.Peek(true); if (t.Type == TokenType.STRING && t.Value.ToUpperInvariant() == "EMPTY") { tokens.GetToken(true); return(new GeometryCollection <Geometry>()); } WktReader.Expect(TokenType.LEFT_PARENTHESIS, tokens); GeometryCollection <Geometry> result = new GeometryCollection <Geometry>(); result.Geometries.Add(WktReader.ParseGeometryTaggedText(tokens)); t = tokens.Peek(true); while (t.Type == TokenType.COMMA) { tokens.GetToken(true); result.Geometries.Add(WktReader.ParseGeometryTaggedText(tokens)); t = tokens.Peek(true); } WktReader.Expect(TokenType.RIGHT_PARENTHESIS, tokens); return(result); }
/// <summary> /// Reads next geometry from the input. /// </summary> /// <typeparam name="T">The type of Geometry to be parsed.</typeparam> /// <returns>The geometry object of specific type read from the reader or null if no more geometries are available.</returns> public T Read <T>() where T : Geometry { Geometry parsed = WktReader.ParseGeometryTaggedText(_tokens); if (parsed != null) { T result = parsed as T; if (result == null) { throw new WktParseException("Input doesn't contain valid WKB representation of the specified geometry type."); } return(result); } else { return(null); } }
/// <summary> /// Parses a Geometry from WKT string. /// </summary> /// <param name="wkt">The string with WKT representation of a Geometry.</param> /// <returns>The parsed Geometry.</returns> public static Geometry Parse(string wkt) { WktTokensBuffer tokens = new WktTokensBuffer(WktTokenizer.Tokenize(wkt)); return(WktReader.ParseGeometryTaggedText(tokens)); }
/// <summary> /// Reads next geometry from the input. /// </summary> /// <returns>The geometry object read from the reader or null if no more geometries are available.</returns> public Geometry Read() { return(WktReader.ParseGeometryTaggedText(_tokens)); }