kiwi-postgis  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 ByteBuffer  bytes) throws ParseException

References TWKBReader.ByteBufferInputStream.ByteBufferInputStream(), and TWKBReader.ByteBufferInputStream.read().

Referenced by TWKBDatatype.read().

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  }
Geometry read(final ByteBuffer bytes)
Definition: TWKBReader.java:71

◆ read() [2/3]

Geometry read ( final byte []  bytes) throws ParseException

References TWKBReader.ByteBufferInputStream.read().

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

◆ read() [3/3]

Geometry read ( final DataInput  input) throws IOException

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().

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  }
LineString readLineString(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:134
MultiPolygon readMultiPolygon(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:190
GeometryCollection readGeometryCollection(final DataInput input, final byte metadata)
Definition: TWKBReader.java:218
Polygon readPolygon(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:146
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
MultiPoint readMultiPoint(final PrecisionReader precision, final byte metadata, final DataInput input)
Definition: TWKBReader.java:164

◆ readGeometryCollection()

GeometryCollection readGeometryCollection ( final DataInput  input,
final byte  metadata 
) throws IOException
private

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

Referenced by TWKBReader.read().

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
Geometry read(final ByteBuffer bytes)
Definition: TWKBReader.java:71

◆ readLineString()

LineString readLineString ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private

References TWKBUtils.EMPTY_GEOMETRY.

Referenced by TWKBReader.read().

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  }
static final GeometryFactory fac
Definition: TWKBReader.java:32

◆ readMultiLineString()

MultiLineString readMultiLineString ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private

References TWKBUtils.EMPTY_GEOMETRY.

Referenced by TWKBReader.read().

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  }
static final GeometryFactory fac
Definition: TWKBReader.java:32

◆ readMultiPoint()

MultiPoint readMultiPoint ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private

References TWKBUtils.EMPTY_GEOMETRY.

Referenced by TWKBReader.read().

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  }
static final GeometryFactory fac
Definition: TWKBReader.java:32

◆ readMultiPolygon()

MultiPolygon readMultiPolygon ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private

References TWKBUtils.EMPTY_GEOMETRY.

Referenced by TWKBReader.read().

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  }
static final GeometryFactory fac
Definition: TWKBReader.java:32

◆ readPoint()

Point readPoint ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private

References TWKBUtils.EMPTY_GEOMETRY.

Referenced by TWKBReader.read().

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  }
static final GeometryFactory fac
Definition: TWKBReader.java:32

◆ readPolygon()

Polygon readPolygon ( final PrecisionReader  precision,
final byte  metadata,
final DataInput  input 
) throws IOException
private

References TWKBUtils.EMPTY_GEOMETRY.

Referenced by TWKBReader.read().

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  }
static final GeometryFactory fac
Definition: TWKBReader.java:32

Member Data Documentation

◆ fac

final GeometryFactory fac =new GeometryFactory()
staticprivate