Sql server 2008 查询以将特定地理距离内的行返回给给定行(使用sql server 2008)
我有一个包含多条记录的表,每条记录都包含一个名为coords的字段。此字段已使用地理点更新Sql server 2008 查询以将特定地理距离内的行返回给给定行(使用sql server 2008),sql-server-2008,distance,geography,Sql Server 2008,Distance,Geography,我有一个包含多条记录的表,每条记录都包含一个名为coords的字段。此字段已使用地理点更新 UPDATE testing SET [coords] = geography::Point(52.029736, -113.973541, 4326) WHERE id=2" 我需要做的是。。。当用户登录时,他们有一条属于自己的记录,例如,本例中的记录id为1。他们需要访问一个页面,该页面显示在一定距离内的所有其他记录的coords字段 这是我想出的最好的办法 首先,我能找到与这句话相协调的开头 SE
UPDATE testing SET [coords] = geography::Point(52.029736, -113.973541, 4326)
WHERE id=2"
我需要做的是。。。当用户登录时,他们有一条属于自己的记录,例如,本例中的记录id为1。他们需要访问一个页面,该页面显示在一定距离内的所有其他记录的coords字段
这是我想出的最好的办法
首先,我能找到与这句话相协调的开头
SELECT coords FROM testing WHERE id=1
这给了我原始坐标coords.Lat和coords.Long
然后我想找到附近的,所以我有这个
SELECT * FROM testing WHERE coords.STDistance() <=(20 * 1609.344)
我不知道如何将原始坐标放入第二个语句中以使其工作
我是否需要一个存储过程,或者我是否可以将coords.Lat/coords.Long放在STDistance的括号内?还是说我对这件事的期望太低了
仅供参考,我对sql server的经验很少,我从未做过任何高级工作,只做过简单的select*from表格,其中record=1和基本插入和更新 我自己用两个选择和两个变量解决了这个问题。。。有什么更好的建议吗
sql1 = "SELECT coords.Lat, coords.Long FROM testing WHERE id=1"
lat2 = rs(0)
lon2 = rs(1)
sql2 = "SELECT * FROM testing WHERE id <> 1 AND coords.STDistance(geography::Point(" & lat2 & ", " & lon2 & ", 4326)) <=(20 * 1609.344)"
'20 miles or less
这样行吗
SELECT
[near].*
FROM
testing [near]
INNER JOIN
testing [user] ON
[user].coords.STDistance( [near].coords ) < (20 * 1609.344)
WHERE
[user].id = 1
这个怎么样
DECLARE @g geography;
SELECT @g = coords FROM testing WHERE id=1;
SELECT * FROM testing WHERE coords.STDistance(@g) <=(20 * 1609.344)
@德鲁:欢迎来到SO,请抽出几分钟阅读简单的降价文档。当您在左边空白处编辑或创建问题时,您可以阅读这些基础知识。