From 194140199112f2b156999cf2761167d333345b99 Mon Sep 17 00:00:00 2001 From: Matthias Betz Date: Fri, 17 Jul 2026 11:30:57 +0200 Subject: [PATCH] Review German geometry-error docs, translate to English, rebuild site German docs (docs/de): - Fix broken shell cross-links (missing R_ prefix), missing .md, old wiki path, and wrong/missing #vertex anchors - Fix error/check codes: CONCECUTIVE->CONSECUTIVE, C_ prefix on collapsed-to-line check, GS_S_->GE_S_ typo, correct requirement-ID and expected-result cells - Fix German spelling/grammar and remove stray English fragments - Unify headings/labels, remove stray
lines - Repoint all figure links from external GitLab URLs to local img/ English docs (docs/en): - Translate all 21 R_GE_* detail files from the wiki-pointer stubs, preserving IDs, codes, links, images and tables verbatim - Fix CONCECUTIVE->CONSECUTIVE in geometric.md Rebuild both mkdocs sites into public/de and public/en. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/de/R_GE_MS.md | 21 +- docs/de/R_GE_P_HOLE_OUTSIDE.md | 28 +- docs/de/R_GE_P_INNER_RINGS_NESTED.md | 27 +- docs/de/R_GE_P_INTERIOR_DISCONNECTED.md | 32 +- docs/de/R_GE_P_INTERSECTING_RINGS.md | 34 +- docs/de/R_GE_P_NON_PLANAR.md | 38 +- docs/de/R_GE_P_ORIENTATION_RINGS_SAME.md | 27 +- docs/de/R_GE_R_COLLAPSED_TO_LINE.md | 26 +- docs/de/R_GE_R_CONSECUTIVE_POINTS_SAME.md | 74 +- docs/de/R_GE_R_NOT_CLOSED.md | 46 +- docs/de/R_GE_R_SELF_INTERSECTION.md | 51 +- docs/de/R_GE_R_TOO_FEW_POINTS.md | 57 +- docs/de/R_GE_SO.md | 19 +- .../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md | 24 +- .../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md | 26 +- docs/de/R_GE_S_NON_MANIFOLD_EDGE.md | 27 +- docs/de/R_GE_S_NON_MANIFOLD_VERTEX.md | 25 +- docs/de/R_GE_S_NOT_CLOSED.md | 29 +- docs/de/R_GE_S_POLYGON_WRONG_ORIENTATION.md | 26 +- docs/de/R_GE_S_SELF_INTERSECTION.md | 29 +- docs/de/R_GE_S_TOO_FEW_POLYGONS.md | 26 +- docs/de/geometric.md | 6 +- docs/en/R_GE_MS.md | 21 +- docs/en/R_GE_P_HOLE_OUTSIDE.md | 28 +- docs/en/R_GE_P_INNER_RINGS_NESTED.md | 27 +- docs/en/R_GE_P_INTERIOR_DISCONNECTED.md | 32 +- docs/en/R_GE_P_INTERSECTING_RINGS.md | 34 +- docs/en/R_GE_P_NON_PLANAR.md | 38 +- docs/en/R_GE_P_ORIENTATION_RINGS_SAME.md | 27 +- docs/en/R_GE_R_COLLAPSED_TO_LINE.md | 26 +- docs/en/R_GE_R_CONSECUTIVE_POINTS_SAME.md | 74 +- docs/en/R_GE_R_NOT_CLOSED.md | 46 +- docs/en/R_GE_R_SELF_INTERSECTION.md | 51 +- docs/en/R_GE_R_TOO_FEW_POINTS.md | 57 +- docs/en/R_GE_SO.md | 19 +- .../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md | 24 +- .../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md | 26 +- docs/en/R_GE_S_NON_MANIFOLD_EDGE.md | 27 +- docs/en/R_GE_S_NON_MANIFOLD_VERTEX.md | 25 +- docs/en/R_GE_S_NOT_CLOSED.md | 29 +- docs/en/R_GE_S_POLYGON_WRONG_ORIENTATION.md | 26 +- docs/en/R_GE_S_SELF_INTERSECTION.md | 29 +- docs/en/R_GE_S_TOO_FEW_POLYGONS.md | 26 +- docs/en/geometric.md | 2 +- public/de/404.html | 735 ++++++------------ public/de/R_GE_MS/index.html | 399 +++++----- public/de/R_GE_P_HOLE_OUTSIDE/index.html | 430 +++++----- .../de/R_GE_P_INNER_RINGS_NESTED/index.html | 430 +++++----- .../R_GE_P_INTERIOR_DISCONNECTED/index.html | 440 ++++++----- .../de/R_GE_P_INTERSECTING_RINGS/index.html | 442 ++++++----- public/de/R_GE_P_NON_PLANAR/index.html | 464 ++++++----- .../R_GE_P_ORIENTATION_RINGS_SAME/index.html | 430 +++++----- public/de/R_GE_R_COLLAPSED_TO_LINE/index.html | 424 +++++----- .../R_GE_R_CONSECUTIVE_POINTS_SAME/index.html | 508 +++++++----- public/de/R_GE_R_NOT_CLOSED/index.html | 454 ++++++----- public/de/R_GE_R_SELF_INTERSECTION/index.html | 487 +++++++----- public/de/R_GE_R_TOO_FEW_POINTS/index.html | 459 ++++++----- public/de/R_GE_SO/index.html | 399 +++++----- .../index.html | 428 +++++----- .../index.html | 429 +++++----- public/de/R_GE_S_NON_MANIFOLD_EDGE/index.html | 433 ++++++----- .../de/R_GE_S_NON_MANIFOLD_VERTEX/index.html | 428 +++++----- public/de/R_GE_S_NOT_CLOSED/index.html | 430 +++++----- .../index.html | 429 +++++----- public/de/R_GE_S_SELF_INTERSECTION/index.html | 430 +++++----- public/de/R_GE_S_TOO_FEW_POLYGONS/index.html | 428 +++++----- .../assets/javascripts/bundle.51d95adb.min.js | 29 + .../javascripts/bundle.51d95adb.min.js.map | 8 + .../assets/javascripts/bundle.56dfad97.min.js | 16 - .../javascripts/bundle.56dfad97.min.js.map | 7 - .../javascripts/lunr/min/lunr.el.min.js | 1 - .../javascripts/lunr/min/lunr.he.min.js | 1 - .../javascripts/lunr/min/lunr.hy.min.js | 1 - .../javascripts/lunr/min/lunr.kn.min.js | 1 - .../javascripts/lunr/min/lunr.ko.min.js | 2 +- .../javascripts/lunr/min/lunr.sa.min.js | 1 - .../javascripts/lunr/min/lunr.te.min.js | 1 - .../javascripts/lunr/min/lunr.zh.min.js | 2 +- public/de/assets/javascripts/lunr/wordcut.js | 4 +- ...07f07601.min.js => search.e5c33ebb.min.js} | 18 +- .../workers/search.e5c33ebb.min.js.map} | 9 +- .../assets/stylesheets/main.35f28582.min.css | 1 - .../stylesheets/main.35f28582.min.css.map | 1 - .../assets/stylesheets/main.558e4712.min.css | 1 + .../stylesheets/main.558e4712.min.css.map | 1 + .../stylesheets/palette.06af60db.min.css | 1 - .../stylesheets/palette.06af60db.min.css.map | 1 - .../stylesheets/palette.2505c338.min.css | 1 + .../stylesheets/palette.2505c338.min.css.map | 1 + public/de/basic/index.html | 341 +++----- public/de/firstRun/index.html | 329 +++----- public/de/geometric/index.html | 425 ++++------ public/de/index.html | 311 +++----- public/de/qual_ade/index.html | 311 +++----- public/de/requiredSoftware/index.html | 365 ++++----- public/de/requirements/index.html | 311 +++----- public/de/schemaRequirements/index.html | 353 ++++----- public/de/search/search_index.json | 2 +- public/de/semantic/index.html | 365 ++++----- public/de/sitemap.xml | 117 ++- public/de/sitemap.xml.gz | Bin 596 -> 619 bytes public/de/udt_about/index.html | 339 +++----- public/de/udt_req_data_model/index.html | 310 +++----- public/de/udt_req_overview/index.html | 309 +++----- public/de/udt_req_sem/index.html | 310 +++----- public/de/udt_req_topo/index.html | 310 +++----- public/de/udt_terms/index.html | 315 +++----- public/de/userInterface/index.html | 365 ++++----- public/de/validationPlan/index.html | 311 +++----- public/de/zipFiles/index.html | 401 ++++------ public/en/404.html | 735 ++++++------------ public/en/R_GE_MS/index.html | 399 +++++----- public/en/R_GE_P_HOLE_OUTSIDE/index.html | 430 +++++----- .../en/R_GE_P_INNER_RINGS_NESTED/index.html | 430 +++++----- .../R_GE_P_INTERIOR_DISCONNECTED/index.html | 440 ++++++----- .../en/R_GE_P_INTERSECTING_RINGS/index.html | 442 ++++++----- public/en/R_GE_P_NON_PLANAR/index.html | 464 ++++++----- .../R_GE_P_ORIENTATION_RINGS_SAME/index.html | 430 +++++----- public/en/R_GE_R_COLLAPSED_TO_LINE/index.html | 424 +++++----- .../R_GE_R_CONSECUTIVE_POINTS_SAME/index.html | 508 +++++++----- public/en/R_GE_R_NOT_CLOSED/index.html | 454 ++++++----- public/en/R_GE_R_SELF_INTERSECTION/index.html | 487 +++++++----- public/en/R_GE_R_TOO_FEW_POINTS/index.html | 459 ++++++----- public/en/R_GE_SO/index.html | 399 +++++----- .../index.html | 428 +++++----- .../index.html | 429 +++++----- public/en/R_GE_S_NON_MANIFOLD_EDGE/index.html | 433 ++++++----- .../en/R_GE_S_NON_MANIFOLD_VERTEX/index.html | 428 +++++----- public/en/R_GE_S_NOT_CLOSED/index.html | 430 +++++----- .../index.html | 429 +++++----- public/en/R_GE_S_SELF_INTERSECTION/index.html | 430 +++++----- public/en/R_GE_S_TOO_FEW_POLYGONS/index.html | 428 +++++----- .../assets/javascripts/bundle.51d95adb.min.js | 29 + .../javascripts/bundle.51d95adb.min.js.map | 8 + .../assets/javascripts/bundle.56dfad97.min.js | 16 - .../javascripts/bundle.56dfad97.min.js.map | 7 - .../javascripts/lunr/min/lunr.el.min.js | 1 - .../javascripts/lunr/min/lunr.he.min.js | 1 - .../javascripts/lunr/min/lunr.hy.min.js | 1 - .../javascripts/lunr/min/lunr.kn.min.js | 1 - .../javascripts/lunr/min/lunr.ko.min.js | 2 +- .../javascripts/lunr/min/lunr.sa.min.js | 1 - .../javascripts/lunr/min/lunr.te.min.js | 1 - .../javascripts/lunr/min/lunr.zh.min.js | 2 +- public/en/assets/javascripts/lunr/wordcut.js | 4 +- ...07f07601.min.js => search.e5c33ebb.min.js} | 18 +- .../workers/search.e5c33ebb.min.js.map} | 9 +- .../assets/stylesheets/main.35f28582.min.css | 1 - .../stylesheets/main.35f28582.min.css.map | 1 - .../assets/stylesheets/main.558e4712.min.css | 1 + .../stylesheets/main.558e4712.min.css.map | 1 + .../stylesheets/palette.06af60db.min.css | 1 - .../stylesheets/palette.06af60db.min.css.map | 1 - .../stylesheets/palette.2505c338.min.css | 1 + .../stylesheets/palette.2505c338.min.css.map | 1 + public/en/basic/index.html | 341 +++----- public/en/firstRun/index.html | 329 +++----- public/en/geometric/index.html | 417 ++++------ public/en/index.html | 311 +++----- public/en/qual_ade/index.html | 311 +++----- public/en/requiredSoftware/index.html | 365 ++++----- public/en/requirements/index.html | 311 +++----- public/en/schemaRequirements/index.html | 353 ++++----- public/en/search/search_index.json | 2 +- public/en/semantic/index.html | 365 ++++----- public/en/sitemap.xml | 117 ++- public/en/sitemap.xml.gz | Bin 596 -> 619 bytes public/en/udt_about/index.html | 339 +++----- public/en/udt_req_data_model/index.html | 327 +++----- public/en/udt_req_overview/index.html | 309 +++----- public/en/udt_req_sem/index.html | 310 +++----- public/en/udt_req_topo/index.html | 310 +++----- public/en/udt_terms/index.html | 315 +++----- public/en/userInterface/index.html | 365 ++++----- public/en/validationPlan/index.html | 311 +++----- public/en/zipFiles/index.html | 401 ++++------ 176 files changed, 16974 insertions(+), 16917 deletions(-) create mode 100644 public/de/assets/javascripts/bundle.51d95adb.min.js create mode 100644 public/de/assets/javascripts/bundle.51d95adb.min.js.map delete mode 100644 public/de/assets/javascripts/bundle.56dfad97.min.js delete mode 100644 public/de/assets/javascripts/bundle.56dfad97.min.js.map delete mode 100644 public/de/assets/javascripts/lunr/min/lunr.el.min.js delete mode 100644 public/de/assets/javascripts/lunr/min/lunr.he.min.js delete mode 100644 public/de/assets/javascripts/lunr/min/lunr.hy.min.js delete mode 100644 public/de/assets/javascripts/lunr/min/lunr.kn.min.js delete mode 100644 public/de/assets/javascripts/lunr/min/lunr.sa.min.js delete mode 100644 public/de/assets/javascripts/lunr/min/lunr.te.min.js rename public/de/assets/javascripts/workers/{search.07f07601.min.js => search.e5c33ebb.min.js} (66%) rename public/{en/assets/javascripts/workers/search.07f07601.min.js.map => de/assets/javascripts/workers/search.e5c33ebb.min.js.map} (70%) delete mode 100644 public/de/assets/stylesheets/main.35f28582.min.css delete mode 100644 public/de/assets/stylesheets/main.35f28582.min.css.map create mode 100644 public/de/assets/stylesheets/main.558e4712.min.css create mode 100644 public/de/assets/stylesheets/main.558e4712.min.css.map delete mode 100644 public/de/assets/stylesheets/palette.06af60db.min.css delete mode 100644 public/de/assets/stylesheets/palette.06af60db.min.css.map create mode 100644 public/de/assets/stylesheets/palette.2505c338.min.css create mode 100644 public/de/assets/stylesheets/palette.2505c338.min.css.map create mode 100644 public/en/assets/javascripts/bundle.51d95adb.min.js create mode 100644 public/en/assets/javascripts/bundle.51d95adb.min.js.map delete mode 100644 public/en/assets/javascripts/bundle.56dfad97.min.js delete mode 100644 public/en/assets/javascripts/bundle.56dfad97.min.js.map delete mode 100644 public/en/assets/javascripts/lunr/min/lunr.el.min.js delete mode 100644 public/en/assets/javascripts/lunr/min/lunr.he.min.js delete mode 100644 public/en/assets/javascripts/lunr/min/lunr.hy.min.js delete mode 100644 public/en/assets/javascripts/lunr/min/lunr.kn.min.js delete mode 100644 public/en/assets/javascripts/lunr/min/lunr.sa.min.js delete mode 100644 public/en/assets/javascripts/lunr/min/lunr.te.min.js rename public/en/assets/javascripts/workers/{search.07f07601.min.js => search.e5c33ebb.min.js} (66%) rename public/{de/assets/javascripts/workers/search.07f07601.min.js.map => en/assets/javascripts/workers/search.e5c33ebb.min.js.map} (70%) delete mode 100644 public/en/assets/stylesheets/main.35f28582.min.css delete mode 100644 public/en/assets/stylesheets/main.35f28582.min.css.map create mode 100644 public/en/assets/stylesheets/main.558e4712.min.css create mode 100644 public/en/assets/stylesheets/main.558e4712.min.css.map delete mode 100644 public/en/assets/stylesheets/palette.06af60db.min.css delete mode 100644 public/en/assets/stylesheets/palette.06af60db.min.css.map create mode 100644 public/en/assets/stylesheets/palette.2505c338.min.css create mode 100644 public/en/assets/stylesheets/palette.2505c338.min.css.map diff --git a/docs/de/R_GE_MS.md b/docs/de/R_GE_MS.md index 460ce77..9e9cc8a 100644 --- a/docs/de/R_GE_MS.md +++ b/docs/de/R_GE_MS.md @@ -1,4 +1,23 @@ # R_GE_MS -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_MS_0001](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_MS_0001) +## Anforderung + +| ID | R_GE_MS | +|---- | ---- | +| Beschreibung | Ein MultiSurface ist eine Sammlung von Polygonen ohne weitere Einschränkungen. Ein MultiSurface ist nur gültig, wenn alle Polygone gültig sind. Die Anforderungen [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md), [R_GE_R_SELF_INTERSECTION](R_GE_R_SELF_INTERSECTION.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_P_HOLE_OUTSIDE](R_GE_P_HOLE_OUTSIDE.md), [R_GE_P_INNER_RINGS_NESTED](R_GE_P_INNER_RINGS_NESTED.md), [R_GE_P_INTERIOR_DISCONNECTED](R_GE_P_INTERIOR_DISCONNECTED.md), [R_GE_P_INTERSECTING_RINGS](R_GE_P_INTERSECTING_RINGS.md), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) müssen erfüllt werden | +| Fehlercode | -- | + + + +## Prüfung + +Keine weiteren Prüfungen notwendig. Die einzelnen Anforderungen haben eigene Prüfungen für ihre Erfüllung. + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| + +Existierende Testfälle können verwendet werden. + diff --git a/docs/de/R_GE_P_HOLE_OUTSIDE.md b/docs/de/R_GE_P_HOLE_OUTSIDE.md index e50b5b7..e16d293 100644 --- a/docs/de/R_GE_P_HOLE_OUTSIDE.md +++ b/docs/de/R_GE_P_HOLE_OUTSIDE.md @@ -1,4 +1,30 @@ # R_GE_P_HOLE_OUTSIDE -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0004](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0004) +## Anforderung + +| ID | R_GE_P_HOLE_OUTSIDE | +|---- | ---- | +| Beschreibung | Innerer Ring darf nicht komplett außerhalb des äußeren Rings sein. | +| Fehlercode | GE_P_HOLE_OUTSIDE | + +Beispiel: +![HoleOutside](img/HoleOutside.png) + +## Prüfung + +| ID | C_GE_P_HOLE_OUTSIDE | +|---- | ---- | +| Anforderungs ID | R_GE_P_HOLE_OUTSIDE | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Beschreibung | | +| Fehlercode | GE_P_HOLE_OUTSIDE | + + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:PO-0004-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK für diese Anforderung, GE_S_NOT_CLOSED Fehler in späteren Prüfungen | +| GE-gml:PO-0004-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0004-T0001.gml | GE_P_HOLE_OUTSIDE in Polygon: _Simple_BD.1_PG.2 | diff --git a/docs/de/R_GE_P_INNER_RINGS_NESTED.md b/docs/de/R_GE_P_INNER_RINGS_NESTED.md index d5f7e5c..efcd384 100644 --- a/docs/de/R_GE_P_INNER_RINGS_NESTED.md +++ b/docs/de/R_GE_P_INNER_RINGS_NESTED.md @@ -1,3 +1,28 @@ # R_GE_P_INNER_RINGS_NESTED -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0005](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0005) +## Anforderung + +| ID | R_GE_P_INNER_RINGS_NESTED | +|---- | ---- | +| Beschreibung | Innere Ringe dürfen nicht innerhalb eines anderen inneren Rings sein. | +| Fehlercode | GE_P_INNER_RINGS_NESTED | + +Beispiel: +![NestedRings](img/NestedRings.png) + +## Prüfung + +| ID | C_GE_P_INNER_RINGS_NESTED | +|---- | ---- | +| Anforderungs ID | R_GE_P_INNER_RINGS_NESTED | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Beschreibung | | +| Fehlercode | GE_P_INNER_RINGS_NESTED | + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:PO-0005-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK für diese Anforderung, GE_S_NOT_CLOSED Fehler in späteren Prüfungen | +| GE-gml:PO-0005-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0005-T0001.gml | GE_P_INNER_RINGS_NESTED in Polygon: _Simple_BD.1_PG.2 | + diff --git a/docs/de/R_GE_P_INTERIOR_DISCONNECTED.md b/docs/de/R_GE_P_INTERIOR_DISCONNECTED.md index 4febd2d..f5062dc 100644 --- a/docs/de/R_GE_P_INTERIOR_DISCONNECTED.md +++ b/docs/de/R_GE_P_INTERIOR_DISCONNECTED.md @@ -1,4 +1,34 @@ # R_GE_P_INTERIOR_DISCONNECTED -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0003](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0003) +## Anforderung + +| ID | R_GE_P_INTERIOR_DISCONNECTED | +|---- | ---- | +| Beschreibung | Die innere Fläche eines Polygons muss verbunden sein. | +| Parameter minVertexDistance | Ein Punkt berührt eine Kante, wenn der Abstand kleiner als *minVertexDistance* ist, [siehe Vertex Anforderungen](geometric.md#vertex-punkt-anforderungen) | +| Fehlercode | GE_P_INTERIOR_DISCONNECTED | + +Beispiele: +![IntDiscoOneInnerRing](img/IntDiscoOneInnerRing.png) + +![IntDiscoTwoInnerRings](img/IntDiscoTwoInnerRings.png) + +## Prüfung + +| ID | C_GE_P_INTERIOR_DISCONNECTED | +|---- | ---- | +| Anforderungs ID | R_GE_P_INTERIOR_DISCONNECTED | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Beschreibung | | +| Fehlercode | GE_P_INTERIOR_DISCONNECTED | + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:PO-0003-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK für diese Anforderung, GE_S_NOT_CLOSED Fehler in späteren Prüfungen | +| GE-gml:PO-0003-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0003-T0001.gml | GE_P_INTERIOR_DISCONNECTED in Polygon _Simple_BD.1_PG.2 | +| GE-gml:PO-0003-T0003 | SimpleSolid_SrefBS-GE-gml-PO-0003-T0002.gml | GE_P_INTERIOR_DISCONNECTED in Polygon _Simple_BD.1_PG.2 | + diff --git a/docs/de/R_GE_P_INTERSECTING_RINGS.md b/docs/de/R_GE_P_INTERSECTING_RINGS.md index 1416881..70843cd 100644 --- a/docs/de/R_GE_P_INTERSECTING_RINGS.md +++ b/docs/de/R_GE_P_INTERSECTING_RINGS.md @@ -1,3 +1,35 @@ # R_GE_P_INTERSECTING_RINGS -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0001](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0001) \ No newline at end of file +## Anforderung + +| ID | R_GE_P_INTERSECTING_RINGS | +|---- | ---- | +| Beschreibung | Äußerer und innere Ringe dürfen sich nicht verschneiden | +| Parameter minVertexDistance | Zwei Ringe verschneiden sich nicht, wenn nur ein Punkt des einen Rings den Anderen berührt. Ein Punkt berührt eine Kante nur dann wenn der Abstand weniger als *minVertexDistance* ist. Punkte können als gleich angesehen werden, trotz (kleiner) Abstände, [siehe Vertex Anforderungen](geometric.md#vertex-punkt-anforderungen) | +| Fehlercode | GE_P_INTERSECTING_RINGS | + +Beispiele: + +Äußerer Ring verschneidet inneren Ring: +![exteriorIntersects](img/exteriorIntersects.png) + +Zwei innere Ringe verschneiden sich: +![interiorIntersects](img/interiorIntersects.png) + +## Prüfung + +| ID | C_GE_P_INTERSECTING_RINGS | +|---- | ---- | +| Anforderungs ID | R_GE_P_INTERSECTING_RINGS | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_HOLE_OUTSIDE](R_GE_P_HOLE_OUTSIDE.md), [R_GE_P_INNER_RINGS_NESTED](R_GE_P_INNER_RINGS_NESTED.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Beschreibung | Wenn ein Punkt eines inneren Rings außerhalb des äußeren ist oder innerhalb eines anderen inneren Rings, ist das eine Verschneidung. | +| Fehlercode | GE_P_INTERSECTING_RINGS | + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:PO-0001-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0001.gml | GE_P_INTERSECTING_RINGS in Polygon _Simple_BD.1_PG.2 | +| GE-gml:PO-0001-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK für diese Anforderung, GE_S_NOT_CLOSED Fehler in späteren Prüfungen | +| GE-gml:PO-0001-T0003 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0003.gml | GE_P_INTERSECTING_RINGS in Polygon _Simple_BD.1_PG.2 | diff --git a/docs/de/R_GE_P_NON_PLANAR.md b/docs/de/R_GE_P_NON_PLANAR.md index f6a47af..dfb0599 100644 --- a/docs/de/R_GE_P_NON_PLANAR.md +++ b/docs/de/R_GE_P_NON_PLANAR.md @@ -1,3 +1,39 @@ # R_GE_P_NON_PLANAR -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0002](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0002) +## Anforderung + +| ID | R_GE_P_NON_PLANAR | +|---- | ---- | +| Beschreibung | Jedes Polygon muss planar sein. Planarität ist erreicht, wenn kein Punkt weiter als *distanceTolerance* von der Regressionsebene aller Punkte entfernt ist, sowie die Normalen jedes Dreiecks des tessellierten Polygons keine größere Winkelabweichung als *angleTolerance* haben. | +| Parameter 1: type | Der Typ der Planaritätsprüfung kann ausgewählt werden. Muss eins von *distance*, *angle*, *both* sein. | +| Parameter 2: distanceTolerance | Toleranz der Distanz eines Punktes von der Regressionsebene | +| Parameter 3: angleTolerance | Toleranz des Winkels der Dreiecksnormalen | +| Fehlercodes | GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION | + +Normalen Abweichung: +![normalDeviation](img/normalDeviation.png) + + +## Prüfung + +| ID | C_GE_P_NON_PLANAR | +|---- | ---- | +| Anforderungs ID | R_GE_P_NON_PLANAR | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring) | +| Beschreibung | Um die Normalenabweichung zu bestimmen, werden alle Polygone tesselliert, um die Dreiecksnormalen zu berechnen, deren Winkel für den Vergleich verwendet werden. Die Tessellierung der Polygone ist nicht eindeutig und damit ist das Ergebnis der Prüfung der Normalenabweichung nicht eindeutig.
Für die Distanzprüfung wird eine Regressionsebene aus allen Polygonpunkten erstellt, um den Abstand der Punkte zu dieser Ebene zu berechnen. | +| Fehlercode | GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION | + +## Implementierung + +In CityDoctor2 ist nur die Abstandsprüfung standardmäßig aktiv, da die Normalenprüfung keine deterministischen Ergebnisse liefert. + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:PO-0002-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK für diese Anforderung, GE_S_NOT_CLOSED Fehler in späteren Prüfungen | +| GE-gml:PO-0002-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml | GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE in _Simple_BD.1_PG.2 mit *distanceTolerance* = 0.01 | +| GE-gml:PO-0002-T0003 | SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml | OK für diese Anforderung mit *distanceTolerance* = 0.5, GE_P_ORIENTATION_RINGS_SAME in späteren Prüfungen | +| GE-gml:PO-0002-T0004 | SimpleSolid_SrefBS-GE-gml-PO-0002-T0002.gml | GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION in _Simple_BD.1_PG.1 mit Parameter type = angle | + diff --git a/docs/de/R_GE_P_ORIENTATION_RINGS_SAME.md b/docs/de/R_GE_P_ORIENTATION_RINGS_SAME.md index 07395d9..3f1fa21 100644 --- a/docs/de/R_GE_P_ORIENTATION_RINGS_SAME.md +++ b/docs/de/R_GE_P_ORIENTATION_RINGS_SAME.md @@ -1,4 +1,29 @@ # R_GE_P_ORIENTATION_RINGS_SAME -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0006](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_PO_0006) +## Anforderung + +| ID | R_GE_P_ORIENTATION_RINGS_SAME | +|---- | ---- | +| Beschreibung | Äußere und innere Ringe dürfen nicht die selbe Orientierung haben. | +| Fehlercode | GE_P_ORIENTATION_RINGS_SAME | + +Beispiel : +![OrientationSame](img/OrientationSame.png) + +## Prüfung + +| ID | C_GE_P_ORIENTATION_RINGS_SAME | +|---- | ---- | +| Anforderungs ID | R_GE_P_ORIENTATION_RINGS_SAME | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md) | +| Beschreibung | | +| Fehlercode | GE_P_ORIENTATION_RINGS_SAME | + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:PO-0006-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK | +| GE-gml:PO-0006-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0006-T0001.gml | GE_P_ORIENTATION_RINGS_SAME in Polygon: _Simple_BD.1_PG.2 | + diff --git a/docs/de/R_GE_R_COLLAPSED_TO_LINE.md b/docs/de/R_GE_R_COLLAPSED_TO_LINE.md index 81d8cfe..0b585da 100644 --- a/docs/de/R_GE_R_COLLAPSED_TO_LINE.md +++ b/docs/de/R_GE_R_COLLAPSED_TO_LINE.md @@ -1,4 +1,28 @@ # R_GE_R_COLLAPSED_TO_LINE -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0005](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0005) +## Anforderung +| ID | R_GE_R_COLLAPSED_TO_LINE | +|---- | ---- | +| Beschreibung | Ein Spezialfall von Selbstverschneidung (GE_R_SELF_INTERSECTION): Der Ring ist eine Linie. Wenn der Ring einen Punkt darstellt, dann wird dies durch die Anforderungen GE_R_TOO_FEW_POINTS / GE_R_CONSECUTIVE_POINTS_SAME geprüft ob es sich hierbei um einen Fehler handelt. | +| Fehlercode | GE_R_SELF_INTERSECTION, GE_R_COLLAPSED_TO_LINE, GE_R_TOO_FEW_POINTS, GE_R_CONSECUTIVE_POINTS_SAME | + + +## Prüfung + +| ID | C_GE_R_COLLAPSED_TO_LINE| +|---- | ---- | +| Anforderungs ID | R_GE_R_COLLAPSED_TO_LINE | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Beschreibung | Ring als ein Punkt kann nicht passieren, wegen den Vorbedingungen. | +| Fehlercode | GE_R_COLLAPSED_TO_LINE | + +Die Anforderung ist erfüllt mit [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) und [R_GE_R_SELF_INTERSECTION](R_GE_R_SELF_INTERSECTION.md) und benötigt demnach keine eigene Implementierung. + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +|GE-gml:LR-0005-T0001| GE-gml:LR-0005-T0001.gml| GE_R_SELF_INTERSECTION | + diff --git a/docs/de/R_GE_R_CONSECUTIVE_POINTS_SAME.md b/docs/de/R_GE_R_CONSECUTIVE_POINTS_SAME.md index b19c88a..e4ed5b4 100644 --- a/docs/de/R_GE_R_CONSECUTIVE_POINTS_SAME.md +++ b/docs/de/R_GE_R_CONSECUTIVE_POINTS_SAME.md @@ -1,5 +1,75 @@ # R_GE_R_CONSECUTIVE_POINTS_SAME -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0002](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0002) +## Anforderung - \ No newline at end of file +| ID | R_GE_R_CONSECUTIVE_POINTS_SAME | +|------------------------------ | ------ | +| Beschreibung | Punkte innerhalb eines Rings sollen sich nicht wiederholen (ausgenommen der erste und der letzte im Fall von GML, siehe [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md)). Dieser Fehler tritt oft auf, wenn zwei Punkte an derselben Stelle sind. | +| Parameter minVertexDistance | Punkte können als gleich angesehen werden, trotz (kleiner) Abstände, [siehe Vertex Anforderungen](geometric.md#vertex-punkt-anforderungen) | +| Fehlercode | GE_R_CONSECUTIVE_POINTS_SAME | + +Zum Beispiel dieser Ring ist fehlerhaft: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + +Dieser Ring ist auch Fehlerhaft mit dem Parameter minVertexDistance = 0.1 +```xml + +0.0 0.0 0.0 +0.05 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + +Das nächste Beispiel zeigt einen fehlerhaften Ring mit einem Punkt, der zwei mal vorkommt aber die Wiederholung nicht aufeinanderfolgend ist. Dies resultiert in einer Selbstverschneidung, dies ist mit dieser Anforderung nicht abgedeckt. + +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +1.0 0.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + + +## Prüfung + +| ID | C_GE_R_CONSECUTIVE_POINTS_SAME| +|---- | ---- | +| Anforderungs ID | R_GE_R_CONSECUTIVE_POINTS_SAME | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md) | +| Beschreibung | Prüft ob sich ein Punkt wiederholt | +| Fehlercode | GE_R_CONSECUTIVE_POINTS_SAME| + +| ID | C_GE_R_DUPLICATE_POINT| +|---- | ---- | +| Anforderungs ID | R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_SELF_INTERSECTION (teilweise) | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md) | +| Beschreibung | Erkennt aufeinanderfolgende als auch andere wiederholende Punkte. | +| Fehlercode | GE_R_CONSECUTIVE_POINTS_SAME, GE_R_SELF_INTERSECTION | + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +|GE-gml:LR-0002-T0001| SimpleSolid_SrefBS.gml | OK | +|GE-gml:LR-0002-T0002| SimpleSolid_SrefBS-GE-gml-LR-0002-T0001.gml| GE_R_CONSECUTIVE_POINTS_SAME in Ring:
_Simple_BD.1_PG.6_LR.1 | +|GE-gml:LR-0002-T0003| SimpleSolid_SrefBS-GE-gml-LR-0002-T0002.gml| OK nach dieser Anforderung, aber hat Fehler GE_R_SELF_INTERSECTION erkannt von C_GE_R_DUPLICATE_POINT | +|GE-gml:LR-0002-T0004| SimpleSolid_SrefBS-GE-gml-LR-0002-T0003.gml| OK nach dieser Anforderung, aber hat Fehler GE_R_SELF_INTERSECTION erkannt von C_GE_R_DUPLICATE_POINT | +|GE-gml:LR-0002-T0005| SimpleSolid_SrefBS-GE-gml-LR-0002-T0004.gml| GE_R_CONSECUTIVE_POINTS_SAME in Ring:
_Simple_BD.1_PG.6_LR.1
mit Parameter minVertexDistance = 0.1, GE_S_NOT_CLOSED Fehler wenn minVertexDistance = 0.01 | +|GE-gml:LR-0002-T0006| SimpleSolid_SrefBS-GE-gml-LR-0002-T0005.gml| Nicht ausgeführt da GE_R_TOO_FEW_POINTS in Ring:
_Simple_BD.1_PG.6_LR.1 | + \ No newline at end of file diff --git a/docs/de/R_GE_R_NOT_CLOSED.md b/docs/de/R_GE_R_NOT_CLOSED.md index 3905756..6264383 100644 --- a/docs/de/R_GE_R_NOT_CLOSED.md +++ b/docs/de/R_GE_R_NOT_CLOSED.md @@ -1,4 +1,48 @@ # R_GE_R_NOT_CLOSED -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0003](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0003) +## Anforderung +| ID | R_GE_R_NOT_CLOSED | +|---- | ---- | +| Beschreibung | Der erste und letzte Punkt müssen in GML der gleiche sein. | +| Parameter minVertexDistance | Punkte können als gleich angesehen werden, trotz (kleiner) Abstände, [siehe Vertex Anforderungen](geometric.md#vertex-punkt-anforderungen) | +| Fehlercode | GE_R_NOT_CLOSED | + +Zum Beispiel dieser Ring ist fehlerhaft: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 + +``` +OK mit Parameter minVertexDistance = 0.1: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.05 + +``` + + +## Prüfung + +| ID | C_GE_R_NOT_CLOSED | +| ---- | ---- | +| Anforderungs ID | R_GE_R_NOT_CLOSED | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md) | +| Beschreibung | Der erste und letzte Punkt innerhalb eines Rings sollen der gleiche sein. | +| Fehlercode | GE_R_NOT_CLOSED | + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +|GE-gml:LR-0003-T0001| SimpleSolid_SrefBS.gml | OK | +|GE-gml:LR-0003-T0002| SimpleSolid_SrefBS-GE-gml-LR-0003-T0001.gml | GE_R_NOT_CLOSED | +|GE-gml:LR-0003-T0003| SimpleSolid_SrefBS-GE-gml-LR-0003-T0002.gml | OK mit Parameter minVertexDistance = 0.1 | + \ No newline at end of file diff --git a/docs/de/R_GE_R_SELF_INTERSECTION.md b/docs/de/R_GE_R_SELF_INTERSECTION.md index a9a5d81..613f4bc 100644 --- a/docs/de/R_GE_R_SELF_INTERSECTION.md +++ b/docs/de/R_GE_R_SELF_INTERSECTION.md @@ -1,3 +1,52 @@ # R_GE_R_SELF_INTERSECTION -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0004](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0004) +## Anforderung + +| ID | R_GE_R_SELF_INTERSECTION | +|---- | ---- | +| Beschreibung | Ein Ring soll einfach sein, also sich nicht selbstverschneiden. Die Selbstverschneidung kann an einem konkreten Punkt sein, oder auch nicht. | +| Parameter minVertexDistance | Punkte können als gleich angesehen werden, trotz (kleiner) Abstände, [siehe Vertex Anforderungen](geometric.md#vertex-punkt-anforderungen). Dieser Parameter wird auch dazu verwendet um zu bestimmen wann ein Punkt eine Kante berührt. | +| Fehlercode | GE_R_SELF_INTERSECTION | + +Beispiele für Selbstverschneidungen: + +Schleife: +![BowtieSelfInt](img/BowtieSelfInt.png) + +Punkt berührt Kante mit Parameter minVertexDistance: +![TouchingEdge](img/TouchingEdge.png) + +Doppelte Punkte: +![Duplicate points](img/DuplicatePoints.png) + +Doppelte Kante (Gleich wie doppelte Punkte): +![LineSelfInt](img/LineSelfInt.png) + +## Prüfung + +| ID | C_GE_R_SELF_INTERSECTION| +|---- | ---- | +| Anforderungs ID | R_GE_R_SELF_INTERSECTION | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Beschreibung | Erkennt doppelte Punkte und Selbstverschneidende Kanten. | +| Fehlercodes | GE_R_SELF_INTERSECTION | + +| ID | C_GE_R_DUPLICATE_POINT| +|---- | ---- | +| Anforderungs ID | R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_SELF_INTERSECTION (teilweise) | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Beschreibung | Erkennt wiederholende und nicht wiederholende doppelte Punkte. Letzteres ist eine Selbstverschneidung. | +| Fehlercodes | GE_R_CONSECUTIVE_POINTS_SAME, GE_R_SELF_INTERSECTION | + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:LR-0004-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:LR-0004-T0002 | SimpleSolid_SrefBS-GE-gml-LR-0002-T0002.gml | Doppelte Punkte (Beispiel, nicht representativ für Fehler in Modell):
![Duplicate points](img/DuplicatePoints.png)
GE_R_SELF_INTERSECTION in Ring: _Simple_BD.1_PG.6_LR.1 | +| GE-gml:LR-0004-T0003 | SimpleSolid_SrefBS-GE-gml-LR-0002-T0003.gml | Doppelte Punkte (resultiert in einer doppelten Kante)
GE_R_SELF_INTERSECTION in Ring: _Simple_BD.1_PG.6_LR.1 | +| GE-gml:LR-0004-T0004 | SimpleSolid_SrefBS-GE-gml-LR-0004-T0004.gml | Schleife (Beispiel, nicht representativ für Fehler in Modell):
![BowtieSelfInt](img/BowtieSelfInt.png)
GE_R_SELF_INTERSECTION in Ring: _Simple_BD.1_PG.6_LR.1 | +| GE-gml:LR-0004-T0005 | SimpleSolid_SrefBS-GE-gml-LR-0004-T0005.gml | Berührender Punkt mit Parameter minVertexDistance = 0.1:
![TouchingEdge](img/TouchingEdge.png)
GE_R_SELF_INTERSECTION in Ring: _Simple_BD.1_PG.2_LR.1 | +| GE-gml:LR-0004-T0006 | SimpleSolid_SrefBS-GE-gml-LR-0004-T0005.gml | OK für diese Anforderung mit Parameter minVertexDistance = 0.01, GE_S_NOT_CLOSED in späteren Prüfungen | + \ No newline at end of file diff --git a/docs/de/R_GE_R_TOO_FEW_POINTS.md b/docs/de/R_GE_R_TOO_FEW_POINTS.md index eb02b7c..92c19ac 100644 --- a/docs/de/R_GE_R_TOO_FEW_POINTS.md +++ b/docs/de/R_GE_R_TOO_FEW_POINTS.md @@ -1,4 +1,59 @@ # R_GE_R_TOO_FEW_POINTS -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0001](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_LR_0001) + +## Anforderung + +| ID | R_GE_R_TOO_FEW_POINTS | +|---- | ---- | +| Beschreibung | Ein Ring muss mindestens 3 Punkte haben. Für GML-Ringe ignoriert diese Anforderung die Tatsache, dass der erste und der letzte Punkt gleich sind (siehe [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md)).
Ein GML-Ring ist nach dieser Anforderung valide, wenn er mindestens 3 unterschiedliche Punkte enthält, aber er ist dann nicht geschlossen (die Anforderung [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) ist nicht erfüllt). | +| Parameter minVertexDistance | Punkte können als gleich angesehen werden, trotz (kleiner) Abstände, [siehe Vertex Anforderungen](geometric.md#vertex-punkt-anforderungen) | +| Fehlercode | GE_R_TOO_FEW_POINTS | + +Zum Beispiel, dieser Ring ist fehlerhaft: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +0.0 0.0 0.0 + +``` +Valide Ringe: + + +(Dieser Ring ist nicht geschlossen, hat aber genug unterschiedliche Punkte, um dieser Anforderung zu genügen.) +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +0.0 1.0 0.0 + +``` + +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + +## Prüfung + +| ID | C_GE_R_TOO_FEW_POINTS| +|---- | ---- | +| Anforderungs ID | R_GE_R_TOO_FEW_POINTS | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Beschreibung | Ring muss mindestens 3 unterschiedliche Punkte beinhalten | +| Fehlercode | GE_R_TOO_FEW_POINTS| + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +|GE-gml:LR-0001-T0001| SimpleSolid_SrefBS.gml | OK | +|GE-gml:LR-0001-T0002| SimpleSolid_SrefBS-GE-gml-LR-0001-T0001.gml| GE_R_TOO_FEW_POINTS
in Ring: _Simple_BD.1_PG.6_LR.1 | +|GE-gml:LR-0001-T0003| SimpleSolid_SrefBS-GE-gml-LR-0001-T0002.gml| Prüfung nicht ausgeführt da GE_R_NOT_CLOSED
Ring _Simple_BD.1_PG.6_LR.1 ist nicht geschlossen, hat aber 3 Punkte.| + diff --git a/docs/de/R_GE_SO.md b/docs/de/R_GE_SO.md index 58f0c34..1308956 100644 --- a/docs/de/R_GE_SO.md +++ b/docs/de/R_GE_SO.md @@ -1,3 +1,20 @@ # R_GE_SO -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0009](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0009) +## Anforderung + +| ID | R_GE_SO | +|---- | ---- | +| Beschreibung | Ein Solid ist eine Sammlung von Polygonen mit Einschränkungen. Die Geometrie muss 'wasserdicht' sein. Siehe die Definition von Solids in Anhang A des CityGML QIE. Ein Solid ist gültig, wenn die Anforderungen [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_VERTEX](R_GE_S_NON_MANIFOLD_VERTEX.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md), [GE_S_MULTIPLE_CONNECTED_COMPONENTS](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md), [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md), [R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION](R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md), [R_GE_S_SELF_INTERSECTION](R_GE_S_SELF_INTERSECTION.md) erfüllt sind. | +| Fehlercode | -- | + + +## Prüfung + +keine weitere Prüfung notwendig + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| + +Existierende Testfälle der einzelnen Prüfungen können verwendet werden. diff --git a/docs/de/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md b/docs/de/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md index a0f6149..d38eef1 100644 --- a/docs/de/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md +++ b/docs/de/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md @@ -1,4 +1,26 @@ # R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0008](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0008) +## Anforderung + +| ID | R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | +|---- | ---- | +| Beschreibung | Alle Polygone haben die falsche Orientierung (definiert in [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md)), so dass alle Polygone nach innen zeigen. | +| Fehlercode | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | + +## Prüfung + +| ID | C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | +|---- | ---- | +| Anforderungs ID | R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | +| Vorbedingungen| [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_VERTEX](R_GE_S_NON_MANIFOLD_VERTEX.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md), [GE_S_MULTIPLE_CONNECTED_COMPONENTS](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md), [GE_S_SELF_INTERSECTION](R_GE_S_SELF_INTERSECTION.md), [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md) | +| Beschreibung | | +| Fehlercode | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:SO-0008-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0008-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0008-T0001.gml | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | + diff --git a/docs/de/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md b/docs/de/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md index 7cbdd9f..d954609 100644 --- a/docs/de/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md +++ b/docs/de/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md @@ -1,3 +1,27 @@ # R_GE_S_MULTIPLE_CONNECTED_COMPONENTS -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0005](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0005) +## Anforderung + +| ID | R_GE_S_MULTIPLE_CONNECTED_COMPONENTS | +|---- | ---- | +| Beschreibung | 1+ Polygone sind nicht mit derselben Hülle verbunden. | +| Fehlercode | GE_S_MULTIPLE_CONNECTED_COMPONENTS | + +![GE_gml_so_0005](img/GE_gml_so_0005.png) + +## Prüfung + +| ID | C_GE_S_MULTIPLE_CONNECTED_COMPONENTS| +|---- | ---- | +| Anforderungs ID | R_GE_S_MULTIPLE_CONNECTED_COMPONENTS | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Beschreibung | Erstelle einen doppelten Graphen (Polygone werden Knoten, Polygone, die eine Kante teilen werden im Graph verbunden). Wenn der Graph nicht verbunden ist, gibt es mehrere verbundene Komponenten. | +| Fehlercode | GE_S_MULTIPLE_CONNECTED_COMPONENTS | + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +|GE-gml:SO-0005-T0001| SimpleSolid_SrefBS.gml| OK | +|GE-gml:SO-0005-T0002| SimpleSolid_SrefBS-GE-gml-SO-0005-T0001.gml| GE_S_MULTIPLE_CONNECTED_COMPONENTS | diff --git a/docs/de/R_GE_S_NON_MANIFOLD_EDGE.md b/docs/de/R_GE_S_NON_MANIFOLD_EDGE.md index db01ae9..a53d5bf 100644 --- a/docs/de/R_GE_S_NON_MANIFOLD_EDGE.md +++ b/docs/de/R_GE_S_NON_MANIFOLD_EDGE.md @@ -1,3 +1,28 @@ # R_GE_S_NON_MANIFOLD_EDGE -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0004](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0004) +## Anforderung + +| ID | R_GE_S_NON_MANIFOLD_EDGE | +|---- | ---- | +| Beschreibung | Jede Kante sollte genau 2 Polygone begrenzen. | +| Fehlercode | GE_S_NON_MANIFOLD_EDGE | +| Kommentar | Diese Anforderung ist ähnlich zu [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md): Wenn eine Kante mehr als 2 Polygone begrenzt, dann ist es ein GE_S_NON_MANIFOLD_EDGE Fehler. Wenn eine Kante nur ein Polygon begrenzt, ist es ein GE_S_NOT_CLOSED Fehler (ein Loch im Solid) | + + +![image](img/image.png) + +## Prüfung + +| ID | C_GE_S_NON_MANIFOLD_EDGE| +|---- | ---- | +| Anforderungs ID | R_GE_S_NON_MANIFOLD_EDGE | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Beschreibung | | +| Fehlercode | GE_S_NON_MANIFOLD_EDGE | + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +|GE-gml:SO-0004-T0000| SimpleSolid_SrefBS.gml| OK | +|GE-gml:SO-0004-T0001| SimpleSolid_SrefBS-GE-gml-SO-0004-T0001.gml| GE_S_NON_MANIFOLD_EDGE | diff --git a/docs/de/R_GE_S_NON_MANIFOLD_VERTEX.md b/docs/de/R_GE_S_NON_MANIFOLD_VERTEX.md index e4f4143..f312ab0 100644 --- a/docs/de/R_GE_S_NON_MANIFOLD_VERTEX.md +++ b/docs/de/R_GE_S_NON_MANIFOLD_VERTEX.md @@ -1,6 +1,29 @@ # R_GE_S_NON_MANIFOLD_VERTEX -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0003](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0003) +## Anforderung + +| ID | R_GE_S_NON_MANIFOLD_VERTEX | +|---- | ---- | +| Beschreibung | Jedes Polygon das an einem Punkt eines Solids anliegt muss über Kanten mit den anderen anliegenden Polygonen verbunden sein. Punkt und anliegende Polygone müssen ein 'Regenschirm' erzeugen. | +| Fehlercode | GE_S_NON_MANIFOLD_VERTEX | + +## Prüfung + +| ID | C_GE_S_NON_MANIFOLD_VERTEX | +|---- | ---- | +| Anforderungs ID | R_GE_S_NON_MANIFOLD_VERTEX | +| Vorbedingungen| [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Beschreibung | | +| Fehlercode | GE_S_NON_MANIFOLD_VERTEX | + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:SO-0003-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0003-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0003-T0001.gml | GE_S_NON_MANIFOLD_VERTEX | + + diff --git a/docs/de/R_GE_S_NOT_CLOSED.md b/docs/de/R_GE_S_NOT_CLOSED.md index 0a60df6..b9b1b41 100644 --- a/docs/de/R_GE_S_NOT_CLOSED.md +++ b/docs/de/R_GE_S_NOT_CLOSED.md @@ -1,3 +1,30 @@ # R_GE_S_NOT_CLOSED -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0002](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0002) \ No newline at end of file +## Anforderung + +| ID | R_GE_S_NOT_CLOSED | +|---- | ---- | +| Beschreibung | Die Hülle darf keine Löcher haben, sie muss Wasserdicht sein. | +| Fehlercode | GE_S_NOT_CLOSED | + +![Closed](img/Closed.png) + +## Prüfung + +| ID | C_GE_S_NOT_CLOSED | +|---- | ---- | +| Anforderungs ID | R_GE_S_NOT_CLOSED | +| Vorbedingungen | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Beschreibung | | +| Fehlercode | GE_S_NOT_CLOSED | + +Die Prüfung sucht alle Kanten und ordnet sie den jeweiligen Gegenkanten zu. Falls eine Kante keine Gegenkante hat so wird hier ein Loch in der Hülle erkannt und ein Fehler herausgegeben. + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:SO-0002-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0002-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0002-T0001.gml | GE_S_NOT_CLOSED | + diff --git a/docs/de/R_GE_S_POLYGON_WRONG_ORIENTATION.md b/docs/de/R_GE_S_POLYGON_WRONG_ORIENTATION.md index 7f7def9..2326a36 100644 --- a/docs/de/R_GE_S_POLYGON_WRONG_ORIENTATION.md +++ b/docs/de/R_GE_S_POLYGON_WRONG_ORIENTATION.md @@ -1,3 +1,27 @@ # R_GE_S_POLYGON_WRONG_ORIENTATION -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0007](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0007) +## Anforderung + +| ID | R_GE_S_POLYGON_WRONG_ORIENTATION | +|---- | ---- | +| Beschreibung | Ein Polygon muss so orientiert sein, dass die Normale des äußeren Rings nach außen zeigt. Die Punkte sind gegen den Uhrzeigersinn angeordnet. | +| 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](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md) | +| Beschreibung | | +| Fehlercode | GE_S_POLYGON_WRONG_ORIENTATION | + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +|GE-gml:SO-0007-T0001| SimpleSolid_SrefBS.gml| OK | +|GE-gml:SO-0007-T0002| SimpleSolid_SrefBS-GE-gml-SO-0007-T0001.gml| GE_S_POLYGON_WRONG_ORIENTATION | diff --git a/docs/de/R_GE_S_SELF_INTERSECTION.md b/docs/de/R_GE_S_SELF_INTERSECTION.md index daa630f..7f3aff4 100644 --- a/docs/de/R_GE_S_SELF_INTERSECTION.md +++ b/docs/de/R_GE_S_SELF_INTERSECTION.md @@ -1,5 +1,32 @@ # R_GE_S_SELF_INTERSECTION -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0006](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0006) +## 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](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_VERTEX](R_GE_S_NON_MANIFOLD_VERTEX.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md), [GE_S_MULTIPLE_CONNECTED_COMPONENTS](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md), [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md) | +| Beschreibung | | +| Fehlercode | GE_S_SELF_INTERSECTION | + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:SO-0006-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0006-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0006-T0001.gml | GE_S_SELF_INTERSECTION | + + diff --git a/docs/de/R_GE_S_TOO_FEW_POLYGONS.md b/docs/de/R_GE_S_TOO_FEW_POLYGONS.md index f58f339..740aa30 100644 --- a/docs/de/R_GE_S_TOO_FEW_POLYGONS.md +++ b/docs/de/R_GE_S_TOO_FEW_POLYGONS.md @@ -1,5 +1,29 @@ # R_GE_S_TOO_FEW_POLYGONS -siehe [https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0001](https://gitlab.com/volkercoors/agqual3d/-/wikis/Validierung/Anforderungen/GE_gml_SO_0001) +## 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](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon) | +| Beschreibung | | +| Fehlercode | GE_S_TOO_FEW_POLYGONS | + + +## Testfälle + +| Testfall ID | CityGML Modell | Erwartetes Ergebnis | +|----|---------------|-----------------| +| GE-gml:SO-0001-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0001-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0001-T0001.gml | GE_S_TOO_FEW_POLYGONS | + + diff --git a/docs/de/geometric.md b/docs/de/geometric.md index e7a379e..4555d33 100644 --- a/docs/de/geometric.md +++ b/docs/de/geometric.md @@ -1,6 +1,6 @@ # Geometrieanforderungen -## Fehlercodes for geometrische Fehler +## Fehlercodes für 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 @@ -31,7 +31,7 @@ Die folgenden Anforderungen wurden auf den drei geometrischen Ebenen definiert [ | 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_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md)| 2 aufeinanderfolgende Punkte sind gleich | GE_R_CONSECUTIVE_POINTS_SAME | C_GE_R_CONSECUTIVE_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**
Ring ist ein Punkt oder eine Linie | GE_R_COLLAPSED_TO_LINE | C_GE_R_COLLAPSED_TO_LINE | @@ -125,7 +125,7 @@ graph TD; ``` ## 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. +Um die Definition eines Validierungsplans zu vereinfachen werden zwei neue Anforderungen 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 | | --------------- | ------------ | -------------- | ---------- |-------------------- | diff --git a/docs/en/R_GE_MS.md b/docs/en/R_GE_MS.md index ba51ab0..cd1b8da 100644 --- a/docs/en/R_GE_MS.md +++ b/docs/en/R_GE_MS.md @@ -1,4 +1,23 @@ # R_GE_MS -see [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_MS_0001](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_MS_0001) +## Requirement + +| ID | R_GE_MS | +|---- | ---- | +| Description | A MultiSurface is a collection of polygons without further restrictions. A MultiSurface is only valid if all polygons are valid. The requirements [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md), [R_GE_R_SELF_INTERSECTION](R_GE_R_SELF_INTERSECTION.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_P_HOLE_OUTSIDE](R_GE_P_HOLE_OUTSIDE.md), [R_GE_P_INNER_RINGS_NESTED](R_GE_P_INNER_RINGS_NESTED.md), [R_GE_P_INTERIOR_DISCONNECTED](R_GE_P_INTERIOR_DISCONNECTED.md), [R_GE_P_INTERSECTING_RINGS](R_GE_P_INTERSECTING_RINGS.md), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) must be satisfied | +| Error code | -- | + + + +## Check + +No further checks necessary. The individual requirements have their own checks to verify them. + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| + +Existing test cases can be used. + diff --git a/docs/en/R_GE_P_HOLE_OUTSIDE.md b/docs/en/R_GE_P_HOLE_OUTSIDE.md index fd3aae5..3c102e0 100644 --- a/docs/en/R_GE_P_HOLE_OUTSIDE.md +++ b/docs/en/R_GE_P_HOLE_OUTSIDE.md @@ -1,4 +1,30 @@ # R_GE_P_HOLE_OUTSIDE -see [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0004](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0004) +## Requirement + +| ID | R_GE_P_HOLE_OUTSIDE | +|---- | ---- | +| Description | An interior ring must not be completely outside the exterior ring. | +| Error code | GE_P_HOLE_OUTSIDE | + +Example: +![HoleOutside](img/HoleOutside.png) + +## Check + +| ID | C_GE_P_HOLE_OUTSIDE | +|---- | ---- | +| Requirement ID | R_GE_P_HOLE_OUTSIDE | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Description | | +| Error code | GE_P_HOLE_OUTSIDE | + + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:PO-0004-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK for this requirement, GE_S_NOT_CLOSED error in later checks | +| GE-gml:PO-0004-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0004-T0001.gml | GE_P_HOLE_OUTSIDE in Polygon: _Simple_BD.1_PG.2 | diff --git a/docs/en/R_GE_P_INNER_RINGS_NESTED.md b/docs/en/R_GE_P_INNER_RINGS_NESTED.md index 077b00e..8893c79 100644 --- a/docs/en/R_GE_P_INNER_RINGS_NESTED.md +++ b/docs/en/R_GE_P_INNER_RINGS_NESTED.md @@ -1,3 +1,28 @@ # R_GE_P_INNER_RINGS_NESTED -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0005](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0005) +## Requirement + +| ID | R_GE_P_INNER_RINGS_NESTED | +|---- | ---- | +| Description | Interior rings must not be inside another interior ring. | +| Error code | GE_P_INNER_RINGS_NESTED | + +Example: +![NestedRings](img/NestedRings.png) + +## Check + +| ID | C_GE_P_INNER_RINGS_NESTED | +|---- | ---- | +| Requirement ID | R_GE_P_INNER_RINGS_NESTED | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Description | | +| Error code | GE_P_INNER_RINGS_NESTED | + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:PO-0005-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK for this requirement, GE_S_NOT_CLOSED error in later checks | +| GE-gml:PO-0005-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0005-T0001.gml | GE_P_INNER_RINGS_NESTED in Polygon: _Simple_BD.1_PG.2 | + diff --git a/docs/en/R_GE_P_INTERIOR_DISCONNECTED.md b/docs/en/R_GE_P_INTERIOR_DISCONNECTED.md index 254e921..9070987 100644 --- a/docs/en/R_GE_P_INTERIOR_DISCONNECTED.md +++ b/docs/en/R_GE_P_INTERIOR_DISCONNECTED.md @@ -1,4 +1,34 @@ # R_GE_P_INTERIOR_DISCONNECTED -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0003](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0003) +## Requirement + +| ID | R_GE_P_INTERIOR_DISCONNECTED | +|---- | ---- | +| Description | The interior of a polygon must be connected. | +| Parameter minVertexDistance | A point touches an edge if the distance is smaller than *minVertexDistance*, [see Vertex Requirement](geometric.md#vertex-requirement) | +| Error code | GE_P_INTERIOR_DISCONNECTED | + +Examples: +![IntDiscoOneInnerRing](img/IntDiscoOneInnerRing.png) + +![IntDiscoTwoInnerRings](img/IntDiscoTwoInnerRings.png) + +## Check + +| ID | C_GE_P_INTERIOR_DISCONNECTED | +|---- | ---- | +| Requirement ID | R_GE_P_INTERIOR_DISCONNECTED | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Description | | +| Error code | GE_P_INTERIOR_DISCONNECTED | + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:PO-0003-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK for this requirement, GE_S_NOT_CLOSED error in later checks | +| GE-gml:PO-0003-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0003-T0001.gml | GE_P_INTERIOR_DISCONNECTED in Polygon _Simple_BD.1_PG.2 | +| GE-gml:PO-0003-T0003 | SimpleSolid_SrefBS-GE-gml-PO-0003-T0002.gml | GE_P_INTERIOR_DISCONNECTED in Polygon _Simple_BD.1_PG.2 | + diff --git a/docs/en/R_GE_P_INTERSECTING_RINGS.md b/docs/en/R_GE_P_INTERSECTING_RINGS.md index d402f71..f8aeac8 100644 --- a/docs/en/R_GE_P_INTERSECTING_RINGS.md +++ b/docs/en/R_GE_P_INTERSECTING_RINGS.md @@ -1,3 +1,35 @@ # R_GE_P_INTERSECTING_RINGS -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0001](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0001) \ No newline at end of file +## Requirement + +| ID | R_GE_P_INTERSECTING_RINGS | +|---- | ---- | +| Description | The exterior and interior rings must not intersect | +| Parameter minVertexDistance | Two rings do not intersect if only a single point of one ring touches the other. A point touches an edge only if the distance is less than *minVertexDistance*. Points can be considered the same despite (small) distances, [see Vertex Requirement](geometric.md#vertex-requirement) | +| Error code | GE_P_INTERSECTING_RINGS | + +Examples: + +Exterior ring intersects interior ring: +![exteriorIntersects](img/exteriorIntersects.png) + +Two interior rings intersect: +![interiorIntersects](img/interiorIntersects.png) + +## Check + +| ID | C_GE_P_INTERSECTING_RINGS | +|---- | ---- | +| Requirement ID | R_GE_P_INTERSECTING_RINGS | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md), [R_GE_P_HOLE_OUTSIDE](R_GE_P_HOLE_OUTSIDE.md), [R_GE_P_INNER_RINGS_NESTED](R_GE_P_INNER_RINGS_NESTED.md), [R_GE_P_ORIENTATION_RINGS_SAME](R_GE_P_ORIENTATION_RINGS_SAME.md) | +| Description | If a point of an interior ring is outside the exterior ring or inside another interior ring, this is an intersection. | +| Error code | GE_P_INTERSECTING_RINGS | + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:PO-0001-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0001.gml | GE_P_INTERSECTING_RINGS in Polygon _Simple_BD.1_PG.2 | +| GE-gml:PO-0001-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK for this requirement, GE_S_NOT_CLOSED error in later checks | +| GE-gml:PO-0001-T0003 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0003.gml | GE_P_INTERSECTING_RINGS in Polygon _Simple_BD.1_PG.2 | diff --git a/docs/en/R_GE_P_NON_PLANAR.md b/docs/en/R_GE_P_NON_PLANAR.md index 05e8dac..f7c01b3 100644 --- a/docs/en/R_GE_P_NON_PLANAR.md +++ b/docs/en/R_GE_P_NON_PLANAR.md @@ -1,3 +1,39 @@ # R_GE_P_NON_PLANAR -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0002](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0002) +## Requirement + +| ID | R_GE_P_NON_PLANAR | +|---- | ---- | +| Description | Every polygon must be planar. Planarity is achieved when no point is farther than *distanceTolerance* from the regression plane of all points, and the normals of every triangle of the tessellated polygon do not have an angular deviation greater than *angleTolerance*. | +| Parameter 1: type | The type of the planarity check can be selected. Must be one of *distance*, *angle*, *both*. | +| Parameter 2: distanceTolerance | Tolerance of the distance of a point from the regression plane | +| Parameter 3: angleTolerance | Tolerance of the angle of the triangle normals | +| Error codes | GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION | + +Normal deviation: +![normalDeviation](img/normalDeviation.png) + + +## Check + +| ID | C_GE_P_NON_PLANAR | +|---- | ---- | +| Requirement ID | R_GE_P_NON_PLANAR | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring) | +| Description | To determine the normal deviation, all polygons are tessellated in order to compute the triangle normals, whose angles are used for the comparison. The tessellation of the polygons is not deterministic, and therefore the result of the normal deviation check is not deterministic.
For the distance check, a regression plane is created from all polygon points in order to compute the distance of the points to this plane. | +| Error code | GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION | + +## Implementation + +In CityDoctor2 only the distance check is active by default, since the normal check does not produce deterministic results. + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:PO-0002-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK for this requirement, GE_S_NOT_CLOSED error in later checks | +| GE-gml:PO-0002-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml | GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE in _Simple_BD.1_PG.2 with *distanceTolerance* = 0.01 | +| GE-gml:PO-0002-T0003 | SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml | OK for this requirement with *distanceTolerance* = 0.5, GE_P_ORIENTATION_RINGS_SAME in later checks | +| GE-gml:PO-0002-T0004 | SimpleSolid_SrefBS-GE-gml-PO-0002-T0002.gml | GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION in _Simple_BD.1_PG.1 with parameter type = angle | + diff --git a/docs/en/R_GE_P_ORIENTATION_RINGS_SAME.md b/docs/en/R_GE_P_ORIENTATION_RINGS_SAME.md index 072c6ee..31d65b9 100644 --- a/docs/en/R_GE_P_ORIENTATION_RINGS_SAME.md +++ b/docs/en/R_GE_P_ORIENTATION_RINGS_SAME.md @@ -1,4 +1,29 @@ # R_GE_P_ORIENTATION_RINGS_SAME -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0006](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_PO_0006) +## Requirement + +| ID | R_GE_P_ORIENTATION_RINGS_SAME | +|---- | ---- | +| Description | Exterior and interior rings must not have the same orientation. | +| Error code | GE_P_ORIENTATION_RINGS_SAME | + +Example : +![OrientationSame](img/OrientationSame.png) + +## Check + +| ID | C_GE_P_ORIENTATION_RINGS_SAME | +|---- | ---- | +| Requirement ID | R_GE_P_ORIENTATION_RINGS_SAME | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_NON_PLANAR](R_GE_P_NON_PLANAR.md) | +| Description | | +| Error code | GE_P_ORIENTATION_RINGS_SAME | + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:PO-0006-T0001 | SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml | OK | +| GE-gml:PO-0006-T0002 | SimpleSolid_SrefBS-GE-gml-PO-0006-T0001.gml | GE_P_ORIENTATION_RINGS_SAME in Polygon: _Simple_BD.1_PG.2 | + diff --git a/docs/en/R_GE_R_COLLAPSED_TO_LINE.md b/docs/en/R_GE_R_COLLAPSED_TO_LINE.md index da279a7..0805381 100644 --- a/docs/en/R_GE_R_COLLAPSED_TO_LINE.md +++ b/docs/en/R_GE_R_COLLAPSED_TO_LINE.md @@ -1,4 +1,28 @@ # R_GE_R_COLLAPSED_TO_LINE -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0005](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0005) +## Requirement +| ID | R_GE_R_COLLAPSED_TO_LINE | +|---- | ---- | +| Description | A special case of self-intersection (GE_R_SELF_INTERSECTION): The ring is a line. If the ring represents a point, then the requirements GE_R_TOO_FEW_POINTS / GE_R_CONSECUTIVE_POINTS_SAME check whether this is an error. | +| Error code | GE_R_SELF_INTERSECTION, GE_R_COLLAPSED_TO_LINE, GE_R_TOO_FEW_POINTS, GE_R_CONSECUTIVE_POINTS_SAME | + + +## Check + +| ID | C_GE_R_COLLAPSED_TO_LINE| +|---- | ---- | +| Requirement ID | R_GE_R_COLLAPSED_TO_LINE | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Description | Ring as a point cannot happen, due to the preconditions. | +| Error code | GE_R_COLLAPSED_TO_LINE | + +The requirement is fulfilled by [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) and [R_GE_R_SELF_INTERSECTION](R_GE_R_SELF_INTERSECTION.md) and therefore requires no separate implementation. + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +|GE-gml:LR-0005-T0001| GE-gml:LR-0005-T0001.gml| GE_R_SELF_INTERSECTION | + diff --git a/docs/en/R_GE_R_CONSECUTIVE_POINTS_SAME.md b/docs/en/R_GE_R_CONSECUTIVE_POINTS_SAME.md index a99b094..f39a9ed 100644 --- a/docs/en/R_GE_R_CONSECUTIVE_POINTS_SAME.md +++ b/docs/en/R_GE_R_CONSECUTIVE_POINTS_SAME.md @@ -1,5 +1,75 @@ # R_GE_R_CONSECUTIVE_POINTS_SAME -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0002](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0002) +## Requirement - \ No newline at end of file +| ID | R_GE_R_CONSECUTIVE_POINTS_SAME | +|------------------------------ | ------ | +| Description | Points within a ring should not repeat (except the first and the last one in the case of GML, see [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md)). This error often occurs when two points are at the same location. | +| Parameter minVertexDistance | Points can be considered the same despite (small) distances, [see Vertex Requirement](geometric.md#vertex-requirement) | +| Error code | GE_R_CONSECUTIVE_POINTS_SAME | + +For example this ring is erroneous: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + +This ring is also erroneous with the parameter minVertexDistance = 0.1 +```xml + +0.0 0.0 0.0 +0.05 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + +The next example shows an erroneous ring with a point that occurs twice but where the repetition is not consecutive. This results in a self-intersection, which is not covered by this requirement. + +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +1.0 0.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + + +## Check + +| ID | C_GE_R_CONSECUTIVE_POINTS_SAME| +|---- | ---- | +| Requirement ID | R_GE_R_CONSECUTIVE_POINTS_SAME | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md) | +| Description | Checks whether a point repeats | +| Error code | GE_R_CONSECUTIVE_POINTS_SAME| + +| ID | C_GE_R_DUPLICATE_POINT| +|---- | ---- | +| Requirement ID | R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_SELF_INTERSECTION (partially) | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md) | +| Description | Detects consecutive as well as other repeating points. | +| Error code | GE_R_CONSECUTIVE_POINTS_SAME, GE_R_SELF_INTERSECTION | + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +|GE-gml:LR-0002-T0001| SimpleSolid_SrefBS.gml | OK | +|GE-gml:LR-0002-T0002| SimpleSolid_SrefBS-GE-gml-LR-0002-T0001.gml| GE_R_CONSECUTIVE_POINTS_SAME in ring:
_Simple_BD.1_PG.6_LR.1 | +|GE-gml:LR-0002-T0003| SimpleSolid_SrefBS-GE-gml-LR-0002-T0002.gml| OK for this requirement, but has error GE_R_SELF_INTERSECTION detected by C_GE_R_DUPLICATE_POINT | +|GE-gml:LR-0002-T0004| SimpleSolid_SrefBS-GE-gml-LR-0002-T0003.gml| OK for this requirement, but has error GE_R_SELF_INTERSECTION detected by C_GE_R_DUPLICATE_POINT | +|GE-gml:LR-0002-T0005| SimpleSolid_SrefBS-GE-gml-LR-0002-T0004.gml| GE_R_CONSECUTIVE_POINTS_SAME in ring:
_Simple_BD.1_PG.6_LR.1
with parameter minVertexDistance = 0.1, GE_S_NOT_CLOSED error when minVertexDistance = 0.01 | +|GE-gml:LR-0002-T0006| SimpleSolid_SrefBS-GE-gml-LR-0002-T0005.gml| Not executed because GE_R_TOO_FEW_POINTS in ring:
_Simple_BD.1_PG.6_LR.1 | + \ No newline at end of file diff --git a/docs/en/R_GE_R_NOT_CLOSED.md b/docs/en/R_GE_R_NOT_CLOSED.md index aa1a5a1..313b8d7 100644 --- a/docs/en/R_GE_R_NOT_CLOSED.md +++ b/docs/en/R_GE_R_NOT_CLOSED.md @@ -1,4 +1,48 @@ # R_GE_R_NOT_CLOSED -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0003](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0003) +## Requirement +| ID | R_GE_R_NOT_CLOSED | +|---- | ---- | +| Description | In GML the first and last point must be the same. | +| Parameter minVertexDistance | Points can be considered the same despite (small) distances, [see Vertex Requirement](geometric.md#vertex-requirement) | +| Error code | GE_R_NOT_CLOSED | + +For example this ring is erroneous: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 + +``` +OK with parameter minVertexDistance = 0.1: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +1.0 1.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.05 + +``` + + +## Check + +| ID | C_GE_R_NOT_CLOSED | +| ---- | ---- | +| Requirement ID | R_GE_R_NOT_CLOSED | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md) | +| Description | The first and last point within a ring should be the same. | +| Error code | GE_R_NOT_CLOSED | + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +|GE-gml:LR-0003-T0001| SimpleSolid_SrefBS.gml | OK | +|GE-gml:LR-0003-T0002| SimpleSolid_SrefBS-GE-gml-LR-0003-T0001.gml | GE_R_NOT_CLOSED | +|GE-gml:LR-0003-T0003| SimpleSolid_SrefBS-GE-gml-LR-0003-T0002.gml | OK with parameter minVertexDistance = 0.1 | + \ No newline at end of file diff --git a/docs/en/R_GE_R_SELF_INTERSECTION.md b/docs/en/R_GE_R_SELF_INTERSECTION.md index 55c3f8a..9c37172 100644 --- a/docs/en/R_GE_R_SELF_INTERSECTION.md +++ b/docs/en/R_GE_R_SELF_INTERSECTION.md @@ -1,3 +1,52 @@ # R_GE_R_SELF_INTERSECTION -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0004](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0004) +## Requirement + +| ID | R_GE_R_SELF_INTERSECTION | +|---- | ---- | +| Description | A ring should be simple, i.e. it should not self-intersect. The self-intersection may be at a concrete point, or not. | +| Parameter minVertexDistance | Points can be considered the same despite (small) distances, [see Vertex Requirement](geometric.md#vertex-requirement). This parameter is also used to determine when a point touches an edge. | +| Error code | GE_R_SELF_INTERSECTION | + +Examples of self-intersections: + +Bowtie: +![BowtieSelfInt](img/BowtieSelfInt.png) + +Point touches edge with parameter minVertexDistance: +![TouchingEdge](img/TouchingEdge.png) + +Duplicate points: +![Duplicate points](img/DuplicatePoints.png) + +Duplicate edge (same as duplicate points): +![LineSelfInt](img/LineSelfInt.png) + +## Check + +| ID | C_GE_R_SELF_INTERSECTION| +|---- | ---- | +| Requirement ID | R_GE_R_SELF_INTERSECTION | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Description | Detects duplicate points and self-intersecting edges. | +| Error codes | GE_R_SELF_INTERSECTION | + +| ID | C_GE_R_DUPLICATE_POINT| +|---- | ---- | +| Requirement ID | R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_SELF_INTERSECTION (partially) | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Description | Detects repeating and non-repeating duplicate points. The latter is a self-intersection. | +| Error codes | GE_R_CONSECUTIVE_POINTS_SAME, GE_R_SELF_INTERSECTION | + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:LR-0004-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:LR-0004-T0002 | SimpleSolid_SrefBS-GE-gml-LR-0002-T0002.gml | Duplicate points (example, not representative of the error in the model):
![Duplicate points](img/DuplicatePoints.png)
GE_R_SELF_INTERSECTION in ring: _Simple_BD.1_PG.6_LR.1 | +| GE-gml:LR-0004-T0003 | SimpleSolid_SrefBS-GE-gml-LR-0002-T0003.gml | Duplicate points (results in a duplicate edge)
GE_R_SELF_INTERSECTION in ring: _Simple_BD.1_PG.6_LR.1 | +| GE-gml:LR-0004-T0004 | SimpleSolid_SrefBS-GE-gml-LR-0004-T0004.gml | Bowtie (example, not representative of the error in the model):
![BowtieSelfInt](img/BowtieSelfInt.png)
GE_R_SELF_INTERSECTION in ring: _Simple_BD.1_PG.6_LR.1 | +| GE-gml:LR-0004-T0005 | SimpleSolid_SrefBS-GE-gml-LR-0004-T0005.gml | Touching point with parameter minVertexDistance = 0.1:
![TouchingEdge](img/TouchingEdge.png)
GE_R_SELF_INTERSECTION in ring: _Simple_BD.1_PG.2_LR.1 | +| GE-gml:LR-0004-T0006 | SimpleSolid_SrefBS-GE-gml-LR-0004-T0005.gml | OK for this requirement with parameter minVertexDistance = 0.01, GE_S_NOT_CLOSED in later checks | + \ No newline at end of file diff --git a/docs/en/R_GE_R_TOO_FEW_POINTS.md b/docs/en/R_GE_R_TOO_FEW_POINTS.md index c9291dc..b68c67e 100644 --- a/docs/en/R_GE_R_TOO_FEW_POINTS.md +++ b/docs/en/R_GE_R_TOO_FEW_POINTS.md @@ -1,4 +1,59 @@ # R_GE_R_TOO_FEW_POINTS -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0001](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_LR_0001) + +## Requirement + +| ID | R_GE_R_TOO_FEW_POINTS | +|---- | ---- | +| Description | A ring must have at least 3 points. For GML rings this requirement ignores the fact that the first and the last point are the same (see [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md)).
According to this requirement a GML ring is valid if it contains at least 3 distinct points, but it is then not closed (the requirement [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) is not fulfilled). | +| Parameter minVertexDistance | Points can be considered the same despite (small) distances, [see Vertex Requirement](geometric.md#vertex-requirement) | +| Error code | GE_R_TOO_FEW_POINTS | + +For example, this ring is erroneous: +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +0.0 0.0 0.0 + +``` +Valid rings: + + +(This ring is not closed, but has enough distinct points to satisfy this requirement.) +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +0.0 1.0 0.0 + +``` + +```xml + +0.0 0.0 0.0 +1.0 0.0 0.0 +0.0 1.0 0.0 +0.0 0.0 0.0 + +``` + +## Check + +| ID | C_GE_R_TOO_FEW_POINTS| +|---- | ---- | +| Requirement ID | R_GE_R_TOO_FEW_POINTS | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md) | +| Description | Ring must contain at least 3 distinct points | +| Error code | GE_R_TOO_FEW_POINTS| + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +|GE-gml:LR-0001-T0001| SimpleSolid_SrefBS.gml | OK | +|GE-gml:LR-0001-T0002| SimpleSolid_SrefBS-GE-gml-LR-0001-T0001.gml| GE_R_TOO_FEW_POINTS
in ring: _Simple_BD.1_PG.6_LR.1 | +|GE-gml:LR-0001-T0003| SimpleSolid_SrefBS-GE-gml-LR-0001-T0002.gml| Check not executed because GE_R_NOT_CLOSED
ring _Simple_BD.1_PG.6_LR.1 is not closed, but has 3 points.| + diff --git a/docs/en/R_GE_SO.md b/docs/en/R_GE_SO.md index ba76c52..5d006a8 100644 --- a/docs/en/R_GE_SO.md +++ b/docs/en/R_GE_SO.md @@ -1,3 +1,20 @@ # R_GE_SO -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0009](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0009) +## Requirement + +| ID | R_GE_SO | +|---- | ---- | +| Description | A solid is a collection of polygons with restrictions. The geometry must be 'watertight'. See the definition of solids in Appendix A of the CityGML QIE. A solid is valid if the requirements [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_VERTEX](R_GE_S_NON_MANIFOLD_VERTEX.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md), [GE_S_MULTIPLE_CONNECTED_COMPONENTS](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md), [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md), [R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION](R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md), [R_GE_S_SELF_INTERSECTION](R_GE_S_SELF_INTERSECTION.md) are satisfied. | +| Error code | -- | + + +## Check + +no further check necessary + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| + +The existing test cases of the individual checks can be used. diff --git a/docs/en/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md b/docs/en/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md index 4c23ce7..955a84f 100644 --- a/docs/en/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md +++ b/docs/en/R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION.md @@ -1,4 +1,26 @@ # R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0008](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0008) +## Requirement + +| ID | R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | +|---- | ---- | +| Description | All polygons have the wrong orientation (defined in [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md)), so that all polygons point inward. | +| Error code | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | + +## Check + +| ID | C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | +|---- | ---- | +| Requirement ID | R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION | +| Preconditions| [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_VERTEX](R_GE_S_NON_MANIFOLD_VERTEX.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md), [GE_S_MULTIPLE_CONNECTED_COMPONENTS](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md), [GE_S_SELF_INTERSECTION](R_GE_S_SELF_INTERSECTION.md), [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md) | +| Description | | +| Error code | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:SO-0008-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0008-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0008-T0001.gml | GE_S_ALL_POLYGONS_WRONG_ORIENTATION | + diff --git a/docs/en/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md b/docs/en/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md index 2678fb4..65afaf3 100644 --- a/docs/en/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md +++ b/docs/en/R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md @@ -1,3 +1,27 @@ # R_GE_S_MULTIPLE_CONNECTED_COMPONENTS -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0005](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0005) +## Requirement + +| ID | R_GE_S_MULTIPLE_CONNECTED_COMPONENTS | +|---- | ---- | +| Description | 1+ polygons are not connected to the same shell. | +| Error code | GE_S_MULTIPLE_CONNECTED_COMPONENTS | + +![GE_gml_so_0005](img/GE_gml_so_0005.png) + +## Check + +| ID | C_GE_S_MULTIPLE_CONNECTED_COMPONENTS| +|---- | ---- | +| Requirement ID | R_GE_S_MULTIPLE_CONNECTED_COMPONENTS | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Description | Build a dual graph (polygons become nodes, and polygons that share an edge are connected in the graph). If the graph is not connected, there are multiple connected components. | +| Error code | GE_S_MULTIPLE_CONNECTED_COMPONENTS | + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +|GE-gml:SO-0005-T0001| SimpleSolid_SrefBS.gml| OK | +|GE-gml:SO-0005-T0002| SimpleSolid_SrefBS-GE-gml-SO-0005-T0001.gml| GE_S_MULTIPLE_CONNECTED_COMPONENTS | diff --git a/docs/en/R_GE_S_NON_MANIFOLD_EDGE.md b/docs/en/R_GE_S_NON_MANIFOLD_EDGE.md index b645eee..b422eba 100644 --- a/docs/en/R_GE_S_NON_MANIFOLD_EDGE.md +++ b/docs/en/R_GE_S_NON_MANIFOLD_EDGE.md @@ -1,3 +1,28 @@ # R_GE_S_NON_MANIFOLD_EDGE -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0004](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0004) +## Requirement + +| ID | R_GE_S_NON_MANIFOLD_EDGE | +|---- | ---- | +| Description | Every edge should bound exactly 2 polygons. | +| Error code | GE_S_NON_MANIFOLD_EDGE | +| Comment | This requirement is similar to [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md): If an edge bounds more than 2 polygons, then it is a GE_S_NON_MANIFOLD_EDGE error. If an edge bounds only one polygon, it is a GE_S_NOT_CLOSED error (a hole in the solid) | + + +![image](img/image.png) + +## Check + +| ID | C_GE_S_NON_MANIFOLD_EDGE| +|---- | ---- | +| Requirement ID | R_GE_S_NON_MANIFOLD_EDGE | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Description | | +| Error code | GE_S_NON_MANIFOLD_EDGE | + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +|GE-gml:SO-0004-T0000| SimpleSolid_SrefBS.gml| OK | +|GE-gml:SO-0004-T0001| SimpleSolid_SrefBS-GE-gml-SO-0004-T0001.gml| GE_S_NON_MANIFOLD_EDGE | diff --git a/docs/en/R_GE_S_NON_MANIFOLD_VERTEX.md b/docs/en/R_GE_S_NON_MANIFOLD_VERTEX.md index cb7f23d..8733009 100644 --- a/docs/en/R_GE_S_NON_MANIFOLD_VERTEX.md +++ b/docs/en/R_GE_S_NON_MANIFOLD_VERTEX.md @@ -1,6 +1,29 @@ # R_GE_S_NON_MANIFOLD_VERTEX -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0003](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0003) +## Requirement + +| ID | R_GE_S_NON_MANIFOLD_VERTEX | +|---- | ---- | +| Description | Every polygon incident to a point of a solid must be connected to the other incident polygons via edges. The point and its incident polygons must form an 'umbrella'. | +| Error code | GE_S_NON_MANIFOLD_VERTEX | + +## Check + +| ID | C_GE_S_NON_MANIFOLD_VERTEX | +|---- | ---- | +| Requirement ID | R_GE_S_NON_MANIFOLD_VERTEX | +| Preconditions| [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Description | | +| Error code | GE_S_NON_MANIFOLD_VERTEX | + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:SO-0003-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0003-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0003-T0001.gml | GE_S_NON_MANIFOLD_VERTEX | + + diff --git a/docs/en/R_GE_S_NOT_CLOSED.md b/docs/en/R_GE_S_NOT_CLOSED.md index 3e7070b..7b7ddf0 100644 --- a/docs/en/R_GE_S_NOT_CLOSED.md +++ b/docs/en/R_GE_S_NOT_CLOSED.md @@ -1,3 +1,30 @@ # R_GE_S_NOT_CLOSED -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0002](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0002) \ No newline at end of file +## Requirement + +| ID | R_GE_S_NOT_CLOSED | +|---- | ---- | +| Description | The shell must not have any holes; it must be watertight. | +| Error code | GE_S_NOT_CLOSED | + +![Closed](img/Closed.png) + +## Check + +| ID | C_GE_S_NOT_CLOSED | +|---- | ---- | +| Requirement ID | R_GE_S_NOT_CLOSED | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md) | +| Description | | +| Error code | GE_S_NOT_CLOSED | + +The check collects all edges and matches them to their respective opposite edges. If an edge has no opposite edge, a hole in the shell is detected here and an error is reported. + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:SO-0002-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0002-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0002-T0001.gml | GE_S_NOT_CLOSED | + diff --git a/docs/en/R_GE_S_POLYGON_WRONG_ORIENTATION.md b/docs/en/R_GE_S_POLYGON_WRONG_ORIENTATION.md index 66e75f5..c2a7a2d 100644 --- a/docs/en/R_GE_S_POLYGON_WRONG_ORIENTATION.md +++ b/docs/en/R_GE_S_POLYGON_WRONG_ORIENTATION.md @@ -1,3 +1,27 @@ # R_GE_S_POLYGON_WRONG_ORIENTATION -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0007](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0007) +## Requirement + +| ID | R_GE_S_POLYGON_WRONG_ORIENTATION | +|---- | ---- | +| Description | A polygon must be oriented so that the normal of the exterior ring points outward. The points are arranged counter-clockwise. | +| Error code | GE_S_POLYGON_WRONG_ORIENTATION | + +![PolygonWrongOrientation](img/Testgebaeude-SO-0007.png) + +## Check + +| ID | C_GE_S_POLYGON_WRONG_ORIENTATION| +|---- | ---- | +| Requirement ID | R_GE_S_POLYGON_WRONG_ORIENTATION | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md) | +| Description | | +| Error code | GE_S_POLYGON_WRONG_ORIENTATION | + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +|GE-gml:SO-0007-T0001| SimpleSolid_SrefBS.gml| OK | +|GE-gml:SO-0007-T0002| SimpleSolid_SrefBS-GE-gml-SO-0007-T0001.gml| GE_S_POLYGON_WRONG_ORIENTATION | diff --git a/docs/en/R_GE_S_SELF_INTERSECTION.md b/docs/en/R_GE_S_SELF_INTERSECTION.md index eb507a6..8450efd 100644 --- a/docs/en/R_GE_S_SELF_INTERSECTION.md +++ b/docs/en/R_GE_S_SELF_INTERSECTION.md @@ -1,5 +1,32 @@ # R_GE_S_SELF_INTERSECTION -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0006](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0006) +## Requirement + +| ID | R_GE_S_SELF_INTERSECTION | +|---- | ---- | +| Description| The solid must not self-intersect | +| Error code | GE_S_SELF_INTERSECTION | + +Example (left = OK, right = invalid): +![SelfIntersection](img/SelfIntersection.png) + +## Check + +| ID | C_GE_S_SELF_INTERSECTION | +|---- | ---- | +| Requirement ID | R_GE_S_SELF_INTERSECTION | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon), [GE_S_TOO_FEW_POLYGONS](R_GE_S_TOO_FEW_POLYGONS.md), [GE_S_NOT_CLOSED](R_GE_S_NOT_CLOSED.md), [GE_S_NON_MANIFOLD_VERTEX](R_GE_S_NON_MANIFOLD_VERTEX.md), [GE_S_NON_MANIFOLD_EDGE](R_GE_S_NON_MANIFOLD_EDGE.md), [GE_S_MULTIPLE_CONNECTED_COMPONENTS](R_GE_S_MULTIPLE_CONNECTED_COMPONENTS.md), [GE_S_POLYGON_WRONG_ORIENTATION](R_GE_S_POLYGON_WRONG_ORIENTATION.md) | +| Description | | +| Error code | GE_S_SELF_INTERSECTION | + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:SO-0006-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0006-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0006-T0001.gml | GE_S_SELF_INTERSECTION | + + diff --git a/docs/en/R_GE_S_TOO_FEW_POLYGONS.md b/docs/en/R_GE_S_TOO_FEW_POLYGONS.md index b2557c5..fb816fa 100644 --- a/docs/en/R_GE_S_TOO_FEW_POLYGONS.md +++ b/docs/en/R_GE_S_TOO_FEW_POLYGONS.md @@ -1,5 +1,29 @@ # R_GE_S_TOO_FEW_POLYGONS -siehe [https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0001](https://gitlab.com/volkercoors/CiD4Sim/-/wikis/validation/Requirements/GE_gml_SO_0001) +## Requirement + +| ID | R_GE_S_TOO_FEW_POLYGONS | +|---- | ---- | +| Description | Solids must have at least 4 polygons. | +| Error code | GE_S_TOO_FEW_POLYGONS | + +## Check + +| ID | C_GE_S_TOO_FEW_POLYGONS | +|---- | ---- | +| Requirement ID | R_GE_S_TOO_FEW_POLYGONS | +| Preconditions | [R_SC_SCHEMA_VALIDATION](schemaRequirements.md), [R_GE_R_ALL](geometric.md#linear-ring), [R_GE_P_ALL](geometric.md#polygon) | +| Description | | +| Error code | GE_S_TOO_FEW_POLYGONS | + + +## Test cases + +| Test case ID | CityGML model | Expected result | +|----|---------------|-----------------| +| GE-gml:SO-0001-T0001 | SimpleSolid_SrefBS.gml | OK | +| GE-gml:SO-0001-T0002 | SimpleSolid_SrefBS-GE-gml-SO-0001-T0001.gml | GE_S_TOO_FEW_POLYGONS | + + diff --git a/docs/en/geometric.md b/docs/en/geometric.md index 5c0faa4..e01e9a5 100644 --- a/docs/en/geometric.md +++ b/docs/en/geometric.md @@ -37,7 +37,7 @@ The following requirements are defined for the three respective geometric levels | Requirement ID | Description | Error code | Known checks | | --------------- | ------------ | ---------- |-------------------- | | [R_GE_R_TOO_FEW_POINTS](R_GE_R_TOO_FEW_POINTS.md)| too few points | 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 consecutive points are the same | GE_R_CONCECUTIVE_POINTS_SAME | C_GE_R_CONCECUTIVE_POINTS_SAME, C_GE_R_DUPLICATE_POINT | +| [R_GE_R_CONSECUTIVE_POINTS_SAME](R_GE_R_CONSECUTIVE_POINTS_SAME.md)| 2 consecutive points are the same | GE_R_CONSECUTIVE_POINTS_SAME | C_GE_R_CONSECUTIVE_POINTS_SAME, C_GE_R_DUPLICATE_POINT | | [R_GE_R_NOT_CLOSED](R_GE_R_NOT_CLOSED.md)| first-last points are not the same | GE_R_NOT_CLOSED | C_GE_R_NOT_CLOSED | | [R_GE_R_SELF_INTERSECTION](R_GE_R_SELF_INTERSECTION.md)| self-intersects, i.e., a bowtie | 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)| **Currently not in use as it is redundant with R_GE_R_SELF_INTERSECTION**
is point or line | GE_R_COLLAPSED_TO_LINE | C_GE_R_COLLAPSED_TO_LINE | diff --git a/public/de/404.html b/public/de/404.html index 25a0e0f..b0c9496 100644 --- a/public/de/404.html +++ b/public/de/404.html @@ -10,9 +10,8 @@ - - + @@ -20,18 +19,15 @@ - + - + - - - @@ -44,7 +40,7 @@ - + @@ -61,9 +57,12 @@ - + + + + @@ -77,19 +76,16 @@ - - -
+