Skip to content

point_in_polygon ​

Tests whether a point lies in a polygon. The outer boundary is included; a hole and its boundary are excluded.

Syntax ​

text
point_in_polygon(point, outer_ring [, hole, ...])
point_in_polygon(point, polygon)

Arguments ​

  • point — A two-coordinate Float64 pair.
  • outer_ring — An outer Ring containing at least three finite points.
  • hole — An optional hole Ring, with the same shape requirements.
  • polygon — A Polygon whose first Ring is the outer boundary and whose later Rings are holes.

All coordinates must use one consistent space, such as longitude/latitude or projected coordinates. Geometry declarations validate shapes without validating topology.

Returned value ​

A Bool indicating whether the point is inside under these boundary rules. SQL NULL propagates.

Examples ​

Inside an outer ring ​

sql
SELECT point_in_polygon(
    tuple(1, 1),
    CAST('[[0,0],[2,0],[2,2],[0,2]]' AS Ring)
)
FORMAT csv;
text
true

A hole and an outer boundary ​

sql
CREATE TABLE regions (area Polygon);
INSERT INTO regions VALUES (CAST(
        '[[[0,0],[4,0],[4,4],[0,4]],[[1,1],[3,1],[3,3],[1,3]]]'
        AS Polygon
    ));
sql
SELECT point_in_polygon(tuple(2, 2), area) AS in_hole,
       point_in_polygon(tuple(0, 2), area) AS on_outer_boundary
FROM regions
FORMAT csv;
text
false,true