@Override public int dimension() { int maxD = 0; for (int i = 0, n = numGeometries(); i < n; i++) maxD = Math.max(geometryN(i).dimension(), maxD); return maxD; }
@Override public int dimension() { int maxD = 0; for (int i = 0, n = numGeometries(); i < n; i++) maxD = Math.max(geometryN(i).dimension(), maxD); return maxD; }
@Override public boolean isSimple() { for (int i = 0, n = numGeometries(); i < n; i++) if (!geometryN(i).isSimple()) return false; return true; }
@Override public boolean isSimpleRelaxed() { for (int i = 0, n = numGeometries(); i < n; i++) if (!geometryN(i).isSimpleRelaxed()) return false; return true; }
@Override public OGCGeometry reduceFromMulti() { int n = numGeometries(); if (n == 0) { return this; } if (n == 1) { return geometryN(0).reduceFromMulti(); } return this; }
@Override public OGCGeometry reduceFromMulti() { int n = numGeometries(); if (n == 0) { return this; } if (n == 1) { return geometryN(0).reduceFromMulti(); } return this; }
@Override public boolean isSimpleRelaxed() { for (int i = 0, n = numGeometries(); i < n; i++) if (!geometryN(i).isSimpleRelaxed()) return false; return true; }
@Override public boolean isSimple() { for (int i = 0, n = numGeometries(); i < n; i++) if (!geometryN(i).isSimple()) return false; return true; }
@Override public int coordinateDimension() { return isEmpty() ? 2 : geometryN(0).coordinateDimension(); }
@Override public int coordinateDimension() { return isEmpty() ? 2 : geometryN(0).coordinateDimension(); }
@Override public double distance(OGCGeometry another) { if (this == another) return isEmpty() ? Double.NaN : 0; double minD = Double.NaN; for (int i = 0, n = numGeometries(); i < n; ++i) { // TODO Skip expensive distance computation if bounding boxes are further away than minD double d = geometryN(i).distance(another); if (d < minD || Double.isNaN(minD)) { minD = d; // TODO Replace zero with tolerance defined by the spatial reference if (minD == 0) { break; } } } return minD; }
@Override public double distance(OGCGeometry another) { if (this == another) return isEmpty() ? Double.NaN : 0; double minD = Double.NaN; for (int i = 0, n = numGeometries(); i < n; ++i) { // TODO Skip expensive distance computation if bounding boxes are further away than minD double d = geometryN(i).distance(another); if (d < minD || Double.isNaN(minD)) { minD = d; // TODO Replace zero with tolerance defined by the spatial reference if (minD == 0) { break; } } } return minD; }