Commit f7d00dee authored by Matthias Betz's avatar Matthias Betz
Browse files

upload of CityDoctor2 Documentation

parent cd022528
Pipeline #7225 passed with stages
in 12 seconds
# R_GE_S_POLYGON_WRONG_ORIENTATION
## Anforderung
| ID | R_GE_S_POLYGON_WRONG_ORIENTATION |
|---- | ---- |
| Beschreibung | Ein Polygon muss so orientiert sein, dass die Normale des äußeren Ring nach außen zeigt. The points are ordered counter-clockwise. |
| Fehlercode | GE_S_POLYGON_WRONG_ORIENTATION |
![PolygonWrongOrientation](img/Testgebaeude-SO-0007.png)
## Prüfung
| ID | C_GE_S_POLYGON_WRONG_ORIENTATION|
|---- | ---- |
| Anforderungs ID | R_GE_S_POLYGON_WRONG_ORIENTATION |
| Vorbedingungen | R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, [R_GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [R_GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [R_GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md) |
| Beschreibung | |
| Fehlercode | GE_S_POLYGON_WRONG_ORIENTATION |
# R_GE_S_SELF_INTERSECTION
## Anforderung
| ID | R_GE_S_SELF_INTERSECTION |
|---- | ---- |
| Beschreibung| Der Solid darf sich nicht selbstverschneiden |
| Fehlercode | GE_S_SELF_INTERSECTION |
Beispiel (links = OK, rechts = Fehlerhaft):
![SelfIntersection](img/SelfIntersection.png)
## Prüfung
| ID | C_GE_S_SELF_INTERSECTION |
|---- | ---- |
| Anforderungs ID | R_GE_S_SELF_INTERSECTION |
| Vorbedingungen | R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL, [R_GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [R_GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [R_GE_S_NON_MANIFOLD_VERTEX](R_GE_S_NON_MANIFOLD_VERTEX.md), [R_GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md), [R_GE_S_MULTIPLE_CONNECTED_COMPONENTS](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md), [R_GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md) |
| Beschreibung | |
| Fehlercode | GE_S_SELF_INTERSECTION |
# R_GE_S_TOO_FEW_POLYGONS
## Anforderung
| ID | R_GE_S_TOO_FEW_POLYGONS |
|---- | ---- |
| Beschreibung | Solids müssen mindestens 4 Polygone haben. |
| Fehlercode | GE_S_TOO_FEW_POLYGONS |
## Prüfung
| ID | C_GE_S_TOO_FEW_POLYGONS |
|---- | ---- |
| Anforderungs ID | R_GE_S_TOO_FEW_POLYGONS |
| Vorbedingungen | R_SC_SCHEMA_VALIDATION, R_GE_R_ALL, R_GE_P_ALL |
| Beschreibung | |
| Fehlercode | GE_S_TOO_FEW_POLYGONS |
# Validierung von 3D Stadtmodellen in CityGML
## Begriffe und Definitionen
nach [CityGML Quality Interoperability Experiment, chapter 3](http://mail.opengeospatial.org/lists/lt.php?id=fR4CDVYeAlJfHwhTCwA)
**Validierung**
```
Prozess des validierens einer CityGML Datei nach spezifizierten Anforderungen. Eine valide Datei entspricht allen Anforderungen.
```
**Anforderungen**
```
Regeln und Einschränkungen, die die Datenstruktur eindeutig definieren. Anforderungen können von dem CityGML Standard Dokument abgleitet werden oder gesondert, als Anforderung an den CityGML Standard, definiert werden um Mehrdeutigkeiten des Standards zu verhindern oder zusätzliche nutzerabhängige Anforderungen zu definieren.
```
**Prüfung**
```
Algorithmische Implementation um eine Anforderung innerhalb eines Validerungsprogramms zu prüfen.
```
**Fehler**
```
Ergebnis einer Prüfung im Falle einer Nichtkonformität von Anforderungen.
```
**Validierungsplan**
```
Strukturierte Liste von Anforderungen, überlicherweise angepasst an den konkreten Fall.
```
### Zusätzliche Defintionen:
**XSD valide**
```
Eine CityGML Datei XSD valide wenn sie dem CityGML XML Schema entspricht.
```
# Erster Start
## Start
Nach dem entpacken der Zip Datei sollte je nach Version (GUI oder Batch) eine Struktur ähnlich diesem Bild rauskommen (Beispiel CityDoctorGUI):
![extracted](img/extracted.png)
Um CityDoctor zu starten kann die start.bat verwendet werden.
Die .bat Datei enthält dabei nur den Befehl:
```
java -classpath libs/*;plugins/*;CityDoctorGUI-3.12.0.jar de.hft.stuttgart.citydoctor2.gui.MainWindow
```
!!! note
Der Befehl hat sich über die Versionshistorie von CityDoctor verändert.
Für die Batch Version ist der Befehl analog und kann entsprechend für andere Betriebsysteme angepasst werden.
!!! note
Für Linux oder Mac kann dieser Befehl auch verwendet werden, es muss nur das ";" durch ":" ersetzt werden. Der Rest bleibt gleich.
# Geometrieanforderungen
## Fehlercodes for geometrische Fehler
Die Fehlercodes wurden übernommen aus dem [CityGML Quality Interoperability Experiment, chapter 7.5](http://mail.opengeospatial.org/lists/lt.php?id=fR4CDVYeAlJfHwhTCwA).
!!! 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](basic.md). 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))]( https://doi.org/10.1111/mice.12043):
## Linear Ring
| Anforderungs ID | Beschreibung | Fehlercode | Bekannte Prüfungen |
| --------------- | ------------ | ---------- |-------------------- |
| [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md)| Zu wenig Punkte in einem Ring | GE_R_TOO_FEW_POINTS | C_GE_R_TOO_FEW_POINTS |
| [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md)| 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](R_GE_R_NOT_CLOSED.md)| Der erste und letzte Punkt sind nicht gleich | GE_R_NOT_CLOSED | C_GE_R_NOT_CLOSED |
| [R_GE_R_SELF_INTERSECTION](R_GE_R_SELF_INTERSECTION.md)| 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](R_GE_R_COLLAPSED_TO_LINE.md)| **Momentan nicht in Benutzung, da redundant mit R_GE_R_SELF_INTERSECTION**<br/> 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](R_GE_P_INTERSECTING_RINGS.md) | 2+ Ringe schneiden sich | GE_P_INTERSECTING_RINGS | C_GE_P_INTERSECTING_RINGS |
| [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md) | 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](R_GE_P_INTERIOR_DISCONNECTED.md) | Innenfläche ist nicht verbunden | GE_P_INTERIOR_DISCONNECTED | C_GE_P_INTERIOR_DISCONNECTED |
| [R_GE_P_HOLE_OUTSIDE](R_GE_P_HOLE_OUTSIDE.md) | 1+ inneren Ringe ist komplett außerhalb des Polygons | GE_P_HOLE_OUTSIDE | C_GE_P_HOLE_OUTSIDE |
| [R_GE_P_INNER_RINGS_NESTED](R_GE_P_INNER_RINGS_NESTED.md) | 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](R_GE_P_ORIENTATION_RINGS_SAME.md) | Ä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](R_GE_S_TOO_FEW_POLYGONS.md) | <4 Polygone | GE_S_TOO_FEW_POLYGONS | C_GE_S_TOO_FEW_POLYGONS |
| [R_GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md) | 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](R_GE_S_NON_MANIFOLD_VERTEX.md) | 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](R_GE_S_NON_MANIFOLD_EDGE.md) | 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](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md) | 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](R_GE_S_SELF_INTERSECTION.md) | Die Hülle selbstverschneidet sich | GE_S_SELF_INTERSECTION | C_GE_S_SELF_INTERSECTION |
| [R_GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md) | Die Orientierung eines Polygons ist falsch | GE_S_POLYGON_WRONG_ORIENTATION | C_GE_S_POLYGON_WRONG_ORIENTATION |
| [R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION](R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md) | 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.
``` mermaid
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](R_GE_MS.md) | Valide Multisurface-Geometrie | R_SC-SCHEMA-VALIDATION, R_GE_P_ALL | -- | -- |
| [R_GE_SO](R_GE_SO.md) | Valide Hüllengeometrie | R_SC-SCHEMA-VALIDATION, R_GE_S_ALL | -- | -- |
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment