@Override public Geometry<M> execute() { Geometry<M> measured = Geometry.forceToCrs(geometry, measuredVariant); if (measured.isEmpty()) return measured; if (keepBeginMeasure) { double initialValue = measured.getPositionN(0).getM(); length = (Double.isNaN(initialValue) ? 0 : initialValue); } if (measured instanceof LineString) { return measure((LineString<M>) measured); } else if (geometry instanceof MultiLineString) { return measure((MultiLineString<M>) measured); } else { throw new IllegalStateException( String.format("Requires a LineString or MultiLineString, but received %s", geometry.getClass().getName())); } }
@Override protected void encode(Geometry<?> geom, int parentIdx, CountingPositionSequenceBuilder<?> coordinates, List <Figure> figures, List<Shape> shapes) { if (!(geom instanceof Point)) { throw new IllegalArgumentException("Require Point geometry"); } if (geom.isEmpty()) { shapes.add(new Shape(parentIdx, -1, OpenGisType.POINT)); return; } int pntOffset = coordinates.getNumAdded(); int figureOffset = figures.size(); double[] c = new double[coordinates.getCoordinateDimension()]; coordinates.add(geom.getPositionN(0).toArray(c)); Figure figure = new Figure(FigureAttribute.Stroke, pntOffset); figures.add(figure); Shape shape = new Shape(parentIdx, figureOffset, OpenGisType.POINT); shapes.add(shape); }