有人可以确认这是错误还是我做错了什么吗?
我有这个存储过程 (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中的错误吗?
提前谢谢。吉列尔莫。
好的,我已经找到了问题所在,是的,当然这是我的错:)
我在表中插入了这样的记录
INSERT INTO [dbo].[TestLocation]([Name],[Location],[Latitude],[Longitude]) VALUES('Location1', geography::STGeomFromText('POINT(-34.612654 -58.463586)', 4326),-34.612654,-58.463586);
然后我意识到,起初,纬度和经度是颠倒的,所以我当时按顺序进行了更改,但只是针对最后两个字段,忘记更改"geography::STGeomFromText"中的顺序。运行后
SELECT
Ubicacion.Lat,
Ubicacion.Long
FROM
Promotion
我意识到错误是什么。咚!
请注意这一点,因为
SELECT
Ubicacion.Lat,
Ubicacion.Long
FROM
Promotion
请注意这一点,因为地理数据类型被保存为二进制,因此它不是人类可读的,因此,除非您运行上述查询,否则您将不会意识到问题的根源。
谢谢!吉列尔莫。