Ошибка в географии 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

Помните об этом, так как тип данных географии сохраняется как двоичный, поэтому он не предназначен для чтения человеком, поэтому, если вы не выполните вышеуказанный запрос, вы не поймете источник проблемы.

Спасибо! Гильермо.

Другие вопросы по тегам