POINT与最近的LINESTING之间的距离

时间:2016-10-19 08:20:32

标签: sql-server indexing gis distance

有两个包含空间数据的MSSQL表:
- AddressPoints - 包含地址的地理位置(POINT结构)
- 管道 - 包含管道的地理位置(LINESTRING结构)

AddressPoints表应包含距离最近的管道段的距离。我目前正在尝试编写有效的查询。我最终得到了以下查询:

select a.ogr_fid, min(a.geom.STDistance(p.geom))
from AddressPoints a, Pipeline p
group by a.ogr_fid

但是,AddressPoints和Pipeline表包含大量影响执行速度的数据。 两个表都包含空间索引,但我不确定此查询是否使用它们。

1 个答案:

答案 0 :(得分:0)

我认为我找到了可以接受的解决方案:

select a.ogr_fid, min(a.geom.STDistance(p.geom))
from AddressPoint a
inner join Pipeline p on a.geom.STDistance(p.geom) < 200
group by a.ogr_fid
order by a.ogr_fid

此查询与来自问题的查询执行相同的工作。但它会在1秒内执行。第一次查询的执行时间是47秒。