SQL数据库地理数据中的边界框

时间:2011-09-13 12:25:18

标签: asp.net sql sql-server

我有一个SQL表: SuburbId int, SubrubName varchar, StateName varchar, 邮政编码varchar, 纬度十进制, 经度十进制

在MY C#中,我创建了一个创建边界框的代码,以便我可以按距离搜索。 我获取子灌木的存储过程是:

    [dbo].[Lookup] (
@MinLat     decimal(18,15),
@MaxLat     decimal(18,15),
@MinLon     decimal(18,15),
@MaxLon     decimal(18,15)
    )
   AS
  BEGIN

SELECT SuburbId, suburbName, StateName, Latitude, Longitude
FROM SuburbLookup
WHERE (Latitude >= @MinLat AND Latitude <= @MaxLat AND Longitude >= @MinLon AND Longitude <=      @MaxLon)
    END

我的问题是..这是一个聚集索引扫描...有没有更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

对于标准B树索引,这种类型的查询往往表现不佳。为了获得更好的性能,您可以使用geography列类型并添加spatial index

WHERE geography.STDistance(geography2) < number can use a spatial index等查询。

答案 1 :(得分:0)

应该有所帮助的几个链接。当然,根据您项目的范围,您可能已经拥有最佳解决方案。

如果您愿意,可以在sql server中为您的位置创建自定义索引。

Custom Indexing

此外,如果您愿意,您可以查看Quadtrees和Quadtiles。有一种技术可以通过交错地址计算密钥,这些地址是lat和lon对的组合,可以表示为整数,然后截断到基本级别,以查看它们与彼此之间的关系。

see more here