Orden de vértices poligonales en general SIG: en sentido horario o antihorario

23

Hace dos días, hice una pregunta sobre el orden de almacenamiento interno para los vértices de un polígono en los archivos de forma ESRI. Esa pregunta fue respondida ( ¿Los polígonos se almacenan en sentido horario o antihorario en un archivo de forma? ) Y también se respondió en una publicación anterior ( Creación de polígonos (rotación en sentido horario o no) )

Pero ahora mi pregunta es más general, y no sé si tiene una respuesta única. ¿Es el orden en el sentido de las agujas del reloj solo para los archivos de forma ESRI o para los formatos GIS generales? ¿Y qué hay de la representación interna de un software SIG? Por ejemplo, si uso QGIS y leo un * .shp que contiene polígonos, supongo que la representación interna del límite exterior es en el sentido de las agujas del reloj como en el archivo de forma original, pero ¿qué pasa con todos los formatos de archivo compatibles con QGIS? ¿Y para ArcGIS? Y en el caso de que exista un formato de archivo con polígonos almacenados en sentido antihorario, si estos archivos se cargan en QGIS, ArcGIS, etc., la orientación cambia internamente, por lo que si leo los datos usando PyQGIS, por ejemplo, los polígonos son en sentido horario ¿ordenado?

Mi propósito es escribir un complemento para QGIS, pero la fuente de datos puede ser archivos de forma ESRI u otros formatos. Como necesito verificar los ángulos entre lados consecutivos de polígonos usando sus acimutes, necesito saber si el orden es en el sentido de las agujas del reloj. Una solución es calcular el área de cada polígono y, si no recuerdo mal, si es positivo, el orden es en sentido horario y si es negativo, el orden es en sentido antihorario.

El cálculo del área no es una tarea intensiva, por lo que no ralentizará mucho mi complemento. Pero en el caso especial de QGIS, ¿alguien sabe si almacena los polígonos en sentido horario o antihorario, independientemente del orden en la fuente original? En este momento estoy trabajando con archivos de forma ESRI y las coordenadas en layer.getFeatures (). Geometry (). AsPolygon () se almacenan en sentido horario para el borde exterior y en sentido antihorario para los agujeros, es decir, como en el * .shp original.

jgpallero
fuente
Depende de cómo se almacenan los datos. Oracle es Anti-Clockwise gis.stackexchange.com/questions/20817/…
Mapperz
@Mapperz, su enlace lleva a docs.oracle.com/cd/B10501_01/appdev.920/a96630/… que establece claramente lo Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.)que significa que Oracle está en sentido antihorario.
user30184

Respuestas:

27

En la especificación OGC, que se puede descargar [aquí], ( http://www.opengeospatial.org/standards/sfs ) dicen:

"La rotación de polígonos no está definida por este estándar; la rotación real de polígonos puede ser en sentido horario o antihorario".

En los documentos de Oracle , se establece claramente que los límites del anillo exterior están orientados en sentido antihorario, y los límites interiores del anillo, en sentido horario. Del mismo modo, en SQL Server Spatial, el tipo de datos de geografía sigue una regla en sentido antihorario para el anillo exterior y en sentido horario para los anillos interiores; consulte este blog de MicroSoft para obtener más detalles. Postgis parece permitirlo de cualquier manera, para geometrías, y tiene funciones que obligarán a la geometría de un polígono a seguir una regla de la mano derecha o izquierda, vea ST_ForceRHR y ForceLHR . JTS / Geos parecen haber seguido la regla de la mano derecha, es decir, una orientación en el sentido de las agujas del reloj del anillo exterior, por lo que en realidad no está nada claro.

En general, tiene sentido que un tipo de datos de geografía fuerce la orientación, ya que de lo contrario sería imposible saber si un pequeño polígono era solo eso o el anillo interior de un polígono mundial entero. Con un tipo de datos de geometría en una superficie plana, esta confusión no puede surgir, ya que el anillo exterior y el anillo interno siguen en orden, y si solo hay un anillo único, se encerrará (sin importar la orientación), a diferencia de un globo , que se envuelve.


De un comentario de @mxfh: el acceso a funciones simples OpenGIS de OGC (ISO 19125-1) especifica una dirección en sentido antihorario para los anillos exteriores a partir del documento de la versión 1.2.1 [OGC 06-103r4] 6.1.11.1/página 26 de opengeospatial.org / normas / sfa. El cambio se introdujo entre la versión 1.1.0 y 1.2.0 en la última versión de 2006. La nota al pie de la que está citando no se ha actualizado desde 2005

John Powell
fuente
Buena respuesta John. Sin embargo, no estoy seguro de que usar un orden de nodos para identificar los anillos interiores y exteriores sea la única forma en que un formato de datos vectoriales podría lograrlo. Sin embargo, estoy de acuerdo con usted en que se necesita algún mecanismo. Con GeoJSON, por ejemplo, la primera lista de nodos se designa como el exterior y todas las listas posteriores son agujeros interiores. Eso funciona de manera efectiva (si no más).
WhiteboxDev
Sí, esto también se aplica a WKT para geometrías. Para las geografías, claramente importa más.
John Powell
Eso es muy cierto;)
WhiteboxDev
@WhiteboxDev la razón por la que se alternan las órdenes de bobinado de anillos anidados es que al calcular el área con el Método Shoelace se calculan las áreas firmadas dependiendo de la dirección del anillo. En general, los anillos anidados de primer orden se consideran agujeros y tienen la dirección alternativa del anillo exterior. Su valor de área contribuyente es negativo. Donde como anillo exterior es positivo; así son los anillos anidados de orden par. Por lo tanto, el área total de todas las características del anillo es la suma de todas las áreas firmadas.
mxfh
1
@mxfh: estrictamente hablando, "las órdenes de liquidación de anillos anidados" son discutibles para los polígonos OCG (y muchos otros) ... ya que no está permitido. La forma de representar un polígono anidado dentro del "agujero" de otro sería usar un MultiPolygon ... en cuyo caso, cada Polígono constituyente sigue las reglas de devanado originales. OK, OK: esto equivale a alternar el devanado de los "Anillos Lineales anidados" ... pero solo señalando que no es el Polígono, per se, lo que permite esto, sino más bien la definición del MultiPolygon.
Dan H
23

Se necesitan direcciones de anillo (límite) para evitar ambigüedades en los sistemas de coordenadas geográficas que cubren una superficie finita, ya que el límite definiría dos áreas, una a la izquierda y otra a la derecha del límite a lo largo de su dirección. Es posible determinar cuál de esas dos áreas es la más grande, pero aún deja la ambigüedad.

Aquí hay una descripción general de las direcciones del anillo exterior de los polígonos en varios formatos según sus especificaciones:

Ilustración del orden de liquidación de Shapefiles y características simples

  • El Acceso a funciones simples (ISO 19125-1) también se usa en WKT / GML / KML y varias implementaciones de SQL:

    • anillos exteriores: en sentido antihorario
    • anillos interiores (agujeros): en sentido horario.

    Un polígono es una superficie plana definida por 1 límite exterior y 0 o más límites interiores. Cada límite interior define un agujero en el Polígono. [...]

    El límite exterior LinearRing define la "parte superior" de la superficie, que es el lado de la superficie desde el cual el límite exterior parece atravesar el límite en sentido contrario a las agujas del reloj . Los LinearRings interiores tendrán la orientación opuesta y aparecerán en el sentido de las agujas del reloj cuando se ve desde la "parte superior" ... Especificaciones de acceso a funciones simples

    En la mayoría de las implementaciones, el orden de los anillos en un POLYGON es importante (a diferencia de los archivos de forma)

    Para un polígono con agujeros, su primer subelemento es su anillo exterior, su segundo subelemento es su primer anillo interior, su tercer subelemento es su segundo anillo interior, y así sucesivamente. Oráculo espacial

    Los anidamientos más profundos, también conocidos como island-in-a-lake-on-an-island -... deben representarse como MultiPolygons ( ver figura 2.10 (4) ), ya que solo puede haber un borde exterior y anidamientos más profundos que los anillos interiores No están definidos.

  • ESRI Shapefiles / SHP :

    • anillos exteriores: en sentido horario
    • anillos interiores: en sentido antihorario

    Un polígono consta de uno o más anillos. Un anillo es una secuencia conectada de cuatro o más puntos que forman un bucle cerrado que no se cruza entre sí. Un polígono puede contener múltiples anillos externos . El orden de los vértices u orientación de un anillo indica qué lado del anillo es el interior del polígono. El vecindario a la derecha de un observador caminando a lo largo del anillo en orden de vértices es el vecindario dentro del polígono. Los vértices de los anillos que definen los agujeros en los polígonos están en sentido antihorario . Los vértices para un único polígono anillado son, por lo tanto, siempre en el sentido de las agujas del reloj . [...]

    El orden de los anillos en la matriz de puntos no es significativo. Whitepaper de ESRI

    Dado que se permiten múltiples límites exteriores, las configuraciones isla-en-un-lago-en-una-isla son posibles con esta definición de polígono. Topológicamente, la isla en un lago sería solo otro anillo exterior en sentido horario. Efectivamente, esto hace que un polígono de archivos de forma ESRI sea una característica simple.

    Si no ordena los puntos correctamente, solo tendrá polígonos superpuestos. pyshp

  • GeoJSON (RFC7946) :

    NOTA: La especificación original GeoJSON 2008 no tenía orden de liquidación obligatoria

    • orden de bobinado: el anillo exterior es en sentido antihorario (regla de la mano derecha)
    • los anillos interiores son en sentido horario
    • El orden de los anillos es importante:

      Para los polígonos con anillos múltiples, el primero debe ser el anillo exterior y los demás deben ser anillos o agujeros interiores. Especificaciones de GeoJSON

  • TopoJSON : fuerza los anillos exteriores en sentido horario por defecto

Ilustración del orden de liquidación de Shapefiles y características simples

Excursión:

El razonamiento matemático sobre por qué se alternan los órdenes de bobinado de los anillos anidados es que al calcular el área con la fórmula del cordón de zapato ( explicación visual ) se calculan las áreas firmadas dependiendo de la dirección del anillo.

En general, los anillos anidados (límites interiores) se consideran agujeros y tienen la dirección alternativa del anillo exterior. Su valor de área firmada contribuyente es negativo. Donde como anillos externos son positivos. El área total de todas las características del anillo es la suma de todas las áreas firmadas.

Según lo implementado por ESRI, vea esta entrada de la Base de conocimiento: ¿Qué algoritmo utiliza ArcGIS para determinar el área de un polígono?

Nemónica propuesta

Los extremos abiertos de las formas de letras interpretadas como flechas:

  • S hapefile: S → ᔑ → ↻
  • F e atur e simple s : e → ᘓ (enrollando hacia fuera cc-wise) → ↺
  • GeoJSON: G (la raíz de G es flecha) → ↺
mxfh
fuente
4

No sé si alguien podrá proporcionar una respuesta definitiva a su pregunta, ya que cada formato de archivo vectorial es diferente y cada SIG, en términos de cómo manejan internamente estos datos, también será diferente. Pero puedo decirle con certeza que el orden en el sentido de las agujas del reloj no es solo para los archivos de forma ESRI. Hay otros formatos que usan una designación similar de ordenamiento en sentido horario para anillos externos y en sentido antihorario para polígonos de orificios interiores. Por ejemplo, la estructura poligonal del vector JTS usa un formato similar. De hecho, se afirma aquí , que históricamente esto iba a ser similar al enfoque ESRI. También puedo decir definitivamente que no, no todos los formatos tienen este requisito. Por ejemplo, las especificaciones de formato GeoJSONno exija dicho requisito sobre el orden de los vértices en su formato poligonal La especificación KML en realidad dice:

Los polígonos for deben especificarse en el sentido contrario a las agujas del reloj. Los polígonos siguen la "regla de la mano derecha", que establece que si coloca los dedos de la mano derecha en la dirección en la que se especifican las coordenadas, el pulgar apunta en la dirección general de la normalidad geométrica del polígono.

Entonces, la gama completa de opciones existe y se implementa por ahí. ¡Es un mundo salvaje!

WhiteboxDev
fuente
1
Tenga en cuenta que la "regla de la mano derecha" de KML es lo que convencionalmente se ha llamado "regla de la mano izquierda" (cuando camina el perímetro con los brazos extendidos, su mano izquierda estará dentro de la figura). Esri tiene múltiples enfoques, ya que los archivos de forma son el único formato que usa la regla de la mano derecha (las geodatabases corporativas usan la regla de la mano internamente, pero la API 'C' le permitirá solicitar en cualquier orden). GML solo requiere que los anillos interiores estén en el orden opuesto de los anillos exteriores, y que el primer anillo sea exterior.
Vince
@ Vince no lo sabía. ¿No es eso loco? Gracias por hacérmelo saber. Creo que lo que más me gusta es el enfoque de GML; no importa el orden siempre que sean opuestos. Eso tiene mucho sentido.
WhiteboxDev