Zum Inhalt

# Geometrieanforderungen

## Fehlercodes for geometrische Fehler

Die Fehlercodes wurden übernommen aus dem CityGML Quality Interoperability Experiment, chapter 7.5.

Note

Die Anforderungen wurden in CityDoctor umbenannt um einen auch von Menschen zu verstehenden Begriff, analog zu den Fehlercodes, darzustellen.

Alle geometrischen Fehler sind in dem "GE" Definitionsbereich. Da geometrische Validierung basierend auf den Primitiven auf drei verschiedenen Ebenen ausgeführt wird enthält jede Anforderung eine Ebene:

- Ring: R
- Polygon: P
- Hülle (Shell): S

Fehlercodes folgen dem selben Namensschema wie die Anforderungen, siehe auch Grundbegriffe. Jede Verletzung einer Anforderung muss in einem Fehler enden, der einen entsprechenden Fehlercode beinhaltet. Jeder Fehler kann (und sollte) zusätzliche Informationen beinhalten (z.B. Wenn ein Ring nicht geschlossen ist, dann sollte die ID des Rings mitgegeben werden).

## Vertex (Punkt) Anforderungen

Zwei Punkte A und B sind gleich wenn die Euclidische-Distanz zwischen den beiden Punkten kleiner als eine definierte Größe ist (minVertexDistance). Diese definierte Größe findet auch in vielen Anforderungen wieder Anwendung, zum Beispiel berührt ein Punkt eine Kante wenn der Abstand des Punktes kleiner ist als minVertexDistance. In den folgenden Anforderungen wird die Größe verwendet:

- R_GE_R_CONSECUTIVE_POINTS_SAME
- R_GE_R_NOT_CLOSED
- R_GE_R_SELF_INTERSECTION
- R_GE_P_INTERIOR_DISCONNECTED

Die folgenden Anforderungen wurden auf den drei geometrischen Ebenen definiert (nach Ledoux (2013)):

## Linear Ring

Anforderungs ID | Beschreibung | Fehlercode | Bekannte Prüfungen
--- | --- | --- | ---
R_GE_R_TOO_FEW_POINTS | Zu wenig Punkte in einem Ring | GE_R_TOO_FEW_POINTS | C_GE_R_TOO_FEW_POINTS
R_GE_R_CONSECUTIVE_POINTS_SAME | 2 aufeinanderfolgende Punkte sind gleich | GE_R_CONCECUTIVE_POINTS_SAME | C_GE_R_CONCECUTIVE_POINTS_SAME, C_GE_R_DUPLICATE_POINT
R_GE_R_NOT_CLOSED | Der erste und letzte Punkt sind nicht gleich | GE_R_NOT_CLOSED | C_GE_R_NOT_CLOSED
R_GE_R_SELF_INTERSECTION | Selbstverschneidung z.B. eine Schleife | GE_R_SELF_INTERSECTION | C_GE_R_SELF_INTERSECTION, C_GE_R_DUPLICATE_POINT
R_GE_R_COLLAPSED_TO_LINE | Momentan nicht in Benutzung, da redundant mit R_GE_R_SELF_INTERSECTION Ring ist ein Punkt oder eine Linie | GE_R_COLLAPSED_TO_LINE | C_GE_R_COLLAPSED_TO_LINE
R_GE_R_ALL | Container für: R_GE_R_TOO_FEW_POINTS, R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED, R_GE_R_SELF_INTERSECTION | -- | --

## Polygon

Anforderungs ID | Beschreibung | Fehlercode | Bekannte Prüfungen
--- | --- | --- | ---
R_GE_P_INTERSECTING_RINGS | 2+ Ringe schneiden sich | GE_P_INTERSECTING_RINGS | C_GE_P_INTERSECTING_RINGS
R_GE_P_NON_PLANAR | Nicht planares Polygon, sowohl Distanz als auch Flächennormale Abweichungen | GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION | C_GE_P_NON_PLANAR
R_GE_P_INTERIOR_DISCONNECTED | Innenfläche ist nicht verbunden | GE_P_INTERIOR_DISCONNECTED | C_GE_P_INTERIOR_DISCONNECTED
R_GE_P_HOLE_OUTSIDE | 1+ inneren Ringe ist komplett außerhalb des Polygons | GE_P_HOLE_OUTSIDE | C_GE_P_HOLE_OUTSIDE
R_GE_P_INNER_RINGS_NESTED | Innerer Ring ist komplett innerhalb eines anderen inneren Rings | GE_P_INNER_RINGS_NESTED | C_GE_P_INNER_RINGS_NESTED
R_GE_P_ORIENTATION_RINGS_SAME | Äußerer Ring und innerer Ring haben die selbe Orientation | GE_P_ORIENTATION_RINGS_SAME | C_GE_P_ORIENTATION_RINGS_SAME
R_GE_P_ALL | Container für: R_GE_P_INTERSECTING_RINGS, R_GE_P_NON_PLANAR, R_GE_P_INTERIOR_DISCONNECTED, R_GE_P_HOLE_OUTSIDE, R_GE_P_INNER_RINGS_NESTED, R_GE_P_ORIENTATION_RINGS_SAME, R_GE_R_ALL | -- | --

## Solid / Hülle (Shell)

Anforderungs ID | Beschreibung | Fehlercode | Bekannte Prüfungen
--- | --- | --- | ---
R_GE_S_TOO_FEW_POLYGONS | <4 Polygone | GE_S_TOO_FEW_POLYGONS | C_GE_S_TOO_FEW_POLYGONS
R_GE_S_NOT_CLOSED | Die Hülle ist nicht wasserdicht / hat 1+ Löcher | GE_S_NOT_CLOSED | C_GE_S_NOT_CLOSED
R_GE_S_NON_MANIFOLD_VERTEX | Jedes Polygon, das an einem Punkt anliegt muss über Kanten mit den Anderen verbunden sein | GE_S_NON_MANIFOLD_VERTEX | C_GE_S_NON_MANIFOLD_VERTEX
R_GE_S_NON_MANIFOLD_EDGE | An jeder Kante dürfen nur 2 Polygon anliegen | GE_S_NON_MANIFOLD_EDGE | C_GE_S_NON_MANIFOLD_EDGE
R_GE_S_MULTIPLE_CONNECTED_COMPONENTS | Alle Polygone müssen über Punkte und Kanten verbunden sein | GE_S_MULTIPLE_CONNECTED_COMPONENTS | C_GE_S_MULTIPLE_CONNECTED_COMPONENTS
R_GE_S_SELF_INTERSECTION | Die Hülle selbstverschneidet sich | GE_S_SELF_INTERSECTION | C_GE_S_SELF_INTERSECTION
R_GE_S_POLYGON_WRONG_ORIENTATION | Die Orientierung eines Polygons ist falsch | GE_S_POLYGON_WRONG_ORIENTATION | C_GE_S_POLYGON_WRONG_ORIENTATION
R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | Alle Polygone zeigen in die falsche Richtung | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION
R_GE_S_ALL | Container für: R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED, R_GE_S_NON_MANIFOLD_VERTEX, R_GE_S_NON_MANIFOLD_EDGE, R_GE_S_MULTIPLE_CONNECTED_COMPONENTS, R_GE_S_SELF_INTERSECTION, R_GE_S_POLYGON_WRONG_ORIENTATION, R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | -- | --

## Parameter Überblick

Name | Beschreibung | Verwendet in | Einheit
--- | --- | --- | ---
minVertexDistance | Minimale Abstand zwischen zwei Punkten bevor sie als der selbe Punkt angesehen werden | R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED, R_GE_R_SELF_INTERSECTION, R_GE_P_INTERIOR_DISCONNECTED | Meter
type | Planaritätsprüfungsart, kann distance, angle, both sein | R_GE_P_NON_PLANAR | -
distanceTolerance | Maximale Distanz eines Punktes von der Ausgleichsebene eines Polygons bevor es als Fehler angesehen wird | R_GE_P_NON_PLANAR | Meter
angleTolerance | Maximale Differenz im Winkel von angrenzenden Dreiecken einer Triangulierung bevor ein Polygon nicht mehr als Planar angesehen wird | R_GE_P_NON_PLANAR | Radiant

## Abhängigkeitsbaum

Dies ist die Reihenfolge in der die Prüfungen ausgeführt werden. Wenn eine abhängige Prüfung einen Fehler geworfen hat oder nicht ausgeführt wurde, so wird die darauffolgende Prüfung auch nicht ausgeführt.

    graph TD;
      X0001[R_SC_SCHEMA_VALIDATION]
      R0001[R_GE_R_TOO_FEW_POINTS]
      R0002[R_GE_R_CONSECUTIVE_POINTS_SAME]
      R0003[R_GE_R_NOT_CLOSED]
      R0004[R_GE_R_SELF_INTERSECTION]
      P0001[R_GE_P_INTERSECTING_RINGS]
      P0002[R_GE_P_NON_PLANAR]
      P0003[R_GE_P_INTERIOR_DISCONNECTED]
      P0004[R_GE_P_HOLE_OUTSIDE]
      P0005[R_GE_P_INNER_RINGS_NESTED]
      P0006[R_GE_P_ORIENTATION_RINGS_SAME]

      S0001[R_GE_S_TOO_FEW_POLYGONS]
      S0002[R_GE_S_NOT_CLOSED]
      S0003[R_GE_S_NON_MANIFOLD_VERTEX]
      S0004[R_GE_S_NON_MANIFOLD_EDGE]
      S0005[R_GE_S_MULTIPLE_CONNECTED_COMPONENTS]
      S0006[R_GE_S_SELF_INTERSECTION]
      S0007[R_GE_S_POLYGON_WRONG_ORIENTATION]
      S0008[R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION]

      X0001-->R0003;
      R0003-->R0001;
      R0001-->R0002;
      R0002-->R0004;
      R0004-->P0002;
      P0002-->P0006;
      P0006-->P0003;
      P0006-->P0004;
      P0006-->P0005;
      P0004-->P0001;
      P0005-->P0001;
      P0001-->S0001;
      P0003-->S0001;
      S0001-->S0002;
      S0001-->S0004;
      S0001-->S0003;
      S0001-->S0005;
      S0002-->S0007;
      S0004-->S0007;
      S0007-->S0006;
      S0003-->S0006;
      S0005-->S0006;
      S0006-->S0008;

## Multisurface und Solid Geometrie

Um die Definition eines Validierungsplans zu vereinfachen werden zwei neue Anfoderungen zusätzlich eingeführt. Diese Anforderungen dienen lediglich zur Gruppierung von den vorhandenen Anforderungen und benötigen keine zusätzlichen Prüfungen.

Anforderungs ID | Beschreibung | Abhängigkeiten | Fehlercode | Bekannte Prüfungen
--- | --- | --- | --- | ---
R_GE_MS | Valide Multisurface-Geometrie | R_SC-SCHEMA-VALIDATION, R_GE_P_ALL | -- | --
R_GE_SO | Valide Hüllengeometrie | R_SC-SCHEMA-VALIDATION, R_GE_S_ALL | -- | --