in endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/esri/Wrapper.java [251:292]
protected Object operationSameCRS(final SQLMM operation, final GeometryWrapper other, final Object argument) {
final Geometry result;
switch (operation) {
case ST_Dimension: return geometry.getDimension();
case ST_CoordDim: return geometry.hasZ() ? Geometries.TRIDIMENSIONAL : Geometries.BIDIMENSIONAL;
case ST_GeometryType: return geometry.getType().name();
case ST_IsEmpty: return geometry.isEmpty();
case ST_Is3D: return geometry.hasZ();
case ST_IsMeasured: return geometry.hasM();
case ST_X: return ((Point) geometry).getX();
case ST_Y: return ((Point) geometry).getY();
case ST_Z: return ((Point) geometry).getZ();
case ST_Envelope: return getEnvelope();
case ST_Boundary: result = geometry.getBoundary(); break;
case ST_Simplify: result = GeometryEngine.simplify (geometry, srs()); break;
case ST_ConvexHull: result = GeometryEngine.convexHull (geometry); break;
case ST_Buffer: result = GeometryEngine.buffer (geometry, srs(), ((Number) argument).doubleValue()); break;
case ST_Intersection: result = GeometryEngine.intersect (geometry, ((Wrapper) other).geometry, srs()); break;
case ST_Union: result = GeometryEngine.union(new Geometry[] {geometry, ((Wrapper) other).geometry}, srs()); break;
case ST_Difference: result = GeometryEngine.difference (geometry, ((Wrapper) other).geometry, srs()); break;
case ST_SymDifference: result = GeometryEngine.symmetricDifference (geometry, ((Wrapper) other).geometry, srs()); break;
case ST_Distance: return GeometryEngine.distance (geometry, ((Wrapper) other).geometry, srs());
case ST_Equals: return GeometryEngine.equals (geometry, ((Wrapper) other).geometry, srs());
case ST_Disjoint: return GeometryEngine.disjoint (geometry, ((Wrapper) other).geometry, srs());
case ST_Touches: return GeometryEngine.touches (geometry, ((Wrapper) other).geometry, srs());
case ST_Crosses: return GeometryEngine.crosses (geometry, ((Wrapper) other).geometry, srs());
case ST_Within: return GeometryEngine.within (geometry, ((Wrapper) other).geometry, srs());
case ST_Contains: return GeometryEngine.contains (geometry, ((Wrapper) other).geometry, srs());
case ST_Overlaps: return GeometryEngine.overlaps (geometry, ((Wrapper) other).geometry, srs());
case ST_AsText: return GeometryEngine.geometryToWkt (geometry, WktExportFlags.wktExportDefaults);
case ST_GeomFromText: return GeometryEngine.geometryFromWkt((String) argument, WktImportFlags.wktImportDefaults, Geometry.Type.Unknown);
case ST_PointFromText: return GeometryEngine.geometryFromWkt((String) argument, WktImportFlags.wktImportDefaults, Geometry.Type.Point);
case ST_MPointFromText: return GeometryEngine.geometryFromWkt((String) argument, WktImportFlags.wktImportDefaults, Geometry.Type.MultiPoint);
case ST_LineFromText: return GeometryEngine.geometryFromWkt((String) argument, WktImportFlags.wktImportDefaults, Geometry.Type.Line);
case ST_PolyFromText: return GeometryEngine.geometryFromWkt((String) argument, WktImportFlags.wktImportDefaults, Geometry.Type.Polygon);
case ST_Intersects: return OperatorIntersects.local().execute(geometry, ((Wrapper) other).geometry, srs(), null);
case ST_Centroid: result = new Point(OperatorCentroid2D.local().execute(geometry, null)); break;
default: return super.operationSameCRS(operation, other, argument);
}
// Current version does not have metadata to copy, but it may be added in the future.
return result;
}