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

Posted

技术标签:

【中文标题】从最小和最大纬度/经度创建多边形(矩形)【英文标题】:Create polygon (rectangle) from min and max lat/long 【发布时间】:2011-12-23 14:52:18 【问题描述】:

给定一个代表西南点的纬度/经度和代表东北点的纬度/经度 当我创建一个多边形 那么它应该可以在 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 个点 - 左下角、左上角、右上角、右下角和再次回到左下角。

【问题讨论】:

不输入这个作为答案,因为我没有在 SQLServer 中使用地理的经验,但错误似乎是不言自明的:您包含了来自多个半球的坐标,SQLServer 地理可以应付不过来。如果您只打算处理英国地理,一个简单的答案是在所有坐标上添加 10 度经度。 【参考方案1】:

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

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

【讨论】:

首先,很抱歉这么长时间离线 - 假期。其次,非常感谢 TetonSig,你已经成功了。假设顺时针方向是我的错误 - 我应该比假设...

以上是关于从最小和最大纬度/经度创建多边形(矩形)的主要内容,如果未能解决你的问题,请参考以下文章

使用从笛卡尔空间和世界文件生成的纬度和经度计算多边形面积

使用从笛卡尔空间和世界文件生成的纬度和经度计算多边形区域

在 Python 中从纬度/经度多边形计算面积

如何按纬度和经度(Postgis)从表中选择多边形

将纬度替换为经度

在一个国家/地区生成随机纬度/经度多边形?