@Override public String toString(Geometry value) { return value.toString(); }
private void visit(Geometry geometry, int parent) { switch (geometry.getGeometryType()) { case POINT: visit((Point)geometry, parent); break; case POLYGON: visit((Polygon)geometry, parent); break; case LINE_STRING: visit((LineString)geometry, parent); break; case MULTI_POINT: visit((MultiPoint)geometry, parent); break; case MULTI_LINE_STRING: visit((MultiLineString)geometry, parent); break; case MULTI_POLYGON: visit((MultiPolygon)geometry, parent); break; case GEOMETRY_COLLECTION: visit((GeometryCollection)geometry, parent); break; default: throw new IllegalArgumentException(geometry.toString()); } }
public static Encoder<SqlServerGeometry> encoderFor(Geometry<?> geom) { for ( Encoder<SqlServerGeometry> encoder : ENCODERS ) { if ( encoder.accepts( geom ) ) { return encoder; } } throw new IllegalArgumentException( "No encoder for type " + geom.getGeometryType() ); }
ByteBuffer buffer = ByteBuffer.allocate(bytes); buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(geometry.getSRID()); buffer.put((byte)1); buffer.put((byte)((geometry.is3D() ? 1 : 0) + (geometry.isMeasured() ? 2 : 0) + 4 // is valid + (singlePoint ? 8 : 0) buffer.putDouble(point.getY()); if (geometry.is3D()) { for (Point point : points) { buffer.putDouble(point.getZ()); if (geometry.isMeasured()) { for (Point point : points) { buffer.putDouble(point.getM());
/** * {@inheritDoc} */ @Override public <P extends Position> boolean equals(Geometry<P> first, Geometry<P> second) { if (first == second) return true; if (first == null || second == null) return false; if (first.isEmpty() && second.isEmpty()) return true; if (first.isEmpty() || second.isEmpty()) return false; if (! first.getCoordinateReferenceSystem().equals(second.getCoordinateReferenceSystem())) return false; if (first.getGeometryType() != second.getGeometryType()) return false; if (first instanceof GeometryCollection) { assert(second instanceof GeometryCollection); return equals((GeometryCollection<?,?>)first, (GeometryCollection<?,?>)second); } if (first instanceof Polygon) { assert(second instanceof Polygon); return equals((Polygon<P>)first, (Polygon<P>)second); } return pointSeqEq.equals(first.getPositions(), second.getPositions()); }
protected void writeTypeCodeAndSrid(Geometry<P> geometry, ByteBuffer output) { int typeCode = getGeometryType(geometry); boolean hasSrid = (geometry.getSRID() > 0); CoordinateReferenceSystem<P> crs = geometry.getCoordinateReferenceSystem(); if (hasSrid && !hasWrittenSrid) { typeCode |= PostgisWkbTypeMasks.SRID_FLAG; } if (hasMeasureAxis(crs)) { typeCode |= PostgisWkbTypeMasks.M_FLAG; } if (hasVerticalAxis(crs)) { typeCode |= PostgisWkbTypeMasks.Z_FLAG; } output.putUInt(typeCode); if (hasSrid && !hasWrittenSrid) { output.putInt(geometry.getSRID()); hasWrittenSrid = true; } }
@Override public <P extends Position, G extends Geometry<P>> SDOGeometry encode(G geom) { final int dim = geom.getCoordinateDimension(); final int lrsDim = getLRSDim(geom); final boolean isLrs = (lrsDim != 0); final Double[] coord = convertPositionSequence(geom.getPositions()); if (Settings.useSdoPointType() && !isLrs && !geom.isEmpty()) { return new SDOGeometry( new SDOGType(dim, lrsDim, TypeGeometry.POINT), geom.getSRID(), new SDOPoint(coord), null, null ); } final ElemInfo info = new ElemInfo(1); info.setElement(0, 1, ElementType.POINT, 1); return new SDOGeometry( new SDOGType(dim, lrsDim, TypeGeometry.POINT), geom.getSRID(), null, info, new Ordinates(coord) ); }
if (geom.getSRID() > 0) { sqlServerGeom.setCoordinateReferenceSystem(geom.getCoordinateReferenceSystem()); if (geom.isEmpty()) { sqlServerGeom.setNumberOfPoints(0); sqlServerGeom.setNumberOfFigures(0); if (CoordinateReferenceSystems.hasVerticalAxis(geom.getCoordinateReferenceSystem())) { sqlServerGeom.setHasZValues(); sqlServerGeom.allocateZValueArray(); if (CoordinateReferenceSystems.hasMeasureAxis(geom.getCoordinateReferenceSystem())) { sqlServerGeom.setHasMValues(); sqlServerGeom.allocateMValueArray(); sqlServerGeom.setCoordinate(0, geom.getPositions()); return sqlServerGeom;
private <P extends Position> void addGeometryText(Geometry<P> geometry) { if (geometry.isEmpty()) { addEmptyKeyword(); return; GeometryType type = geometry.getGeometryType(); switch (type) { case POINT: case LINESTRING: case LINEARRING: addPointList(geometry.getPositions()); break; case POLYGON:
private static org.postgis.Point[] convertPoints(Geometry geometry) { org.postgis.Point[] pgPoints = new org.postgis.Point[geometry.getNumPoints()]; for (int i = 0; i < pgPoints.length; i++) { pgPoints[i] = convert(geometry.getPointN(i)); } return pgPoints; }
@Override public <P extends Position, G extends Geometry<P>> SDOGeometry encode(G geom) { final int dim = geom.getCoordinateDimension(); final int lrsPos = getLRSDim(geom); SDOGType sdogType = new SDOGType(dim, lrsPos, TypeGeometry.POLYGON); SDOGeometry base = new SDOGeometry(sdogType, geom.getSRID(), null, null, null); Polygon<?> polygon = (Polygon<?>)geom; return addPolygon(base, polygon); }
private int calculateCapacity(Geometry geometry) { int numPoints = points.size(); int prefixSize = 6; if (geometry instanceof Point) { int capacity = prefixSize + 16 * numPoints; if (geometry.is3D()) { capacity += 8 * numPoints; } if (geometry.isMeasured()) { capacity += 8 * numPoints; } return capacity; } int pointSize = 16 + (geometry.is3D() ? 8 : 0) + (geometry.isMeasured() ? 8 : 0); int size = prefixSize + 3 * 4; // prefix + 3 ints for points, shapes and // figures size += numPoints * pointSize; size += figures.size() * 5; size += shapes.size() * 9; return size; }
@Override public int hashCode() { int result = getGeometryType().hashCode(); result = 31 * result + this.getPositions().hashCode(); return result; }
protected <P extends Position> int calculateSize(Geometry<P> geom, boolean includeSrid) { int size = 1 + ByteBuffer.UINT_SIZE; //size for order byte + type field if (geom.getSRID() > 0 && includeSrid) { size += 4; } //empty geoms have same representation as an empty GeometryCollection if (geom.isEmpty()) return size + sizeEmptyGeometry(geom); if (geom instanceof GeometryCollection) { size += sizeOfGeometryCollection((GeometryCollection<P, ?>) geom); } else if (geom instanceof Polygon) { size += getPolygonSize((Polygon<P>) geom); } else if (geom instanceof Point) { size += getPointByteSize(geom); } else { size += ByteBuffer.UINT_SIZE; //to hold number of points size += getPointByteSize(geom) * geom.getNumPositions(); } return size; }
/** * @inheritDoc */ @Override public <P extends C2D, M extends C2D & Measured> Geometry<M> measureOnLength( final Geometry<P> geometry, final Class<M> positionTypeMarker, final boolean keepBeginMeasure) { if (geometry == null) throw new IllegalArgumentException("Geometry parameter must not be NULL"); if (positionTypeMarker == null) throw new IllegalArgumentException("PositionTypeMarker parameter must not be NULL"); if (geometry.getGeometryType() != GeometryType.LINESTRING && geometry.getGeometryType() != GeometryType.MULTILINESTRING) { throw new IllegalArgumentException("Geometry parameter must be of type LineString or MultiLineString"); } final CoordinateReferenceSystem<P> sourceCRS = geometry.getCoordinateReferenceSystem(); final CoordinateReferenceSystem<M> measuredVariant = !hasMeasureAxis(sourceCRS) ? (CoordinateReferenceSystem<M>) addLinearSystem(sourceCRS, Unit.METER) : (CoordinateReferenceSystem<M>)sourceCRS; if (!measuredVariant.getPositionClass().equals(positionTypeMarker)) { throw new IllegalArgumentException(String.format( "Inconsistent types: measured CRS has position type %s, but positionTypeMarker is %s.", measuredVariant.getPositionClass().getName(), positionTypeMarker.getName())); } return new OnLengthMeasureOp<M>(geometry, measuredVariant, keepBeginMeasure).execute(); }
@Override public <P extends Position, G extends Geometry<P>> SDOGeometry encode(G geom) { final int dim = geom.getCoordinateDimension(); final int lrsPos = getLRSDim(geom); final boolean isLrs = lrsPos > 0; final Double[] ordinates = convertPositionSequence(geom.getPositions()); final ElemInfo info = new ElemInfo(1); info.setElement(0, 1, ElementType.LINE_STRAITH_SEGMENTS, 0); return new SDOGeometry( new SDOGType(dim, lrsPos, TypeGeometry.LINE), geom.getSRID(), null, info, new Ordinates(ordinates)); }
@Override public void setNonNullParameter(PreparedStatement ps, int i, Geometry parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter.asText()); }
private void visit(Geometry geometry, int parent) { switch (geometry.getGeometryType()) { case POINT: visit((Point) geometry, parent); break; case POLYGON: visit((Polygon) geometry, parent); break; case LINE_STRING: visit((LineString) geometry, parent); break; case MULTI_POINT: visit((MultiPoint) geometry, parent); break; case MULTI_LINE_STRING: visit((MultiLineString) geometry, parent); break; case MULTI_POLYGON: visit((MultiPolygon) geometry, parent); break; case GEOMETRY_COLLECTION: visit((GeometryCollection) geometry, parent); break; default: throw new IllegalArgumentException(geometry.toString()); } }
public static Encoder<SDOGeometry> encoderFor(Geometry<?> geom) { for (Encoder<SDOGeometry> encoder : ENCODERS) { if (encoder.accepts(geom)) { return encoder; } } throw new IllegalArgumentException("No encoder for type " + (geom == null ? "NULL" : geom.getGeometryType())); }