GeoPubby  Version 0.1.0.0
TWKBReader Class Reference
Collaboration diagram for TWKBReader:

Classes

class  ByteBufferInputStream
 
class  ExtendedPrecisionReader
 
class  PrecisionReader
 

Public Member Functions

 TWKBReader ()
 
Geometry read (final ByteBuffer bytes) throws ParseException
 
Geometry read (final byte[] bytes) throws ParseException
 
Geometry read (final DataInput input) throws IOException
 

Private Member Functions

Point readPoint (final PrecisionReader precision, final byte metadata, final DataInput input) throws IOException
 
LineString readLineString (final PrecisionReader precision, final byte metadata, final DataInput input) throws IOException
 
Polygon readPolygon (final PrecisionReader precision, final byte metadata, final DataInput input) throws IOException
 
MultiPoint readMultiPoint (final PrecisionReader precision, final byte metadata, final DataInput input) throws IOException
 
MultiLineString readMultiLineString (final PrecisionReader precision, final byte metadata, final DataInput input) throws IOException
 
MultiPolygon readMultiPolygon (final PrecisionReader precision, final byte metadata, final DataInput input) throws IOException
 
GeometryCollection readGeometryCollection (final DataInput input, final byte metadata) throws IOException
 

Static Private Attributes

static final GeometryFactory fac =new GeometryFactory()
 

Constructor & Destructor Documentation

◆ TWKBReader()

69 {}

Member Function Documentation

◆ read() [1/3]

Geometry read ( final byte[]  bytes) throws ParseException
81  {
82  try (ByteArrayInputStream in = new ByteArrayInputStream(bytes)) {
83  try (DataInputStream input = new DataInputStream(in)) {
84  return read(input);
85  }
86  } catch (final IOException e) {
87  throw new ParseException("Error reading TWKB geometry.", e);
88  }
89  }
Geometry read(final ByteBuffer bytes)
Definition: TWKBReader.java:71

References TWKBReader.read().

◆ read() [2/3]

Geometry read ( final ByteBuffer  bytes) throws ParseException
71  {
72  try (ByteBufferInputStream in = new ByteBufferInputStream(bytes)) {
73  try (DataInputStream input = new DataInputStream(in)) {
74  return read(input);
75  }
76  } catch (final IOException e) {
77  throw new ParseException("Error reading TWKB geometry.", e);
78  }
79  }

Referenced by TWKBReader.read(), and TWKBReader.readGeometryCollection().

◆ read() [3/3]

Geometry read ( final DataInput  input) throws IOException
91  {
92  final byte typeAndPrecision = input.readByte();
93  final byte type = (byte) (typeAndPrecision & 0x0F);
94  final int basePrecision = TWKBUtils.zigZagDecode((typeAndPrecision & 0xF0) >> 4);
95  final byte metadata = input.readByte();
96  PrecisionReader precision;
97  if ((metadata & TWKBUtils.EXTENDED_DIMENSIONS) != 0) {
98  final byte extendedDimensions = input.readByte();
99  precision = new ExtendedPrecisionReader(basePrecision, extendedDimensions);
100  } else {
101  precision = new PrecisionReader(basePrecision);
102  }
103  switch (type) {
104  case TWKBUtils.POINT_TYPE:
105  return readPoint(precision, metadata, input);
106  case TWKBUtils.LINESTRING_TYPE:
107  return readLineString(precision, metadata, input);
108  case TWKBUtils.POLYGON_TYPE:
109  return readPolygon(precision, metadata, input);
110  case TWKBUtils.MULTIPOINT_TYPE:
111  return readMultiPoint(precision, metadata, input);
112  case TWKBUtils.MULTILINESTRING_TYPE:
113  return readMultiLineString(precision, metadata, input);
114  case TWKBUtils.MULTIPOLYGON_TYPE:
115  return readMultiPolygon(precision, metadata, input);
116  case TWKBUtils.GEOMETRYCOLLECTION_TYPE:
117  return readGeometryCollection(input, metadata);
118  }
119  return null;
120  }
MultiPoint readMultiPoint(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:164
MultiLineString readMultiLineString(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:175
Point readPoint(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:122
MultiPolygon readMultiPolygon(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:190
Polygon readPolygon(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:146
GeometryCollection readGeometryCollection(final DataInput input, final byte metadata)
Definition: TWKBReader.java:218
LineString readLineString(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:134

References TWKBUtils.EXTENDED_DIMENSIONS, TWKBUtils.GEOMETRYCOLLECTION_TYPE, TWKBUtils.LINESTRING_TYPE, TWKBUtils.MULTILINESTRING_TYPE, TWKBUtils.MULTIPOINT_TYPE, TWKBUtils.MULTIPOLYGON_TYPE, TWKBUtils.POINT_TYPE, TWKBUtils.POLYGON_TYPE, TWKBReader.readGeometryCollection(), TWKBReader.readLineString(), TWKBReader.readMultiLineString(), TWKBReader.readMultiPoint(), TWKBReader.readMultiPolygon(), TWKBReader.readPoint(), TWKBReader.readPolygon(), and TWKBUtils.zigZagDecode().

◆ readGeometryCollection()

GeometryCollection readGeometryCollection ( final DataInput  input,
final byte  metadata 
) throws IOException
private
219  {
220  if ((metadata & TWKBUtils.EMPTY_GEOMETRY) != 0) {
221  return fac.createGeometryCollection();
222  }
223  final int numGeometries = Varint.readUnsignedVarInt(input);
224  final Geometry[] geometries = new Geometry[numGeometries];
225  for (int i = 0; i < numGeometries; i++) {
226  geometries[i] = read(input);
227  }
228  return fac.createGeometryCollection(geometries);
229  }
static final GeometryFactory fac
Definition: TWKBReader.java:32

References TWKBUtils.EMPTY_GEOMETRY, TWKBReader.fac, and TWKBReader.read().

Referenced by TWKBReader.read().

◆ readLineString()

LineString readLineString ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private
137  {
138  if ((metadata & TWKBUtils.EMPTY_GEOMETRY) != 0) {
139  return fac.createLineString();
140  }
141 
142  final Coordinate[] coordinates = precision.readPointArray(input);
143  return fac.createLineString(coordinates);
144  }

References TWKBUtils.EMPTY_GEOMETRY, and TWKBReader.fac.

Referenced by TWKBReader.read().

◆ readMultiLineString()

MultiLineString readMultiLineString ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private
178  {
179  if ((metadata & TWKBUtils.EMPTY_GEOMETRY) != 0) {
180  return fac.createMultiLineString();
181  }
182  final int numLines = Varint.readUnsignedVarInt(input);
183  final LineString[] lines = new LineString[numLines];
184  for (int i = 0; i < numLines; i++) {
185  lines[i] = fac.createLineString(precision.readPointArray(input));
186  }
187  return fac.createMultiLineString(lines);
188  }

References TWKBUtils.EMPTY_GEOMETRY, and TWKBReader.fac.

Referenced by TWKBReader.read().

◆ readMultiPoint()

MultiPoint readMultiPoint ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private
167  {
168  if ((metadata & TWKBUtils.EMPTY_GEOMETRY) != 0) {
169  return fac.createMultiPoint();
170  }
171  final Coordinate[] points = precision.readPointArray(input);
172  return fac.createMultiPointFromCoords(points);
173  }

References TWKBUtils.EMPTY_GEOMETRY, and TWKBReader.fac.

Referenced by TWKBReader.read().

◆ readMultiPolygon()

MultiPolygon readMultiPolygon ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private
193  {
194  if ((metadata & TWKBUtils.EMPTY_GEOMETRY) != 0) {
195  return fac.createMultiPolygon();
196  }
197  final int numPolygons = Varint.readUnsignedVarInt(input);
198  final Polygon[] polygons = new Polygon[numPolygons];
199  int numRings;
200  for (int i = 0; i < numPolygons; i++) {
201  numRings = Varint.readUnsignedVarInt(input);
202  if (numRings == 0) {
203  polygons[i] = fac.createPolygon();
204  continue;
205  }
206  final LinearRing exteriorRing =
207  fac.createLinearRing(precision.readPointArray(input));
208  final LinearRing[] interiorRings = new LinearRing[numRings - 1];
209  for (int j = 0; j < (numRings - 1); j++) {
210  interiorRings[j] =
211  fac.createLinearRing(precision.readPointArray(input));
212  }
213  polygons[i] = fac.createPolygon(exteriorRing, interiorRings);
214  }
215  return fac.createMultiPolygon(polygons);
216  }

References TWKBUtils.EMPTY_GEOMETRY, and TWKBReader.fac.

Referenced by TWKBReader.read().

◆ readPoint()

Point readPoint ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private
125  {
126  if ((metadata & TWKBUtils.EMPTY_GEOMETRY) != 0) {
127  return fac.createPoint();
128  }
129 
130  final Coordinate coordinate = precision.readPoint(input);
131  return fac.createPoint(coordinate);
132  }

References TWKBUtils.EMPTY_GEOMETRY, and TWKBReader.fac.

Referenced by TWKBReader.read().

◆ readPolygon()

Polygon readPolygon ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private
149  {
150  if ((metadata & TWKBUtils.EMPTY_GEOMETRY) != 0) {
151  return fac.createPolygon();
152  }
153  final int numRings = Varint.readUnsignedVarInt(input);
154  final LinearRing exteriorRing =
155  fac.createLinearRing(precision.readPointArray(input));
156  final LinearRing[] interiorRings = new LinearRing[numRings - 1];
157  for (int i = 0; i < (numRings - 1); i++) {
158  interiorRings[i] =
159  fac.createLinearRing(precision.readPointArray(input));
160  }
161  return fac.createPolygon(exteriorRing, interiorRings);
162  }

References TWKBUtils.EMPTY_GEOMETRY, and TWKBReader.fac.

Referenced by TWKBReader.read().

Member Data Documentation

◆ fac