STV_NN
计算空间对象与参考对象之间的距离,并按照与参考对象的距离,以升序方式返回(对象,距离)对。
g1
和 g2
参数必须都是 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)