0

これがバグなのか、それとも私が何か間違ったことをしているのか、誰か確認してもらえますか?

私はこのストアドプロシージャを持っています(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 km で、2 番目の比較は問題ないようです。

なぜ最初のものはそんなに間違っているのですか?SQL Server のバグですか?

前もって感謝します。ギレルモ。

4

1 に答える 1

0

わかりました、私は問題が何であるかを発見しました、そしてもちろん、それは私のせいでした:)

このようにテーブルにレコードを挿入しました

INSERT INTO [dbo].[TestLocation]([Name],[Location],[Latitude],[Longitude]) VALUES('Location1', geography::STGeomFromText('POINT(-34.612654 -58.463586)', 4326),-34.612654,-58.463586);

次に、最初は緯度と経度が逆になっていることに気付きました。そのため、順番に変更しましたが、最後の 2 つのフィールドだけで、「geography::STGeomFromText」で順番を変更するのを忘れていました。走った後

SELECT
  Ubicacion.Lat,
  Ubicacion.Long
FROM
  Promotion

エラーの内容がわかりました。どっ!

としてご了承ください。

SELECT
  Ubicacion.Lat,
  Ubicacion.Long
FROM
  Promotion

geography データ型はバイナリとして保存されるため、人間が判読できないため、上記のクエリを実行しない限り、問題の原因を認識できないことに注意してください。

ありがとう!ギレルモ。

于 2012-11-20T13:34:52.503 に答える