如何在SQL CE中有效搜索附近的道路交叉点地理节点?

时间:2012-02-06 16:32:08

标签: indexing sql-server-ce storage spatial

我有以下查询:

var nodes = DB.Nodes
              .Where(x =>    x.Lon > 486400
                          && x.Lon < 486600
                          && x.Lat > 5025100
                          && x.Lat < 5025300)
              .Join(DB.RoadNodes, x => x.Id, y => y.NodeId, (x, y) => x);

搜索某个位置附近的DB.Nodes中的所有节点,然后通过DB.RoadNodes加入来检查该节点是否为道路交叉点;然而,这需要几秒钟,这很慢。

看起来我必须在这做两件事:

  1. 优化自Where秒的~5部分,我听说过有关Spatial的内容?

  2. 优化自己需要剩余Join秒的~15部分,我需要一个索引,对吗?

  3. 所以我有两个问题:

    1. 如何在SQL Server Compact Edition中进行空间存储和搜索?

      如果不支持此功能,我该如何解决此问题?

    2. 我需要为哪个列编制索引才能使此查询充分发挥作用?

      似乎索引RoadNode的NodeId并没有真正改善查询。

    3. 请注意,由于我打算在Windows Phone 7上运行它,因此我受限于SQL CE。

      此外,我需要从中获取Unique()的节点,这会使查询稍长一些,但我认为如果查询本身运行速度快,则不应该成为问题。只是他加入会引入双重结果,还是应该以其他方式进行加入?

0 个答案:

没有答案