从min和max lat / long创建多边形(矩形)

时间:2011-12-23 14:52:18

标签: sql sql-server polygon spatial geography

给定表示西南点的纬度/经度和表示东北点的纬度/经度 当我创建一个多边形 然后它应该在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 个答案:

答案 0 :(得分:5)

首先,这与您在矩形中穿过Prime Meridian并位于东半球和西半球时无关。那只是巧合。

SQL Geography使用左手规则,因此当观察者按照提供的顺序走你的戒指时,形状的内部总是在他们的左边。对于外环,这意味着环以逆时针顺序定义。根据这个规则,你的原始矩形是英国以外的整个世界,当然这不仅仅是一个半球。 :)

所以只需改变POLYGON语句中你的点的顺序,(同样,我切换你的X和Y值,它不会影响语句的有效性,但它会让地图看起来像一个长/ lat for the UK)

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 + '))'