从最小和最大纬度/经度创建多边形(矩形)

3

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

6

首先,这与你在矩形中穿越本初子午线并位于东半球和西半球无关。那只是一个巧合。

SQL地理使用左手规则,因此当观察者按提供的顺序走过您的环时,形状的内部始终在其左侧。对于外部环来说,这意味着环以逆时针顺序定义。按照该规则,您原始的矩形代表英国之外的整个世界,当然不止是一个半球。:)

所以只需在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 + '))'

首先,很抱歉长时间离线 - 因为度假。其次,非常感谢TetonSig,你做得很好。假设顺时针方向是我的错误 - 我应该知道不要假设... - Monty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接