/** * Read the first four bytes: this contains the SRID * * @param byteBuffer */ @Override protected void prepare(ByteBuffer byteBuffer) { byteBuffer.setByteOrder(ByteOrder.NDR); srid = byteBuffer.getInt(); }
private <P extends Position> MultiPoint<P> decodeMultiPoint(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { int numGeometries = byteBuffer.getInt(); if (numGeometries == 0) { return new MultiPoint<P>(crs); } List<Point<P>> geometries = new ArrayList<Point<P>>(numGeometries); for (int i = 0; i < numGeometries; i++) { geometries.add((Point<P>) decodeGeometry(byteBuffer, crs)); } return mkMultiPoint(geometries); }
private <P extends Position> MultiPolygon<P> decodeMultiPolygon(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { int numGeometries = byteBuffer.getInt(); if (numGeometries == 0) { return new MultiPolygon<P>(crs); } List<Polygon<P>> geometries = new ArrayList<Polygon<P>>(numGeometries); for (int i = 0; i < numGeometries; i++) { geometries.add((Polygon<P>) decodeGeometry(byteBuffer, crs)); } return mkMultiPolygon(geometries); }
private <P extends Position> GeometryCollection<P, Geometry<P>> decodeGeometryCollection(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { int numGeometries = byteBuffer.getInt(); if (numGeometries == 0) { return new GeometryCollection<P, Geometry<P>>(crs); } List<Geometry<P>> geometries = new ArrayList<Geometry<P>>(numGeometries); for (int i = 0; i < numGeometries; i++) { geometries.add(decodeGeometry(byteBuffer, crs)); } return mkGeometryCollection(geometries); }
private <P extends Position> MultiLineString<P> decodeMultiLineString(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { int numGeometries = byteBuffer.getInt(); if (numGeometries == 0) { return new MultiLineString<P>(crs); } List<LineString<P>> geometries = new ArrayList<LineString<P>>(numGeometries); for (int i = 0; i < numGeometries; i++) { geometries.add((LineString<P>)decodeGeometry(byteBuffer, crs)); } return mkMultiLineString(geometries); }
private <P extends Position> Polygon<P> decodePolygon(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { int numRings = byteBuffer.getInt(); List<LinearRing<P>> rings = readPolygonRings(numRings, byteBuffer, crs); return mkPolygon(rings); }
private <P extends Position> LineString<P> decodeLineString(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { int numPoints = byteBuffer.getInt(); PositionSequence<P> points = readPositions(numPoints, byteBuffer, crs); return new LineString<P>(points, crs); }
private <P extends Position> LinearRing<P> readRing(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { int numPoints = byteBuffer.getInt(); PositionSequence<P> ps = readPositions(numPoints, byteBuffer, crs); try { return new LinearRing<P>(ps, crs); } catch (IllegalArgumentException e) { throw new WkbDecodeException(e); } }
@Override @SuppressWarnings("unchecked") protected <P extends Position> CoordinateReferenceSystem<P> readCrs(ByteBuffer byteBuffer, int typeCode, CoordinateReferenceSystem<P> crs) { boolean hasM = (typeCode & PostgisWkbTypeMasks.M_FLAG) == PostgisWkbTypeMasks.M_FLAG; boolean hasZ = (typeCode & PostgisWkbTypeMasks.Z_FLAG) == PostgisWkbTypeMasks.Z_FLAG; // if set, just validate if (crs != null) { validateCrs(crs, hasM, hasZ); return crs; } CoordinateReferenceSystem crsDeclared; if (hasSrid(typeCode)) { int srid = byteBuffer.getInt(); crsDeclared = CrsRegistry.getCoordinateReferenceSystemForEPSG(srid, CoordinateReferenceSystems.PROJECTED_2D_METER); } else { crsDeclared = CoordinateReferenceSystems.PROJECTED_2D_METER; } if (hasZ) { crsDeclared = addVerticalSystem(crsDeclared, Unit.METER); } if (hasM) { crsDeclared = addLinearSystem(crsDeclared, Unit.METER); } return (CoordinateReferenceSystem<P>)crsDeclared; }