Reihenfolge der Polygonscheitelpunkte im Allgemeinen GIS: im Uhrzeigersinn oder gegen den Uhrzeigersinn

23

Vor zwei Tagen stellte ich eine Frage zur internen Speicherreihenfolge für die Eckpunkte eines Polygons in ESRI-Shapefiles. Diese Frage wurde beantwortet ( Werden Polygone in einem Shapefile im oder gegen den Uhrzeigersinn gespeichert? ) Und sie wurde auch in einem alten Beitrag beantwortet ( Polygonerstellung (Drehung im Uhrzeigersinn oder nicht) ).

Aber jetzt ist meine Frage allgemeiner und ich weiß nicht, ob sie eine eindeutige Antwort hat. Gilt die Reihenfolge im Uhrzeigersinn nur für ESRI-Shapefiles oder für allgemeine GIS-Formate? Und wie sieht es mit der internen Darstellung einer GIS-Software aus? Wenn ich beispielsweise QGIS verwende und ein * .shp mit Polygonen lese, gehe ich davon aus, dass die interne Darstellung der äußeren Begrenzung im Uhrzeigersinn erfolgt, wie im ursprünglichen Shapefile. Was ist jedoch mit allen von QGIS unterstützten Dateiformaten? Und für ArcGIS? Und falls es ein Dateiformat gibt, in dem Polygone gegen den Uhrzeigersinn gespeichert sind, wird beim Laden dieser Dateien in QGIS, ArcGIS usw. die Ausrichtung intern geändert. Wenn ich also die Daten mit PyQGIS lese, sind die Polygone beispielsweise im Uhrzeigersinn bestellt?

Mein Ziel ist es, ein Plugin für QGIS zu schreiben, aber die Datenquelle können ESRI-Shapefiles oder andere Formate sein. Da ich die Winkel zwischen aufeinanderfolgenden Seiten von Polygonen mit ihren Azimuten überprüfen muss, muss ich wissen, ob die Reihenfolge im Uhrzeigersinn ist. Eine Lösung besteht darin, die Fläche jedes Polygons zu berechnen. Wenn ich mich recht entsinne, ist die Reihenfolge positiv und negativ und gegen den Uhrzeigersinn.

Die Flächenberechnung ist keine intensive Aufgabe, daher verlangsamt sie mein Plugin nicht so sehr. Aber im speziellen Fall von QGIS weiß jemand, ob die Polygone im oder gegen den Uhrzeigersinn gespeichert werden, unabhängig von der Reihenfolge in der Originalquelle? Inzwischen arbeite ich mit ESRI-Shapefiles und die Koordinaten in layer.getFeatures (). Geometry (). AsPolygon () werden für den äußeren Rand im Uhrzeigersinn und für die Löcher gegen den Uhrzeigersinn gespeichert, dh wie im Original * .shp.

jgpallero
quelle
Dies hängt davon ab, wie die Daten gespeichert werden. Oracle ist gegen den Uhrzeigersinn gis.stackexchange.com/questions/20817/…
Mapperz
@Mapperz, Ihr Link führt zu docs.oracle.com/cd/B10501_01/appdev.920/a96630/…, in dem eindeutig angegeben ist Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.), dass Oracle im Gegenuhrzeigersinn arbeitet.
user30184

Antworten:

27

In der OGC-Spezifikation, die [hier] heruntergeladen werden kann ( http://www.opengeospatial.org/standards/sfs ), heißt es:

"Die Polygondrehung ist in dieser Norm nicht definiert. Die tatsächliche Polygondrehung kann im oder gegen den Uhrzeigersinn erfolgen."

In den Oracle-Dokumenten wird eindeutig angegeben, dass die äußeren Ringgrenzen gegen den Uhrzeigersinn und die inneren Ringgrenzen im Uhrzeigersinn ausgerichtet sind. In SQL Server Spatial folgt der Geografie-Datentyp einer Regel gegen den Uhrzeigersinn für den äußeren Ring und im Uhrzeigersinn für den inneren Ring. Weitere Informationen finden Sie in diesem MicroSoft-Blog . Postgis scheint dies für Geometrien in beiden Richtungen zuzulassen und verfügt über Funktionen, mit denen die Geometrie eines Polygons einer Rechts- oder Linksregel folgen muss (siehe ST_ForceRHR und ForceLHR) . JTS / Geos scheinen der rechten Regel gefolgt zu sein, dh einer Ausrichtung des äußeren Rings im Uhrzeigersinn, so dass es eigentlich ein bisschen unklar ist.

Im Allgemeinen ist es für einen Geografie-Datentyp sinnvoll, die Orientierung zu erzwingen, da ansonsten nicht zu erkennen ist, ob ein kleines Polygon genau das oder der innere Ring eines ganzen Weltpolygons ist. Bei einem Geometriedatentyp auf einer ebenen Fläche kann diese Verwechslung nicht auftreten, da der äußere und der innere Ring der Reihe nach folgen. Wenn es nur einen einzigen Ring gibt, wird dieser anders als auf einem Globus eingeschlossen (unabhängig von der Ausrichtung) , die umschlingt.


Aus einem Kommentar von @mxfh: OpenGIS Simple Features Access (ISO 19125-1) von OGC gibt eine Richtung gegen den Uhrzeigersinn für Außenringe ab Version 1.2.1 des Dokuments [OGC 06-103r4] 6.1.11.1/Seite 26 von opengeospatial.org an / standards / sfa. Die Änderung wurde spätestens 2006 zwischen Version 1.1.0 und 1.2.0 eingeführt. Die Fußnote, aus der Sie zitieren, wurde seit 2005 nicht mehr aktualisiert

John Powell
quelle
Gute Antwort, John. Ich bin mir nicht sicher, ob die Verwendung einer Knotenreihenfolge zur Identifizierung von Innen- und Außenringen der einzige Weg ist, mit dem ein Vektordatenformat dies erreichen kann. Ich stimme Ihnen jedoch zu, dass ein Mechanismus vorhanden sein muss. Bei GeoJSON wird beispielsweise die erste Knotenliste als äußere und alle nachfolgenden Listen als innere Löcher bezeichnet. Das funktioniert so (wenn nicht besser) effektiv.
WhiteboxDev
Ja, dies gilt auch für WKT für Geometrien. Für die geografische Region ist es eindeutig wichtiger.
John Powell
Das ist sehr wahr;)
WhiteboxDev
@WhiteboxDev Der Grund dafür, dass sich die Wicklungsreihenfolgen von verschachtelten Ringen ändern, ist, dass die Berechnung der Fläche mit der Schnürsenkelmethode signierte Flächen in Abhängigkeit von der Ringrichtung berechnet. Im Allgemeinen werden verschachtelte Ringe erster Ordnung als Löcher betrachtet und haben die entgegengesetzte Richtung des Außenrings. Ihr beitragender Flächenwert ist negativ. Wobei als äußerer Ring positiv ist; so sind geschachtelte Ringe von gerader Ordnung. Die Gesamtfläche aller Ringmerkmale ist also die Summe aller signierten Bereiche.
28.
1
@mxfh: Genau genommen ist "Wicklungsreihenfolge von verschachtelten Ringen" für OCG (und viele andere) Polygone umstritten, da dies nicht zulässig ist. Die Möglichkeit, ein verschachteltes Polygon im "Loch" eines anderen darzustellen, besteht darin, ein MultiPolygon zu verwenden. In diesem Fall folgt jedes konstituierende Polygon den ursprünglichen Wicklungsregeln. OK, OK: Dies ist gleichbedeutend mit dem Abwechseln der Wicklung von "verschachtelten linearen Ringen". Es wird jedoch nur darauf hingewiesen, dass dies nicht per se durch das Polygon möglich ist, sondern durch die Definition des MultiPolygons.
Dan H
23

Ring- (Grenz-) Richtungen werden benötigt, um Mehrdeutigkeiten für geografische Koordinatensysteme zu vermeiden, die eine endliche Oberfläche abdecken, da die Grenze zwei Bereiche definiert, einen linken und einen rechten Rand der Grenze entlang ihrer Richtung. Es ist möglich zu bestimmen, welcher dieser beiden Bereiche der größere ist, lässt jedoch die Mehrdeutigkeit zu.

Hier eine Übersicht über die Außenringrichtungen von Polygonen in verschiedenen Formaten nach ihren Spezifikationen:

Abbildung der Wicklungsreihenfolge von Shapefiles und einfachen Funktionen

  • Simple Feature Access (ISO 19125-1) wird auch in WKT / GML / KML und verschiedenen SQL-Implementierungen verwendet:

    • Außenringe: gegen den Uhrzeigersinn
    • Innenringe (Löcher): im Uhrzeigersinn.

    Ein Polygon ist eine ebene Fläche, die durch 1 Außengrenze und 0 oder mehr Innengrenzen definiert ist. Jede innere Begrenzung definiert ein Loch im Polygon. [...]

    Die äußere Begrenzung LinearRing definiert die „Oberseite“ der Oberfläche, die die Seite der Oberfläche ist, von der aus die äußere Begrenzung die Begrenzung im Gegenuhrzeigersinn zu durchqueren scheint . Die Innen LinearRings die entgegengesetzte Orientierung haben und wie erscheinen im Uhrzeigersinn , wenn sie von „oben“ ... betrachtet Simple Feature Access - Spezifikationen

    In den meisten Implementierungen ist die Reihenfolge der Ringe in einem POLYGON wichtig (im Gegensatz zu Shapefiles).

    Bei einem Polygon mit Löchern ist sein erstes Teilelement sein Außenring, sein zweites Teilelement sein erster Innenring, sein drittes Teilelement sein zweiter Innenring und so weiter. Oracle Spatial

    Tiefere Verschachtelungen, auch bekannt als Insel in einem See auf einer Insel , müssen als MultiPolygons dargestellt werden ( siehe Abbildung 2.10 (4) ), da es nur eine Außengrenze und tiefere Verschachtelungen als innere Ringe geben kann sind nicht definiert.

  • ESRI Shapefiles / SHP :

    • Außenringe: im Uhrzeigersinn
    • Innenringe: gegen den Uhrzeigersinn

    Ein Polygon besteht aus einem oder mehreren Ringen. Ein Ring ist eine zusammenhängende Folge von vier oder mehr Punkten, die eine geschlossene, sich nicht selbst schneidende Schleife bilden. Ein Polygon kann mehrere Außenringe enthalten . Die Reihenfolge der Scheitelpunkte oder der Ausrichtung für einen Ring gibt an, welche Seite des Rings das Innere des Polygons ist. Die Nachbarschaft rechts von einem Beobachter, der in Scheitelpunktreihenfolge entlang des Rings geht, ist die Nachbarschaft innerhalb des Polygons. Scheitelpunkte von Ringen, die Löcher in Polygonen definieren, befinden sich gegen den Uhrzeigersinn . Scheitelpunkte für ein einzelnes, ringförmiges Polygon befinden sich daher immer im Uhrzeigersinn . [...]

    Die Reihenfolge der Ringe im Punktearray ist nicht signifikant. ESRI Whitepaper

    Da mehrere Außengrenzen zulässig sind, sind mit dieser Polygondefinition Insel-in-See-auf-Insel-Konfigurationen möglich. Topologisch wäre die Insel in einem See nur ein weiterer äußerer Ring im Uhrzeigersinn. Tatsächlich macht dies ein ESRI-Shapefile-Polygon zu einem Simple Feature MultiPolygon

    Wenn Sie die Punkte nicht richtig anordnen, haben Sie nur überlappende Polygone. pyshp

  • GeoJSON (RFC7946) :

    HINWEIS: Für die ursprüngliche GeoJSON 2008-Spezifikation wurde keine Wicklungsreihenfolge erzwungen

    • Wicklungsreihenfolge: Außenring ist gegen den Uhrzeigersinn (rechte Regel)
    • Innenringe sind im Uhrzeigersinn
    • Reihenfolge der Ringe ist wichtig:

      Bei Polygonen mit mehreren Ringen muss der erste der äußere Ring sein und alle anderen müssen innere Ringe oder Löcher sein. GeoJSON-Spezifikation

  • TopoJSON : Erzwingt äußere Ringe standardmäßig im Uhrzeigersinn

Abbildung der Wicklungsreihenfolge von Shapefiles und einfachen Funktionen

Ausflug:

Die mathematische Überlegung, warum sich Wicklungsreihenfolgen von verschachtelten Ringen abwechseln, besteht darin, dass bei der Berechnung der Fläche mit der Schnürsenkelformel ( visuelle Erklärung ) die vorzeichenbehafteten Flächen in Abhängigkeit von der Ringrichtung berechnet werden.

Im Allgemeinen werden verschachtelte Ringe (Innengrenzen) als Löcher betrachtet und haben die entgegengesetzte Richtung des Außenrings. Ihr beitragender vorzeichenbehafteter Flächenwert ist negativ. Wobei als Außenringe positiv sind. Die Gesamtfläche aller Ringmerkmale ist die Summe aller signierten Bereiche.

Informationen zur Implementierung von ESRI finden Sie in diesem Knowledge Base-Eintrag: Welcher Algorithmus wird von ArcGIS zum Ermitteln der Fläche eines Polygons verwendet?

Vorgeschlagene Mnemonik

Offene Enden von Briefbögen, die als Pfeile interpretiert werden:

  • S hapefile: S → ᔑ → ↻
  • Einfach F e atur e s: e → ᘓ (Wicklung nach außen cc-weise) → ↺
  • GeoJSON: G (Stamm von G ist Pfeil) → ↺
mxfh
quelle
4

Ich weiß nicht, dass irgendjemand eine endgültige Antwort auf Ihre Frage geben kann, da jedes Vektordateiformat anders ist und jedes GIS in Bezug auf den internen Umgang mit diesen Daten auch anders sein wird. Aber ich kann Ihnen mit Sicherheit sagen, dass die Reihenfolge im Uhrzeigersinn nicht nur für ESRI-Shapefiles gilt. Es gibt andere Formate, die eine ähnliche Bezeichnung für das Ordnen im Uhrzeigersinn für äußere Ringe und gegen den Uhrzeigersinn für innere Lochpolygone verwenden. Beispielsweise verwendet die JTS-Vektorpolygonstruktur ein ähnliches Format. In der Tat wird hier festgestellt , dass dies historisch dem ESRI-Ansatz ähnlich sein sollte. Ich kann auch definitiv sagen, dass nicht alle Formate diese Anforderung haben. Zum Beispiel die GeoJSON-Formatspezifikationenmachen Sie keine derartigen Anforderungen bezüglich der Anordnung von Eckpunkten in ihrem Polygonformat. In der KML-Spezifikation heißt es tatsächlich:

Die für Polygone müssen im Gegenuhrzeigersinn angegeben werden. Polygone folgen der "Rechtsregel". Wenn Sie die Finger Ihrer rechten Hand in die Richtung legen, in der die Koordinaten angegeben sind, zeigt Ihr Daumen in die allgemeine Richtung der geometrischen Normalen für das Polygon.

Es gibt also die gesamte Palette an Optionen, die dort umgesetzt werden. Es ist eine wilde Welt!

WhiteboxDev
quelle
1
Beachten Sie, dass die KML-Regel für die rechte Hand die sogenannte Regel für die linke Hand ist (wenn Sie mit ausgestreckten Armen über den Umfang gehen, befindet sich Ihre linke Hand in der Figur). Esri hat mehrere Ansätze, da Shapefiles das einzige Format sind, das die Regel für die rechte Hand verwendet (Enterprise-Geodatabases verwenden intern die Regel für die linke Hand, über die C-API können Sie jedoch Anforderungen in beliebiger Reihenfolge erstellen). GML erfordert nur, dass die Innenringe in entgegengesetzter Reihenfolge zu den Außenringen angeordnet sind und dass der erste Ring außen liegt.
Vince
@Vince Das wusste ich nicht. Ist das nicht verrückt? Danke für die Information. Ich denke, mir gefällt der Ansatz von GML am besten. spielt keine Rolle bei der Bestellung, solange sie entgegengesetzt sind. Das macht sehr viel Sinn.
WhiteboxDev