index.html 30.6 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

<!DOCTYPE html>

<html class="no-js" lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width,initial-scale=1" name="viewport"/>
<link href="https://transfer.hft-stuttgart.de/pages/citydoctor/citydoctorhomepage/geometric/" rel="canonical"/>
<link href="../schemaRequirements/" rel="prev"/>
<link href="../semantic/" rel="next"/>
<link href="../img/citydoctor_logo.png" rel="icon"/>
<meta content="mkdocs-1.4.2, mkdocs-material-9.0.6" name="generator"/>
<title>Geometric Requirements - CityDoctor2</title>
<link href="../assets/stylesheets/main.558e4712.min.css" rel="stylesheet"/>
<link href="../assets/stylesheets/palette.2505c338.min.css" rel="stylesheet"/>
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback" rel="stylesheet"/>
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link href="https://unpkg.com/mermaid/dist/mermaid.css" rel="stylesheet"/>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body data-md-color-accent="" data-md-color-primary="red" data-md-color-scheme="default" dir="ltr">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
<input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
Matthias Betz's avatar
Matthias Betz committed
28
<a class="md-skip" href="#geometry-requirements">
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
          Skip to content
        </a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav aria-label="Header" class="md-header__inner md-grid">
<a aria-label="CityDoctor2" class="md-header__button md-logo" data-md-component="logo" href=".." title="CityDoctor2">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"></path></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"></path></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
            CityDoctor2
          </span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
            
              Geometric Requirements
            
          </span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input aria-label="Use Darkmode" class="md-option" data-md-color-accent="" data-md-color-media="(prefers-color-scheme: light)" data-md-color-primary="red" data-md-color-scheme="default" id="__palette_1" name="__palette" type="radio"/>
<label class="md-header__button md-icon" for="__palette_2" hidden="" title="Use Darkmode">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"></path></svg>
</label>
<input aria-label="Use Lightmode" class="md-option" data-md-color-accent="" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-primary="" data-md-color-scheme="slate" id="__palette_2" name="__palette" type="radio"/>
<label class="md-header__button md-icon" for="__palette_1" hidden="" title="Use Lightmode">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"></path></svg>
</label>
</form>
<div class="md-header__option">
<div class="md-select">
<button aria-label="Select language" class="md-header__button md-icon">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m12.87 15.07-2.54-2.51.03-.03A17.52 17.52 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04M18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12m-2.62 7 1.62-4.33L19.12 17h-3.24Z"></path></svg>
</button>
<div class="md-select__inner">
<ul class="md-select__list">
<li class="md-select__item">
Matthias Betz's avatar
Matthias Betz committed
76
<a class="md-select__link" href="https://transfer.hft-stuttgart.de/pages/citydoctor/citydoctorhomepage/de/" hreflang="de">
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
                    Deutsch
                  </a>
</li>
<li class="md-select__item">
<a class="md-select__link" href=".." hreflang="en">
                    English
                  </a>
</li>
</ul>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input aria-label="Search" autocapitalize="off" autocomplete="off" autocorrect="off" class="md-search__input" data-md-component="search-query" name="query" placeholder="Search" required="" spellcheck="false" type="text"/>
<label class="md-search__icon md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
</label>
<nav aria-label="Search" class="md-search__options">
<button aria-label="Clear" class="md-search__icon md-icon" tabindex="-1" title="Clear" type="reset">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"></path></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix="">
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
            Initializing search
          </div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a class="md-source" data-md-component="source" href="https://transfer.hft-stuttgart.de/gitlab/citydoctor/citydoctor2" title="Go to repository">
<div class="md-source__icon md-icon">
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
</div>
<div class="md-source__repository">
    CityDoctor2
  </div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav aria-label="Navigation" class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a aria-label="CityDoctor2" class="md-nav__button md-logo" data-md-component="logo" href=".." title="CityDoctor2">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"></path></svg>
</a>
    CityDoctor2
  </label>
<div class="md-nav__source">
<a class="md-source" data-md-component="source" href="https://transfer.hft-stuttgart.de/gitlab/citydoctor/citydoctor2" title="Go to repository">
<div class="md-source__icon md-icon">
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
</div>
<div class="md-source__repository">
    CityDoctor2
  </div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="..">
        CityDoctor2
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../requiredSoftware/">
        Installation
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../firstRun/">
        First Start
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../userInterface/">
        User Interface
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../validationPlan/">
        Validation Plan
      </a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input checked="" class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" id="__nav_6" type="checkbox"/>
<label aria-expanded="true" class="md-nav__link" for="__nav_6" tabindex="0">
          Requirements
          <span class="md-nav__icon md-icon"></span>
</label>
<nav aria-label="Requirements" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
          Requirements
        </label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../basic/">
        Fundamentals
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../requirements/">
        Overview
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../schemaRequirements/">
        Schema Requirements
      </a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" id="__toc" type="checkbox"/>
<label class="md-nav__link md-nav__link--active" for="__toc">
          Geometric Requirements
          <span class="md-nav__icon md-icon"></span>
</label>
<a class="md-nav__link md-nav__link--active" href="./">
        Geometric Requirements
      </a>
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
<li class="md-nav__item">
Matthias Betz's avatar
Matthias Betz committed
223
224
<a class="md-nav__link" href="#error-codes-for-geometric-errors">
    Error codes for geometric errors
225
226
227
  </a>
</li>
<li class="md-nav__item">
Matthias Betz's avatar
Matthias Betz committed
228
229
<a class="md-nav__link" href="#vertex-requirement">
    Vertex Requirement
230
231
232
233
234
235
236
237
238
239
240
241
242
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#linear-ring">
    Linear Ring
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#polygon">
    Polygon
  </a>
</li>
<li class="md-nav__item">
Matthias Betz's avatar
Matthias Betz committed
243
244
<a class="md-nav__link" href="#solid-shell">
    Solid / Shell
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#parameter-uberblick">
    Parameter Überblick
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#abhangigkeitsbaum">
    Abhängigkeitsbaum
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#multisurface-und-solid-geometrie">
    Multisurface und Solid Geometrie
  </a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../semantic/">
        Semantic Requirements
      </a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_6" id="__nav_6_6" type="checkbox"/>
<label aria-expanded="false" class="md-nav__link" for="__nav_6_6" tabindex="0">
          Details
          <span class="md-nav__icon md-icon"></span>
</label>
<nav aria-label="Details" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
          Details
        </label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_R_TOO_FEW_POINTS/">
        R_TOO_FEW_POINTS
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_R_CONSECUTIVE_POINTS_SAME/">
        R_CONSECUTIVE_POINTS_SAME
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_R_NOT_CLOSED/">
        R_RING_NOT_CLOSED
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_R_SELF_INTERSECTION/">
        R_RING_SELF_INTERSECTION
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_R_COLLAPSED_TO_LINE/">
        R_COLLAPSED_TO_LINE
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_P_INTERSECTING_RINGS/">
        P_INTERSECTING_RINGS
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_P_NON_PLANAR/">
        P_NON_PLANAR
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_P_INTERIOR_DISCONNECTED/">
        P_INTERIOR_DISCONNECTED
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_P_HOLE_OUTSIDE/">
        P_HOLE_OUTSIDE
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_P_INNER_RINGS_NESTED/">
        P_INNER_RINGS_NESTED
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_P_ORIENTATION_RINGS_SAME/">
        P_ORIENTATION_RINGS_SAME
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_MS/">
        MULTI_SURFACE
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_TOO_FEW_POLYGONS/">
        S_TOO_FEW_POLYGONS
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_NOT_CLOSED/">
        S_NOT_CLOSED
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_NON_MANIFOLD_VERTEX/">
        S_NON_MANIFOLD_VERTEX
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_NON_MANIFOLD_EDGE/">
        S_NON_MANIFOLD_EDGE
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/">
        S_MULTIPLE_CONNECTED_COMPONENTS
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_SELF_INTERSECTION/">
        S_SELF_INTERSECTION
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_POLYGON_WRONG_ORIENTATION/">
        S_POLYGON_WRONG_ORIENTATION
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/">
        S_ALL_POLYGONS_WRONG_ORIENTATION
      </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../R_GE_SO/">
        SOLID
      </a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
<li class="md-nav__item">
Matthias Betz's avatar
Matthias Betz committed
408
409
<a class="md-nav__link" href="#error-codes-for-geometric-errors">
    Error codes for geometric errors
410
411
412
  </a>
</li>
<li class="md-nav__item">
Matthias Betz's avatar
Matthias Betz committed
413
414
<a class="md-nav__link" href="#vertex-requirement">
    Vertex Requirement
415
416
417
418
419
420
421
422
423
424
425
426
427
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#linear-ring">
    Linear Ring
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#polygon">
    Polygon
  </a>
</li>
<li class="md-nav__item">
Matthias Betz's avatar
Matthias Betz committed
428
429
<a class="md-nav__link" href="#solid-shell">
    Solid / Shell
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#parameter-uberblick">
    Parameter Überblick
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#abhangigkeitsbaum">
    Abhängigkeitsbaum
  </a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#multisurface-und-solid-geometrie">
    Multisurface und Solid Geometrie
  </a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
Matthias Betz's avatar
Matthias Betz committed
454
455
456
<h1 id="geometry-requirements">Geometry Requirements<a class="headerlink" href="#geometry-requirements" title="Permanent link">#</a></h1>
<h2 id="error-codes-for-geometric-errors">Error codes for geometric errors<a class="headerlink" href="#error-codes-for-geometric-errors" title="Permanent link">#</a></h2>
<p>as defined in the <a href="http://mail.opengeospatial.org/lists/lt.php?id=fR4CDVYeAlJfHwhTCwA">CityGML Quality Interoperability Experiment, chapter 7.5</a>.</p>
457
458
<div class="admonition note">
<p class="admonition-title">Note</p>
Matthias Betz's avatar
Matthias Betz committed
459
<p>The requirements were renamed in CityDoctor to be more human readable. The were renamed according to the error codes.</p>
460
</div>
Matthias Betz's avatar
Matthias Betz committed
461
462
<p>All the geometric errors are in the "GE" domain. Also, since the geometric validation is performed at 3 different
levels (based on the primitives), the requirements also contain the level:</p>
463
464
465
<ul>
<li>Ring: R</li>
<li>Polygon: P</li>
Matthias Betz's avatar
Matthias Betz committed
466
<li>Shell: S</li>
467
</ul>
Matthias Betz's avatar
Matthias Betz committed
468
469
470
471
472
473
474
475
476
<p>Error codes follow the same system as the requirements mentioned <a href="../basic/">fundamentals</a>. A violation of each respective data quality requirement should result in an error which must
be reported with an error code according to the requirement ID.
For each error code, extra information can (and should) be returned. For instance: if a ring is not closed (GE_R_NOT_CLOSED) then the ID of the ring (e.g., its
position (first, second..) in the polygon)  should be returned;
if a polygon is not planar (GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE) then the ID of the
polygon and the max. deviation from the reference plane should be returned; or
if a shell is not 'watertight' (GE_S_NOT_CLOSED) then the location of the hole(s) should be returned.</p>
<h2 id="vertex-requirement">Vertex Requirement<a class="headerlink" href="#vertex-requirement" title="Permanent link">#</a></h2>
<p>Vertices A and B are the same if the euclidean distance between them is smaller than (<em>minVertexDistance</em>). It is also used to check whether a point is touching an edge. If a point is within <em>minVertexDistance</em> distance to an edge it is considered touching. This parameter is used in multiple checks with the same value:</p>
477
478
479
480
481
482
<ul>
<li>R_GE_R_CONSECUTIVE_POINTS_SAME</li>
<li>R_GE_R_NOT_CLOSED</li>
<li>R_GE_R_SELF_INTERSECTION</li>
<li>R_GE_P_INTERIOR_DISCONNECTED</li>
</ul>
Matthias Betz's avatar
Matthias Betz committed
483
<p>The following requirements are defined for the three respective geometric levels <a href="https://doi.org/10.1111/mice.12043">(adopted from Ledoux (2013))</a>:</p>
484
485
486
487
<h2 id="linear-ring">Linear Ring<a class="headerlink" href="#linear-ring" title="Permanent link">#</a></h2>
<table>
<thead>
<tr>
Matthias Betz's avatar
Matthias Betz committed
488
489
490
491
<th>Requirement ID</th>
<th>Description</th>
<th>Error code</th>
<th>Known checks</th>
492
493
494
495
496
</tr>
</thead>
<tbody>
<tr>
<td><a href="../R_GE_R_TOO_FEW_POINTS/">R_GE_R_TOO_FEW_POINTS</a></td>
Matthias Betz's avatar
Matthias Betz committed
497
<td>too few points</td>
498
499
500
501
502
<td>GE_R_TOO_FEW_POINTS</td>
<td>C_GE_R_TOO_FEW_POINTS</td>
</tr>
<tr>
<td><a href="../R_GE_R_CONSECUTIVE_POINTS_SAME/">R_GE_R_CONSECUTIVE_POINTS_SAME</a></td>
Matthias Betz's avatar
Matthias Betz committed
503
<td>2 consecutive points are the same</td>
504
505
506
507
508
<td>GE_R_CONCECUTIVE_POINTS_SAME</td>
<td>C_GE_R_CONCECUTIVE_POINTS_SAME, C_GE_R_DUPLICATE_POINT</td>
</tr>
<tr>
<td><a href="../R_GE_R_NOT_CLOSED/">R_GE_R_NOT_CLOSED</a></td>
Matthias Betz's avatar
Matthias Betz committed
509
<td>first-last points are not the same</td>
510
511
512
513
514
<td>GE_R_NOT_CLOSED</td>
<td>C_GE_R_NOT_CLOSED</td>
</tr>
<tr>
<td><a href="../R_GE_R_SELF_INTERSECTION/">R_GE_R_SELF_INTERSECTION</a></td>
Matthias Betz's avatar
Matthias Betz committed
515
<td>self-intersects, i.e., a bowtie</td>
516
517
518
519
520
<td>GE_R_SELF_INTERSECTION</td>
<td>C_GE_R_SELF_INTERSECTION, C_GE_R_DUPLICATE_POINT</td>
</tr>
<tr>
<td><a href="../R_GE_R_COLLAPSED_TO_LINE/">R_GE_R_COLLAPSED_TO_LINE</a></td>
Matthias Betz's avatar
Matthias Betz committed
521
<td><strong>Currently not in use as it is redundant with R_GE_R_SELF_INTERSECTION</strong><br/> is point or line</td>
522
523
524
525
526
<td>GE_R_COLLAPSED_TO_LINE</td>
<td>C_GE_R_COLLAPSED_TO_LINE</td>
</tr>
<tr>
<td>R_GE_R_ALL</td>
Matthias Betz's avatar
Matthias Betz committed
527
<td>Container for: R_GE_R_TOO_FEW_POINTS, R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED, R_GE_R_SELF_INTERSECTION</td>
528
529
530
531
532
533
534
535
536
<td>--</td>
<td>--</td>
</tr>
</tbody>
</table>
<h2 id="polygon">Polygon<a class="headerlink" href="#polygon" title="Permanent link">#</a></h2>
<table>
<thead>
<tr>
Matthias Betz's avatar
Matthias Betz committed
537
538
539
540
<th>Requirement ID</th>
<th>Description</th>
<th>Error code</th>
<th>Known checks</th>
541
542
543
544
545
</tr>
</thead>
<tbody>
<tr>
<td><a href="../R_GE_P_INTERSECTING_RINGS/">R_GE_P_INTERSECTING_RINGS</a></td>
Matthias Betz's avatar
Matthias Betz committed
546
<td>2+ rings intersect</td>
547
548
549
550
551
<td>GE_P_INTERSECTING_RINGS</td>
<td>C_GE_P_INTERSECTING_RINGS</td>
</tr>
<tr>
<td><a href="../R_GE_P_NON_PLANAR/">R_GE_P_NON_PLANAR</a></td>
Matthias Betz's avatar
Matthias Betz committed
552
<td>Non planar polygon, both distance and normal deviation</td>
553
554
555
556
557
<td>GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION</td>
<td>C_GE_P_NON_PLANAR</td>
</tr>
<tr>
<td><a href="../R_GE_P_INTERIOR_DISCONNECTED/">R_GE_P_INTERIOR_DISCONNECTED</a></td>
Matthias Betz's avatar
Matthias Betz committed
558
<td>interior is not connected</td>
559
560
561
562
563
<td>GE_P_INTERIOR_DISCONNECTED</td>
<td>C_GE_P_INTERIOR_DISCONNECTED</td>
</tr>
<tr>
<td><a href="../R_GE_P_HOLE_OUTSIDE/">R_GE_P_HOLE_OUTSIDE</a></td>
Matthias Betz's avatar
Matthias Betz committed
564
<td>1 or more interior rings are located outside the exterior ring</td>
565
566
567
568
569
<td>GE_P_HOLE_OUTSIDE</td>
<td>C_GE_P_HOLE_OUTSIDE</td>
</tr>
<tr>
<td><a href="../R_GE_P_INNER_RINGS_NESTED/">R_GE_P_INNER_RINGS_NESTED</a></td>
Matthias Betz's avatar
Matthias Betz committed
570
<td>interior ring is located inside other</td>
571
572
573
574
575
<td>GE_P_INNER_RINGS_NESTED</td>
<td>C_GE_P_INNER_RINGS_NESTED</td>
</tr>
<tr>
<td><a href="../R_GE_P_ORIENTATION_RINGS_SAME/">R_GE_P_ORIENTATION_RINGS_SAME</a></td>
Matthias Betz's avatar
Matthias Betz committed
576
<td>exterior and interior rings have same orientation</td>
577
578
579
580
581
<td>GE_P_ORIENTATION_RINGS_SAME</td>
<td>C_GE_P_ORIENTATION_RINGS_SAME</td>
</tr>
<tr>
<td>R_GE_P_ALL</td>
Matthias Betz's avatar
Matthias Betz committed
582
<td>Container for: R_GE_P_INTERSECTING_RINGS, R_GE_P_NON_PLANAR, R_GE_P_INTERIOR_DISCONNECTED, R_GE_P_HOLE_OUTSIDE, R_GE_P_INNER_RINGS_NESTED, R_GE_P_ORIENTATION_RINGS_SAME, R_GE_R_ALL</td>
583
584
585
586
587
<td>--</td>
<td>--</td>
</tr>
</tbody>
</table>
Matthias Betz's avatar
Matthias Betz committed
588
<h2 id="solid-shell">Solid / Shell<a class="headerlink" href="#solid-shell" title="Permanent link">#</a></h2>
589
590
591
<table>
<thead>
<tr>
Matthias Betz's avatar
Matthias Betz committed
592
593
594
595
<th>Requirement ID</th>
<th>Description</th>
<th>Error code</th>
<th>Known checks</th>
596
597
598
599
600
</tr>
</thead>
<tbody>
<tr>
<td><a href="../R_GE_S_TOO_FEW_POLYGONS/">R_GE_S_TOO_FEW_POLYGONS</a></td>
Matthias Betz's avatar
Matthias Betz committed
601
<td>&lt;4 polygons</td>
602
603
604
605
606
<td>GE_S_TOO_FEW_POLYGONS</td>
<td>C_GE_S_TOO_FEW_POLYGONS</td>
</tr>
<tr>
<td><a href="../R_GE_S_NOT_CLOSED/">R_GE_S_NOT_CLOSED</a></td>
Matthias Betz's avatar
Matthias Betz committed
607
<td>there is 1+ hole(s) on the surface</td>
608
609
610
611
612
<td>GE_S_NOT_CLOSED</td>
<td>C_GE_S_NOT_CLOSED</td>
</tr>
<tr>
<td><a href="../R_GE_S_NON_MANIFOLD_VERTEX/">R_GE_S_NON_MANIFOLD_VERTEX</a></td>
Matthias Betz's avatar
Matthias Betz committed
613
<td>Each shell must be simple</td>
614
615
616
617
618
<td>GE_S_NON_MANIFOLD_VERTEX</td>
<td>C_GE_S_NON_MANIFOLD_VERTEX</td>
</tr>
<tr>
<td><a href="../R_GE_S_NON_MANIFOLD_EDGE/">R_GE_S_NON_MANIFOLD_EDGE</a></td>
Matthias Betz's avatar
Matthias Betz committed
619
<td>Each edge of a shell should have exactly 2 incident polygons.</td>
620
621
622
623
624
<td>GE_S_NON_MANIFOLD_EDGE</td>
<td>C_GE_S_NON_MANIFOLD_EDGE</td>
</tr>
<tr>
<td><a href="../R_GE_S_MULTIPLE_CONNECTED_COMPONENTS/">R_GE_S_MULTIPLE_CONNECTED_COMPONENTS</a></td>
Matthias Betz's avatar
Matthias Betz committed
625
<td>1+ polygons not connected to main shell</td>
626
627
628
629
630
<td>GE_S_MULTIPLE_CONNECTED_COMPONENTS</td>
<td>C_GE_S_MULTIPLE_CONNECTED_COMPONENTS</td>
</tr>
<tr>
<td><a href="../R_GE_S_SELF_INTERSECTION/">R_GE_S_SELF_INTERSECTION</a></td>
Matthias Betz's avatar
Matthias Betz committed
631
<td>Solid self intersects</td>
632
633
634
635
636
<td>GE_S_SELF_INTERSECTION</td>
<td>C_GE_S_SELF_INTERSECTION</td>
</tr>
<tr>
<td><a href="../R_GE_S_POLYGON_WRONG_ORIENTATION/">R_GE_S_POLYGON_WRONG_ORIENTATION</a></td>
Matthias Betz's avatar
Matthias Betz committed
637
<td>orientation of a polygon not correct</td>
638
639
640
641
642
<td>GE_S_POLYGON_WRONG_ORIENTATION</td>
<td>C_GE_S_POLYGON_WRONG_ORIENTATION</td>
</tr>
<tr>
<td><a href="../R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION/">R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION</a></td>
Matthias Betz's avatar
Matthias Betz committed
643
<td>normals all pointing in wrong direction</td>
644
645
646
647
648
<td>GE_S_ALL_POLYGONS_WRONG_ORIENTATION</td>
<td>C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION</td>
</tr>
<tr>
<td>R_GE_S_ALL</td>
Matthias Betz's avatar
Matthias Betz committed
649
<td>Container for: R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED, R_GE_S_NON_MANIFOLD_VERTEX, R_GE_S_NON_MANIFOLD_EDGE, R_GE_S_MULTIPLE_CONNECTED_COMPONENTS, R_GE_S_SELF_INTERSECTION, R_GE_S_POLYGON_WRONG_ORIENTATION, R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION</td>
650
651
652
653
654
655
656
657
658
659
<td>--</td>
<td>--</td>
</tr>
</tbody>
</table>
<h2 id="parameter-uberblick">Parameter Überblick<a class="headerlink" href="#parameter-uberblick" title="Permanent link">#</a></h2>
<table>
<thead>
<tr>
<th>Name</th>
Matthias Betz's avatar
Matthias Betz committed
660
661
662
<th>Description</th>
<th>Used in</th>
<th>Unit</th>
663
664
665
666
667
</tr>
</thead>
<tbody>
<tr>
<td>minVertexDistance</td>
Matthias Betz's avatar
Matthias Betz committed
668
<td>The minimum distance between two points before they are considered the same point</td>
669
670
671
672
673
<td>R_GE_R_CONSECUTIVE_POINTS_SAME, R_GE_R_NOT_CLOSED, R_GE_R_SELF_INTERSECTION, R_GE_P_INTERIOR_DISCONNECTED</td>
<td>Meter</td>
</tr>
<tr>
<td>type</td>
Matthias Betz's avatar
Matthias Betz committed
674
<td>Planar check type, can be <em>distance</em>, <em>angle</em>, <em>both</em> sein</td>
675
676
677
678
679
<td>R_GE_P_NON_PLANAR</td>
<td>-</td>
</tr>
<tr>
<td>distanceTolerance</td>
Matthias Betz's avatar
Matthias Betz committed
680
<td>Distance from the regression plane before a point is considered not in plane</td>
681
682
683
684
685
<td>R_GE_P_NON_PLANAR</td>
<td>Meter</td>
</tr>
<tr>
<td>angleTolerance</td>
Matthias Betz's avatar
Matthias Betz committed
686
<td>Difference in normal vectors before a plane is not considered planar</td>
687
688
689
690
691
692
<td>R_GE_P_NON_PLANAR</td>
<td>Radiant</td>
</tr>
</tbody>
</table>
<h2 id="abhangigkeitsbaum">Abhängigkeitsbaum<a class="headerlink" href="#abhangigkeitsbaum" title="Permanent link">#</a></h2>
Matthias Betz's avatar
Matthias Betz committed
693
<p>This is the order the checks will be executed. If one of the depending checks is not executed or has reported an error the following check will not be executed.</p>
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
<div class="mermaid">graph TD;
  X0001[R_SC_SCHEMA_VALIDATION]
  R0001[R_GE_R_TOO_FEW_POINTS]
  R0002[R_GE_R_CONSECUTIVE_POINTS_SAME]
  R0003[R_GE_R_NOT_CLOSED]
  R0004[R_GE_R_SELF_INTERSECTION]
  P0001[R_GE_P_INTERSECTING_RINGS]
  P0002[R_GE_P_NON_PLANAR]
  P0003[R_GE_P_INTERIOR_DISCONNECTED]
  P0004[R_GE_P_HOLE_OUTSIDE]
  P0005[R_GE_P_INNER_RINGS_NESTED]
  P0006[R_GE_P_ORIENTATION_RINGS_SAME]

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

  X0001--&gt;R0003;
  R0003--&gt;R0001;
  R0001--&gt;R0002;
  R0002--&gt;R0004;
  R0004--&gt;P0002;
  P0002--&gt;P0006;
  P0006--&gt;P0003;
  P0006--&gt;P0004;
  P0006--&gt;P0005;
  P0004--&gt;P0001;
  P0005--&gt;P0001;
  P0001--&gt;S0001;
  P0003--&gt;S0001;
  S0001--&gt;S0002;
  S0001--&gt;S0004;
  S0001--&gt;S0003;
  S0001--&gt;S0005;
  S0002--&gt;S0007;
  S0004--&gt;S0007;
  S0007--&gt;S0006;
  S0003--&gt;S0006;
  S0005--&gt;S0006;
  S0006--&gt;S0008; 
</div>
<h2 id="multisurface-und-solid-geometrie">Multisurface und Solid Geometrie<a class="headerlink" href="#multisurface-und-solid-geometrie" title="Permanent link">#</a></h2>
Matthias Betz's avatar
Matthias Betz committed
741
<p>In order to simplify the definition of a validation plan, two requirement will be introduced in addition to the CityGML QIE: valid MultiSurface and valid Solid geometry. These requirements are just a collection of the linear ring, polygon and shell requirements. No extra check is required.</p>
742
743
744
<table>
<thead>
<tr>
Matthias Betz's avatar
Matthias Betz committed
745
746
747
748
749
<th>Requirement ID</th>
<th>Description</th>
<th>Dependencies</th>
<th>Error code</th>
<th>Known checks</th>
750
751
752
753
754
</tr>
</thead>
<tbody>
<tr>
<td><a href="../R_GE_MS/">R_GE_MS</a></td>
Matthias Betz's avatar
Matthias Betz committed
755
<td>valid multisurface geometry</td>
756
757
758
759
760
761
<td>R_SC-SCHEMA-VALIDATION, R_GE_P_ALL</td>
<td>--</td>
<td>--</td>
</tr>
<tr>
<td><a href="../R_GE_SO/">R_GE_SO</a></td>
Matthias Betz's avatar
Matthias Betz committed
762
<td>valid solid geometry</td>
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
<td>R_SC-SCHEMA-VALIDATION, R_GE_S_ALL</td>
<td>--</td>
<td>--</td>
</tr>
</tbody>
</table>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
  
  
    Made with
    <a href="https://squidfunk.github.io/mkdocs-material/" rel="noopener" target="_blank">
      Material for MkDocs
    </a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate"], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
<script>mermaid.initialize({});</script></body>
</html>