名前

= — Aのバウンダリボックスが、Bのバウンダリボックスと同じ場合にTRUEを返します。バウンディングボックスには倍精度浮動小数点数を使います。

概要

boolean =( geometry A , geometry B );

boolean =( geography A , geography B );

説明

=演算子は、ジオメトリ/ジオグラフィAのバウンダリボックスが、Bのバウンダリボックスと同じ場合にTRUEを返します。PostgreSQLは、ジオメトリが内部の並べ替えの実行やジオメトリの比較を行うために定義した=, <, >演算子を使います(GROUP BYやORDER BY節)。

[警告]

これは多数の混乱の元です。geometryA = geometryBの比較を行うと、ジオメトリが明確に異なっていたとしても、バウンディングボックスが同じならTRUEが返ります。本当の等価性をチェックするにはST_OrderingEqualsまたはST_Equalsを使います。

[注意]

この演算子はジオメトリで使用できるインデクスを*使いません*。

このメソッドは曲線ストリングと曲線に対応しています

この関数は多面体サーフェスに対応しています。

変更: 2.0.0では、 ジオメトリのバウンディングボックスをfloat4使用から倍精度使用に変更しました。ほんの少し違う位置にある特定のポイントについて、float4でのバウンディングボックスなら同じになるのにfloat8(倍精度)でのバウンディングボックスでは異なるため、以前の版ではtrueが返ったのが2.0以上ではfalseが返る、という副作用があります。

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)

-- In versions prior to 2.0, this used to return true --
 SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') =
	ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect;
	
--pt_intersect --
f

関連情報

ST_Equals, ST_OrderingEquals