= — Returns TRUE
if A's bounding box is the same as B's (uses float4 boxes).
boolean =(
geometry
A
,
geometry
B
)
;
boolean =(
geography
A
,
geography
B
)
;
The =
operator returns TRUE
if the bounding box of geometry/geography A
is the same as the bounding box of geometry/geography B. PostgreSQL uses the =, <, and > operators defined for geometries to
perform internal orderings and comparison of geometries (ie. in a GROUP BY or ORDER BY clause).
This is cause for a lot of confusion. When you compare geometryA = geometryB it will return true even when the geometries are clearly different IF their bounding boxes are the same. To check for true equality use ST_OrderingEquals or ST_Equals. Even for points, doing a bounding box check is not sufficient to determine true equality of points since bounding box prior to PostGIS 2.0 are stored as float4. |
This operand will NOT make use of any indexes that may be available on the geometries. |
This method supports Circular Strings and Curves
SELECT 'LINESTRING(0 0, 0 1, 1 0)'::geometry = 'LINESTRING(1 1, 0 0)'::geometry; ?column? ---------- t (1 row) SELECT ST_AsText(column1) FROM ( VALUES ('LINESTRING(0 0, 1 1)'::geometry), ('LINESTRING(1 1, 0 0)'::geometry)) AS foo; st_astext --------------------- LINESTRING(0 0,1 1) LINESTRING(1 1,0 0) (2 rows) -- Note: the GROUP BY uses the "=" to compare for geometry equivalency. SELECT ST_AsText(column1) FROM ( VALUES ('LINESTRING(0 0, 1 1)'::geometry), ('LINESTRING(1 1, 0 0)'::geometry)) AS foo GROUP BY column1; st_astext --------------------- LINESTRING(0 0,1 1) (1 row) -- NOTE: Although the points are different, the float4 boxes are the same -- In versions 2.0+ and after, this will return false since 2.0+ switched -- to store double-precision (float8) bounding boxes instead of float4 (used in 1.5 and prior) -- SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') = ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect; --pt_intersect -- t