我有一个带有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
“距离”是计算两点之间距离的函数。
问题在于,随着我的位置数据库增加,运行这些搜索的时间开始增长。
有更好的方法吗?
答案 0 :(得分:5)
如果您使用的是SQL Server 2008,则可能需要查看geography
列类型,STDistance
函数和空间索引。
答案 1 :(得分:1)
我会计算指定距离处邮政编码周围的方框,以获得四个角的纬度/经度值。然后对您的位置值进行简单比较,以选择那些位于正方形内的值。这样,您不必为每次搜索计算从邮政编码到数据库中每个点的距离。
答案 2 :(得分:0)
哪个版本的SQL服务器?如果2008年看一下空间类型。
http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx
编辑:同样限制该查询的位置可能会有所帮助,因为您可能不希望在任何特定方向上走得太远。