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

Mon*_*nty 3 sql sql-server geography polygon spatial

给定一个表示西南点的lat/lon和表示东北点的lat/lon当我创建一个多边形然后它应该在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)
Run Code Online (Sandbox Code Playgroud)

但它给了我以下错误:"指定的输入不代表有效的地理实例,因为它超过了单个半球."

谁能告诉我我做错了什么?我的例子中的边界矩形应该粗略地覆盖英国,我的假设是我需要指定5个点 - 左下角,左上角,右上角,右下角,再次回到左下角.

Tet*_*Sig 5

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

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

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

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 + '))'
Run Code Online (Sandbox Code Playgroud)