public Element encode(Object object, Document document, Element value) throws Exception { CoordinateSequence cs = (CoordinateSequence) object; boolean hasm = cs.hasM(); StringBuffer sb = new StringBuffer(); // assume either zero or one coordinate if (cs.size() >= 1) { int dim = cs.getDimension(); for (int d = 0; d < dim; d++) { double v = cs.getOrdinate(0, d); // if has M coordinate and no Z(dim=3), fill empty Z coordinate with 0 if (hasm && dim == 3 && d == 2) { formatAndAppend(sb, 0); } if (Double.isNaN(v) && d > 1) { continue; } formatAndAppend(sb, v); } if (dim > 0) { sb.setLength(sb.length() - 1); } } value.appendChild(document.createTextNode(sb.toString())); return value; }
/** * Returns ordinate M of the specified coordinate if available. * * @param index * @return the value of the M ordinate in the index'th coordinate, or Double.NaN if not defined. */ default double getM(int index) { if (hasM()) { final int mIndex = getDimension()-getMeasures(); return getOrdinate( index, mIndex ); } else { return Double.NaN; } }
assertEquals("default measure 0", 0, sequence.getMeasures()); assertTrue(sequence.hasZ()); assertTrue(!sequence.hasM()); assertEquals("provided measure 0", 0, sequence.getMeasures()); assertTrue(sequence.hasZ()); assertTrue(!sequence.hasM()); assertEquals("clipped measure 1", 1, sequence.getMeasures()); assertTrue(!sequence.hasZ()); assertTrue(sequence.hasM()); assertEquals("provided measure 1", 1, sequence.getMeasures()); assertTrue(sequence.hasZ()); assertTrue(sequence.hasM()); assertEquals("default measure 0", 0, sequence.getMeasures()); assertTrue(!sequence.hasZ()); assertTrue(!sequence.hasM()); assertEquals("provided measure 1", 1, sequence.getMeasures()); assertTrue(!sequence.hasZ()); assertTrue(sequence.hasM());
boolean isAllCoordsEqual(CoordinateSequence seq, Coordinate coord) { for (int i = 0; i < seq.size(); i++) { if (!coord.equals(seq.getCoordinate(i))) return false; if (coord.x != seq.getOrdinate(i, CoordinateSequence.X)) return false; if (coord.y != seq.getOrdinate(i, CoordinateSequence.Y)) return false; if (seq.hasZ()) { if (coord.getZ() != seq.getZ(i)) return false; } if (seq.hasM()) { if (coord.getM() != seq.getM(i)) return false; } if (seq.getDimension() > 2) { if (coord.getOrdinate(2) != seq.getOrdinate(i, 2)) return false; } if (seq.getDimension() > 3) { if (coord.getOrdinate(3) != seq.getOrdinate(i, 3)) return false; } } return true; }
assertEquals("xz", 2, seq.getDimension()); assertTrue("Z", !seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord instanceof CoordinateXY); assertEquals("xyz", 3, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord.getClass() == Coordinate.class); assertEquals("xym", 3, seq.getDimension()); assertTrue("Z", !seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord instanceof CoordinateXYM); assertEquals("xyzm", 4, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord instanceof CoordinateXYZM);
assertEquals("xz", 2, seq.getDimension()); assertTrue("Z", !seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord instanceof CoordinateXY); assertEquals("xyz", 3, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord.getClass() == Coordinate.class); assertEquals("xym", 3, seq.getDimension()); assertTrue("Z", !seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord instanceof CoordinateXYM); assertEquals("xyzm", 4, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4); assertTrue( coord instanceof CoordinateXYZM);