code: static Geometry simplifyOGC(/* const */Geometry geometry, /* const */
  	SpatialReference spatialReference, boolean bForce,
  			ProgressTracker progressTracker) {
  		if (geometry.isEmpty())
  			return geometry;
  		Geometry.Type gt = geometry.getType();
  		if (gt == Geometry.Type.Point)
  			return geometry;
  
  		double tolerance = InternalUtils.calculateToleranceFromGeometry(
  				spatialReference, geometry, false);
  		if (gt == Geometry.Type.Envelope) {
  			Envelope env = (Envelope) geometry;
  			Envelope2D env2D = new Envelope2D();
  			env.queryEnvelope2D(env2D);
  			if (env2D.isDegenerate(tolerance)) {
  				return (Geometry) (env.createInstance()); // return empty
  															// geometry
  			}
  			return geometry;
  		} else if (Geometry.isSegment(gt.value())) {
  			Segment seg = (Segment) geometry;
  			Polyline polyline = new Polyline(seg.getDescription());
  			polyline.addSegment(seg, true);
  			return simplifyOGC(polyline, spatialReference, bForce,
  					progressTracker);
  		}
  
  		if (!Geometry.isMultiVertex(gt.value())) {
  			throw new GeometryException("OGC simplify is not implemented for this geometry type" + gt);
  		}
  
  		MultiVertexGeometry result = TopologicalOperations.simplifyOGC(
  				(MultiVertexGeometry) geometry, tolerance, false, progressTracker);
  
  		return result;
  	}
docs: Simplifies geometries for storing in OGC format:
  
  MultiPoint:check that no points coincide.tolerance is ignored.
  Polyline:ensure there no segments degenerate segments. Polygon:cracks and
  clusters using cluster tolerance and resolves all self intersections,
  orients rings properly and arranges the rings in the OGC order.
  
  Returns simplified geometry.