private static JGeometry convert(MultiLineString geometry) { int srid = geometry.getSRID(); int dim = geometry.getCoordinateDimension(); double[] points = getPoints(geometry.getPoints()); int[] elemInfo = new int[geometry.getNumGeometries() * 3]; int offset = 0; int pointOffset = 1; for (int i = 0; i < geometry.getNumGeometries(); i++) { elemInfo[offset++] = pointOffset; elemInfo[offset++] = 2; elemInfo[offset++] = 1; pointOffset += geometry.getGeometryN(i).getNumPoints() * dim; } int gtype = dim * 1000 + (geometry.isMeasured() ? dim : 0) * 100 + GTYPE_MULTICURVE; return new JGeometry(gtype, srid, elemInfo, points); }
private static JGeometry convert(MultiLineString geometry) { int srid = geometry.getSRID(); int dim = geometry.getCoordinateDimension(); double[] points = getPoints(geometry.getPoints()); int[] elemInfo = new int[geometry.getNumGeometries() * 3]; int offset = 0; int pointOffset = 1; for (int i = 0; i < geometry.getNumGeometries(); i++) { elemInfo[offset++] = pointOffset; elemInfo[offset++] = 2; elemInfo[offset++] = 1; pointOffset += geometry.getGeometryN(i).getNumPoints() * dim; } int gtype = dim * 1000 + (geometry.isMeasured() ? dim : 0) * 100 + GTYPE_MULTICURVE; return new JGeometry(gtype, srid, elemInfo, points); }
@Test public void multiLineString() { MultiLineString multiLineString = (org.geolatte.geom.MultiLineString) Wkt.fromWkt("MULTILINESTRING (" + "(30 10, 40 40, 20 40, 10 20, 30 10), " + "(20 30, 35 35, 30 20, 20 30))"); JGeometry geo = JGeometryConverter.convert(multiLineString); double[] line1 = new double[]{30, 10, 40, 40, 20, 40, 10, 20, 30, 10}; double[] line2 = new double[]{20, 30, 35, 35, 30, 20, 20, 30}; JGeometry geo2 = JGeometry.createLinearMultiLineString(new Object[]{line1, line2}, multiLineString.getCoordinateDimension(), multiLineString.getSRID()); // System.err.println(Arrays.toString(geo.getElemInfo())); // System.err.println(Arrays.toString(geo.getOrdinatesArray())); // System.err.println(Arrays.toString(geo2.getElemInfo())); // System.err.println(Arrays.toString(geo2.getOrdinatesArray())); assertEquals(geo2, geo); }
@Override @SuppressWarnings("unchecked") public <P extends Position, G extends Geometry<P>> SDOGeometry encode(G geom) { MultiLineString<P> multiLineString = (MultiLineString<P>)geom; final int dim = multiLineString.getCoordinateDimension(); final int lrsDim = getLRSDim(multiLineString); final boolean isLrs = (lrsDim != 0); SDOGType sdoGtype = new SDOGType(dim, lrsDim, TypeGeometry.MULTILINE); final ElemInfo info = new ElemInfo(multiLineString.getNumGeometries()); int oordinatesOffset = 1; Double[] ordinates = new Double[]{}; for (int i = 0; i < multiLineString.getNumGeometries(); i++) { info.setElement(i, oordinatesOffset, ElementType.LINE_STRAITH_SEGMENTS, 0); ordinates = addOrdinates(ordinates, convertPositionSequence(multiLineString.getGeometryN(i).getPositions())); oordinatesOffset = ordinates.length + 1; } return new SDOGeometry(sdoGtype, geom.getSRID(), null, info, new Ordinates(ordinates)); }