4

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

在我的应用程序中,用户可以输入邮政编码,然后我们返回附近位置的列表。这是我的方法。a) 使用邮政编码数据库,我在 lat,lon 中搜索邮政编码(这是中心点)。b)我运行这样的搜索

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

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

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

有更好的方法吗?

4

3 回答 3

5

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

于 2010-02-17T19:33:58.717 回答
1

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

于 2010-02-17T19:35:32.573 回答
0

哪个版本的 SQL 服务器?如果是 2008 年,请查看空间类型。

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

编辑:还用 where 限制查询可能会有所帮助,因为您可能不想在任何特定方向上走得太远。

于 2010-02-17T19:36:59.107 回答