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 -- --