|
|
|
# Anforderungen und Prüfungen für die Validierung von CityGML-Modellen
|
|
|
|
|
|
|
|
Die Anforderungen sind die Grundbausteine für ein Validierungsplan um CityGML-Modelle zu validieren. Für Namenskonventionen und Definitionen, siehe [Grundbegriffe](Validierung/Grundbegriffe).
|
|
|
|
|
|
|
|
Eine Anforderung kann durch einen oder mehrere Prüfungen validiert werden. Eine Prüfung validiert ein oder mehrere Anforderungen bei einem Modell. Jede Prüfung kann Vorbedingungen haben. Wenn diese Vorbedingungen nicht erfüllt sind wird die Prüfung nicht ausgeführt.
|
|
|
|
|
|
|
|
Für jede Anforderung muss mindestens eine Prüfung existieren, ohne diese wäre eine Anforderung nutzlos. Es müssen mindestens zwei Testfälle für jede Anforderung existieren, eine, die die Anforderung erfüllt und eine, die diese nicht erfüllt. Mehr als zwei Testfälle ist natürlich nützlich.
|
|
|
|
|
|
|
|
Alle Testmodelle sind [hier](https://gitlab.com/volkercoors/CiD4Sim/tree/master/SimpleSolid_SrefBS) unter den Ordnern v1.0 und v2.0 gespeichert.
|
|
|
|
|
|
|
|
## Schema Anforderungen
|
|
|
|
|
|
|
|
### SC-all-0001
|
|
|
|
|
|
|
|
#### Anforderung
|
|
|
|
|
|
|
|
| ID | SC-all-0001 |
|
|
|
|
| ---- | ---- |
|
|
|
|
| Beschreibung | Eine grundlengende Anforderung ist, dass jedes CityGML Dokument wohl definiert sein muss und XSD valide ist. |
|
|
|
|
| Fehlercode | SC-all-NOT_XSD_VALID |
|
|
|
|
|
|
|
|
#### Prüfung
|
|
|
|
|
|
|
|
| ID | SC-SCHEMA-VALIDATION|
|
|
|
|
| ---- | ---- |
|
|
|
|
| Anforderungs ID | SC-all-0001 |
|
|
|
|
| Vorbedingungen | keine |
|
|
|
|
| Beschreibung | Werkzeuge um eine XSD Validierung durchzuführen sind verfügbar und geben verlässliche Ergebnisse |
|
|
|
|
| Fehlercode | SC-all-NOT_XSD_VALID |
|
|
|
|
|
|
|
|
#### Testfälle
|
|
|
|
|
|
|
|
| Testfall ID | CityGML Modell | Erwartetes Ergebnis |
|
|
|
|
| ---- |--------------- | ----------------- |
|
|
|
|
| SC-all-0001-T0001 | SC-all-0001-T0001.gml | OK |
|
|
|
|
| SC-all-0001-T0002 | SC-all-0001-T0002.gml | SC-all-NOT_XSD_VALID |
|
|
|
|
|
|
|
|
## Geometrieanforderungen
|
|
|
|
|
|
|
|
### Fehlercodes for geometrische Fehler
|
|
|
|
wie definiert in [CityGML Quality Interoperability Experiment, chapter 7.5](http://mail.opengeospatial.org/lists/lt.php?id=fR4CDVYeAlJfHwhTCwA)
|
|
|
|
|
|
|
|
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](Validierung/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 Prüfungen wieder Anwendung, zum Beispiel berührt ein Punkt eine Kante wenn der Abstand des Punktes kleiner ist als *minVertexDistance*. In den folgenden Prüfungen wird die Größe verwendet:
|
|
|
|
|
|
|
|
* GE-gml:LR-0001
|
|
|
|
* GE-gml:LR-0002
|
|
|
|
* GE-gml:LR-0003
|
|
|
|
* GE-gml:LR-0004
|
|
|
|
* GE-gml:PO-0001
|
|
|
|
* GE-gml:PO-0003
|
|
|
|
* GE-gml:PO-0004
|
|
|
|
* GE-gml:PO-0005
|
|
|
|
* GE-gml:SO-0006
|
|
|
|
|
|
|
|
Die folgenden Anforderungen wurden auf den drei geometrischen Ebenen definiert (nach Ledoux (2013)):
|
|
|
|
|
|
|
|
#### Linear Ring
|
|
|
|
|
|
|
|
| Anforderungs ID | Beschreibung | Fehlercode | Bekannte Prüfungen |
|
|
|
|
| --------------- | ------------ | ---------- |-------------------- |
|
|
|
|
| [GE-gml:LR-0001](Validierung/Anforderungen/GE_gml_LR_0001)| Zu wenig Punkte in einem Ring | GE_R_TOO_FEW_POINTS | C_GE_R_TOO_FEW_POINTS |
|
|
|
|
| [GE-gml:LR-0002](Validierung/Anforderungen/GE_gml_LR_0002)| 2 aufeinanderfolgende Punkte sind gleich | GE_R_CONCECUTIVE_POINTS_SAME | C_GE_R_CONCECUTIVE_POINTS_SAME, C_GE_R_DUPLICATE_POINT |
|
|
|
|
| [GE-gml:LR-0003](Validierung/Anforderungen/GE_gml_LR_0003)| Der erste und letzte Punkt sind nicht gleich | GE_R_NOT_CLOSED | C_GE_R_NOT_CLOSED |
|
|
|
|
| [GE-gml:LR-0004](Validierung/Anforderungen/GE_gml_LR_0004)| Selbstverschneidung z.B. eine Schleife | GE_R_SELF_INTERSECTION | C_GE_R_SELF_INTERSECTION, C_GE_R_DUPLICATE_POINT |
|
|
|
|
| [GE-gml:LR-0005](Validierung/Anforderungen/GE_gml_LR_0005)| **Momentan nicht in Benutzung, da redundant mit GE-gml:LR-0004**<br/> Ring ist ein Punkt oder eine Linie | GE_R_COLLAPSED_TO_LINE | C_GE_R_COLLAPSED_TO_LINE |
|
|
|
|
| GE-gml:LR-all | Container für: GE-gml:LR-0001, GE-gml:LR-0002, GE-gml:LR-0003, GE-gml:LR-0004 | -- | -- |
|
|
|
|
|
|
|
|
#### Polygon
|
|
|
|
|
|
|
|
| Anforderungs ID | Beschreibung | Fehlercode | Bekannte Prüfungen |
|
|
|
|
| --------------- | ------------ | ---------- |-------------------- |
|
|
|
|
| [GE-gml:PO-0001](Validierung/Anforderungen/ge_gml_po_0001) | 2+ Ringe schneiden sich | GE_P_INTERSECTING_RINGS | C_GE_P_INTERSECTING_RINGS |
|
|
|
|
| [GE-gml:PO-0002](Validierung/Anforderungen/ge_gml_po_0002) | 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 |
|
|
|
|
| [GE-gml:PO-0003](Validierung/Anforderungen/ge_gml_po_0003) | Innenfläche ist nicht verbunden | GE_P_INTERIOR_DISCONNECTED | C_GE_P_INTERIOR_DISCONNECTED |
|
|
|
|
| [GE-gml:PO-0004](Validierung/Anforderungen/ge_gml_po_0004) | 1+ inneren Ringe ist komplett außerhalb des Polygons | GE_P_HOLE_OUTSIDE | C_GE_P_HOLE_OUTSIDE |
|
|
|
|
| [GE-gml:PO-0005](Validierung/Anforderungen/ge_gml_po_0005) | Innerer Ring ist komplett innerhalb eines anderen inneren Rings | GE_P_INNER_RINGS_NESTED | C_GE_P_INNER_RINGS_NESTED |
|
|
|
|
| [GE-gml:PO-0006](Validierung/Anforderungen/ge_gml_po_0006) | Äußerer Ring und innerer Ring haben die selbe Orientation | GE_P_ORIENTATION_RINGS_SAME | C_GE_P_ORIENTATION_RINGS_SAME |
|
|
|
|
| GE-gml:PO-all | Container für: GE-gml:PO-0001, GE-gml:PO-0002, GE-gml:PO-0003, GE-gml:PO-0004, GE-gml:PO-0005, GE-gml:PO-0006, GE-gml:LR-all | -- | -- |
|
|
|
|
|
|
|
|
#### Solid/ Hülle (Shell)
|
|
|
|
|
|
|
|
| Anforderungs ID | Beschreibung | Fehlercode | Bekannte Prüfungen |
|
|
|
|
| --------------- | ------------ | ---------- |-------------------- |
|
|
|
|
| [GE-gml:SO-0001](Validierung/Anforderungen/ge_gml_so_0001) | <4 Polygone | GE_S_TOO_FEW_POLYGONS | C_GE_S_TOO_FEW_POLYGONS |
|
|
|
|
| [GE-gml:SO-0002](Validierung/Anforderungen/ge_gml_so_0002) | Die Hülle ist nicht wasserdicht / hat 1+ Löcher | GE_S_NOT_CLOSED | C_GE_S_NOT_CLOSED |
|
|
|
|
| [GE-gml:SO-0003](Validierung/Anforderungen/ge_gml_so_0003) | 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 |
|
|
|
|
| [GE-gml:SO-0004](Validierung/Anforderungen/ge_gml_so_0004) | An jeder Kante dürfen nur 2 Polygon anliegen | GE_S_NON_MANIFOLD_EDGE | C_GE_S_NON_MANIFOLD_EDGE |
|
|
|
|
| [GE-gml:SO-0005](Validierung/Anforderungen/ge_gml_so_0005) | Alle Polygone müssen über Punkte und Kanten verbunden sein | GE_S_MULTIPLE_CONNECTED_COMPONENTS | C_GE_S_MULTIPLE_CONNECTED_COMPONENTS |
|
|
|
|
| [GE-gml:SO-0006](Validierung/Anforderungen/ge_gml_so_0006) | Die Hülle selbstverschneidet sich | GE_S_SELF_INTERSECTION | C_GE_S_SELF_INTERSECTION |
|
|
|
|
| [GE-gml:SO-0007](Validierung/Anforderungen/ge_gml_so_0007) | Die Orientierung eines Polygons ist falsch | GE_S_POLYGON_WRONG_ORIENTATION | C_GE_S_POLYGON_WRONG_ORIENTATION |
|
|
|
|
| [GE-gml:SO-0008](Validierung/Anforderungen/ge_gml_so_0008) | Alle Polygone zeigen in die falsche Richtung | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION |
|
|
|
|
|
|
|
|
#### Parameter Überblick
|
|
|
|
|
|
|
|
| Name | Beschreibung | Verwendet in |
|
|
|
|
| ---- | ------------ | ------------ |
|
|
|
|
| minVertexDistance | Minimale Abstand zwischen zwei Punkten bevor sie als der selbe Punkt angesehen werden | GE_gml_LR_0001, GE_gml_LR_0002, GE_gml_LR_0003, GE_gml_LR_0004, GE_gml_PO_0001, GE_gml_PO_0003, GE_gml_SO_0007 |
|
|
|
|
| type | Planaritätsprüfungsart, kann *distance*, *angle*, *both* sein | GE_gml_PO_0002 |
|
|
|
|
| distanceTolerance | Maximale Distanz eines Punktes von der Ausgleichsebene eines Polygons bevor es als Fehler angesehen wird | GE_gml_PO_0002 |
|
|
|
|
| angleTolerance | Maximale Differenz im Winkel bevor ein Polygon nicht mehr als Planar angesehen wird | GE_gml_PO_0002 |
|
|
|
|
|
|
|
|
#### 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.
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
graph TD;
|
|
|
|
X0001[SC-SCHEMA-VALIDATION]
|
|
|
|
R0001[C_GE_R_TOO_FEW_POINTS]
|
|
|
|
R0002[C_GE_R_DUPLICATE_POINT/C_GE_R_CONCECUTIVE_POINTS_SAME]
|
|
|
|
R0003[C_GE_R_NOT_CLOSED]
|
|
|
|
R0004[C_GE_R_SELF_INTERSECTION]
|
|
|
|
P0001[C_GE_P_INTERSECTING_RINGS]
|
|
|
|
P0002[C_GE_P_NON_PLANAR]
|
|
|
|
P0003[C_GE_P_INTERIOR_DISCONNECTED]
|
|
|
|
P0004[C_GE_P_HOLE_OUTSIDE]
|
|
|
|
P0005[C_GE_P_INNER_RINGS_NESTED]
|
|
|
|
P0006[C_GE_P_ORIENTATION_RINGS_SAME]
|
|
|
|
|
|
|
|
S0001[C_GE_S_TOO_FEW_POLYGONS]
|
|
|
|
S0002[C_GE_S_NOT_CLOSED]
|
|
|
|
S0003[C_GE_S_NON_MANIFOLD_VERTEX]
|
|
|
|
S0004[C_GE_S_NON_MANIFOLD_EDGE]
|
|
|
|
S0005[C_GE_S_MULTIPLE_CONNECTED_COMPONENTS]
|
|
|
|
S0006[C_GE_S_SELF_INTERSECTION]
|
|
|
|
S0007[C_GE_S_POLYGON_WRONG_ORIENTATION]
|
|
|
|
S0008[C_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 and Solid - Geometrie
|
|
|
|
Um die Definition eines Validierungsplans zu vereinfachen werden zwei neue Anfoderungen zusätzlich eingeführt. Diese Anfoderungen 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 |
|
|
|
|
| --------------- | ------------ | -------------- | ---------- |-------------------- |
|
|
|
|
| [GE-gml:MS-0001](Validierung/Anforderungen/GE_gml_MS_0001) | Valide Hüllengeometrie | SC-all-0001, GE-gml:PO-all | -- | -- |
|
|
|
|
| [GE-gml:SO-0009](Validierung/Anforderungen/GE_gml_SO_0009) | Valide Multisurface-Geometrie | SC-all-0001, GE-gml:PO-all, GE-gml:SO-0001, GE-gml:SO-0002, GE-gml:SO-0003, GE-gml:SO-0004, GE-gml:SO-0005, GE-gml:SO-0006, GE-gml:SO-0006 | -- | -- |
|
|
|
|
|
|
|
|
|
|
|
|
## Conformance Requirement
|
|
|
|
|
|
|
|
### Änderungsanträge
|
|
|
|
[Antrag 553: Markiere *CityGML Conformance Requirement 10.3.8.1 Building / Building Part* als veraltet](http://ogc.standardstracker.org/show_request.cgi?id=553)
|
|
|
|
|
|
|
|
## Semantische Anforderungen
|
|
|
|
|
|
|
|
n.d.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
SE-bldg:WS-PL
|
|
|
|
Eine Wandfläche besteht aus mehreren verbundenen Polygonen, die die selbe Flächennormale haben (innerhalb einer Toleranz).
|
|
|
|
|
|
|
|
|
|
|
|
SE-bldg:RS-PL
|
|
|
|
Eine Dachfläche besteht aus mehreren verbundenen Polygonen, die die selbe Flächennormale haben (innerhalb einer Toleranz). |
|
|
\ No newline at end of file |