GeoPubby  Version 0.1.0.0
TWKBWriter Class Reference
Collaboration diagram for TWKBWriter:

Classes

class  ExtendedPrecisionWriter
 
class  PrecisionWriter
 

Public Member Functions

 TWKBWriter ()
 
 TWKBWriter (final int maxPrecision)
 
byte[] write (final Geometry geom)
 
void write (final Geometry geom, final DataOutput output) throws IOException
 

Private Member Functions

void writePoint (final Point point, final PrecisionWriter precision, final DataOutput output) throws IOException
 
void writeLineString (final LineString line, final PrecisionWriter precision, final DataOutput output) throws IOException
 
void writePolygon (final Polygon polygon, final PrecisionWriter precision, final DataOutput output) throws IOException
 
void writeMultiPoint (final MultiPoint multiPoint, final PrecisionWriter precision, final DataOutput output) throws IOException
 
void writeMultiLineString (final MultiLineString multiLine, final PrecisionWriter precision, final DataOutput output) throws IOException
 
void writeMultiPolygon (final MultiPolygon multiPolygon, final PrecisionWriter precision, final DataOutput output) throws IOException
 
void writeGeometryCollection (final GeometryCollection geoms, final PrecisionWriter precision, final DataOutput output) throws IOException
 
byte getTypeAndPrecisionByte (final byte type, final int precision)
 
byte getType (final Geometry geom)
 

Private Attributes

final int maxPrecision
 

Constructor & Destructor Documentation

◆ TWKBWriter() [1/2]

30  {
31  this(TWKBUtils.MAX_COORD_PRECISION);
32  }

References TWKBUtils.MAX_COORD_PRECISION.

◆ TWKBWriter() [2/2]

TWKBWriter ( final int  maxPrecision)
34  {
35  this.maxPrecision = Math.min(TWKBUtils.MAX_COORD_PRECISION, maxPrecision);
36  }
final int maxPrecision
Definition: TWKBWriter.java:28

References TWKBUtils.MAX_COORD_PRECISION, and TWKBWriter.maxPrecision.

Member Function Documentation

◆ getType()

byte getType ( final Geometry  geom)
private
174  {
175  if (geom instanceof Point) {
176  return TWKBUtils.POINT_TYPE;
177  } else if (geom instanceof LineString) {
178  return TWKBUtils.LINESTRING_TYPE;
179  } else if (geom instanceof Polygon) {
180  return TWKBUtils.POLYGON_TYPE;
181  } else if (geom instanceof MultiPoint) {
182  return TWKBUtils.MULTIPOINT_TYPE;
183  } else if (geom instanceof MultiLineString) {
184  return TWKBUtils.MULTILINESTRING_TYPE;
185  } else if (geom instanceof MultiPolygon) {
186  return TWKBUtils.MULTIPOLYGON_TYPE;
187  }
188  return TWKBUtils.GEOMETRYCOLLECTION_TYPE;
189  }

References TWKBUtils.GEOMETRYCOLLECTION_TYPE, TWKBUtils.LINESTRING_TYPE, TWKBUtils.MULTILINESTRING_TYPE, TWKBUtils.MULTIPOINT_TYPE, TWKBUtils.MULTIPOLYGON_TYPE, TWKBUtils.POINT_TYPE, and TWKBUtils.POLYGON_TYPE.

Referenced by TWKBWriter.write().

◆ getTypeAndPrecisionByte()

byte getTypeAndPrecisionByte ( final byte  type,
final int  precision 
)
private
168  {
169  byte typeAndPrecision = type;
170  typeAndPrecision |= TWKBUtils.zigZagEncode(precision) << 4;
171  return typeAndPrecision;
172  }

References TWKBUtils.zigZagEncode().

Referenced by TWKBWriter.write().

◆ write() [1/2]

byte [] write ( final Geometry  geom)
38  {
39  try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
40  try (final DataOutputStream output = new DataOutputStream(out)) {
41  write(geom, output);
42  return out.toByteArray();
43  }
44  } catch (final IOException e) {
45  throw new RuntimeException("Error writing TWKB geometry.", e);
46  }
47  }
byte[] write(final Geometry geom)
Definition: TWKBWriter.java:38

Referenced by TWKBWriterr.write(), and TWKBWriter.writeGeometryCollection().

◆ write() [2/2]

void write ( final Geometry  geom,
final DataOutput  output 
) throws IOException
49  {
50  final byte type = getType(geom);
51  if (geom.isEmpty()) {
52  output.writeByte(getTypeAndPrecisionByte(type, 0));
53  output.writeByte(TWKBUtils.EMPTY_GEOMETRY);
54  return;
55  }
56  byte metadata = 0;
57  final Coordinate[] coordinates = geom.getCoordinates();
58  PrecisionWriter precision;
59  if (Double.isNaN(coordinates[0].getZ()) || Double.isNaN(coordinates[0].getM())) {
60  metadata |= TWKBUtils.EXTENDED_DIMENSIONS;
61  precision = new ExtendedPrecisionWriter().calculate(coordinates, maxPrecision);
62  } else {
63  precision = new PrecisionWriter().calculate(coordinates, maxPrecision);
64  }
65  output.writeByte(getTypeAndPrecisionByte(type, precision.precision));
66  output.writeByte(metadata);
67  precision.writeExtendedPrecision(output);
68 
69  switch (type) {
70  case TWKBUtils.POINT_TYPE:
71  writePoint((Point) geom, precision, output);
72  break;
73  case TWKBUtils.LINESTRING_TYPE:
74  writeLineString((LineString) geom, precision, output);
75  break;
76  case TWKBUtils.POLYGON_TYPE:
77  writePolygon((Polygon) geom, precision, output);
78  break;
79  case TWKBUtils.MULTIPOINT_TYPE:
80  writeMultiPoint((MultiPoint) geom, precision, output);
81  break;
82  case TWKBUtils.MULTILINESTRING_TYPE:
83  writeMultiLineString((MultiLineString) geom, precision, output);
84  break;
85  case TWKBUtils.MULTIPOLYGON_TYPE:
86  writeMultiPolygon((MultiPolygon) geom, precision, output);
87  break;
88  case TWKBUtils.GEOMETRYCOLLECTION_TYPE:
89  writeGeometryCollection((GeometryCollection) geom, precision, output);
90  break;
91  default:
92  break;
93  }
94  }
void writePoint(final Point point, final PrecisionWriter precision, final DataOutput output)
Definition: TWKBWriter.java:96
byte getTypeAndPrecisionByte(final byte type, final int precision)
Definition: TWKBWriter.java:168
void writeMultiLineString(final MultiLineString multiLine, final PrecisionWriter precision, final DataOutput output)
Definition: TWKBWriter.java:128
void writeGeometryCollection(final GeometryCollection geoms, final PrecisionWriter precision, final DataOutput output)
Definition: TWKBWriter.java:157
void writePolygon(final Polygon polygon, final PrecisionWriter precision, final DataOutput output)
Definition: TWKBWriter.java:110
void writeLineString(final LineString line, final PrecisionWriter precision, final DataOutput output)
Definition: TWKBWriter.java:103
void writeMultiPoint(final MultiPoint multiPoint, final PrecisionWriter precision, final DataOutput output)
Definition: TWKBWriter.java:121
byte getType(final Geometry geom)
Definition: TWKBWriter.java:174
void writeMultiPolygon(final MultiPolygon multiPolygon, final PrecisionWriter precision, final DataOutput output)
Definition: TWKBWriter.java:138

References TWKBWriter.PrecisionWriter.calculate(), TWKBWriter.ExtendedPrecisionWriter.calculate(), TWKBUtils.EMPTY_GEOMETRY, TWKBUtils.EXTENDED_DIMENSIONS, TWKBUtils.GEOMETRYCOLLECTION_TYPE, TWKBWriter.getType(), TWKBWriter.getTypeAndPrecisionByte(), TWKBUtils.LINESTRING_TYPE, TWKBWriter.maxPrecision, TWKBUtils.MULTILINESTRING_TYPE, TWKBUtils.MULTIPOINT_TYPE, TWKBUtils.MULTIPOLYGON_TYPE, TWKBUtils.POINT_TYPE, TWKBUtils.POLYGON_TYPE, TWKBWriter.PrecisionWriter.precision, TWKBWriter.PrecisionWriter.writeExtendedPrecision(), TWKBWriter.writeGeometryCollection(), TWKBWriter.writeLineString(), TWKBWriter.writeMultiLineString(), TWKBWriter.writeMultiPoint(), TWKBWriter.writeMultiPolygon(), TWKBWriter.writePoint(), and TWKBWriter.writePolygon().

◆ writeGeometryCollection()

void writeGeometryCollection ( final GeometryCollection  geoms,
final PrecisionWriter  precision,
final DataOutput  output 
) throws IOException
private
160  {
161  Varint.writeUnsignedVarInt(geoms.getNumGeometries(), output);
162  for (int i = 0; i < geoms.getNumGeometries(); i++) {
163  final Geometry geom = geoms.getGeometryN(i);
164  write(geom, output);
165  }
166  }

References TWKBWriter.write().

Referenced by TWKBWriter.write().

◆ writeLineString()

void writeLineString ( final LineString  line,
final PrecisionWriter  precision,
final DataOutput  output 
) throws IOException
private
106  {
107  precision.writePointArray(line.getCoordinates(), output);
108  }

Referenced by TWKBWriter.write().

◆ writeMultiLineString()

void writeMultiLineString ( final MultiLineString  multiLine,
final PrecisionWriter  precision,
final DataOutput  output 
) throws IOException
private
131  {
132  Varint.writeUnsignedVarInt(multiLine.getNumGeometries(), output);
133  for (int i = 0; i < multiLine.getNumGeometries(); i++) {
134  precision.writePointArray(multiLine.getGeometryN(i).getCoordinates(), output);
135  }
136  }

Referenced by TWKBWriter.write().

◆ writeMultiPoint()

void writeMultiPoint ( final MultiPoint  multiPoint,
final PrecisionWriter  precision,
final DataOutput  output 
) throws IOException
private
124  {
125  precision.writePointArray(multiPoint.getCoordinates(), output);
126  }

Referenced by TWKBWriter.write().

◆ writeMultiPolygon()

void writeMultiPolygon ( final MultiPolygon  multiPolygon,
final PrecisionWriter  precision,
final DataOutput  output 
) throws IOException
private
141  {
142  Varint.writeUnsignedVarInt(multiPolygon.getNumGeometries(), output);
143  for (int i = 0; i < multiPolygon.getNumGeometries(); i++) {
144  final Polygon polygon = (Polygon) multiPolygon.getGeometryN(i);
145  if (polygon.isEmpty()) {
146  Varint.writeUnsignedVarInt(0, output);
147  continue;
148  }
149  Varint.writeUnsignedVarInt(polygon.getNumInteriorRing() + 1, output);
150  precision.writePointArray(polygon.getExteriorRing().getCoordinates(), output);
151  for (int j = 0; j < polygon.getNumInteriorRing(); j++) {
152  precision.writePointArray(polygon.getInteriorRingN(j).getCoordinates(), output);
153  }
154  }
155  }

Referenced by TWKBWriter.write().

◆ writePoint()

void writePoint ( final Point  point,
final PrecisionWriter  precision,
final DataOutput  output 
) throws IOException
private
99  {
100  precision.writePoint(point.getCoordinate(), output);
101  }

Referenced by TWKBWriter.write().

◆ writePolygon()

void writePolygon ( final Polygon  polygon,
final PrecisionWriter  precision,
final DataOutput  output 
) throws IOException
private
113  {
114  Varint.writeUnsignedVarInt(polygon.getNumInteriorRing() + 1, output);
115  precision.writePointArray(polygon.getExteriorRing().getCoordinates(), output);
116  for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
117  precision.writePointArray(polygon.getInteriorRingN(i).getCoordinates(), output);
118  }
119  }

Referenced by TWKBWriter.write().

Member Data Documentation

◆ maxPrecision