kiwi-postgis  Version 0.1.0.0
TWKBReader.ExtendedPrecisionReader Class Reference
Inheritance diagram for TWKBReader.ExtendedPrecisionReader:
Collaboration diagram for TWKBReader.ExtendedPrecisionReader:

Public Member Functions

 ExtendedPrecisionReader (final int precision, final byte extendedDimensions)
 
Coordinate readPoint (final DataInput input) throws IOException
 
Coordinate [] readPointArray (final DataInput input) throws IOException
 

Protected Attributes

double precisionMultiplier
 

Private Attributes

boolean hasZ = false
 
double zPrecisionMultiplier = 0
 
boolean hasM = false
 
double mPrecisionMultiplier = 0
 

Constructor & Destructor Documentation

◆ ExtendedPrecisionReader()

ExtendedPrecisionReader ( final int  precision,
final byte  extendedDimensions 
)

References TWKBUtils.zigZagDecode().

265  {
266  super(precision);
267  if ((extendedDimensions & 0x1) != 0) {
268  hasZ = true;
270  Math.pow(10, TWKBUtils.zigZagDecode((extendedDimensions >> 2) & 0x7));
271  }
272  if ((extendedDimensions & 0x2) != 0) {
273  hasM = true;
275  Math.pow(10, TWKBUtils.zigZagDecode((extendedDimensions >> 5) & 0x7));
276  }
277  }

Member Function Documentation

◆ readPoint()

Coordinate readPoint ( final DataInput  input) throws IOException

References Coordinate.setM(), and Coordinate.setZ().

280  {
281  final Coordinate coordinate = super.readPoint(input);
282  if (hasZ) {
283  coordinate.setZ(Varint.readSignedVarLong(input) / zPrecisionMultiplier);
284  }
285  if (hasM) {
286  coordinate.setM(Varint.readSignedVarLong(input) / mPrecisionMultiplier);
287  }
288  return coordinate;
289  }

◆ readPointArray()

Coordinate [] readPointArray ( final DataInput  input) throws IOException

References Coordinate.setM(), and Coordinate.setZ().

292  {
293  final int numCoordinates = Varint.readUnsignedVarInt(input);
294  final Coordinate[] coordinates = new Coordinate[numCoordinates];
295  long lastX = 0;
296  long lastY = 0;
297  long lastZ = 0;
298  long lastM = 0;
299  for (int i = 0; i < numCoordinates; i++) {
300  lastX = Varint.readSignedVarLong(input) + lastX;
301  lastY = Varint.readSignedVarLong(input) + lastY;
302  coordinates[i] =
303  new Coordinate((lastX) / precisionMultiplier, (lastY) / precisionMultiplier);
304  if (hasZ) {
305  lastZ = Varint.readSignedVarLong(input) + lastZ;
306  coordinates[i].setZ((lastZ) / zPrecisionMultiplier);
307  }
308  if (hasM) {
309  lastM = Varint.readSignedVarLong(input) + lastM;
310  coordinates[i].setM((lastM) / mPrecisionMultiplier);
311  }
312  }
313  return coordinates;
314  }

Member Data Documentation

◆ hasM

boolean hasM = false
private

◆ hasZ

boolean hasZ = false
private

◆ mPrecisionMultiplier

double mPrecisionMultiplier = 0
private

◆ precisionMultiplier

double precisionMultiplier
protectedinherited

◆ zPrecisionMultiplier

double zPrecisionMultiplier = 0
private