我有一个应用程序,用户将他们的通勤路线存储在我们的数据库中。
路线存储为折线(线串)。数据库还存储事故、交通事故之类的东西。我们需要定期查询一条路线,以查看该路线 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)上述工作但还不够好,这让我相信该事件正在与路线上的每个点进行比较,这似乎真的效率低下。
我们正在考虑将长纬度作为几何与地理的对比,因此我们可以访问 Bounding Box 并获得 STContains。
还考虑在检查事件之前在 PolyLine 上调用 reduce。