2011-12-23 19 views
2

南西の点を表す緯度/経度と北東の点を表す緯度/経度を指定します。 ポリゴンを作成するとき SQL 2008で動作するはずです。 ..最小緯度/最大緯度/経度からポリゴン(矩形)を作成する

ここに私のSQLです:

DECLARE @minX varchar(10) = N'49.871159' 
    DECLARE @maxX varchar(10) = N'55.811741' 
    DECLARE @minY varchar(10) = N'-6.379880' 
    DECLARE @maxY varchar(10) = N'1.768960' 

    DECLARE @boundingRect varchar(150) 
    SET @boundingRect = 'POLYGON((' + @minX + ' ' + @minY + ', ' + @minX + ' ' + @maxY + ', ' + @maxX + ' ' + @maxY + ', ' + @maxX + ' ' + @minY + ', ' + @minX + ' ' + @minY + '))' 
    SELECT GEOGRAPHY::Parse(@boundingRect) 

しかし、私に次のエラーを与えている:「それは、単一の半球を超えたため、指定された入力が有効な地理インスタンスを表すものではありません」 は

誰でも私が間違っていることを教えてもらえますか?私の例の境界の長方形は、イギリスを概ねカバーしていなければなりません。私は、左下、左上、右上、右下、そして左下に5点を指定する必要があるという仮定です。

+1

SQLServerで地理情報を使用している経験はありませんが、エラーは自明のようです:複数の座標を含むSQLServerの地理では対処できない半球です。英国の地理だけを扱う場合、単純な答えはすべての座標に10度の経度を加えることです。 –

答えて

5

まず、これはあなたの四角形の中で首都経線を横切って、東半球と西半球の両方にあることには関係ありません。それはちょうど偶然のことです。

SQL Geographyは左手のルールを使用しているため、オブザーバーが指定された順序でリングを歩くように、図形の内側は常に左になります。外部リングの場合、これは、リングが反時計回りの順序で定義されていることを意味します。あなたの元の四角形は、この規則によって、英国外の世界全体ですが、もちろん半球以上のものです。 :)

POLYGONステートメントであなたのポイントの順番を変更するだけです(また、私はあなたのXとYの値を切り替えましたが、ステートメントの有効性には影響しませんが、

DECLARE @minY varchar(10) = N'49.871159' 
DECLARE @maxY varchar(10) = N'55.811741' 
DECLARE @minX varchar(10) = N'-6.379880' 
DECLARE @maxX varchar(10) = N'1.768960' 

DECLARE @boundingRect varchar(150) 
SET @boundingRect = 'POLYGON((' + @minX + ' ' + @minY + ', ' + 
                @maxX + ' ' + @minY + ', ' + 
                @maxX + ' ' + @maxY + ', ' + 
                @minX + ' ' + @maxY + ', ' + 
                @minX + ' ' + @minY + '))' 
+0

まずは、休日のためにオフラインになることをお詫び申し上げます。第二に、多くの感謝TetonSig、あなたはそれを釘付けにしました。時計回りの方向が私の間違いだったと仮定すると、私は推測するよりもよく知っているはずです... – Monty

関連する問題