我有一张表,里面有几百万条与世界各地有关的记录。
我希望能够根据与当前位置的距离对表格进行搜索,因此我创建了一个函数,该函数从数据库记录中获取经度和经度以及纬度和经度并返回距离。然后,我可以使用此图执行距离搜索。
我认为,为了使查询正常工作,它必须转换数据库中的每个lat,long记录,以检查它是否属于我的距离搜索。
我正在使用SQL Server 2005
我的问题是,有没有更好的方法来做到这一点,以便不必转换每条记录?
答案 0 :(得分:0)
当我需要这样做时,我会限制我的数据池以使用"框来检查"围绕我当前的数据点。例如,在psuedo-SQL中:
SELECT DataID, lat, long, distance=fn_getdistance(@ThisLat, lat, @ThisLong, long)
FROM MyTable
WHERE lat BETWEEN (@ThisLat - @LatDistance) AND (@ThisLat + @LatDistance) AND
long BETWEEN (@ThisLong - @LongDistance) AND (@ThisLong + @LongDistance)
变量:
@ThisLat,@ TheThisLong:latitude&您当前所在位置的经度
@LatDistance,@ LongDistance:"框的尺寸"围绕您当前的位置(根据您的应用和需求使用不同的数字)
(显然,你需要一个lat& long字段的索引。)