/** * This constructor has been added to speed up object creation of LinearRings * * @param base */ protected LineString(LineString<P> base) { super(base.getPositions(), base.getCoordinateReferenceSystem()); }
/** * Returns the {@code LineSegments} that define this instance. * * @return an Iterable of this instance's {@code LineSegment}s */ Iterable<LineSegment<P>> lineSegments() { return new LineSegments<P>(getPositions()); }
private void addPoints(LineString<?> ring, CountingPositionSequenceBuilder<?> coordinates) { double[] c = new double[coordinates.getCoordinateDimension()]; for ( Position p : ring.getPositions() ) { coordinates.add( p.toArray(c) ); } }
@Override public void visit(LineString<P> geom) { writeByteOrder(output); writeTypeCodeAndSrid(geom, output); if (geom.isEmpty()) { output.putUInt(0); } else { output.putUInt(geom.getNumPositions()); writePoints(geom.getPositions(), geom.getCoordinateDimension(), output); } }
@Override public void visit(LineString<P> lineString) { LineSegments<P> lineSegments = new LineSegments<P>(lineString.getPositions()); for (LineSegment<P> segment : lineSegments) { P p0 = segment.getStartPosition(); P p1 = segment.getEndPosition(); double[] dAndR = Vector.positionToSegment2D(p0, p1, searchPosition); double d = Math.sqrt(dAndR[0]); if (d <= distToSearchPoint ) { double r = dAndR[1]; if (r <= 0) { mValue = p0.getM(); } else if (r >= 1) { mValue = p1.getM(); } else { mValue = p0.getM() + r * (p1.getM() - p0.getM()); } distToSearchPoint = d; } } }
private <T extends C2D & Measured> LineString<T> measure(LineString<T> geometry) { CoordinateReferenceSystem<T> crs = geometry.getCoordinateReferenceSystem(); PositionSequence originalPoints = geometry.getPositions(); PositionSequenceBuilder<T> builder = PositionSequenceBuilders.fixedSized(originalPoints.size(), geometry.getPositionClass()); int mIdx = hasVerticalAxis(crs) ? 3 :2; double[] coordinates = new double[geometry.getCoordinateDimension()]; double[] prevCoordinates = new double[geometry.getCoordinateDimension()]; for (int i = 0; i < originalPoints.size(); i++) { originalPoints.getCoordinates(i, coordinates); if (i > 0) { length += Math.hypot(coordinates[0] - prevCoordinates[0], coordinates[1] - prevCoordinates[1]); } coordinates[mIdx] = length; builder.add(coordinates); prevCoordinates[0] = coordinates[0]; prevCoordinates[1] = coordinates[1]; } return new LineString<T>(builder.toPositionSequence(), crs); }
@SuppressWarnings("unchecked") private static <P extends Position> org.geolatte.geom.Polygon<P> from(Polygon jtsGeometry, CoordinateReferenceSystem<P> crs) { if (jtsGeometry.isEmpty()) { return new org.geolatte.geom.Polygon<P>(crs); } org.geolatte.geom.LinearRing<P>[] rings = new org.geolatte.geom.LinearRing[jtsGeometry.getNumInteriorRing() + 1]; org.geolatte.geom.LineString<P> extRing = from(jtsGeometry.getExteriorRing(), crs); rings[0] = new org.geolatte.geom.LinearRing(extRing.getPositions(), extRing.getCoordinateReferenceSystem()); for (int i = 1; i < rings.length; i++) { org.geolatte.geom.LineString intRing = from(jtsGeometry.getInteriorRingN(i - 1), crs); rings[i] = new org.geolatte.geom.LinearRing(intRing); } return new org.geolatte.geom.Polygon(rings); }
@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)); }
currentBuilder = PositionSequenceBuilders.variableSized(this.geometry.getPositionClass()); P lastAddedPoint = null; LineSegments<P> segments = new LineSegments<P>(lineString.getPositions()); for (LineSegment<P> segment : segments) { P p0 = segment.getStartPosition();