예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
        /// <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));
        }
예제 #4
0
 /// <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));
 }