|=| — A トラジェクトリと B トラジェクトリとの最接近する時の距離を返します。
double precision |=|( geometry A , geometry B );
|=|演算子は二つのトラジェクトリー (ST_IsValidTrajectory参照) の間の 3次元距離を返します。ST_DistanceCPAと同じですが、この演算子は N 次元インデックスを使った最近傍探索を行います。
|
|
|
この演算子は、ジオメトリーで使用可能な ND GiST (n 次元 GiST) インデックスを使用します。他の空間インデックスを使う演算子と違い、ORDER BY 句でのみ空間インデックスを使います。 |
|
|
|
ジオメトリーのひとつが定数となる (副問い合わせ/共通テーブル式にない) 場合 (a.geom でなく'SRID=3005;LINESTRINGM(0 0 0,0 0 1)'::geometry 等となる場合) には、インデックスが有効になるだけです。 |
Availability: 2.2.0.
この例では格納されているトラジェクトリーをリテラルのトラジェクトリーとの距離で並び替えます。
\set qt 'ST_AddMeasure(ST_MakeLine(ST_MakePointM(-350, 300, 0), ST_MakePointM(-410, 490, 0)), 10, 20)'
SELECT track_id, dist FROM (
SELECT track_id,
ST_DistanceCPA(tr, :qt) dist
FROM trajectories
ORDER BY tr |=| :qt
LIMIT 5
) foo;
track_id dist
----------+-------------------
395 | 0.576496831518066
380 | 5.06797130410151
390 | 7.72262293958322
385 | 9.8004461358071
405 | 10.9534397988433
(5 rows)