private void applyZValues( CoordinateSequence cs, int idx, CoordinateSequence csOrig, int origIdx) { if (!cs.hasZ()) return; double lx1 = cs.getOrdinate(idx, 0); double ly1 = cs.getOrdinate(idx, 1); double lz1; double ox1 = csOrig.getX(origIdx); double oy1 = csOrig.getY(origIdx); double oz1 = csOrig.getZ(origIdx); double ox2 = csOrig.getX(origIdx + 1); double oy2 = csOrig.getY(origIdx + 1); double oz2 = csOrig.getZ(origIdx + 1); if (lx1 == ox1 && ly1 == oy1) { lz1 = oz1; } else { double d1 = distance(ox1, oy1, lx1, ly1); double d = distance(ox1, oy1, ox2, oy2); lz1 = oz1 + (oz2 - oz1) * (d1 / d); } cs.setOrdinate(idx, 2, lz1); }
/** * Returns ordinate Z of the specified coordinate if available. * * @param index * @return the value of the Z ordinate in the index'th coordinate, or Double.NaN if not defined. */ default double getZ(int index) { if (hasZ()) { return getOrdinate(index, 2); } else { return Double.NaN; } }
mergeOrdinates = ordinateFlags.clone(); for (int i = 0; i < sequences.size(); i++) { if (((CoordinateSequence)sequences.get(i)).hasZ()) { mergeOrdinates.add(Ordinate.Z); break;
assertEquals("clipped dimension 3", 3, sequence.getDimension()); assertEquals("default measure 0", 0, sequence.getMeasures()); assertTrue(sequence.hasZ()); assertTrue(!sequence.hasM()); assertEquals("clipped dimension 3", 3, sequence.getDimension()); assertEquals("provided measure 0", 0, sequence.getMeasures()); assertTrue(sequence.hasZ()); assertTrue(!sequence.hasM()); assertEquals("clipped dimension 3", 3, sequence.getDimension()); assertEquals("clipped measure 1", 1, sequence.getMeasures()); assertTrue(!sequence.hasZ()); assertTrue(sequence.hasM()); assertEquals("clipped dimension 3", 4, sequence.getDimension()); assertEquals("provided measure 1", 1, sequence.getMeasures()); assertTrue(sequence.hasZ()); assertTrue(sequence.hasM()); assertEquals("clipped dimension 2", 2, sequence.getDimension()); assertEquals("default measure 0", 0, sequence.getMeasures()); assertTrue(!sequence.hasZ()); assertTrue(!sequence.hasM()); assertEquals("clipped dimension 3", 3, sequence.getDimension()); 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; }
assertTrue("Z", !seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); initProgression(seq); assertEquals("xyz", 3, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); initProgression(seq); assertEquals("xym", 3, seq.getDimension()); assertTrue("Z", !seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4); initProgression(seq); assertEquals("xyzm", 4, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4);
assertTrue("Z", !seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); initProgression(seq); assertEquals("xyz", 3, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", !seq.hasM()); coord = seq.getCoordinate(4); initProgression(seq); assertEquals("xym", 3, seq.getDimension()); assertTrue("Z", !seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4); initProgression(seq); assertEquals("xyzm", 4, seq.getDimension()); assertTrue("Z", seq.hasZ()); assertTrue("M", seq.hasM()); coord = seq.getCoordinate(4);