Ordine dei vertici poligonali in generale GIS: in senso orario o antiorario


23

Due giorni fa ho posto una domanda sull'ordine di memorizzazione interno per i vertici di un poligono nei file di forma ESRI. A quella domanda è stata data risposta ( I poligoni sono memorizzati in senso orario o antiorario in un file di forma? ) Ed è stata anche data risposta in un vecchio post ( Creazione di poligoni (rotazione in senso orario o no) )

Ma ora la mia domanda è più generale e non so se abbia una risposta unica. L'ordine in senso orario è solo per gli shapefile ESRI o per i formati GIS generali? E la rappresentazione interna di un software GIS? Ad esempio, se uso QGIS e leggo un * .shp contenente poligoni, suppongo che la rappresentazione interna del limite esterno sia in senso orario come nel file di forma originale, ma per quanto riguarda tutti i formati di file supportati da QGIS? E per ArcGIS? E nel caso esista un formato file con poligoni memorizzati in senso antiorario, se questi file sono caricati in QGIS, ArcGIS, ecc., L'orientamento è cambiato internamente, quindi se leggo i dati usando PyQGIS, ad esempio, i poligoni sono in senso orario ordinato?

Il mio scopo è scrivere un plugin per QGIS, ma la fonte dei dati può essere lo shapefile ESRI o altri formati. Dato che devo controllare gli angoli tra i lati consecutivi dei poligoni usando i loro azimut, devo sapere se l'ordine è in senso orario. Una soluzione è calcolare l'area di ciascun poligono e, se ricordo bene, se è positivo l'ordine è orario e se negativo l'ordine è antiorario.

Il calcolo delle aree non è un compito intenso, quindi non rallenterà molto il mio plugin. Ma nel caso speciale di QGIS, qualcuno sa se memorizza i poligoni in senso orario o antiorario, indipendentemente dall'ordine nella fonte originale? Ormai sto lavorando con gli shapefile ESRI e le coordinate in layer.getFeatures (). Geometry (). AsPolygon () sono memorizzati in senso orario per il bordo esterno e in senso antiorario per i fori, cioè come nell'originale * .shp.


Dipende da come sono memorizzati i dati. Oracle è Anti-Clockwise gis.stackexchange.com/questions/20817/…
Mapperz

@Mapperz, il tuo link porta a docs.oracle.com/cd/B10501_01/appdev.920/a96630/… che indica chiaramente Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.)che significa che Oracle è in senso antiorario.
user30184,

Risposte:


27

Nelle specifiche OGC, che possono essere scaricate [qui], ( http://www.opengeospatial.org/standards/sfs ) si afferma:

"La rotazione poligonale non è definita da questo standard; la rotazione poligonale effettiva può essere in senso orario o antiorario."

Nei documenti Oracle , si afferma chiaramente che i confini dell'anello esterno sono orientati in senso antiorario e i confini dell'anello interno, in senso orario. Allo stesso modo, in SQL Server Spatial, il tipo di dati geografico segue una regola in senso antiorario per l'anello esterno e in senso orario per gli anelli interni - vedere questo blog MicroSoft per maggiori dettagli. Postgis sembra permetterlo in entrambi i modi, per le geometrie, e ha funzioni che costringono la geometria di un poligono a seguire una regola della mano destra o sinistra, vedi ST_ForceRHR e ForceLHR . JTS / Geos sembrano aver seguito la regola della mano destra, cioè un orientamento in senso orario dell'anello esterno, quindi non è affatto chiaro, davvero.

In generale ha senso che un tipo di dati geografico forza l'orientamento, altrimenti sarebbe impossibile stabilire se un piccolo poligono fosse proprio quello o l'anello interno di un poligono di tutto il mondo. Con un tipo di dati di geometria su una superficie planare, questa confusione non può sorgere, poiché l'anello esterno e l'anello interno seguono l'ordine, e se esiste un solo anello, sarà racchiuso (indipendentemente dall'orientamento), a differenza di un globo , che si avvolge intorno.


Da un commento di @mxfh: OpenGIS Simple Features Access di OGC (ISO 19125-1) specifica una direzione antioraria per gli anelli esterni a partire dal documento versione 1.2.1 [OGC 06-103r4] 6.1.11.1/pagina 26 da opengeospatial.org / standard / SFA. La modifica è stata introdotta tra la versione 1.1.0 e 1.2.0 nell'ultima del 2006. La nota in calce da cui stai citando non è stata aggiornata dal 2005


Bella risposta John. Non sono sicuro che l'uso di un ordinamento di nodi per identificare gli anelli interni vs. Concordo con te, tuttavia, che alcuni meccanismi devono essere in atto. Con GeoJSON, ad esempio, il primo elenco di nodi è designato come esterno e tutti gli elenchi successivi sono fori interni. Funziona in modo efficace (se non di più).
WhiteboxDev

Sì, questo vale anche per WKT per le geometrie. Per le aree geografiche conta chiaramente di più.
John Powell,

È molto vero;)
WhiteboxDev

@WhiteboxDev è il motivo per cui si alternano gli ordini di avvolgimento degli anelli nidificati, che il calcolo dell'area con il metodo Shoelace calcola le aree firmate in base alla direzione dell'anello. In generale, gli anelli nidificati del primo ordine sono considerati fori e hanno la direzione alternativa dell'anello esterno. Il loro valore di area contributiva è negativo. Dove come anello esterno è positivo; così sono gli anelli nidificati di pari ordine. Quindi l'area totale di tutte le funzioni dell'anello è la somma di tutte le aree firmate.
mxfh,

1
@mxfh: a rigor di termini, "ordini tortuosi di anelli nidificati" è discutibile per i poligoni OCG (e molti altri) .... in quanto non è consentito. Il modo di rappresentare un poligono nidificato all'interno del "buco" di un altro sarebbe quello di utilizzare un multipoligono ... nel qual caso, ogni poligono costituente segue le regole di avvolgimento originali. OK, OK: questo equivale a alternare l'avvolgimento di "LinearRings nidificati" ... ma solo sottolineando che non è il Poligono - di per sé - che lo consente, ma piuttosto la definizione del MultiPoligono.
Dan H

23

Le direzioni dell'anello (limite) sono necessarie per evitare ambiguità per i sistemi di coordinate geografiche che coprono una superficie finita, poiché il confine definirebbe due aree, una a sinistra e una a destra del confine lungo la sua direzione. Determinare quale di queste due aree è la più grande è possibile, ma lascia ancora l'ambiguità.

Ecco una panoramica delle direzioni dell'anello esterno dei poligoni in vari formati in base alle loro specifiche:

Illustrazione dell'ordine di avvolgimento di Shapefile e funzionalità semplici

  • Accesso alle funzioni semplici (ISO 19125-1) utilizzato anche in WKT / GML / KML e varie implementazioni SQL:

    • anelli esterni: antiorario
    • anelli interni (fori): senso orario.

    Un poligono è una superficie piana definita da 1 confine esterno e 0 o più confini interni. Ogni confine interno definisce un buco nel poligono. [...]

    Il limite esterno LinearRing definisce la "parte superiore" della superficie che è il lato della superficie da cui il limite esterno sembra attraversare il limite in senso antiorario. Gli interni LinearRings avranno l'orientamento opposto e appariranno in senso orario se visti dalla parte superiore ... Specifiche di accesso alle funzioni semplici

    Nella maggior parte delle implementazioni è importante l'ordine degli anelli in un POLIGONO (al contrario dei file di forma)

    Per un poligono con fori, il suo primo sottoelemento è il suo anello esterno, il suo secondo sottoelemento è il suo primo anello interno, il suo terzo sottoelemento è il suo secondo anello interno e così via. Oracle Spatial

    I nidi più profondi, ovvero isola-in-un-lago-su- un' -isola -... devono essere rappresentati come multipoligoni ( vedi figura 2.10 (4) ), poiché possono esserci solo un bordo esterno e nidificazioni più profonde rispetto agli anelli interni non sono definiti.

  • Shapefile / SHP ESRI :

    • anelli esterni: in senso orario
    • anelli interni: antiorario

    Un poligono è costituito da uno o più anelli. Un anello è una sequenza connessa di quattro o più punti che formano un anello chiuso, non autointersecante. Un poligono può contenere più anelli esterni . L'ordine dei vertici o l'orientamento di un anello indica quale lato dell'anello è l'interno del poligono. Il quartiere alla destra di un osservatore che cammina lungo l'anello in ordine di vertice è il quartiere all'interno del poligono. I vertici degli anelli che definiscono i fori nei poligoni sono in senso antiorario . I vertici di un singolo poligono ad anello sono quindi sempre in senso orario . [...]

    L'ordine degli anelli nell'array di punti non è significativo. White paper ESRI

    Poiché sono consentiti più confini esterni, con questa definizione di poligono sono possibili configurazioni isola-in-un-lago-su-un'isola. Topologicamente l'isola in un lago sarebbe solo un altro anello esterno in senso orario. In effetti, questo rende un poligono Shapefile ESRI un multipoligono a funzionalità semplice

    Se non ordini i punti correttamente, avrai solo poligoni sovrapposti. pyshp

  • GeoJSON (RFC7946) :

    NOTA: le specifiche GeoJSON 2008 originali non avevano un ordine di carica applicato

    • ordine di carica: l'anello esterno è antiorario (regola della mano destra)
    • gli anelli interni sono in senso orario
    • l'ordine degli anelli è importante:

      Per i poligoni con più anelli, il primo deve essere l'anello esterno e tutti gli altri devono essere anelli o fori interni. GeoJSON spec

  • TopoJSON : forza gli anelli esterni in senso orario per impostazione predefinita

Illustrazione dell'ordine di avvolgimento di Shapefile e funzionalità semplici

Escursione:

Il ragionamento matematico sul perché si alternano ordini tortuosi di anelli nidificati è che il calcolo dell'area con la formula del laccio ( spiegazione visiva ) calcola le aree firmate in base alla direzione dell'anello.

In generale, gli anelli nidificati (confini interni) sono considerati fori e hanno la direzione alternativa dell'anello esterno. Il loro valore di area firmata che contribuisce è negativo. Dove come anelli esterni sono positivi. L'area totale di tutte le funzioni dell'anello è la somma di tutte le aree firmate.

Come implementato dall'ESRI, vedere questa voce della Knowledge Base: quale algoritmo viene utilizzato da ArcGIS per determinare l'area di un poligono?

Proposta mnemonica

Estremità aperte delle lettere interpretate come frecce:

  • S hapefile: S → ᔑ → ↻
  • Semplice F e Atur e s: e → ᘓ (avvolgimento verso l'esterno cc-saggio) → ↺
  • GeoJSON: G (il gambo di G è una freccia) → ↺

4

Non so che nessuno sarà in grado di fornire una risposta definitiva alla tua domanda poiché ogni formato di file vettoriale è diverso e ogni GIS, in termini di come gestiscono internamente questi dati, sarà diverso. Ma posso dirti per certo che l'ordinamento in senso orario non è solo per gli Shapefile ESRI. Esistono altri formati che utilizzano una designazione simile di ordinamento in senso orario per gli anelli esterni e in senso antiorario per i poligoni del foro interno. Ad esempio, la struttura poligonale vettoriale JTS utilizza un formato simile. In effetti, si afferma qui che storicamente questo doveva essere simile all'approccio ESRI. Posso anche affermare definitivamente che no, non tutti i formati hanno questo requisito. Ad esempio, le specifiche del formato GeoJSONnon fare tali requisiti riguardo all'ordinamento dei vertici nel loro formato poligonale. La specifica KML in realtà afferma:

I poligoni devono essere specificati in senso antiorario. I poligoni seguono la "regola della mano destra", in cui si afferma che se si posizionano le dita della mano destra nella direzione in cui sono specificate le coordinate, il pollice punta nella direzione generale della normale geometrica del poligono.

Quindi l'intera gamma di opzioni esiste e viene implementata là fuori. È un mondo selvaggio!


1
Nota che la "regola della mano destra" di KML è quella che è stata convenzionalmente chiamata "regola della mano sinistra" (quando percorri il perimetro con le braccia tese, la tua mano sinistra entrerà nella figura). Esri ha diversi approcci, poiché gli shapefile sono l'unico formato che utilizza la regola della mano destra (i geodatabase aziendali usano la regola della mano sinistra internamente, ma l'API 'C' ti consentirà di effettuare una richiesta in entrambi gli ordini). GML richiede solo che gli anelli interni siano nell'ordine opposto degli anelli esterni e che il primo anello sia esterno.
Vince,

@Perché non lo sapevo. Non è pazzo? Grazie per avermi fatto sapere. Penso che mi piaccia soprattutto l'approccio di GML; non importa l'ordinamento purché siano opposti. Questo ha molto senso.
WhiteboxDev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.