Ошибка в географии SQL Server?
Может кто-нибудь подтвердить, если это ошибка, или я делаю что-то не так, пожалуйста?
У меня есть эта хранимая процедура (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?
Заранее спасибо. Гильермо.
1 ответ
Хорошо, я нашел, в чем проблема, и да, конечно, это была моя вина:)
Я вставил записи в таблицу, как это
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
Я понял, в чем была ошибка. Doh!
Знать об этом как
SELECT
Ubicacion.Lat,
Ubicacion.Long
FROM
Promotion
Помните об этом, так как тип данных географии сохраняется как двоичный, поэтому он не предназначен для чтения человеком, поэтому, если вы не выполните вышеуказанный запрос, вы не поймете источник проблемы.
Спасибо! Гильермо.