Class WKTReader


  • public class WKTReader
    extends java.lang.Object
    Converts a geometry in Well-Known Text format to a Geometry.

    WKTReader supports extracting Geometry objects from either Readers or Strings. This allows it to function as a parser to read Geometry objects from text blocks embedded in other data formats (e.g. XML).

    A WKTReader is parameterized by a GeometryFactory, to allow it to create Geometry objects of the appropriate implementation. In particular, the GeometryFactory determines the PrecisionModel and SRID that is used.

    The WKTReader converts all input numbers to the precise internal representation.

    Notes:

    • Keywords are case-insensitive.
    • The reader supports non-standard "LINEARRING" tags.
    • The reader uses Double.parseDouble to perform the conversion of ASCII numbers to floating point. This means it supports the Java syntax for floating point literals (including scientific notation).

    Syntax

    The following syntax specification describes the version of Well-Known Text supported by JTS. (The specification uses a syntax language similar to that used in the C and Java language specifications.)

    As of version 1.15, JTS can read (but not write) WKT Strings including Z, M or ZM in the name of the geometry type (ex. POINT Z, LINESTRINGZM). Note that it only makes the reader more flexible, but JTS could already read 3D coordinates from WKT String and still can't read 4D coordinates.

     WKTGeometry: one of
    
           WKTPoint  WKTLineString  WKTLinearRing  WKTPolygon
           WKTMultiPoint  WKTMultiLineString  WKTMultiPolygon
           WKTGeometryCollection
    
     WKTPoint: POINT[Dimension] ( Coordinate )
    
     WKTLineString: LINESTRING[Dimension] CoordinateSequence
    
     WKTLinearRing: LINEARRING[Dimension] CoordinateSequence
    
     WKTPolygon: POLYGON[Dimension] CoordinateSequenceList
    
     WKTMultiPoint: MULTIPOINT[Dimension] CoordinateSingletonList
    
     WKTMultiLineString: MULTILINESTRING[Dimension] CoordinateSequenceList
    
     WKTMultiPolygon:
             MULTIPOLYGON[Dimension] ( CoordinateSequenceList { , CoordinateSequenceList } )
    
     WKTGeometryCollection: 
             GEOMETRYCOLLECTION[Dimension]  ( WKTGeometry { , WKTGeometry } )
    
     CoordinateSingletonList:
             ( CoordinateSingleton { , CoordinateSingleton } )
             | EMPTY
             
     CoordinateSingleton:
             ( Coordinate )
             | EMPTY
    
     CoordinateSequenceList:
             ( CoordinateSequence { , CoordinateSequence } )
             | EMPTY
    
     CoordinateSequence:
             ( Coordinate { , Coordinate } )
             | EMPTY
    
     Coordinate:
             Number Number Numberopt
    
     Number: A Java-style floating-point number (including NaN, with arbitrary case)
    
     Dimension:
             Z| Z|M| M|ZM| ZM
    
     
    Version:
    1.7
    See Also:
    WKTWriter
    • Constructor Detail

      • WKTReader

        public WKTReader()
        Creates a reader that creates objects using the default GeometryFactory.
      • WKTReader

        public WKTReader​(GeometryFactory geometryFactory)
        Creates a reader that creates objects using the given GeometryFactory.
        Parameters:
        geometryFactory - the factory used to create Geometrys.
    • Method Detail

      • read

        public Geometry read​(java.lang.String wellKnownText)
                      throws ParseException
        Reads a Well-Known Text representation of a Geometry from a String.
        Parameters:
        wellKnownText - one or more <Geometry Tagged Text> strings (see the OpenGIS Simple Features Specification) separated by whitespace
        Returns:
        a Geometry specified by wellKnownText
        Throws:
        ParseException - if a parsing problem occurs
      • read

        public Geometry read​(java.io.Reader reader)
                      throws ParseException
        Reads a Well-Known Text representation of a Geometry from a Reader.
        Parameters:
        reader - a Reader which will return a <Geometry Tagged Text> string (see the OpenGIS Simple Features Specification)
        Returns:
        a Geometry read from reader
        Throws:
        ParseException - if a parsing problem occurs
      • getCoordinates

        private Coordinate[] getCoordinates()
                                     throws java.io.IOException,
                                            ParseException
        Returns the next array of Coordinates in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next element returned by the stream should be L_PAREN (the beginning of "(x1 y1, x2 y2, ..., xn yn)") or EMPTY.
        Returns:
        the next array of Coordinates in the stream, or an empty array if EMPTY is the next element returned by the stream.
        Throws:
        java.io.IOException - if an I/O error occurs
        ParseException - if an unexpected token was encountered
      • isNumberNext

        private boolean isNumberNext()
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • getNextNumber

        private double getNextNumber()
                              throws java.io.IOException,
                                     ParseException
        Parses the next number in the stream. Numbers with exponents are handled. NaN values are handled correctly, and the case of the "NaN" symbol is not significant.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next token must be a number.
        Returns:
        the next number in the stream
        Throws:
        ParseException - if the next token is not a valid number
        java.io.IOException - if an I/O error occurs
      • getNextEmptyOrOpener

        private java.lang.String getNextEmptyOrOpener()
                                               throws java.io.IOException,
                                                      ParseException
        Returns the next EMPTY or L_PAREN in the stream as uppercase text.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next token must be EMPTY or L_PAREN.
        Returns:
        the next EMPTY or L_PAREN in the stream as uppercase text.
        Throws:
        ParseException - if the next token is not EMPTY or L_PAREN
        java.io.IOException - if an I/O error occurs
      • getNextCloserOrComma

        private java.lang.String getNextCloserOrComma()
                                               throws java.io.IOException,
                                                      ParseException
        Returns the next R_PAREN or COMMA in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next token must be R_PAREN or COMMA.
        Returns:
        the next R_PAREN or COMMA in the stream
        Throws:
        ParseException - if the next token is not R_PAREN or COMMA
        java.io.IOException - if an I/O error occurs
      • getNextCloser

        private java.lang.String getNextCloser()
                                        throws java.io.IOException,
                                               ParseException
        Returns the next R_PAREN in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next token must be R_PAREN.
        Returns:
        the next R_PAREN in the stream
        Throws:
        ParseException - if the next token is not R_PAREN
        java.io.IOException - if an I/O error occurs
      • getNextWord

        private java.lang.String getNextWord()
                                      throws java.io.IOException,
                                             ParseException
        Returns the next word in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next token must be a word.
        Returns:
        the next word in the stream as uppercase text
        Throws:
        ParseException - if the next token is not a word
        java.io.IOException - if an I/O error occurs
      • lookaheadWord

        private java.lang.String lookaheadWord()
                                        throws java.io.IOException,
                                               ParseException
        Returns the next word in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next token must be a word.
        Returns:
        the next word in the stream as uppercase text
        Throws:
        ParseException - if the next token is not a word
        java.io.IOException - if an I/O error occurs
      • parseErrorExpected

        private void parseErrorExpected​(java.lang.String expected)
                                 throws ParseException
        Throws a formatted ParseException reporting that the current token was unexpected.
        Parameters:
        expected - a description of what was expected
        Throws:
        ParseException
        AssertionFailedException - if an invalid token is encountered
      • tokenString

        private java.lang.String tokenString()
        Gets a description of the current token
        Returns:
        a description of the current token
      • readGeometryTaggedText

        private Geometry readGeometryTaggedText()
                                         throws java.io.IOException,
                                                ParseException
        Creates a Geometry using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <Geometry Tagged Text>.
        Returns:
        a Geometry specified by the next token in the stream
        Throws:
        ParseException - if the coordinates used to create a Polygon shell and holes do not form closed linestrings, or if an unexpected token was encountered
        java.io.IOException - if an I/O error occurs
      • readPointText

        private Point readPointText()
                             throws java.io.IOException,
                                    ParseException
        Creates a Point using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <Point Text>.
        Returns:
        a Point specified by the next token in the stream
        Throws:
        java.io.IOException - if an I/O error occurs
        ParseException - if an unexpected token was encountered
      • readLineStringText

        private LineString readLineStringText()
                                       throws java.io.IOException,
                                              ParseException
        Creates a LineString using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <LineString Text>.
        Returns:
        a LineString specified by the next token in the stream
        Throws:
        java.io.IOException - if an I/O error occurs
        ParseException - if an unexpected token was encountered
      • readLinearRingText

        private LinearRing readLinearRingText()
                                       throws java.io.IOException,
                                              ParseException
        Creates a LinearRing using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <LineString Text>.
        Returns:
        a LinearRing specified by the next token in the stream
        Throws:
        java.io.IOException - if an I/O error occurs
        ParseException - if the coordinates used to create the LinearRing do not form a closed linestring, or if an unexpected token was encountered
      • readMultiPointText

        private MultiPoint readMultiPointText()
                                       throws java.io.IOException,
                                              ParseException
        Creates a MultiPoint using the next tokens in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <MultiPoint Text>.
        Returns:
        a MultiPoint specified by the next token in the stream
        Throws:
        java.io.IOException - if an I/O error occurs
        ParseException - if an unexpected token was encountered
      • toPoints

        private Point[] toPoints​(Coordinate[] coordinates)
        Creates an array of Points having the given Coordinate s.
        Parameters:
        coordinates - the Coordinates with which to create the Points
        Returns:
        Points created using this WKTReader s GeometryFactory
      • readPolygonText

        private Polygon readPolygonText()
                                 throws java.io.IOException,
                                        ParseException
        Creates a Polygon using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <Polygon Text>.
        Returns:
        a Polygon specified by the next token in the stream
        Throws:
        ParseException - if the coordinates used to create the Polygon shell and holes do not form closed linestrings, or if an unexpected token was encountered.
        java.io.IOException - if an I/O error occurs
      • readMultiLineStringText

        private MultiLineString readMultiLineStringText()
                                                 throws java.io.IOException,
                                                        ParseException
        Creates a MultiLineString using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <MultiLineString Text>.
        Returns:
        a MultiLineString specified by the next token in the stream
        Throws:
        java.io.IOException - if an I/O error occurs
        ParseException - if an unexpected token was encountered
      • readMultiPolygonText

        private MultiPolygon readMultiPolygonText()
                                           throws java.io.IOException,
                                                  ParseException
        Creates a MultiPolygon using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <MultiPolygon Text>.
        Returns:
        a MultiPolygon specified by the next token in the stream, or if if the coordinates used to create the Polygon shells and holes do not form closed linestrings.
        Throws:
        java.io.IOException - if an I/O error occurs
        ParseException - if an unexpected token was encountered
      • readGeometryCollectionText

        private GeometryCollection readGeometryCollectionText()
                                                       throws java.io.IOException,
                                                              ParseException
        Creates a GeometryCollection using the next token in the stream.
        Parameters:
        tokenizer - tokenizer over a stream of text in Well-known Text format. The next tokens must form a <GeometryCollection Text>.
        Returns:
        a GeometryCollection specified by the next token in the stream
        Throws:
        ParseException - if the coordinates used to create a Polygon shell and holes do not form closed linestrings, or if an unexpected token was encountered
        java.io.IOException - if an I/O error occurs