Class WKTWriter


  • public class WKTWriter
    extends java.lang.Object
    Writes the Well-Known Text representation of a Geometry. The Well-Known Text format is defined in the OGC Simple Features Specification for SQL. See WKTReader for a formal specification of the format syntax.

    The WKTWriter outputs coordinates rounded to the precision model. Only the maximum number of decimal places necessary to represent the ordinates to the required precision will be output.

    The SFS WKT spec does not define a special tag for LinearRings. Under the spec, rings are output as LINESTRINGs. In order to allow precisely specifying constructed geometries, JTS also supports a non-standard LINEARRING tag which is used to output LinearRings.

    Version:
    1.7
    See Also:
    WKTReader
    • Constructor Summary

      Constructors 
      Constructor Description
      WKTWriter()
      Creates a new WKTWriter with default settings
      WKTWriter​(int outputDimension)
      Creates a writer that writes Geometrys with the given output dimension (2 or 3).
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void appendCoordinate​(Coordinate coordinate, java.io.Writer writer)
      Converts a Coordinate to <Point> format, then appends it to the writer.
      private void appendCoordinate​(CoordinateSequence seq, int i, java.io.Writer writer)
      Appends the i'th coordinate from the sequence to the writer
      private void appendGeometryCollectionTaggedText​(GeometryCollection geometryCollection, int level, java.io.Writer writer)
      Converts a GeometryCollection to <GeometryCollection Tagged Text> format, then appends it to the writer.
      private void appendGeometryCollectionText​(GeometryCollection geometryCollection, int level, java.io.Writer writer)
      Converts a GeometryCollection to <GeometryCollectionText> format, then appends it to the writer.
      private void appendGeometryTaggedText​(Geometry geometry, int level, java.io.Writer writer)
      Converts a Geometry to <Geometry Tagged Text> format, then appends it to the writer.
      private void appendLinearRingTaggedText​(LinearRing linearRing, int level, java.io.Writer writer)
      Converts a LinearRing to <LinearRing Tagged Text> format, then appends it to the writer.
      private void appendLineStringTaggedText​(LineString lineString, int level, java.io.Writer writer)
      Converts a LineString to <LineString Tagged Text> format, then appends it to the writer.
      private void appendLineStringText​(LineString lineString, int level, boolean doIndent, java.io.Writer writer)
      Converts a LineString to <LineString Text> format, then appends it to the writer.
      private void appendMultiLineStringTaggedText​(MultiLineString multiLineString, int level, java.io.Writer writer)
      Converts a MultiLineString to <MultiLineString Tagged Text> format, then appends it to the writer.
      private void appendMultiLineStringText​(MultiLineString multiLineString, int level, boolean indentFirst, java.io.Writer writer)
      Converts a MultiLineString to <MultiLineString Text> format, then appends it to the writer.
      private void appendMultiPointTaggedText​(MultiPoint multipoint, int level, java.io.Writer writer)
      Converts a MultiPoint to <MultiPoint Tagged Text> format, then appends it to the writer.
      private void appendMultiPointText​(MultiPoint multiPoint, int level, java.io.Writer writer)
      Converts a MultiPoint to <MultiPoint Text> format, then appends it to the writer.
      private void appendMultiPolygonTaggedText​(MultiPolygon multiPolygon, int level, java.io.Writer writer)
      Converts a MultiPolygon to <MultiPolygon Tagged Text> format, then appends it to the writer.
      private void appendMultiPolygonText​(MultiPolygon multiPolygon, int level, java.io.Writer writer)
      Converts a MultiPolygon to <MultiPolygon Text> format, then appends it to the writer.
      private void appendPointTaggedText​(Coordinate coordinate, int level, java.io.Writer writer, PrecisionModel precisionModel)
      Converts a Coordinate to <Point Tagged Text> format, then appends it to the writer.
      private void appendPointText​(Coordinate coordinate, int level, java.io.Writer writer, PrecisionModel precisionModel)
      Converts a Coordinate to <Point Text> format, then appends it to the writer.
      private void appendPolygonTaggedText​(Polygon polygon, int level, java.io.Writer writer)
      Converts a Polygon to <Polygon Tagged Text> format, then appends it to the writer.
      private void appendPolygonText​(Polygon polygon, int level, boolean indentFirst, java.io.Writer writer)
      Converts a Polygon to <Polygon Text> format, then appends it to the writer.
      private void appendSequenceText​(CoordinateSequence seq, int level, boolean doIndent, java.io.Writer writer)
      Converts a LineString to <LineString Text> format, then appends it to the writer.
      private static java.text.DecimalFormat createFormatter​(PrecisionModel precisionModel)
      Creates the DecimalFormat used to write doubles with a sufficient number of decimal places.
      private void indent​(int level, java.io.Writer writer)  
      private void indentCoords​(int coordIndex, int level, java.io.Writer writer)  
      void setFormatted​(boolean isFormatted)
      Sets whether the output will be formatted.
      void setMaxCoordinatesPerLine​(int coordsPerLine)
      Sets the maximum number of coordinates per line written in formatted output.
      void setTab​(int size)
      Sets the tab size to use for indenting.
      static java.lang.String stringOfChar​(char ch, int count)
      Returns a String of repeated characters.
      static java.lang.String toLineString​(Coordinate[] coord)
      Generates the WKT for a LINESTRING specified by a CoordinateSequence.
      static java.lang.String toLineString​(Coordinate p0, Coordinate p1)
      Generates the WKT for a LINESTRING specified by two Coordinates.
      static java.lang.String toLineString​(CoordinateSequence seq)
      Generates the WKT for a LINESTRING specified by a CoordinateSequence.
      static java.lang.String toPoint​(Coordinate p0)
      Generates the WKT for a POINT specified by a Coordinate.
      java.lang.String write​(Geometry geometry)
      Converts a Geometry to its Well-known Text representation.
      void write​(Geometry geometry, java.io.Writer writer)
      Converts a Geometry to its Well-known Text representation.
      java.lang.String writeFormatted​(Geometry geometry)
      Same as write, but with newlines and spaces to make the well-known text more readable.
      private void writeFormatted​(Geometry geometry, boolean useFormatting, java.io.Writer writer)
      Converts a Geometry to its Well-known Text representation.
      void writeFormatted​(Geometry geometry, java.io.Writer writer)
      Same as write, but with newlines and spaces to make the well-known text more readable.
      private java.lang.String writeNumber​(double d)
      Converts a double to a String, not in scientific notation.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • outputDimension

        private int outputDimension
      • formatter

        private java.text.DecimalFormat formatter
      • isFormatted

        private boolean isFormatted
      • useFormatting

        private boolean useFormatting
      • level

        private int level
      • coordsPerLine

        private int coordsPerLine
      • indentTabStr

        private java.lang.String indentTabStr
    • Constructor Detail

      • WKTWriter

        public WKTWriter()
        Creates a new WKTWriter with default settings
      • WKTWriter

        public WKTWriter​(int outputDimension)
        Creates a writer that writes Geometrys with the given output dimension (2 or 3). If the specified output dimension is 3, the Z value of coordinates will be written if it is present (i.e. if it is not Double.NaN).
        Parameters:
        outputDimension - the coordinate dimension to output (2 or 3)
    • Method Detail

      • toPoint

        public static java.lang.String toPoint​(Coordinate p0)
        Generates the WKT for a POINT specified by a Coordinate.
        Parameters:
        p0 - the point coordinate
        Returns:
        the WKT
      • toLineString

        public static java.lang.String toLineString​(CoordinateSequence seq)
        Generates the WKT for a LINESTRING specified by a CoordinateSequence.
        Parameters:
        seq - the sequence to write
        Returns:
        the WKT string
      • toLineString

        public static java.lang.String toLineString​(Coordinate[] coord)
        Generates the WKT for a LINESTRING specified by a CoordinateSequence.
        Parameters:
        coord - the sequence to write
        Returns:
        the WKT string
      • toLineString

        public static java.lang.String toLineString​(Coordinate p0,
                                                    Coordinate p1)
        Generates the WKT for a LINESTRING specified by two Coordinates.
        Parameters:
        p0 - the first coordinate
        p1 - the second coordinate
        Returns:
        the WKT
      • createFormatter

        private static java.text.DecimalFormat createFormatter​(PrecisionModel precisionModel)
        Creates the DecimalFormat used to write doubles with a sufficient number of decimal places.
        Parameters:
        precisionModel - the PrecisionModel used to determine the number of decimal places to write.
        Returns:
        a DecimalFormat that write double s without scientific notation.
      • stringOfChar

        public static java.lang.String stringOfChar​(char ch,
                                                    int count)
        Returns a String of repeated characters.
        Parameters:
        ch - the character to repeat
        count - the number of times to repeat the character
        Returns:
        a String of characters
      • setFormatted

        public void setFormatted​(boolean isFormatted)
        Sets whether the output will be formatted.
        Parameters:
        isFormatted - true if the output is to be formatted
      • setMaxCoordinatesPerLine

        public void setMaxCoordinatesPerLine​(int coordsPerLine)
        Sets the maximum number of coordinates per line written in formatted output. If the provided coordinate number is <= 0, coordinates will be written all on one line.
        Parameters:
        coordsPerLine - the number of coordinates per line to output.
      • setTab

        public void setTab​(int size)
        Sets the tab size to use for indenting.
        Parameters:
        size - the number of spaces to use as the tab string
        Throws:
        java.lang.IllegalArgumentException - if the size is non-positive
      • write

        public java.lang.String write​(Geometry geometry)
        Converts a Geometry to its Well-known Text representation.
        Parameters:
        geometry - a Geometry to process
        Returns:
        a <Geometry Tagged Text> string (see the OpenGIS Simple Features Specification)
      • write

        public void write​(Geometry geometry,
                          java.io.Writer writer)
                   throws java.io.IOException
        Converts a Geometry to its Well-known Text representation.
        Parameters:
        geometry - a Geometry to process
        Throws:
        java.io.IOException
      • writeFormatted

        public java.lang.String writeFormatted​(Geometry geometry)
        Same as write, but with newlines and spaces to make the well-known text more readable.
        Parameters:
        geometry - a Geometry to process
        Returns:
        a <Geometry Tagged Text> string (see the OpenGIS Simple Features Specification), with newlines and spaces
      • writeFormatted

        public void writeFormatted​(Geometry geometry,
                                   java.io.Writer writer)
                            throws java.io.IOException
        Same as write, but with newlines and spaces to make the well-known text more readable.
        Parameters:
        geometry - a Geometry to process
        Throws:
        java.io.IOException
      • writeFormatted

        private void writeFormatted​(Geometry geometry,
                                    boolean useFormatting,
                                    java.io.Writer writer)
                             throws java.io.IOException
        Converts a Geometry to its Well-known Text representation.
        Parameters:
        geometry - a Geometry to process
        Throws:
        java.io.IOException
      • appendGeometryTaggedText

        private void appendGeometryTaggedText​(Geometry geometry,
                                              int level,
                                              java.io.Writer writer)
                                       throws java.io.IOException
        Converts a Geometry to <Geometry Tagged Text> format, then appends it to the writer.
        Parameters:
        geometry - the Geometry to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendPointTaggedText

        private void appendPointTaggedText​(Coordinate coordinate,
                                           int level,
                                           java.io.Writer writer,
                                           PrecisionModel precisionModel)
                                    throws java.io.IOException
        Converts a Coordinate to <Point Tagged Text> format, then appends it to the writer.
        Parameters:
        coordinate - the Coordinate to process
        writer - the output writer to append to
        precisionModel - the PrecisionModel to use to convert from a precise coordinate to an external coordinate
        Throws:
        java.io.IOException
      • appendLineStringTaggedText

        private void appendLineStringTaggedText​(LineString lineString,
                                                int level,
                                                java.io.Writer writer)
                                         throws java.io.IOException
        Converts a LineString to <LineString Tagged Text> format, then appends it to the writer.
        Parameters:
        lineString - the LineString to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendLinearRingTaggedText

        private void appendLinearRingTaggedText​(LinearRing linearRing,
                                                int level,
                                                java.io.Writer writer)
                                         throws java.io.IOException
        Converts a LinearRing to <LinearRing Tagged Text> format, then appends it to the writer.
        Parameters:
        linearRing - the LinearRing to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendPolygonTaggedText

        private void appendPolygonTaggedText​(Polygon polygon,
                                             int level,
                                             java.io.Writer writer)
                                      throws java.io.IOException
        Converts a Polygon to <Polygon Tagged Text> format, then appends it to the writer.
        Parameters:
        polygon - the Polygon to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendMultiPointTaggedText

        private void appendMultiPointTaggedText​(MultiPoint multipoint,
                                                int level,
                                                java.io.Writer writer)
                                         throws java.io.IOException
        Converts a MultiPoint to <MultiPoint Tagged Text> format, then appends it to the writer.
        Parameters:
        multipoint - the MultiPoint to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendMultiLineStringTaggedText

        private void appendMultiLineStringTaggedText​(MultiLineString multiLineString,
                                                     int level,
                                                     java.io.Writer writer)
                                              throws java.io.IOException
        Converts a MultiLineString to <MultiLineString Tagged Text> format, then appends it to the writer.
        Parameters:
        multiLineString - the MultiLineString to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendMultiPolygonTaggedText

        private void appendMultiPolygonTaggedText​(MultiPolygon multiPolygon,
                                                  int level,
                                                  java.io.Writer writer)
                                           throws java.io.IOException
        Converts a MultiPolygon to <MultiPolygon Tagged Text> format, then appends it to the writer.
        Parameters:
        multiPolygon - the MultiPolygon to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendGeometryCollectionTaggedText

        private void appendGeometryCollectionTaggedText​(GeometryCollection geometryCollection,
                                                        int level,
                                                        java.io.Writer writer)
                                                 throws java.io.IOException
        Converts a GeometryCollection to <GeometryCollection Tagged Text> format, then appends it to the writer.
        Parameters:
        geometryCollection - the GeometryCollection to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendPointText

        private void appendPointText​(Coordinate coordinate,
                                     int level,
                                     java.io.Writer writer,
                                     PrecisionModel precisionModel)
                              throws java.io.IOException
        Converts a Coordinate to <Point Text> format, then appends it to the writer.
        Parameters:
        coordinate - the Coordinate to process
        writer - the output writer to append to
        precisionModel - the PrecisionModel to use to convert from a precise coordinate to an external coordinate
        Throws:
        java.io.IOException
      • appendCoordinate

        private void appendCoordinate​(CoordinateSequence seq,
                                      int i,
                                      java.io.Writer writer)
                               throws java.io.IOException
        Appends the i'th coordinate from the sequence to the writer
        Parameters:
        seq - the CoordinateSequence to process
        i - the index of the coordinate to write
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendCoordinate

        private void appendCoordinate​(Coordinate coordinate,
                                      java.io.Writer writer)
                               throws java.io.IOException
        Converts a Coordinate to <Point> format, then appends it to the writer.
        Parameters:
        coordinate - the Coordinate to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • writeNumber

        private java.lang.String writeNumber​(double d)
        Converts a double to a String, not in scientific notation.
        Parameters:
        d - the double to convert
        Returns:
        the double as a String, not in scientific notation
      • appendSequenceText

        private void appendSequenceText​(CoordinateSequence seq,
                                        int level,
                                        boolean doIndent,
                                        java.io.Writer writer)
                                 throws java.io.IOException
        Converts a LineString to <LineString Text> format, then appends it to the writer.
        Parameters:
        lineString - the LineString to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendLineStringText

        private void appendLineStringText​(LineString lineString,
                                          int level,
                                          boolean doIndent,
                                          java.io.Writer writer)
                                   throws java.io.IOException
        Converts a LineString to <LineString Text> format, then appends it to the writer.
        Parameters:
        lineString - the LineString to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendPolygonText

        private void appendPolygonText​(Polygon polygon,
                                       int level,
                                       boolean indentFirst,
                                       java.io.Writer writer)
                                throws java.io.IOException
        Converts a Polygon to <Polygon Text> format, then appends it to the writer.
        Parameters:
        polygon - the Polygon to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendMultiPointText

        private void appendMultiPointText​(MultiPoint multiPoint,
                                          int level,
                                          java.io.Writer writer)
                                   throws java.io.IOException
        Converts a MultiPoint to <MultiPoint Text> format, then appends it to the writer.
        Parameters:
        multiPoint - the MultiPoint to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendMultiLineStringText

        private void appendMultiLineStringText​(MultiLineString multiLineString,
                                               int level,
                                               boolean indentFirst,
                                               java.io.Writer writer)
                                        throws java.io.IOException
        Converts a MultiLineString to <MultiLineString Text> format, then appends it to the writer.
        Parameters:
        multiLineString - the MultiLineString to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendMultiPolygonText

        private void appendMultiPolygonText​(MultiPolygon multiPolygon,
                                            int level,
                                            java.io.Writer writer)
                                     throws java.io.IOException
        Converts a MultiPolygon to <MultiPolygon Text> format, then appends it to the writer.
        Parameters:
        multiPolygon - the MultiPolygon to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • appendGeometryCollectionText

        private void appendGeometryCollectionText​(GeometryCollection geometryCollection,
                                                  int level,
                                                  java.io.Writer writer)
                                           throws java.io.IOException
        Converts a GeometryCollection to <GeometryCollectionText> format, then appends it to the writer.
        Parameters:
        geometryCollection - the GeometryCollection to process
        writer - the output writer to append to
        Throws:
        java.io.IOException
      • indentCoords

        private void indentCoords​(int coordIndex,
                                  int level,
                                  java.io.Writer writer)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • indent

        private void indent​(int level,
                            java.io.Writer writer)
                     throws java.io.IOException
        Throws:
        java.io.IOException