STV_NN

计算空间对象与参考对象之间的距离,并按照与参考对象的距离,以升序方式返回(对象,距离)对。

g1g2 参数必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。

STV_NN 为分析函数。有关详细信息,请参阅分析函数

行为类型

不可变

语法

STV_NN( g, ref_obj, k ) OVER()

参数

g
空间对象,类型为 GEOMETRY 或 GEOGRAPHY 的值
ref_obj
参考对象,类型为 GEOMETRY 或 GEOGRAPHY
k
返回的行数,类型为 INTEGER

返回

按距离以升序方式返回(对象,距离)对。如果某个参数为 EMPTY 或 NULL,则返回 0 行。

支持的数据类型

示例

以下示例显示了 STV_NN 的用法。

创建表并插入 9 个 GEOGRAPHY 点:

=> CREATE TABLE points (g geography);
CREATE TABLE
=> COPY points (gx filler LONG VARCHAR, g AS ST_GeographyFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> POINT (21.5 18.4)
>> POINT (21.5 19.2)
>> POINT (21.5 20.7)
>> POINT (22.5 16.4)
>> POINT (22.5 17.15)
>> POINT (22.5 18.33)
>> POINT (23.5 13.68)
>> POINT (23.5 15.9)
>> POINT (23.5 18.4)
>> \\.

计算表 points 中的对象与 GEOGRAPHY 点 (23.5, 20) 的距离(以米为单位)。

返回与该点距离最近的 5 个对象:

=> SELECT ST_AsText(nn), dist FROM (SELECT STV_NN(g,
   ST_GeographyFromText('POINT(23.5 20)'),5) OVER() AS (nn,dist) FROM points) AS example;
     ST_AsText      |       dist
--------------------+------------------
 POINT (23.5 18.4)  |  177912.12757541
 POINT (22.5 18.33) | 213339.210738322
 POINT (21.5 20.7)  |  222561.43679943
 POINT (21.5 19.2)  | 227604.371833335
 POINT (21.5 18.4)  | 275239.416790128
(5 rows)