<#> — A와 B의 경계 상자 사이의 2차원 거리를 반환합니다.
double precision <#>(
geometry A , geometry B )
;
<#>
연산자는 두 부동소수점(floating point) 경계 상자 사이의 거리를 반환합니다. 공간 인덱스(PostgreSQL 9.1 이상 버전 필요)로부터 경계 상자들을 읽어 올 수도 있습니다. 최근접 근사치 거리의 순서를 정렬하는 데 유용합니다.
이 피연산자(operand)는 도형에 대해 이용할 수 있을지도 모르는 어떤 인덱스라도 활용할 것입니다. 연산자가 ORDER BY 절 안에 있을 때만 공간 인덱스를 쓴다는 점에서 공간 인덱스를 이용하는 다른 연산자들과는 다릅니다. |
도형 가운데 하나가, 예를 들어 g1.geom <#>가 아니라 ORDER BY (ST_GeomFromText('POINT(1 2)') <#> geom)과 같이, 상수일 경우에만 인덱스의 효과가 나타납니다. |
2.0.0 버전부터 사용할 수 있습니다. PostgreSQL 9.1 이상 버전에서만 KNN을 쓸 수 있습니다.
SELECT * FROM ( SELECT b.tlid, b.mtfcc, b.geom <# > ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576, 745787 2948499,745740 2948468,745712 2948438, 745690 2948384,745677 2948319)',2249) As b_dist, ST_Distance(b.geom, ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576, 745787 2948499,745740 2948468,745712 2948438, 745690 2948384,745677 2948319)',2249)) As act_dist FROM bos_roads As b ORDER BY b_dist, b.tlid LIMIT 100) As foo ORDER BY act_dist, tlid LIMIT 10; tlid | mtfcc | b_dist | act_dist -----------+-------+------------------+------------------ 85732027 | S1400 | 0 | 0 85732029 | S1400 | 0 | 0 85732031 | S1400 | 0 | 0 85734335 | S1400 | 0 | 0 85736037 | S1400 | 0 | 0 624683742 | S1400 | 0 | 128.528874268666 85719343 | S1400 | 260.839270432962 | 260.839270432962 85741826 | S1400 | 164.759294123275 | 260.839270432962 85732032 | S1400 | 277.75 | 311.830282365264 85735592 | S1400 | 222.25 | 311.830282365264 (10 rows)