【发布时间】:2012-11-20 12:51:01
【问题描述】:
有人可以确认这是一个错误还是我做错了什么?
我有这个存储过程 (SQL Server 2008)
ALTER PROCEDURE [dbo].[Distance]
@origin varchar(50),@destination varchar(50),@unit varchar(5)
as
declare @or geography, @dest geography
SET @or = (select Location from [dbo].Promotion where Name=@origin )
SET @dest = (select Location from [dbo].Promotion where Name=@destination )
IF @unit='miles'
SELECT @or.STDistance(@dest)/1609.344
ELSE
--Else show the distance in km
SELECT @or.STDistance(@dest)/1000
位置是数据库中的地理数据类型
我在数据库中有这个地址
Latitude Longitude
1 -34.612654 -58.463586
2 -34.592802 -58.454317
3 -34.597889 -58.617949
然后运行这个:
execute dbo.Distance 'Number 1','Number 2','km'
returns 2653.49845233371 kms
execute dbo.Distance 'Number 1','Number 3','km'
returns 17.2155414117145 kms
如果您在第一种情况下使用 Google 地图,这些坐标之间的距离约为 4 公里,而第二次比较似乎还可以。
为什么第一个错了?它是 SQL Server 中的错误吗?
提前致谢。吉列尔莫。
【问题讨论】:
-
使用大型应用程序的第一条规则是被数百万人使用 - 错误在您的代码中。第二条规则 - 错误在您的代码中。第三条规则......你明白了;)
-
我假设 Location 是一个计算列,基于纬度和经度列?如果是这样,你能给出它的定义吗? (如果您可以创建一个简单的表、一个
INSERT用您的示例数据填充它,以及一个简单的查询来产生结果,这样其他人就可以重现这个,那就容易多了)
标签: sql-server sql-server-2008 sqlgeography geographic-distance