Class IntersectsFunction

All Implemented Interfaces:
ADQLObject, ADQLOperand

public class IntersectsFunction extends GeometryFunction
It represents the INTERSECTS function of the ADQL language.

This function determines if two geometry values overlap. This is most commonly used to express a "shape-vs-shape" intersection test.

Example:

An expression to determine whether a circle of one degree radius centered on position (25.4, -20.0) degrees overlaps with a box of ten degrees centered on position (20.0, -15.0) degrees, could be written as follows:

INTERSECTS(CIRCLE(25.4, -20.0, 1), BOX(20.0, -15.0, 10, 10))

, where the INTERSECTS function returns the numeric value 1 if the two arguments overlap and 0 if they do not.

When used as a predicate in the WHERE clause of a query, the numeric return value should be compared to the numeric values 0 or 1 to form a SQL predicate.

Example:

WHERE 1 = INTERSECTS(CIRCLE(25.4, -20.0, 1), BOX(20.0, -15.0, 10, 10))

for "does intersect" and

WHERE 0 = INTERSECTS(CIRCLE(25.4, -20.0, 1), BOX(20.0, -15.0, 10, 10))

for "does not intersect".

The geometric arguments for INTERSECTS may be literal values, as above, or they may be column references, functions or expressions that return geometric values.

Example:

WHERE 0 = INTERSECTS(t1.target, t2.footprint)

, where t1.target and t2.footprint are references to database columns that contain geometric (BOX, CIRCLE, POLYGON or REGION) values.

The arguments to INTERSECTS SHOULD be geometric expressions evaluating to either BOX, CIRCLE, POLYGON or REGION. Previous versions of this specification (< 2.1) also allowed POINT values and required server implementations to interpret the expression as a CONTAINS with the POINT moved into the first position. Server implementations SHOULD still implement that behaviour, but clients SHOULD NOT expect it. This behaviour MAY be dropped in the next major version of this specification (> 2.1).

If the geometric arguments are expressed in different coordinate systems, the INTERSECTS function is responsible for converting one, or both, of the arguments into a different coordinate system. If the INTERSECTS function cannot perform the required conversion then it SHOULD throw an error. Details of the mechanism for reporting the error condition are implementation dependent.