【发布时间】:2013-02-08 00:31:43
【问题描述】:
我有一个应用程序,用户在我们的数据库中存储他们的通勤路线。
路线存储为折线(线串)。 数据库还存储事故、交通事故之类的东西。 我们需要定期查询一条路线,看看在路线的 1k 半径范围内是否有任何事件发生。
查询的连接结构如下:
Route r left outer join Incident i on
r.PolyLine.STDistance(i.Location) < 1000
现在我也尝试了这样的事情:
Route r left outer join Incident i on
r.PolyLine.STBuffer(1000).STIntersects(i.Location) = 1
到目前为止,我们为提高速度所做的尝试有:
- 减少沿线串的点数
- 添加空间索引(虽然我不知道如何调整)
1) 上述方法有效,但还不够好,这让我相信该事件正在与路线上的每个点进行比较,这似乎真的效率低下。
我们正在考虑将长纬度作为几何与地理的对比,因此我们可以访问边界框并获得 STContains。
还考虑在检查事件之前在折线上调用 reduce。
【问题讨论】:
-
您是否可以在插入路线时考虑为特定路线存储多点,或者是在您存储路线并仅在之后请求事件的地方?
标签: sql-server-2008 spatial-index spatial-query sqlgeography