一般GIS中多边形顶点的顺序:顺时针或逆时针


23

两天前,我问了一个关于ESRI shapefile中多边形顶点的内部存储顺序的问题。回答了该问题(将多边形按顺时针还是逆时针存储在shapefile中?),并且在旧帖子中也回答了该问题(创建多边形(是否顺时针旋转)

但是现在我的问题更笼统了,我不知道它是否有唯一的答案。顺时针顺序仅适用于ESRI shapefile还是通用GIS格式?GIS软件的内部表示又如何呢?例如,如果我使用QGIS,并且读取了一个包含多边形的* .shp,我认为外边界​​的内部表示形式是与原始shapefile中一样的顺时针方向,但是QGIS支持的所有文件格式又如何呢?对于ArcGIS?并且如果存在一种文件格式,该文件格式具有以逆时针方向存储的多边形,则如果这些文件加载​​到QGIS,ArcGIS等中,则内部会改变方向,因此,例如,如果我使用PyQGIS读取数据,则多边形是顺时针的下令?

我的目的是为QGIS编写插件,但数据源可以是ESRI shapefile或其他格式。由于需要使用多边形的方位角检查多边形的连续边之间的角度,因此需要知道顺序是否为顺时针。一种解决方案是计算每个多边形的面积,如果我没记错的话,如果它为正,则顺序为顺时针,如果为负,则顺序为逆时针。

区域计算不是一项繁重的任务,因此不会使我的插件变慢。但是在QGIS的特殊情况下,有人知道它是否按顺时针或逆时针方向存储多边形,而不管原始源中的顺序如何?到目前为止,我正在使用ESRI shapefile,并且layer.getFeatures()。geometry()。asPolygon()中的坐标按顺时针方向存储为外部边界,按逆时针方向存储为孔,即与原始的* .shp相同。


这取决于数据的存储方式。甲骨文是反顺​​时针的gis.stackexchange.com/questions/20817/…–
Mapperz

@Mapperz,您的链接指向docs.oracle.com/cd/B10501_01/appdev.920/a96630/…,其中明确指出Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.)这表示Oracle是逆时针的。
user30184 '16

Answers:


27

在OGC规范(可在[此处]下载(http://www.opengeospatial.org/standards/sfs)中)中指出:

“此标准未定义多边形旋转;实际的多边形旋转可以沿顺时针或逆时针方向进行。”

Oracle文档中,明确指出外环边界是逆时针方向,而内环边界是顺时针方向。同样,在SQL Server Spatial中,地理数据类型的外部环遵循逆时针规则,内部环遵循顺时针规则- 有关更多详细信息,请参见此MicroSoft博客。Postgis似乎对几何图形都允许这样做,并具有强制多边形的几何图形遵循右手或左手规则的功能,请参见ST_ForceRHRForceLHR。JTS / Geos似乎遵循了正确的规则,即外圈的顺时针方向,因此,实际上还不清楚。

通常,对于地理数据类型强制方向是有意义的,否则将无法分辨出一个小多边形仅仅是那个多边形还是整个世界多边形的内环。对于平面上的geometry数据类型,不会出现这种混淆,因为外圈和内圈是依次排列的,并且如果只有一个圈,它将被封闭(无论方向如何),与地球仪不同,环绕。


来自@mxfh的评论:OGC的OpenGIS简单功能访问(ISO 19125-1)从1.2.1版[OGC 06-103r4] 6.1.11.1/第26页起指定了外圈的逆时针方向,来自opengeospatial.org / standards / sfa。2006年最新在版本1.1.0和1.2.0之间引入了更改。您引用的脚注自2005年以来未更新


约翰很好回答。我不确定使用节点排序来标识内部环与外部环是否是矢量数据格式可以实现此目标的唯一方法。尽管需要某种机制,但我会同意你的看法。以GeoJSON为例,第一个节点列表被指定为外部,而所有后续列表都是内部孔。这可以(如果不是更多的话)有效地工作。
WhiteboxDev 2014年

是的,对于几何图形,WKT也是如此。对于地理位置而言,显然更重要。
约翰·鲍威尔

这是非常正确的;)
WhiteboxDev 2014年

@WhiteboxDev嵌套环交替缠绕的原因是,通过鞋带方法计算面积会根据环的方向计算带符号的面积。通常,一阶嵌套环被视为孔,并具有外环的交替方向。它们的贡献面积值为负。其中外圈为正;偶数有序的嵌套环也是如此。因此,所有环特征的总面积是所有有符号面积的总和。
mxfh 2015年

1
@mxfh:严格来说,“嵌套环的缠绕顺序”对于OCG(和许多其他)多边形来说是没有意义的。在另一个“孔”中表示嵌套多边形的方法是使用MultiPolygon ...,在这种情况下,每个组成的Polygon都遵循原始的缠绕规则。好吧,好吧:这无异于交替缠绕“嵌套的LinearRings” ...但只是指出,允许这样做的不是Polygon本身,而是MultiPolygon的定义。
Dan H

23

需要环形(边界)方向,以防止覆盖有限表面的地理坐标系出现歧义,因为边界将沿边界方向定义两个区域,即边界的左一和右一。确定这两个区域中哪个更大是可能的,但仍然存在歧义。

以下是按其规格对各种格式的多边形的外圈方向的概述:

Shapefile和简单特征的缠绕顺序说明

  • 简单功能访问(ISO 19125-1)也用于WKT / GML / KML和各种SQL实现中:

    • 外圈:逆时针
    • 内部环(孔):顺时针方向。

    多边形是由1个外部边界和0个或多个内部边界定义的平面。每个内部边界在“多边形”中定义一个孔。[...]

    外部边界LinearRing定义表面的“顶部”,即表面的一面,外部边界似乎从该表面沿逆时针方向横越边界。该内部的LinearRing会产生相反的方向,并显示为顺时针方向从“顶” ......查看时简单要素访问规范

    在大多数实现中,POLYGON中环的顺序很重要(与shapefile相反)

    对于带孔的多边形,其第一个子元素是其外环,其第二个子元素是其第一内环,其第三个子元素是其第二内环,依此类推。Oracle空间

    更深的嵌套,也就是一个岛上的一个湖中的小岛,必须表示为MultiPolygons(请参见图2.10(4)),因为只能有一个外部边界,并且嵌套要比内部环深没有定义。

  • ESRI Shapefiles / SHP

    • 外圈:顺时针
    • 内圈:逆时针

    多边形由一个或多个环组成。环是四个或更多个点的连接序列,形成一个封闭的,非自相交的环路。多边形可以包含多个外环。圆环的顶点顺序或方向指示圆环的哪一侧是多边形的内部。以顶点顺序沿着环行的观察者右边的邻域是多边形内部的邻域。定义多边形中的环的顶点沿逆时针方向。因此,单个环形多边形的顶点始终按顺时针顺序排列。[...]

    点阵列中环的顺序并不重要。ESRI白皮书

    由于允许使用多个外部边界,因此使用此多边形定义可以在一个岛上的一个湖中岛上进行配置。在拓扑上,湖中的岛屿将是另一个顺时针外环。有效地使ESRI Shapefile多边形成为简单要素多多边形

    如果您未正确排序点,则将有重叠的多边形。s

  • GeoJSON(RFC7946)

    注意:原始的GeoJSON 2008规范没有强制执行的缠绕顺序

    • 绕线顺序:外圈是逆时针方向(右手法则)
    • 内圈是顺时针方向
    • 环的顺序很重要:

      对于具有多个环的多边形,第一个必须是外环,而其他多边形必须是内环或孔。GeoJSON规范

  • TopoJSON:默认情况下强制顺时针旋转外环

Shapefile和简单特征的缠绕顺序说明

游览:

关于嵌套环的缠绕顺序为什么交替的数学推论是,用鞋带公式计算面积(可视化解释)会根据环的方向计算带符号的面积。

通常,嵌套环(内部边界)被视为孔,并具有外环的备用方向。它们贡献的签名区域值为负。其中外圈为正。所有环形特征的总面积是所有有符号面积的总和。

如ESRI所实现,请参阅此知识库条目:ArcGIS使用哪种算法确定多边形的面积?

建议的助记符

字母形式的开口端解释为箭头:

  • S hapefile:S→ᔑ→↻
  • 简单˚F Ë ATUR Ê S:È→ᘓ(绕组向外CC明智)→↺
  • GeoJSON:G(G的箭头是箭头)→↺

4

我不知道任何人都可以为您的问题提供明确的答案,因为每种矢量文件格式都是不同的,并且每种GIS在内部处理这些数据方面也将有所不同。但是我可以肯定地说,顺时针排序不仅适用于ESRI Shapefile。还有其他格式对外圈使用类似的顺时针排序,对内孔多边形使用类似的逆时针排序。例如,JTS矢量多边形结构使用类似的格式。实际上,这里说过,从历史上看,这类似于ESRI方法。我也可以肯定地说,不是,并非所有格式都具有此要求。例如,GeoJSON格式规范不需要对多边形格式的顶点排序提出任何要求。该KML规范实际上说明:

for多边形必须按逆时针顺序指定。多边形遵循“右手规则”,该规则指出,如果将右手的手指放在指定坐标的方向上,则拇指指向该多边形的几何法线的大致方向。

因此,存在所有选项,并在那里执行。这是一个狂野的世界!


1
请注意,KML的“右手法则”通常称为“左手法则”(当您张开双臂行走边界时,左手将进入图形内)。Esri有多种方法,因为shapefile是唯一使用右手规则的格式(企业级地理数据库在内部使用左手规则,但是“ C” API允许您以任意顺序请求)。GML仅要求内圈与外圈的顺序相反,并且第一个圈在外圈。
文斯2014年

@Vince我不知道。那不是疯子吗?谢谢你让我知道。我认为我最喜欢GML的方法。只要顺序相反,顺序无关紧要。这很有意义。
WhiteboxDev 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.