SQL Server距离搜索

时间:2010-02-17 19:29:58

标签: sql-server distance zipcode

我有一个带有Locations表的Microsoft SQL Server数据库。每个位置都有其地址和纬度和经度坐标。

在我的应用程序中,用户可以输入一个邮政编码,我们会返回一个靠近位置的列表。 这是我的方法。 a)使用zipcode DB我在lat,lon搜索邮政编码(这是中心点)。 b)我运行这样的搜索

SELECT Position_ID, distance(pos_lon,pos_lat,zip_lon,zip_lat) dist 
FROM Positions
ORDER BY dist

“距离”是计算两点之间距离的函数。

问题在于,随着我的位置数据库增加,运行这些搜索的时间开始增长。

有更好的方法吗?

3 个答案:

答案 0 :(得分:5)

如果您使用的是SQL Server 2008,则可能需要查看geography列类型,STDistance函数和空间索引。

答案 1 :(得分:1)

我会计算指定距离处邮政编码周围的方框,以获得四个角的纬度/经度值。然后对您的位置值进行简单比较,以选择那些位于正方形内的值。这样,您不必为每次搜索计算从邮政编码到数据库中每个点的距离。

答案 2 :(得分:0)

哪个版本的SQL服务器?如果2008年看一下空间类型。

http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

编辑:同样限制该查询的位置可能会有所帮助,因为您可能不希望在任何特定方向上走得太远。