gis操作符

&&

操作符 参数类型 返回类型 描述
&& ( geometry A , geometry B ) boolean 如果输入对象A的2D bounding box与输入对象B的2D bounding box有交集,则返回TRUE
&& ( geography A , geography B ) boolean 如果输入对象A的2D bounding box与输入对象B的2D bounding box有交集,则返回TRUE
&& ( geometry A , box2df B ) boolean 如果几何体二维边界框与二维浮点精度边界框相交,则返回TRUE , 这意味着,如果B是(双精度)box2d,它将在内部转换为浮点精度2D边界框(BOX2DF)
&& ( box2df A , box2df B ) boolean 如果两个二维浮点精度边界框(BOX2DF)相交,则返回TRUE。

示例

-- 1-1 boolean &&( geometry A , geometry B )
SELECT col1 && col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeomFromText('LINESTRING(0 0, 3 3)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1


-- 1-2 boolean &&( geography A , geography B )
SELECT col1 && col2 As overlap FROM ( SELECT ST_GeogFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeogFromText('LINESTRING(0 0, 3 3)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1


-- 2-1 boolean &&( geometry A , box2df B )
SELECT ST_MakePoint(1,1) && ST_MakeBox2D(ST_MakePoint(0,0), ST_MakePoint(2,2)) AS overlaps;
OVERLAPS(boolean)      |
-----------------------
true                   |
总数目:1


-- 3-1 boolean &&( box2df A , geometry B )
SELECT ST_MakeBox2D(ST_MakePoint(0,0), ST_MakePoint(2,2)) && ST_MakePoint(1,1) AS overlaps;
OVERLAPS(boolean)      |
-----------------------
true                   |
总数目:1


-- 4-1 boolean &&( box2df A , box2df B )
SELECT ST_MakeBox2D(ST_MakePoint(0,0), ST_MakePoint(2,2)) && ST_MakeBox2D(ST_MakePoint(1,0), ST_MakePoint(2,1)) AS overlaps;
OVERLAPS(boolean)      |
-----------------------
true                   |
总数目:1

&&&

操作符 参数类型 返回类型 描述
&&& ( geometry A , geometry B ) boolean 如果输入对象A的n-D bounding box与输入对象B的n-D bounding box有交集,则返回TRUE
&&& ( geometry A , gidx B ) boolean 如果几何体的(缓存的)n-D边界框与n-D浮点精度边界框(GIDX)相交,则返回TRUE。
&&& ( gidx A , geometry B ) boolean 如果n-D浮点精度边界框(GIDX)与几何体的(缓存的)n-D边界框相交,则返回TRUE。 这意味着,如果A是(双精度)box3d,它将在内部转换为浮点精度3D边界框(GIDX)。
&&& ( gidx A , gidx B ) boolean 如果两个n-D浮点精度边界框(GIDX)相交,则返回TRUE。 这意味着,如果A(或B)是(双精度)box3d,它将在内部转换为浮点精度3D边界框(GIDX) 该运算符旨在由BRIN索引内部使用,而不是由用户使用。

示例

-- 1-1 boolean &&&( geometry A , geometry B );
SELECT col1 &&& col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeomFromText('LINESTRING(0 0, 3 3)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1


-- 2-1 boolean &&&( geometry A , gidx B );
SELECT ST_MakePoint(1,1,1) &&& ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) AS overlaps;
OVERLAPS(boolean)      |
-----------------------
true                   |
总数目:1


-- 3-1 boolean &&&( gidx A , geometry B );
SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_MakePoint(1,1,1) AS overlaps;
OVERLAPS(boolean)      |
-----------------------
true                   |
总数目:1


-- 4-1 boolean &&&( gidx A , gidx B );
SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_3DMakeBox(ST_MakePoint(1,1,1), ST_MakePoint(3,3,3)) AS overlaps;
OVERLAPS(boolean)      |
-----------------------
true                   |
总数目:1

&<

操作符 参数类型 返回类型 描述
&< ( geometry A , geometry B ) boolean 如果输入几何对象A的bounding box与输入几何对象B的bounding box重合或者在后者的右边,则返回TRUE

示例

SELECT COL1 &<  COL2, COL1 &<  COL3,COL1 &<  COL4
FROM
( SELECT ST_GeomFromText('LINESTRING(1 2, 4 6)') As COL1,
ST_GeomFromText('LINESTRING(0 0, 3 3)') As COL2,
ST_GeomFromText('LINESTRING(0 1, 0 5)') As COL3,
ST_GeomFromText('LINESTRING(6 0, 6 1)') As COL4
);
?COLUMN?(boolean)      |?COLUMN?(boolean)      |?COLUMN?(boolean)      |
---------------------------------------------------------------------
false                  |false                  |true                   |
总数目:1

&<|

操作符 参数类型 返回类型 描述
&<| ( geometry A , geometry B ) boolean 如果A的bounding box覆盖或在B的bounding box的下侧,则返回TRUE

示例

SELECT COL1  &<| COL2, COL1  &<| COL3,COL1  &<| COL4
FROM
( SELECT ST_GeomFromText('LINESTRING(6 0, 6 4)') As COL1,
ST_GeomFromText('LINESTRING(0 0, 3 3)') As COL2,
ST_GeomFromText('LINESTRING(0 1, 0 5)') As COL3,
ST_GeomFromText('LINESTRING(1 2, 4 6)') As COL4
);
?COLUMN?(boolean)      |?COLUMN?(boolean)      |?COLUMN?(boolean)      |
---------------------------------------------------------------------
false                  |true                   |true                   |
总数目:1

&>

操作符 参数类型 返回类型 描述
&> ( geometry A , geometry B ) boolean 如果A的bounding box覆盖或在B的bounding box的右侧,则返回TRUE

示例

SELECT COL1 &> COL2, COL1 &> COL3,COL1 &> COL4
FROM
( SELECT ST_GeomFromText('LINESTRING(1 2, 4 6)') As COL1,
ST_GeomFromText('LINESTRING(0 0, 3 3)') As COL2,
ST_GeomFromText('LINESTRING(0 1, 0 5)') As COL3,
ST_GeomFromText('LINESTRING(6 0, 6 1)') As COL4
);
?COLUMN?(boolean)      |?COLUMN?(boolean)      |?COLUMN?(boolean)      |
---------------------------------------------------------------------
true                   |true                   |false                  |
总数目:1

<<

操作符 参数类型 返回类型 描述
<< ( geometry A , geometry B ) boolean 如果A的bounding box严格地在B的bounding box左侧,则返回TRUE

示例

SELECT col1 << col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeomFromText('LINESTRING(0 0, 3 3)') As col2);
OVERLAP(boolean)      |
----------------------
false                 |
总数目:1


SELECT col1 << col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeomFromText('LINESTRING(5 5, 6 6)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1

<<|

操作符 参数类型 返回类型 描述
<<| ( geometry A , geometry B ) boolean 如果A的bounding box严格地在B的bounding box下侧,则返回TRUE

示例

SELECT col1 <<| col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 1 1)') As col1 , ST_GeomFromText('LINESTRING(3 0, 5 5)') As col2);
OVERLAP(boolean)      |
----------------------
false                 |
总数目:1


SELECT col1 <<| col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 1 1)') As col1 , ST_GeomFromText('LINESTRING(3 3, 5 5)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1

=

操作符 参数类型 返回类型 描述
= ( geometry A , geometry B ) boolean 如果几何图形A的坐标和坐标顺序与几何图形B的坐标和坐标顺序相同,则返回TRUE。
= ( geography A , geography B ) boolean 如果地理图形A的坐标和坐标顺序与地理图形B的坐标和坐标顺序相同,则返回TRUE。

示例

-- 8-1 boolean =( geometry A , geometry B )
SELECT 'LINESTRING(0 0, 0 1, 1 0)'::geometry = 'LINESTRING(1 1, 0 0)'::geometry;
?COLUMN?(boolean)      |
-----------------------
false                  |
总数目:1

SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') =
ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect;
PT_INTERSECT(boolean)      |
---------------------------
false                      |
总数目:1


-- 8-2 boolean =( geography A , geography B )
SELECT ST_GeogFromText('POINT(100 50)') = ST_GeogFromText('POINT(100.1 50.1)') As pt_intersect;
PT_INTERSECT(boolean)      |
---------------------------
false                      |
总数目:1

>>

操作符 参数类型 返回类型 描述
>> ( geometry A , geometry B ) boolean 如果几何对象A的bounding box严格在几何对象B的右边,则返回true

示例

SELECT col1 >> col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeomFromText('LINESTRING(5 5, 6 6)') As col2);
OVERLAP(boolean)      |
----------------------
false                 |
总数目:1


SELECT col1 >> col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(5 5, 6 6)') As col1 , ST_GeomFromText('LINESTRING(0 0, 3 3)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1

@

操作符 参数类型 返回类型 描述
@ ( geometry A , geometry B ) boolean 如果几何对象A的bounding box被几何对象B的bounding box严格包含,则返回true
@ ( geometry A , box2df B ) boolean 如果几何图形的二维边界框包含在二维浮点精度边界框(BOX2DF)中,则返回TRUE。 如果B是(双精度)box2d,它将在内部转换为浮点精度2D边界框(BOX2DF)
@ ( box2df A , geometry B ) boolean 如果二维浮点精度边界框(BOX2DF)包含在几何体的二维边界框中,则返回TRUE。
@ ( geometry A , geometry B ) boolean 如果二维浮点精度边界框(BOX2DF)包含在另一个二维浮点精度边界框中,则返回TRUE。 这意味着,如果A(或B)是(双精度)box2d,它将在内部转换为浮点精度二维边界框(BOX2DF)

示例

-- 10-1 boolean @( geometry A , geometry B ) 
SELECT COL1 @ COL2, COL1 @ COL3,COL1 @ COL4
FROM
( SELECT ST_GeomFromText('LINESTRING(1 1, 3 3)') As COL1,
ST_GeomFromText('LINESTRING(0 0, 4 4)') As COL2,
ST_GeomFromText('LINESTRING(2 2, 4 4)') As COL3,
ST_GeomFromText('LINESTRING(1 1, 3 3)') As COL4
);
?COLUMN?(boolean)      |?COLUMN?(boolean)      |?COLUMN?(boolean)      |
---------------------------------------------------------------------
true                   |false                  |true                   |
总数目:1


-- 10-2 boolean @( geometry A , box2df B )
SELECT COL1 @ COL2
FROM
( SELECT ST_GeomFromText('LINESTRING(1 1, 3 3)') As COL1,
ST_MakeBox2D(ST_MakePoint(0,0),ST_MakePoint(5,5)) As COL2
);
?COLUMN?(boolean)      |
-----------------------
true                   |
总数目:1


-- 10-3 boolean @( box2df A , geometry B ) 
SELECT COL2 @ COL1
FROM
( SELECT ST_GeomFromText('LINESTRING(1 1, 3 3)') As COL1,
ST_MakeBox2D(ST_MakePoint(0,0),ST_MakePoint(5,5)) As COL2
);
?COLUMN?(boolean)      |
-----------------------
false                  |
总数目:1


-- 10-4 boolean @( box2df A , box2df B )
SELECT COL1 @ COL2
FROM
( SELECT ST_MakeBox2D(ST_MakePoint(1,2),ST_MakePoint(3,4)) As COL1,
ST_MakeBox2D(ST_MakePoint(0,0),ST_MakePoint(5,5)) As COL2
);
?COLUMN?(boolean)      |
-----------------------
true                   |
总数目:1

|&>

操作符 参数类型 返回类型 描述
|&> ( geometry A , geometry B ) boolean 如果几何对象A的bounding box覆盖B的bounding box或在B的bounding box上面,则返回true

示例

SELECT COL1  |&> COL2, COL1  |&> COL3,COL1  |&> COL4
FROM
( SELECT ST_GeomFromText('LINESTRING(6 0, 6 4)') As COL1,
ST_GeomFromText('LINESTRING(0 0, 3 3)') As COL2,
ST_GeomFromText('LINESTRING(0 1, 0 5)') As COL3,
ST_GeomFromText('LINESTRING(1 2, 4 6)') As COL4
);
?COLUMN?(boolean)      |?COLUMN?(boolean)      |?COLUMN?(boolean)      |
---------------------------------------------------------------------
true                   |false                  |false                  |
总数目:1

|>>

操作符 参数类型 返回类型 描述
|>> ( geometry A , geometry B ) boolean 如果A的bounding box严格地在B的bounding box上面,则返回TRUE

示例

SELECT col1 |>> col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(3 3, 5 5)') As col1 , ST_GeomFromText('LINESTRING(0 0, 1 1)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1


SELECT col1 |>> col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 1 1)') As col1 , ST_GeomFromText('LINESTRING(3 3, 5 5)') As col2);
OVERLAP(boolean)      |
----------------------
false                 |
总数目:1

~

操作符 参数类型 返回类型 描述
~ ( geometry A , geometry B ) boolean 如果A的bounding box包含B的bounding box,则返回TRUE
~ ( geometry A , box2df B ) boolean 如果几何体的bounding box包含二维浮点精度边界框(GIDX),则返回TRUE。 这意味着,如果B是(双精度)box2d,它将在内部转换为浮点精度2D边界框(BOX2DF)
~ ( box2df A , geometry B ) boolean 如果二维浮点精度边界框(BOX2DF)包含几何体的二维bounding box,则返回TRUE。 这意味着,如果A是(双精度)box2d,它将在内部转换为浮点精度2D边界框(BOX2DF)
~ ( box2df A , box2df B ) boolean 如果二维浮点精度边界框(BOX2DF)包含其他二维浮点精度边界框(BOX2DF),则返回TRUE。

示例

-- 13-1 boolean ~( geometry A , geometry B ) 
SELECT COL1 ~ COL2, COL1 ~ COL3,COL1 ~ COL4
FROM
( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As COL1,
ST_GeomFromText('LINESTRING(0 0, 4 4)') As COL2,
ST_GeomFromText('LINESTRING(1 1, 2 2)') As COL3,
ST_GeomFromText('LINESTRING(0 0, 3 3)') As COL4
);	
?COLUMN?(boolean)      |?COLUMN?(boolean)      |?COLUMN?(boolean)      |
---------------------------------------------------------------------
false                  |true                   |true                   |
总数目:1


-- 13-2 boolean ~( geometry A , box2df B ) 
SELECT ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) ~ ST_MakeBox2D(ST_MakePoint(0,0), ST_MakePoint(2,2)) AS contains;
CONTAINS(boolean)      |
-----------------------
true                   |
总数目:1


-- 13-3 boolean ~( box2df A , geometry B )
SELECT ST_MakeBox2D(ST_MakePoint(0,0), ST_MakePoint(2,2)) ~ ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10)  AS contains;
CONTAINS(boolean)      |
-----------------------
false                  |
总数目:1


-- 13-4 boolean ~( box2df A , box2df B )
SELECT ST_MakeBox2D(ST_MakePoint(0,0), ST_MakePoint(5,5)) ~ ST_MakeBox2D(ST_MakePoint(2,2), ST_MakePoint(3,3)) AS contains;
CONTAINS(boolean)      |
-----------------------
true                   |
总数目:1

~=

操作符 参数类型 返回类型 描述
~= ( geometry A , geometry B ) boolean 如果A的bounding box和B的bounding box相同,则返回TRUE

示例

SELECT col1 ~= col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeomFromText('LINESTRING(0 3, 3 0)') As col2);
OVERLAP(boolean)      |
----------------------
true                  |
总数目:1


SELECT col1 ~= col2 As overlap FROM ( SELECT ST_GeomFromText('LINESTRING(0 0, 3 3)') As col1 , ST_GeomFromText('LINESTRING(0 3, 5 0)') As col2);
OVERLAP(boolean)      |
----------------------
false                 |
总数目:1

<->

操作符 参数类型 返回类型 描述
<-> ( geometry A , geometry B ) double 返回A和B之间的二维距离。
<-> ( geography A , geography B ) double 返回A和B之间的二维距离。

对于point或point类型检查,该运算符会使用浮点精度(相对于基本的几点对象所使用的double 双精度)。对于其他几何类型,返回的是bounding box的中心点之间的双精度输出距离。

在距离排序和使用KNN 功能进行近邻限制输出对象个数时候很有用。

示例

-- 15-1 double precision <->( geometry A , geometry B )
SELECT col1 <-> col2 As distince FROM ( SELECT ST_GeomFromText('POINT(0 0)') As col1 , ST_GeomFromText('POINT(0 1)') As col2);
DISTINCE(double precision)      |
--------------------------------
1                               |
总数目:1


-- 15-2 double precision <->( geography A , geography B ) 
SELECT col1 <-> col2 As distince FROM ( SELECT ST_GeogFromText('POINT(0 0)') As col1 , ST_GeogFromText('POINT(0 1)') As col2);
DISTINCE(double precision)      |
--------------------------------
111195.079734632                |
总数目:1

<<->>

操作符 参数类型 返回类型 描述
<<->> ( geometry A , geometry B ) double 返回A和B边界框质心之间的n-D距离。 用于最近邻近似距离排序。

它不同于使用空间索引的其他运算符,因为空间索引仅在运算符位于ORDER BY子句中时使用。

示例

SELECT 'POINT M (0 0 13)'::geometry <<->> 'LINESTRING M (0 0 5, 0 1 6)'::geometry;
?COLUMN?(double precision)      |
--------------------------------
8                               |
总数目:1

<#>

操作符 参数类型 返回类型 描述
<#> ( geometry A , geometry B ) double 返回两个几何对象的bounding box之间的距离

<#>运算符计算两个单精度的bounding box之间的距离,如果有空间索引,则使用空间索引。对于使用近邻计算后距离排序很有用。

示例

SELECT col1 <#> col2 As distince FROM (
SELECT ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
745787 2948499,745740 2948468,745712 2948438,
745690 2948384,745677 2948319)',2249) As col1, 
ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
745787 2948499,745740 2948468,745712 2948438,
745690 2948384,745677 2948319)',2249) As col2);
DISTINCE(double precision)      |
--------------------------------
0                               |
总数目:1


select 'LINESTRING(0 0,0 10,10 10)'::geometry <#> 'LINESTRING(11 0,19 10)'::geometry;
?COLUMN?(double precision)      |
--------------------------------
1                               |
总数目:1