Difference between revisions of "Modeling Guide for 3D Objects - Part 1: Basics (Rules for Validating GML Geometries in CityGML)"

From SIG3D Quality Wiki EN
Jump to navigation Jump to search
 
(64 intermediate revisions by 3 users not shown)
Line 137: Line 137:
 
     </td>
 
     </td>
 
     <td>
 
     <td>
Häfele
+
Karl-Heinz Häfele
 
     </td>   
 
     </td>   
 
     <td>
 
     <td>
Line 157: Line 157:
 
     </td>   
 
     </td>   
 
     <td>
 
     <td>
not public
+
public
 
     </td>   
 
     </td>   
 
     <td>
 
     <td>
first English Version    </td>  
+
English Version   </td>
 +
  </tr>
 +
  <tr align="left" valign="top">
 +
    <td>
 +
0.7.1 EN
 +
    </td>
 +
    <td width="220">
 +
November 2014
 +
    </td>
 +
    <td>
 +
Egbert Casper
 +
    </td> 
 +
    <td>
 +
public
 +
    </td> 
 +
    <td>
 +
Derived PDF Version    </td>
 +
  </tr>
 +
  <tr align="left" valign="top">
 +
    <td>
 +
0.7.2 EN
 +
    </td>
 +
    <td width="220">
 +
November 2017
 +
    </td>
 +
    <td>
 +
Egbert Casper
 +
    </td> 
 +
    <td>
 +
public
 +
    </td> 
 +
    <td>
 +
Minor editorial changes and completions, License change to Creative Commons BY-NC-SA-4.0   </td>  
 
   </tr>
 
   </tr>
 +
  
 
   </table>
 
   </table>
 +
 +
{| width="100%" cellspacing="6" border="0"
 +
|- valign="top" align="left"
 +
| width="80%" | <div style="margin: 10px; border: 2px solid #dfdfdf; background-color:#f8f8ff;">{{Copyright-BY-NC-SA-4.0}}</div>
 +
|}
 +
 +
== References ==
 +
* Cox, S., Daisey, P., Lake, R., Portele, C., Whiteside, A. (2004): OpenGIS Geography Markup Language (GML) Implementation Specification. Version: 3.1.1, OGC 03-105r1,
 +
* Herring J. (2001): The OpenGIS Abstract Specification, Topic 1: Feature Geometry (ISO 19107 Spatial Schema), Open Geospatial Consortium, OGC Document Number 01-101. OGC.
 +
* Gröger, G., Kolbe, T., Czerwinski, A., and Nagel, C. (2008) (Eds.): OpenGIS City Geography Markup Language (CityGML) Encoding Standard, OGC reference number OGC 08-007r1 version 1.0.0, 2008
 +
* Gröger, G., Plümer, L. (2011): How to Achieve Consistency for 3D City Models. Geoinformatica, 15(1):137-165, DOI: 10.1007/s10707-009-0091-6.
  
 
== Preliminaries ==
 
== Preliminaries ==
* Die Regeln beziehen sich auf GML Version 3.1.
+
* The rules refer to GML Version 3.1.
* Es wird davon ausgegangen, dass die Daten valide sind bzgl. des XML-Schemas von GML 3.1.
+
* The rules are based on the validity of the data with regard to the XML-Schema of GML 3.1.
* Die Regeln sind eingeschränkt auf die Elemente von GML, die von CityGML genutzt werden (Profil von GML, siehe Abbildung 1 und Abbildung 2).
+
* The rules are restricted to the elements of GML that are used in CityGML (Profile of GML, c.f. Figure 1 and Figure 2).
* Falls eine Bedingung nur für CityGML und nicht für GML im Allgemeinen gilt, so ist dies explizit vermerkt.
+
* If a condition applies to CityGML only (not to GML in general), it is stated explicitly.  
 
  
 
<table  border="0" cellspacing="0">
 
<table  border="0" cellspacing="0">
Line 180: Line 223:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td>
 
     <td>
'''Abbildung 1:''' Profil von GML, das in CityGML verwendet wird (Primitive und Komposite)
+
'''Figure 1:''' Profile of GML that is used in CityGML (Primitives and Composites)
 
     </td>
 
     </td>
 
   </tr>
 
   </tr>
Line 193: Line 236:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td>
 
     <td>
'''Abbildung 2:''' Profil von GML, das in CityGML verwendet wird (Komplexe und Aggregate)
+
'''Figure 2:''' Profile of GML that is used in CityGML (Complexes and Aggregates)
 
     </td>
 
     </td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
  
== <span id="Spatial-Reference-System">Spatial Reference Systems (SRS)</span> ==
+
== <span id="Spatial-Reference-Systems">Spatial Reference Systems (SRS)</span> ==
* Jedes Geometrie-Element (einschließlich pos, posList and coordinates) muss
+
* Each geometry element (including pos, posList and coordinates) must
** entweder im srsName-Attribut mit einem Wert belegt sein, oder
+
** either have a srsName attribute with proper value, or
** den Wert des srsName-Attributs erben
+
** inherit the value of the srsName attribute from
*** von seiner Elterngeometrie (auch rekursiv, von deren Elterngeometrie usw.) oder
+
*** its parent geometries (even it its obtained recursively from the parents of the parents, etc.), or
*** von der gml:Envelope (oder gml:Box), die der Wert der gml:boundedBy Property des Eltern-Features oder der Eltern-FeatureCollection ist (auch rekursiv).  
+
*** the gml:Envelope (or gml:Box) which is the value of the gml:boundedBy property of the parent feature or the parent feature collection (even if it is obtained recursively).  
* ein lokaler Wert des srsName Attribut geht dem geerbten Wert des srsName- Attributs vor
+
* A local value of a srsName attribute precedes the inherited value of a srsName attribute.
* sollte aus dem SRS nicht zweifelsfrei die Dimension erkennbar sein, muss das Attribut srsDimension bei Geometrieelementen (pos, posList) die Dimension des SRS enthalten
+
* If in geometries (pos, posList) the dimension of a SRS can not be derived from the SRS without a doubt, the attribute srsDimension must contain the dimension of the SRS.
  
 
== Definitions ==
 
== Definitions ==
Line 212: Line 255:
  
 
=== <span id="PlanarityOfPolygons">Planarity of Polygons</span> ===
 
=== <span id="PlanarityOfPolygons">Planarity of Polygons</span> ===
Im CityGML müssen Polygone von einem planaren linearen Ring begrenzt sein . Aus praktischen Erwägungen werden auch Linear Ring Elemente, deren Punkte, die nicht exakt auf einer Ebene liegen sondern minimal davon abweichen, als planar akzeptiert. Intuitiv würde man fordern, dass ein Linearer Ring  planar ist, wenn es eine Ebene E gibt, so dass die Distanz aller Punkte des Rings zu E einen gegebenen Grenzwert  nicht überschreitet. Diese Ebene E kann über eine Ausgleichung aller Punkte aus R ermittelt werden, etwa durch Minimierung der maximalen Abstände von Punkten in R zu E (Ausgleichung gemäß Maximumsnorm) oder durch Minimierung der Quadrate der Abstände (Ausgleichung nach Gauß).  
+
„Surfaces in CityGML are represented by polygons, which define a planar geometry, i.e. the boundary and all interior points are required to be located in one single plane.” (Gröger et al., 2008). The boundary of a Polygon is defined by one or more planar Linear Rings (see gml:Polygon). From practical point of view, Linear Rings that are not exactly planar should be accepted as a valid as well.
Problematisch bei dieser Definition ist, dass auch minimale Knicke und Falten, wie in Abbildung 6 dargestellt, als planar akzeptiert werden. Dies entspricht aber in der Regel nicht dem intuitiven Verständnis einer planaren Fläche.
+
Intuitively, a Linear Ring R would be defined as planar if there is a plane E with distance  less than a given threshold  for all points Pi of R. However, this is true for Linear Rings with small bends and folds as shown in Figure 3 as well.
  
 
<table width="900px"  border="0" cellspacing="0">
 
<table width="900px"  border="0" cellspacing="0">
Line 226: Line 269:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="2">
 
     <td colspan="2">
'''Abbildung 3:''' Minimale Knicke und Falten sollen auch bei nahezu planarenlinearen Ringen vermieden werden.
+
'''Figure 3:''' : Bends and folds should not appear in planar Linear Rings
 
     </td>
 
     </td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
  
Wenn solche Knicke und Falten erkannt werden sollen, muss das Kriterium zur Toleranz bei planaren linearen Ringen ergänzt werden. Es ergibt sich eine alternative Definition der Planarität Linearer Ringe:
+
In order to avoid such situations, a slightly different definition of planarity of Linear Rings is introduced:
  
 
'''Definition 1:'''
 
'''Definition 1:'''
Ein Linearer Ring <math>R</math> heißt '''planar''', wenn mindestens 3 Punkte des Rings nicht ko-linear sind und der Abstand der Punkte zu allen Ebenen <math>E_{ijk}</math> , die durch 3 nicht ko-lineare Punkte <math>P_i</math>, <math>P_j</math>  und <math>P_k</math> aufgespannt werden, kleiner ist als eine gegebene Schranke <math>\epsilon</math> :
+
A Linear Ring <math>R</math> is '''planar''', if it is a valid Linear Ring and the distance of all points to any plane <math>E_{ijk}</math>, that is defined by three co-linear points <math>P_i</math>, <math>P_j</math>  and <math>P_k</math>, is less than a given threshold <math>\epsilon</math> :
  
 
<math>\forall E_{ijk} \forall P_a = dist (P_a,E_{ijk})\le \epsilon</math>
 
<math>\forall E_{ijk} \forall P_a = dist (P_a,E_{ijk})\le \epsilon</math>
  
+
<!--
 
  Für die Überprüfung der Planarität wäre es wünschenswert, eine Vorgabe für die Schranke <math>\epsilon</math> zu haben.<br> Da die Eigenschaft der Planarität invariant gegenüber Skalierungen sein sollte,<br /> sollte in den Wert von <math>\epsilon</math> die Ausdehnung bzw. Größe (Flächeninhalt, max. Punktabstand) des Linearen Ringes eingehen.<br /> Dazu sollte die Punktgenauigkeit bekannt/festgelegt sein.
 
  Für die Überprüfung der Planarität wäre es wünschenswert, eine Vorgabe für die Schranke <math>\epsilon</math> zu haben.<br> Da die Eigenschaft der Planarität invariant gegenüber Skalierungen sein sollte,<br /> sollte in den Wert von <math>\epsilon</math> die Ausdehnung bzw. Größe (Flächeninhalt, max. Punktabstand) des Linearen Ringes eingehen.<br /> Dazu sollte die Punktgenauigkeit bekannt/festgelegt sein.
 +
-->
  
 
== <span id="posList">[http://www.schemacentral.com/sc/niem21/e-gml32_posList.html gml:posList]</span> ==
 
== <span id="posList">[http://www.schemacentral.com/sc/niem21/e-gml32_posList.html gml:posList]</span> ==
Line 245: Line 289:
  
 
== <span id="Curve"><span id="LineString">[http://www.schemacentral.com/sc/niem21/e-gml32_Curve.html gml:_Curve], [http://www.schemacentral.com/sc/niem21/e-gml32_LineString.html gml:LineString]</span></span> ==
 
== <span id="Curve"><span id="LineString">[http://www.schemacentral.com/sc/niem21/e-gml32_Curve.html gml:_Curve], [http://www.schemacentral.com/sc/niem21/e-gml32_LineString.html gml:LineString]</span></span> ==
* als _Curves sind nur gml:LineStrings erlaubt (gilt nur für CityGML)
+
* Only gml:LineStrings are allowed as subtypes of _Curves (rule applies to CityGML only)
* ein gml:LineString hat lineare Interpolation
+
* A gml:LineString has linear interpolation.
* für die Kindelemente eines gml:LineString (Kontrollpunkte) gilt folgendes:
+
* For the child elements of a gml:LineString (control points) the following statements must hold true:
** diese bilden eine Folge von "pos" (DirectPositionType) oder "pointProperty" (PointPropertyType) Elementen. "pos"-Elemente sind Kontrollpunkte, die nur zu dieser Curve gehören. "pointProperty"-Elemente enthalten Punkte, die von anderen Geometrien referenziert werden können, oder referenzieren andere Punkte (über XLinks), die in anderen Geometrien definiert sind.  
+
** They form a sequence of "pos" (DirectPositionType) or "pointProperty" (PointPropertyType) elements. "pos" elements are control points that belong to this curve only. "pointProperty" elements contain points that may be referenced from other geometries or that reference other points (via XLinks) which are defined in other geometries.
** Alternativ kann der gml:LineString aus einem "posList"-Element bestehen, das eine kompakte Möglichkeit der Angabe von Koordinaten bietet. In diesem Fall müssen alle Kontrollpunkte zu derselben Curve gehören und im selben SRS vorliegen. Die Anzahl der Punkte (Direct Position) ist mindestens zwei.
+
** Alternatively, a gml:LineString can be composed of a "posList" element, providing a compact way of representing coordinates. In that case all control points must belong to the same Curve and must be given in the same SRS. The number of points (Direct Position) must be at least two.
* Jeder Kontrollpunkt im gml:LineString erscheint nur einmal, außer dem ersten und letzten, die identisch sein können.  
+
* Each control point in a gml:LineString occurs only once, beside the first and the last one which may both be identical.  
* Liniensegmente eines gml:LineString ergeben sich jeweils durch zwei aufeinanderfolgende Kontrollpunkte. Diese Liniensegmente dürfen sich nicht schneiden bzw. haben keine gemeinsamen Punkte. Ausgenommen sind Anfangs- und Endpunkt (definiert durch einen gemeinsamen Kontrollpunkt) zweier aufeinander folgender Liniensegmente.
+
* Line segments of a gml:LineString are defined by pairs of two subsequent control points. Those line segments must not intersect mutually and must not have any identical points. Exceptions of that rule are the pairs which consist of an endpoint of one line segment and the start point of the next line segment in the sequence.
 
 
  
 
== <span id="LinearRing">[http://www.schemacentral.com/sc/niem21/e-gml32_LinearRing.html gml:LinearRing]</span> ==
 
== <span id="LinearRing">[http://www.schemacentral.com/sc/niem21/e-gml32_LinearRing.html gml:LinearRing]</span> ==
  
Der Linear Ring ist das grundlegende Element zur Geometriebeschreibung in CityGML. Jedes einzelne Polygon einer Gebäudegeometrie wird durch seinen Umring definiert. Eben dieser Umring wird durch das Element „Linear Ring“ beschrieben.
+
The Linear Ring is the fundamental element to describe 3D geometry in CityGML. Every single polygon of a building geometry is defined by its boundary – the Linear Ring.  
  
Zur formalen Definition des Linear Ring muss zunächst der Begriff der Sequenz eingeführt werden. Eine Sequenz ist eine geordnete Liste von Elementen. Im Gegensatz zu einer Menge ist die Reihenfolge der Elemente in einer Sequenz von Bedeutung. Ebenso kann in einer Sequenz ein Element mehrfach vorkommen. Eine endliche Sequenz <math>a</math> mit   <math>n+1</math> Elementen wird durch die Elemente der Sequenz beschrieben: <math>a=(a_0,a_1,...,a_n)</math>. Die leere Sequenz <math>a=()</math> hat keine Elemente.
+
A sequence is an ordered list of elements. Unlike a set, order matters, and the exact same elements can appear multiple times at different positions in the sequence. A finite sequence <math>a</math> with   <math>n+1</math> elements is denoted as  <math>a=(a_0,a_1,...,a_n)</math>. The empty sequence <math>a=()</math> has no elements..
  
Eine endliche Sequenz von Punkten <math>R=(P_0,P_1,...,P_n),n\ge3,P_i=(x_i,y_i,z_i)</math> ist ein Linear Ring genau dann, wenn gilt:  
+
A finite sequence of points <math>R=(P_0,P_1,...,P_n),n\ge3,P_i=(x_i,y_i,z_i)</math> is a Linear Ring if:  
  
(i) Der erste und der letzte Punkt der Sequenz sind identisch: <math>P_0 =P_n </math> '''(closeness)'''
+
(i) the first and last point <math>P_0</math> and <math>P_n</math> represent the same point: <math>P_0 =P_n </math> '''(closeness)'''
  
(ii) Mit Ausnahme des ersten und letzten Punktes sind alle Punkte verschieden, d.h.
+
(ii) All points of the sequence besides start and end point are different: 
  <math>\underset{\underset {i \ne k}{\underset{k=0...n-1}{i=0...n-1}}}{\forall} P_i\ne P_k</math> Formelschreibweise überprüfen
+
  <math>\underset{\underset {i \ne k}{\underset{k=0...n-1}{i=0...n-1}}}{\forall} P_i\ne P_k</math>  
  
(iii) Zwei Kanten <math>(P_i , P_{i+1})</math> und <math>(P_k , P_{k+1})</math> mit <math>i = 0 ... (n-1), k= 0 ... (n-1), i \not= k</math> dürfen sich nur in einem Start-/ Endpunkt berühren. Weitere Schnitt- bzw. Berührungspunkte sind nicht zulässig '''(no self intersection)'''.
+
(iii) Two edges <math>(P_i , P_{i+1})</math> and <math>(P_k , P_{k+1})</math> <math>i = 0 ... (n-1), k= 0 ... (n-1), i \not= k</math> do only intersect in one start-/ endpoint. No other intersection is allowed (no self intersection).
  
Sind alle Punkte der Sequenz ko-planar, wird der Linear Ring [[#Planarität|planar]] genannt.
+
If all points of the sequence are co-planar, the Linear Ring is planar.
  
'''Beispiel:'''
+
'''Examples:'''
  
 
<table width="900px"  border="0" cellspacing="0">
 
<table width="900px"  border="0" cellspacing="0">
Line 278: Line 321:
 
<math>R=(P_0,P_1,P_2,P_3,P_0)</math>
 
<math>R=(P_0,P_1,P_2,P_3,P_0)</math>
  
mit
+
with
  
 
<math>P_0 =(1,1,1)</math>
 
<math>P_0 =(1,1,1)</math>
Line 309: Line 352:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="3">
 
     <td colspan="3">
'''Abbildung 4:''' Planarer Linear Ring nach Definition, in GML und als graphische Darstellung
+
'''Figure 4:''' Planar Linear Ring: definition, GML and graphic representation
 
     </td>
 
     </td>
 
   </tr>
 
   </tr>
Line 315: Line 358:
  
  
'''Hinweis:'''  
+
'''Please note:'''  
Die beiden linearen Ringe <math>R_1 = (P_0,P_1,P_2,P_3,P_0)</math> und <math>R_2 = (P_0,P_3,P_2,P_1,P_0)</math> sind nicht identisch.
+
The two Linear Rings <math>R_1 = (P_0,P_1,P_2,P_3,P_0)</math> and <math>R_2 = (P_0,P_3,P_2,P_1,P_0)</math> are not identical.
  
  
Line 342: Line 385:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
<td width="33%">
 
<td width="33%">
Kein Linear Ring, da nicht geschlossen (siehe (i) closeness)
+
No Linear Ring: not closed (see (i) closeness)
 +
 
 
</td>
 
</td>
 
<td width="33%">
 
<td width="33%">
Kein Linear Ring, da sich zwei Kanten schneiden (siehe (iii) self-intersection)
+
No Linear Ring:self intersection (see (iii) self-intersection)
 +
 
 
</td>
 
</td>
 
     <td>
 
     <td>
Kein Linear Ring, da P_4 in der Sequenz doppelt vorkommt (siehe (ii), <math>P_4=(2,2,1)</math>)
+
No Linear Ring: <math>P_4</math> appears twice in the sequence (see (ii), <math>P_4=(2,2,1)</math>)
 
     </td>  
 
     </td>  
 
   </tr>
 
   </tr>
Line 354: Line 399:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="3">
 
     <td colspan="3">
'''Abbildung 5:''' Beispiele für Punktsequenzen, die keine Linear Ring Elemente beschreiben.    </td>
+
'''Figure 5:''' Examples of non-valid Linear Rings</td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
Line 378: Line 423:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
<td width="33%">
 
<td width="33%">
Linear Ring, der nicht planar ist <math>P_4=(2,4,0)</math></td>
+
Linear Ring, but not planar <math>P_4=(2,4,0)</math></td>
 
<td width="33%">
 
<td width="33%">
Kein Linear Ring, da die 3Punkte ko-linear sind, <math>P_1=(2,2,1)</math>; Kanten berühren sich im Innern (siehe (iii))
+
No Linear Ring: all 3 points are co-linear; self-intersection (see (iii))
 
</td>
 
</td>
 
   
 
   
Line 387: Line 432:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="3">
 
     <td colspan="3">
'''Abbildung 6:''' Sonderfälle: nichtplanare und ko-linesre Linear Ring Elemente.   </td>
+
'''Figure 6:''' Special cases: non-planar and co-linear Linear Ring Elements.</td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
  
 
== <span id="Polygon">[http://www.schemacentral.com/sc/niem21/e-gml32_Polygon.html gml:Polygon]</span> ==
 
== <span id="Polygon">[http://www.schemacentral.com/sc/niem21/e-gml32_Polygon.html gml:Polygon]</span> ==
* Ein planarer linearer Ring <math>R_s</math> definiert den Rand eines Polygons <math>S</math> (äußerer Ring).
+
* A Polygon <math>S</math> is defined by a planar Linear Ring  <math>R_s</math> (exterior ring).
* Ein Polygon ist durch genau einen solchen äußeren Ring und <math>n\ge0</math> innere Ringe definiert. Jeder innere lineare Ring muss ebenfalls planar sein, und der äußere und alle inneren linearen Ringe müssen in derselben Ebene (im Rahmen einer gegebenen Toleranz) liegen.
+
* A polygon has exactly one exterior ring. In addition, a polygon can have <math>n\ge0</math> interior rings. These interior rings a planar Linear Rings as well. All interior rings and the exterior ring must be on the same plane (within the given tolerance).  
* Jeder '''innere''' lineare Ring '''muss innerhalb des Gebiets''' der Ebene liegen, das der '''äußere''' Ring begrenzt.
+
* As interior rings define holes in the polygon, they have to be completely included in the area defined by the exterior ring.
 
<table width="900px"  border="0" cellspacing="0">
 
<table width="900px"  border="0" cellspacing="0">
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
Line 404: Line 449:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="1">
 
     <td colspan="1">
'''Figure 5:''' Polygon mit <span style="color:#008000">korrektem inneren Ring (links)</span> und <span style="color:#FF0000">nicht korrektem inneren Ring (rechts)</span> </td>
+
'''Figure 7:''' Polygon with <span style="color:#008000">correct interior ring (left)</span> and <span style="color:#FF0000">incorrect inner ring (right)</span> </td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
* Die inneren linearen Ringe dürfen nicht verschachtelt sein, d.h. kein innerer Ring liegt in dem Gebiet der Ebene, das ein anderer innerer Ring definiert.
+
* Interior rings must not overlap other Linear Rings or be included in another Linear Ring (except the exterior Linear Ring).
 
  <table width="900px"  border="0" cellspacing="0">
 
  <table width="900px"  border="0" cellspacing="0">
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
Line 417: Line 462:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="1">
 
     <td colspan="1">
'''Abbildung 5:''' Polygon mit <span style="color:#008000">zwei korrekten inneren Ringen (links)</span> und zwei verschachtelten, <span style="color:#FF0000">nicht korrekten inneren Ringen (rechts)</span> </td>
+
'''Figure 8:''' Polygon with <span style="color:#008000">two correct interior Rings (left)</span> and two interlaced, <span style="color:#FF0000">not correct interior Rings (right)</span> </td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
* Die inneren Ringe und der äußere Ring dürfen sich paarweise in '''endlich !!!!! (evtl. nur einer)''' vielen Punkten berühren. Dabei muss das Innere des Polygons zusammenhängend sein.
+
* Interior rings and the exterior ring may touch each other in a finite number of points. The inner area of the polygon has to be connected.
 
  <table width="900px"  border="0" cellspacing="0">
 
  <table width="900px"  border="0" cellspacing="0">
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
Line 430: Line 475:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="1">
 
     <td colspan="1">
'''Abbildung 5:''' Polygon mit <span style="color:#008000">korrektem, innerem Ring, der den außeren Ring an einem Punkt berührt (links)</span> und <span style="color:#FF0000">nicht korrektem innerem Ring, der den äußeren Ring an zwei Punkten berührt und damit dass Polygon spaltet (rechts)</span> </td>
+
'''Figure 9:''' Polygon with <span style="color:#008000">correct, interior ring touching the outer ring at exactly one point (left)</span> and <span style="color:#FF0000">incorrect interior Ring touching the outer ring at two points and splitting the polygon (right) </span> </td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
* Die Reihenfolge der Punkte des äußeren Linear Rings definiert die '''Orientierung''' des Polygons. In  <math>R</math> existieren mindestens drei nicht ko-lineare Punkte  <math>P_i</math>, <math>P_j</math> und  <math>P_k</math>, die eine Ebene <math>E(P_i,P_j,P_k)</math> aufspannen. Der Vektor <math>\vec n</math> , der sich aus dem normalisieren Kreuzprodukt der beiden Vektoren <math>\vec{P_iP_j}</math>  und <math>\vec{P_jP_k}</math> ergibt, wird als Flächennormale des Polygons bezeichnet:  
+
* • The order of points of the exterior ring defines the orientation of the polygon. The non co-linear points <math>P_i</math>, <math>P_j</math> und  <math>P_k</math>define the plane <math>E(P_i,P_j,P_k)</math>. The normal vector <math>\vec n</math> is given by the cross product of the two vectors <math>\vec{P_iP_j}</math>  and <math>\vec{P_jP_k}</math>:  
  
 
<math>\vec n = \frac {\vec{P_iP_j}\times\vec{P_jP_k}}{\| {\vec{P_iP_j}\times\vec{P_jP_k}}\|}</math>
 
<math>\vec n = \frac {\vec{P_iP_j}\times\vec{P_jP_k}}{\| {\vec{P_iP_j}\times\vec{P_jP_k}}\|}</math>
 
 
 
 
Bemerkung:  
+
'''Please note:''' that due to the tolerance of planar Linear Rings, the normal vector can be ambiguous.  
Aufgrund der Toleranz planarer linearer Ringe ist die Flächennormale des Polygons nicht eindeutig bestimmt.  
 
  
Hinweis:  
+
'''Remark:'''
Die beiden von den linearen Ringen <math>R_1=(P_0,P_1,P_2,P_3,P_0)</math> und <math>R_2=(P_0,P_3,P_2,P_1,P_0)</math> definierten Polygone haben dieselbe geometrische Ausprägung, unterscheiden sich aber hinsichtlich der Orientierung.
+
The two Linear Rings <math>R_1=(P_0,P_1,P_2,P_3,P_0)</math> and <math>R_2=(P_0,P_3,P_2,P_1,P_0)</math> define polygons with the same geometric extend but different orientation.
  
 
<table width="900px"  border="0" cellspacing="0">
 
<table width="900px"  border="0" cellspacing="0">
Line 452: Line 496:
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="1">
 
     <td colspan="1">
'''Abbildung 5:''' Polygon mit Flächennormale n </td>
+
'''Figure 10:''' Polygon with normal vector n</td>
 
   </tr>
 
   </tr>
 
</table>
 
</table>
  
 
== <span id="OrientableSurface">[http://www.schemacentral.com/sc/niem21/e-gml32_OrientableSurface.html gml:OrientableSurface]</span> ==
 
== <span id="OrientableSurface">[http://www.schemacentral.com/sc/niem21/e-gml32_OrientableSurface.html gml:OrientableSurface]</span> ==
* Hat das Attribut “orientation” den Wert "+", so ist die OrientableSurface identisch zu der baseSurface. Ist der Wert der Orientierung "-", dann entspricht die OrientableSurface einer Surface mit einer Normalen, die der Normalen der baseSurface entgegen gesetzt gerichtet ist. "+" ist der Default-Wert des Attributs “orientation”.
+
* If the value of the attribute “orientation” of an OrientableSurface is "+", the orientation of the OrientableSurface is identical to the one of the baseSurface. If the value of “orientation is " ", the normal of the OrientableSurface has a direction which is opposite to the normal of the baseSurface. The default value of “orientation” is "+".
* Entweder referenziert das Element “baseSurface” die base surface durch ein XLink-Attribut, oder das Element “baseSurface” enthält die base surface als Kindelement. Die base surface hat eine positive Orientierung.
+
* Either the element “baseSurface” references the base surface via a XLink attribute or the element “baseSurface” contains the base surface as child element. The base surface has positive orientation.
 
 
  
 
== <span id="MultiSurface">[http://www.schemacentral.com/sc/niem21/e-gml32_MultiSurface.html gml:MultiSurface]</span> ==
 
== <span id="MultiSurface">[http://www.schemacentral.com/sc/niem21/e-gml32_MultiSurface.html gml:MultiSurface]</span> ==
Eine Menge <math>M=\lbrace S_1,S_2,...S_n\rbrace</math>  von Polygonen wird als '''MultiSurface''' bezeichnet. Es gelten keinerlei Bedingungen für die Struktur der in  <math>S</math> enthaltenen Polygone. Sie können sich beispielsweise überlappen oder durchdringen. Es ist auch nicht notwendig, dass die Polygone in <math>S</math>  eine zusammenhängende Oberfläche beschreiben. Die Polygone können beliebig orientiert sein.
+
A MultiSurface is an unstructured set <math>M=\lbrace S_1,S_2,...S_n\rbrace</math>  of polygons. No further constraints are defined for a MultiSurface element. It is not necessary that <math>M</math> is a connected surface. Orientation of the polygons is arbitrary. By a MultiSurface any existing polygonal boundary representation of a rigid body can be described. Unfortunately, also objects that do not exist in real space can be modeled.
  
Das MultiSurface-Element ist daher sehr einfach zu nutzen.
+
Due to the missing constraints it is recommended that MultiSurface elements should only be used to model non-volumetric parts of the building model as shown in Figure 11. Volumetric parts should be modeled as solids (see gml:Solid)
  
Allerdings sind die häufigsten Fehler, die in einem Modell enthalten sind, auf die Verwendung von MultiSurface-Elemente zurückzuführen, da keinerlei strukturgebende Randbedingungen vorhanden sind.
+
<table width="700px"  border="0" cellspacing="0">
  
In der Computergraphik wird eine solche Menge von Polygonen ohne explizite Struktur auch „Polygon-Suppe“ genannt.
 
 
Problematisch ist bei der Verwendung von MultiSurface Elementen, dass mit diesem Geometrieelement Objekte dargestellt werden können, die keine Festkörper sind. Dies ist zwar ein sehr flexibler Ansatz, sollte aber nur verwendet werden, wenn explizit keine Festkörper modelliert werden sollen.
 
  
<table width="900px"  border="0" cellspacing="0">
 
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
<td width="50%">
 
<td width="50%">
[[image:Teil1-ABB8a.png|450px]]
+
[[image:MultiSurface-01a.png|300px]]
 +
</td>
 +
    <td width="50%">
 +
[[image:MultiSurface-01a.png|300px]]
 +
    </td>
 +
  </tr>
 +
  <tr align="left" valign="top">
 +
<td width="50%">
 +
[[image:MultiSurface-Explode-01a.png|300px]]
 
</td>
 
</td>
 
     <td width="50%">
 
     <td width="50%">
[[image:Teil1-ABB8b.png|450px]]
+
[[image:MultiSurface-Explode-01b.png|300px]]
 
     </td>  
 
     </td>  
 
   </tr>
 
   </tr>
 +
 +
 +
 
   <tr align="left" valign="top">
 
   <tr align="left" valign="top">
 
     <td colspan="2">
 
     <td colspan="2">
'''Abbildung 6:''' Modellierung von Dachüberständen als einfache Polygone. Im linken Modell wird das Gebäude mit einer MultiSurface-Geometrie beschrieben, die aus 7 Polygonen besteht. Eine Volumenberechnung ist nicht möglich, da es sich um keinen geschlossen Körper handelt. Die rechte Abbildung zeigt dasselbe Modell, nun durch eine Solid (Gebäude) und eine zusätzliche MultiSurface-Geometrie (2 Polygone für Dachüberstand) beschrieben (vgl. CityGML Standard v1.0, S.61). Diese Variante ist zu empfehlen.
+
'''Figure 11:''' Modeling overlapping roof parts ('''above:''' complete models, polygons outlined; '''below:''' roof polygons exploded)
 +
 
 +
'''Please note:''' the left model in Figure 11 is created with a MultiSurface element containing 7 polygons. However, the polygons do not represent a valid boundary of a rigid body. Calculating a volume is not possible. The right model is the same building geometry but modeled with 1 Solid element (7 polygons) and 1 MultiSurface element (2 polygons F6 and F8) as recommended (see CityGML Standard v1.0,p.61)
 +
 
 
     </td>
 
     </td>
 
   </tr>
 
   </tr>
Line 490: Line 543:
 
== <span id="CompositeSurface"> [http://www.schemacentral.com/sc/niem21/e-gml32_CompositeSurface.html gml:CompositeSurface]</span>==
 
== <span id="CompositeSurface"> [http://www.schemacentral.com/sc/niem21/e-gml32_CompositeSurface.html gml:CompositeSurface]</span>==
  
Eine CompositeSurface ist eine Menge <math>C=\lbrace S_1,S_2,...,S_n \rbrace</math> von Polygonen, für die
+
A set <math>C=\lbrace S_1,S_2,...,S_n \rbrace</math> of polygons is a CompositeSurface for which
folgendes gilt:
 
  
# Die Schnittmenge zweier Polygone <math>S_k</math>  und <math>S_l</math>  aus <math>C</math>  ist entweder leer oder besteht nur aus Punkten und/oder Kanten, die auch in den beiden linearen Ringen vorkommen. Bezeichne <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math> den planaren linearen Ring, der das Polygon <math>S</math> definiert. Dann gilt:<br><math>S_i \cap S_k= \begin{cases}\emptyset\\ \lbrace Q_0,Q_1,...,Q_m\rbrace,Q_j=P_k^i\\ \lbrace e_0,e_1,...,e_m\rbrace,e_j=\overline{P_i^kP_{i+1}^k} \end{cases}</math>
+
# The intersection of two polygons <math>S_k</math>  and <math>S_l</math>  of <math>C</math>  is either empty or contains only points <math>P</math> and/or edges <math>e</math>that are part of both Linear Rings.  
# Jede Kante <math>e_k=\overline{P_i^kP_{i+1}^k}</math> eines linearen Rings <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math> , der ein Polygon <math>S_k \in C</math> definiert, wird höchstens  einmal als Kante <math>e_l=\overline{P_j^lP_{j+1}^l}</math>  in einem linearen Ring <math>R_l=(P_0^l,P_1^l,...,P_m^l)</math>  genutzt, der ein anderes Polygon <math>S_l \in C</math> definiert.<br>Es gilt <math>P_i^k=P_{j+1}^l</math>  und <math>P_{i+1}=P_j^l</math>.
+
The polygon <math>S</math> is defined by the planar Linear Ring <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math>.
# Die Polygone aus <math>C</math> sind so orientiert, dass die Flächennormale benachbarte Polygone in dieselbe Richtung zeigen.
+
The intersection of <math>S_i</math> and <math>S_k</math> equals<br>
# Die Vereinigung aller Polygone aus <math>C</math> ohne die Kanten oder Punkte, in denen sich die Polygone berühren, ist isomorph zu einem Polygon.  
+
<math>S_i \cap S_k= \begin{cases}\emptyset\\ \lbrace Q_0,Q_1,...,Q_m\rbrace,Q_j=P_k^i\\ \lbrace e_0,e_1,...,e_m\rbrace,e_j=\overline{P_i^kP_{i+1}^k} \end{cases}</math>
 +
# Every edge <math>e_k=\overline{P_i^kP_{i+1}^k}</math> of a Linear Ring <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math> , defining a polygon <math>S_k \in C</math> is used exactly once as an edge <math>e_l=\overline{P_j^lP_{j+1}^l}</math>  in a Linear Ring <math>R_l=(P_0^l,P_1^l,...,P_m^l)</math>  defining another polygon <math>S_l \in C</math> with <math>P_i^k=P_{j+1}^l</math>  and  <math>P_{i+1}=P_j^l</math>.
 +
# All polygons in <math>C</math> are oriented such that the normal vectors of neighbouring polygons point to the same direction.
 +
# The union of all polygons in <math>C</math> without the edges or points where the polygons touch, is isomorphic to a polygon.  
  
Aus (1) und (2) ergibt sich, dass die Oberfläche, die durch  <math>C</math> beschrieben wird, keine sich gegenseitig überlappenden oder durchdringenden Polygone enthalten darf (Polygone berühren sich höchstens in Punkten oder Kanten).
+
It follows from (i) and (ii) that the surface defined by <math>C</math> , must not contain any overlapping or penetrating polygons, that is, polygons touch at most at points or edges.
  
 
== <span id="Solid"> [http://www.schemacentral.com/sc/niem21/e-gml32_Solid.html gml:Solid]</span>==
 
== <span id="Solid"> [http://www.schemacentral.com/sc/niem21/e-gml32_Solid.html gml:Solid]</span>==
  
Ein Solid modelliert einen beliebigen Festkörper. Die Oberfläche des Solid wird über eine Menge von Polygonen beschrieben, die bestimmte strukturgebende Eigenschaften erfüllen müssen.
+
A solid geometry represents a rigid body. The surface of the solid is defined by a set of polygons with the following properties.  
Die Menge <math>C=\lbrace S_1,S_2,...,S_n \rbrace</math> von Polygonen beschreibt die Oberfläche eines Solid genau dann, wenn gilt:
+
The set <math>C=\lbrace S_1,S_2,...,S_n \rbrace</math> of polygons bounds a solid if:
  
# Die Schnittmenge zweier Polygone <math>S_k</math>  und <math>S_l</math>  aus <math>C</math>  ist entweder leer oder besteht nur aus Punkten und Kanten, die auch in den beiden linearen Ringen vorkommen. Bezeichne <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math>  den planaren linearen Ring, der das Polygon <math>S</math> definiert. Dann gilt:<br><math>S_i \cap S_k= \begin{cases}\emptyset\\ \lbrace Q_0,Q_1,...,Q_m\rbrace,Q_j=P_k^i\\ \lbrace e_0,e_1,...,e_m\rbrace,e_j=\overline{P_i^kP_{i+1}^k} \end{cases}</math>
+
# The intersection of two polygons <math>S_k</math>  and <math>S_l</math>  of <math>C</math>  is either empty or contains only points <math>P</math> and edges <math>e</math> that are part of both Linear Rings. The polygon <math>S</math> is defined by the Linear Ring <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math>. The intersection of <math>S_k</math>  and <math>S_l</math> equals: <br><math>S_i \cap S_k= \begin{cases}\emptyset\\ \lbrace Q_0,Q_1,...,Q_m\rbrace,Q_j=P_k^i\\ \lbrace e_0,e_1,...,e_m\rbrace,e_j=\overline{P_i^kP_{i+1}^k} \end{cases}</math>
# Jede Kante <math>e_k=\overline{P_i^kP_{i+1}^k}</math> eines linearen Rings <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math> , der ein Polygon <math>S_k \in C</math> definiert, wird genau einmal als Kante <math>e_l=\overline{P_j^lP_{j+1}^l}</math>  in einem linearen Ring <math>R_l=(P_0^l,P_1^l,...,P_m^l)</math> genutzt, der ein anderes Polygon <math>S_l \in C</math> definiert.<br>Es gilt <math>P_i^k=P_{j+1}^l</math>  und <math>P_{i+1}=P_j^l</math>.
+
# Every Edge <math>e_k=\overline{P_i^kP_{i+1}^k}</math> of a Linear Ring <math>R_k=(P_0^k,P_1^k,...,P_n^k)</math> , defining a polygon <math>S_k \in C</math>, is used exactly once as an edge <math>e_l=\overline{P_j^lP_{j+1}^l}</math>  in a Linear Ring <math>R_l=(P_0^l,P_1^l,...,P_m^l)</math>, defining another polygon <math>S_l \in C</math> with <math>P_i^k=P_{j+1}^l</math>  and <math>P_{i+1}=P_j^l</math>.
# Die Polygone aus <math>C</math> sind so orientiert, dass die Flächennormalen nicht ins Innere des Festkörpers zeigen, sondern nach außen.
+
# All polygons in <math>C</math> are oriented such that the normal vector of each polygon points to the outside of the solid.
# Die Polygone aus <math>C</math> sind zusammenhängend, d.h. in dem dualen Graphen von  <math>C</math> gibt es einen Weg, der alle Knoten umfasst. Der duale Graph G<sub>C</sub> =(V<sub>C</sub>, E<sub>C</sub>) von <math>C</math>  besteht aus einer Menge V<sub>C</sub> von Knoten und einer Menge E<sub>C</sub> von Kanten. Jeder Knoten v aus V<sub>C</sub> repräsentiert genau ein Polygon aus <math>C</math> . Eine Kante zweier Polygone <math>S_k</math>  und <math>S_l</math>  aus <math>C</math> wird in G<sub>C</sub> durch eine Kante <math>e=(v_{s_k},v_{s_l})</math> in E<sub>C</sub> dargestellt.
+
# All polygons in <math>C</math> are connected, that is the dual graph of <math>C</math> has a path containing all nodes. The dual graph  G<sub>C</sub> =(V<sub>C</sub>, E<sub>C</sub>) of <math>C</math>  consists of a set V<sub>C</sub> of nodes and a set E<sub>C</sub> of edges. Every node v of V<sub>C</sub> represents exactly one polygon of <math>C</math>. An edge shared by two polygons <math>S_k</math>  and <math>S_l</math>  of <math>C</math> is represented by an edge <math>e=(v_{s_k},v_{s_l})</math> in E<sub>C</sub>.
# Für jeden Punkt <math>P</math>, der in einem linearen Ring eines Polygons aus <math>C </math> vorkommt, gilt: Der Graph <math>G_P =(V_P, E_P)</math>, der aus Polygonen und Kanten gebildet wird, die <math>P</math> berühren, ist zusammenhängend. Dabei repräsentiert jeder Knoten <math>v</math> aus <math>V_P</math> genau ein Polygon, dessen linearer Ring <math>P</math> enthält. Zwei Knoten sind genau dann mit einer Kante <math>e</math> aus <math>E_P</math> verbunden, wenn die Polygone, die durch die Knoten repräsentiert werden, eine gemeinsame Kante haben, die <math>P</math> berührt .
+
# For every point <math>P</math> of a Linear Ring of a polygon of <math>C </math> applies: The graph <math>G_P =(V_P, E_P)</math>, that is only build by polygons and edges that touch<math>P</math> is connected. Each node <math>v</math> of <math>V_P</math> represents a polygon which Linear Ring contains <math>P</math>. Two nodes are connected by an edge <math>e</math> of <math>E_P</math> if  the two polygons represented by the nodes have a common edge that touches <math>P</math>.
  
Aus (1) und (2) ergibt sich, dass die Oberfläche, die durch  <math>C</math>  beschrieben wird, keine Löcher enthalten darf. Mit den weiteren Bedingungen (4) und (5) ergibt sich, dass das Innere des durch <math>C</math>   beschriebenen Festkörpers zusammenhängend sein muss.
+
It follows from (i) and (ii) that the surface defined by <math>C</math> has no holes. Together with conditions (4) and (5) it follows that the inner of the solid defined by <math>C</math> is connected
<math>S</math> wird auch als geschlossene [http://www.schemacentral.com/sc/niem21/e-gml32_CompositeSurface.html '''CompositeSurface'''] bezeichnet.
+
<math>S</math> is denoted as  closed [http://www.schemacentral.com/sc/niem21/e-gml32_CompositeSurface.html '''CompositeSurface'''].
  
  
'''Beispiele:'''
+
'''Examples:'''
  
 
<table width="1200px"  border="1" cellspacing="0" style="border:thin">
 
<table width="1200px"  border="1" cellspacing="0" style="border:thin">
Line 538: Line 593:
 
   <tr align="middle">
 
   <tr align="middle">
 
   <td width="300px" valign="top">
 
   <td width="300px" valign="top">
Korrekt: 6 Flächen, geschlossen, Flächenorientierung korrekt
+
correct: 6 surfaces, closed, correct surface orientation
 
     </td>
 
     </td>
 
     <td width="300px" valign="top">
 
     <td width="300px" valign="top">
Korrekt: 11 Flächen, geschlossen, Flächenorientierung korrekt
+
correct: 11 surfaces, closed, correct surface orientation
 
     </td>
 
     </td>
 
     <td width="300px" valign="top">
 
     <td width="300px" valign="top">
Korrekt: 10 Flächen, geschlossen, Flächenorientierung korrekt
+
correct: 10 surfaces, closed, correct surface orientation
 
     </td>   
 
     </td>   
 
     <td width="300px" valign="top">
 
     <td width="300px" valign="top">
Korrekt: 30 Flächen, geschlossen, Flächenorientierung korrekt
+
correct: 30 surfaces, closed, correct surface orientation
 
     </td>   
 
     </td>   
 
</tr>
 
</tr>
Line 574: Line 629:
 
   <tr align="middle">
 
   <tr align="middle">
 
   <td width="300px" valign="top">
 
   <td width="300px" valign="top">
Nicht Korrekt: 5 Flächen, nicht geschlossen, Flächenorientierung korrekt
+
incorrect: 5 surfaces, not closed, correct surface orientation
 
     </td>
 
     </td>
 
     <td width="300px" valign="top">
 
     <td width="300px" valign="top">
Nicht Korrekt: 6 Flächen, geschlossen, Flächenorientierung nicht korrekt
+
incorrect: 6 surfaces, closed, incorrect surface orientation
 
     </td>
 
     </td>
 
     <td width="300px" valign="top">
 
     <td width="300px" valign="top">
Nicht Korrekt: 12 Flächen, nicht geschlossen (zwei Außenhüllen), Flächenorientierung korrekt
+
incorrect: 12 surfaces, no closed (two outer hulls), correct surface orientation
 
     </td>   
 
     </td>   
 
     <td width="300px" valign="top">
 
     <td width="300px" valign="top">
Nicht Korrekt: 12 Flächen, nicht geschlossen (innere und äußere Hülle), Flächenorientierung korrekt
+
incorrect: 12 surfaces, not closed (inner and outer hull), correct surface orientation
 
     </td>   
 
     </td>   
 
</tr>
 
</tr>
Line 589: Line 644:
  
 
== <span id="CompositeSolid">[http://www.schemacentral.com/sc/niem21/e-gml32_CompositeSolid.html gml:CompositeSolid]</span>==
 
== <span id="CompositeSolid">[http://www.schemacentral.com/sc/niem21/e-gml32_CompositeSolid.html gml:CompositeSolid]</span>==
Ein CompositeSolid wird durch eine nichtleere Menge  <math>C = \{S_1,..., S_n\}</math> von '''[[#Solid|Solids]]''' (vgl. 12.) beschrieben, für die gilt:
+
A CompositeSolid is represented by a nonempty set <math>C = \{S_1,..., S_n\}</math> of '''[[#Solid|Solids]]''' (see 10.) with the following properties:
  
# Der Schnitt der Inneren zweier Solids <math>S_i</math>, <math>S_j</math>, 1 ≤ i ≤ n, 1 ≤ j ≤ n, i ≠ j, ist leer, d.h. entweder sind beide Solids <math>S_i</math>, <math>S_j</math> disjunkt oder beide berühren sich nur in Flächen, Linien oder Punkten
+
# The intersection of the inner of two solids <math>S_i</math>, <math>S_j</math>, 1 ≤ i ≤ n, 1 ≤ j ≤ n, i ≠ j of <math>C</math> is empty, that is either both solids <math>S_i</math>, <math>S_j</math> are disjoint or both solids are connected only by surfaces, lines or points.
# Sei <math>C'</math> die Vereinigung aller Solids aus <math>C</math>. Dann ist die Begrenzung von <math>C'</math> (die Oberfläche von <math>C'</math> ohne die Flächen oder Punkte, in denen sich die Solids berühren) die Begrenzung eines Solid.  
+
# Let <math>C'</math> be the union of all solids from <math>C</math>. Then the boundary of <math>C'</math> (the surface of <math>C'</math> without the surfaces or points where the solids touch each other) is the boundary of a solid.  
  
In CityGML werden bei CompositeSolids ebenso wie bei Solids innere Einschlüsse (Hohlräume) nicht betrachtet.  
+
In CityGML inner inclusions ( hollow spaces ) are not considered in CompositeSolids, as in solids.  
  
  
'''Beispiele:'''
+
'''Examples:'''
  
 
<table width="1200px"  border="1" cellspacing="0" style="border:thin">
 
<table width="1200px"  border="1" cellspacing="0" style="border:thin">
Line 620: Line 675:
 
   <tr align="middle">
 
   <tr align="middle">
 
   <td width="300px" valign="bottom">
 
   <td width="300px" valign="bottom">
Korrekt; Flächenberührung
+
correct; surface contact
 
     </td>
 
     </td>
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
Korrekt; Flächenberührung
+
correct; surface contact
 
     </td>
 
     </td>
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
Korrekt; Flächenberührung
+
correct; surface contact
 
     </td>   
 
     </td>   
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
Korrekt; Flächenberührung
+
correct; surface contact
 
     </td>   
 
     </td>   
 
   
 
   
Line 661: Line 716:
 
   
 
   
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
Falsch; Linienberührung
+
not correct; line contact
 
     </td>  
 
     </td>  
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
Falsch; Punktberührung
+
not correct; point contact
 
     </td>  
 
     </td>  
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
Falsch; keine Berührung
+
not correct; no contact at all
 
     </td>  
 
     </td>  
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
Falsch; Durchdringung
+
not correct; intersection
 
     </td>  
 
     </td>  
  
Line 698: Line 753:
 
   <tr align="middle">
 
   <tr align="middle">
 
   <td width="300px" valign="bottom">
 
   <td width="300px" valign="bottom">
Falsch; 26 Quader mit Flächenberührung
+
not correct; 26 boxes with surface contact
 
     </td>
 
     </td>
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
aber mit Hohlraum
+
but with internal hollow space
 
     </td>
 
     </td>
 
     <td width="300px" valign="bottom">
 
     <td width="300px" valign="bottom">
nicht korrekt; Innere Begrenzung
+
not correct; interior boundaries
 
     </td>   
 
     </td>   
 
    
 
    
Line 715: Line 770:
  
 
== <span id="Triangle">[http://www.schemacentral.com/sc/niem21/e-gml32_Triangle.html gml:Triangle]</span> ==
 
== <span id="Triangle">[http://www.schemacentral.com/sc/niem21/e-gml32_Triangle.html gml:Triangle]</span> ==
* Ein Triangle ist ein Spezialfall eines Polygons, das von einem äußeren linearen Ring mit vier Punkten begrenzt wird.
+
* A Triangle is a special case of a polygon that is bounded by one outer Linear Ring with four points.
* Es gibt keine inneren Ringe (kein Element "interior").
+
* There are no interior rings (no element "interior").
  
 
== <span id="TriangulatedSurface">[http://www.schemacentral.com/sc/niem21/e-gml32_TriangulatedSurface.html gml:TriangulatedSurface]</span> ==
 
== <span id="TriangulatedSurface">[http://www.schemacentral.com/sc/niem21/e-gml32_TriangulatedSurface.html gml:TriangulatedSurface]</span> ==
Eine triangulated surface ist eine Composite Surface (vgl. Abschnitt 10), die nur aus triangles besteht, jedoch nicht geschossen ist, d.h. sie darf Ränder besitzen. Bezüglich der Art und Weise, wie die Triangulation hergeleitet wurde, gibt es keine Einschränkung.
+
A triangulated surface is a [[#CompositeSurface|CompositeSurface]] that consists of triangles only, but is not closed (it may have boundaries). There is no restriction on how the triangulation is derived.
  
 
== <span id="TIN">[http://www.schemacentral.com/sc/niem21/e-gml32_Tin.html gml:Tin] </span>==
 
== <span id="TIN">[http://www.schemacentral.com/sc/niem21/e-gml32_Tin.html gml:Tin] </span>==
Im Gegensatz zur gml:TriangulatedSurface sind in einem gml:Tin die triangles nicht explizit repräsentiert, sondern nur durch ihre Eckpunkte (genannt Kontrollpunkte). Zusätzlich können breaklines, stop lines und die maximale Länge einer Dreiecksseite in einem gml:Tin repräsentiert werden.  
+
In contrast to a gml:TriangulatedSurface, the triangles of a gml:TIN are not represented explicitly, but by its three vertices (called control points). In addition, breaklines, stop lines and the maximal length of a side of a triangle can be represented in a gml:TIN.
 +
 
 +
# A TIN is a triangulated surface that is the result of the application of a Delaunay Algorithm or of a similar algorithm (extended by breaklines, stop lines and the maximal length of a side of a triangle). The surface satisfies the Delaunay criterion:
 +
## For each triangle in the network, the circle passing through its vertices does not contain, in its interior, the vertex of any other triangle. 
 +
# Stoplines are lines where the local continuity or regularity of the surface is questionable. In the area of these pathologies, triangles intersecting a stopline shall be removed from the TIN surface, leaving holes in the surface. If triangles incident to the boundary of the surfaces are removed, the boundary of the surfaces changes. 
 +
# Breaklines are lines that are critical for the shape of the surface, representing local ridges, or depressions (such as drainage lines) in the surface. As such their constituent segments must be included in the TIN even if doing so violates the Delaunay criterion. 
 +
# Areas of the surface where the data is not sufficiently dense to assure reasonable calculations shall be removed by adding a retention criterion for triangles based on the length of their sides. For any triangle sides exceeding maximum length, the adjacent triangles to that triangle side shall be removed from the surface. # The number of control points is at least three.
 +
# The surface is not affected by the order in which the control points are given. Application schemas may add information based on the ordering of the control points to facilitate the reconstruction of the TIN from the control points.
  
# Ein TIN ist eine triangulierte Oberfläche, die Ergebnis der Anwendung eines Delaunay Algorithmus oder eines ähnlichen Verfahrenes ist. Diese wird ergänzt um die Berücksichtigung von Stoplinien, Bruchkanten und der max. Länge von Dreieckseiten. Diese Netze erfüllen das Delaunay Kriterium:
+
{| width="100%" cellspacing="6" border="0"
## Für jedes Dreieck im TIN enthält der Kreis, der durch die drei Punkte des Dreiecks definiert ist, keinen weiteren Eckpunkt eines anderen Dreiecks.
+
|- valign="top" align="left"
# Stoplinien sind Linien, an denen die lokale Kontinuität und Regularität der Oberfläche zweifelhaft ist. In diesen pathologischen Gebieten sollen Dreiecke, die von Stoplinien geschnitten werden, entfernt werden. Dabei können Löcher in der Oberfläche entstehen. Werden Dreiecke am Rand der Oberfläche entfernt, ergibt sich eine Veränderung des Randes der Oberfläche.
+
| width="80%" | <div style="margin: 10px; border: 2px solid #dfdfdf; background-color:#f8f8ff;">{{Copyright-BY-NC-SA-4.0}}</div>
# Bruchkanten (Breaklines) sind Linien, an denen sich die Gestalt der Oberfläche signifikant ändert (Grate, Tallinien, ...). Solche Segmente sollen im TIN enthalten sein, auch wenn diese das Delaunay-Kriterium verletzen.
+
|}
# Max. Länge von Dreiecksseiten: Gebiete der Oberfläche, in denen die Datendichte für eine angemessene Ermittlung der Oberfläche nicht ausreichend ist, werden durch Angabe eines Kriteriums entfernt. Dieses Kriterium bezieht sich auf die Länge der Dreiecksseiten. Alle Dreiecke, deren Seiten (mind. eine) diese Länge überschreiten, werden aus der Oberfläche entfernt.
 
# Es gibt mindestens drei Kontrollpunkte.
 
# Die Oberfläche, die durch das TIN repräsentiert ist, hängt nicht von der Reihenfolge der Kontrollpunkte ab. Anwendungsschemata können Angaben zur Reihenfolge der Kontrollpunkte beinhalten, um die Rekonstruktion des TIN aus den Kontrollpunkten zu beschleunigen.
 

Latest revision as of 11:23, 9 April 2018

Document History

Version

Date

Author/s

Status

Remarks

0.1.0

01.10.2010

Coors

nicht öffentlich

Erstfassung

0.2.0

14.10.2010

Coors

nicht öffentlich

Solid ergänzt

0.3.0

23.10.2010

Gröger

nicht öffentlich

Verschmelzung mit Paper Gröger

0.4.0

23.11.2010

Coors

nicht öffentlich

Redaktionelle Änderungen und Ergänzungen zu Planarität von Polygonen

0.5.0

24.11.2010

Gröger

nicht öffentlich

Einarbeitung der Änderungen, die im CityGML-Forum von K.-H. Häfele vorgeschlagen wurden

0.6.0

15.12.2010

Gröger

öffentlich

Einarbeitung der Anregungen von G. Juen

0.7.0

20.01.2012

Karl-Heinz Häfele

nicht öffentlich

Konvertierung in Html, Verschiebung des Kapitel Planarität von Polygonen, Neues Kapitel CompositeSolid

0.7.0 EN

November 2013

Egbert Casper, Karl-Heinz Häfele

public

English Version

0.7.1 EN

November 2014

Egbert Casper

public

Derived PDF Version

0.7.2 EN

November 2017

Egbert Casper

public

Minor editorial changes and completions, License change to Creative Commons BY-NC-SA-4.0

References

  • Cox, S., Daisey, P., Lake, R., Portele, C., Whiteside, A. (2004): OpenGIS Geography Markup Language (GML) Implementation Specification. Version: 3.1.1, OGC 03-105r1,
  • Herring J. (2001): The OpenGIS Abstract Specification, Topic 1: Feature Geometry (ISO 19107 Spatial Schema), Open Geospatial Consortium, OGC Document Number 01-101. OGC.
  • Gröger, G., Kolbe, T., Czerwinski, A., and Nagel, C. (2008) (Eds.): OpenGIS City Geography Markup Language (CityGML) Encoding Standard, OGC reference number OGC 08-007r1 version 1.0.0, 2008
  • Gröger, G., Plümer, L. (2011): How to Achieve Consistency for 3D City Models. Geoinformatica, 15(1):137-165, DOI: 10.1007/s10707-009-0091-6.

Preliminaries

  • The rules refer to GML Version 3.1.
  • The rules are based on the validity of the data with regard to the XML-Schema of GML 3.1.
  • The rules are restricted to the elements of GML that are used in CityGML (Profile of GML, c.f. Figure 1 and Figure 2).
  • If a condition applies to CityGML only (not to GML in general), it is stated explicitly.

Profil von GML

Figure 1: Profile of GML that is used in CityGML (Primitives and Composites)

Profilvon

Figure 2: Profile of GML that is used in CityGML (Complexes and Aggregates)

Spatial Reference Systems (SRS)

  • Each geometry element (including pos, posList and coordinates) must
    • either have a srsName attribute with proper value, or
    • inherit the value of the srsName attribute from
      • its parent geometries (even it its obtained recursively from the parents of the parents, etc.), or
      • the gml:Envelope (or gml:Box) which is the value of the gml:boundedBy property of the parent feature or the parent feature collection (even if it is obtained recursively).
  • A local value of a srsName attribute precedes the inherited value of a srsName attribute.
  • If in geometries (pos, posList) the dimension of a SRS can not be derived from the SRS without a doubt, the attribute srsDimension must contain the dimension of the SRS.

Definitions

Geometric Tolerances

Planarity of Polygons

„Surfaces in CityGML are represented by polygons, which define a planar geometry, i.e. the boundary and all interior points are required to be located in one single plane.” (Gröger et al., 2008). The boundary of a Polygon is defined by one or more planar Linear Rings (see gml:Polygon). From practical point of view, Linear Rings that are not exactly planar should be accepted as a valid as well. Intuitively, a Linear Ring R would be defined as planar if there is a plane E with distance less than a given threshold  for all points Pi of R. However, this is true for Linear Rings with small bends and folds as shown in Figure 3 as well.

Teil1-ABB6a.png

Teil1-ABB6b.png

Figure 3: : Bends and folds should not appear in planar Linear Rings

In order to avoid such situations, a slightly different definition of planarity of Linear Rings is introduced:

Definition 1: A Linear Ring is planar, if it is a valid Linear Ring and the distance of all points to any plane , that is defined by three co-linear points , and , is less than a given threshold  :


gml:posList

  • The number of items in the list should correlate with the product of the SRS dimension (usually in CityGML 3) and the number of positions.

gml:_Curve, gml:LineString

  • Only gml:LineStrings are allowed as subtypes of _Curves (rule applies to CityGML only)
  • A gml:LineString has linear interpolation.
  • For the child elements of a gml:LineString (control points) the following statements must hold true:
    • They form a sequence of "pos" (DirectPositionType) or "pointProperty" (PointPropertyType) elements. "pos" elements are control points that belong to this curve only. "pointProperty" elements contain points that may be referenced from other geometries or that reference other points (via XLinks) which are defined in other geometries.
    • Alternatively, a gml:LineString can be composed of a "posList" element, providing a compact way of representing coordinates. In that case all control points must belong to the same Curve and must be given in the same SRS. The number of points (Direct Position) must be at least two.
  • Each control point in a gml:LineString occurs only once, beside the first and the last one which may both be identical.
  • Line segments of a gml:LineString are defined by pairs of two subsequent control points. Those line segments must not intersect mutually and must not have any identical points. Exceptions of that rule are the pairs which consist of an endpoint of one line segment and the start point of the next line segment in the sequence.

gml:LinearRing

The Linear Ring is the fundamental element to describe 3D geometry in CityGML. Every single polygon of a building geometry is defined by its boundary – the Linear Ring.

A sequence is an ordered list of elements. Unlike a set, order matters, and the exact same elements can appear multiple times at different positions in the sequence. A finite sequence with elements is denoted as . The empty sequence has no elements..

A finite sequence of points is a Linear Ring if:

(i) the first and last point and represent the same point: (closeness)

(ii) All points of the sequence besides start and end point are different:

 

(iii) Two edges and do only intersect in one start-/ endpoint. No other intersection is allowed (no self intersection).

If all points of the sequence are co-planar, the Linear Ring is planar.

Examples:

with

<gml:LinearRing>

<gml:pos> 1 1 1 </gml:pos>

<gml:pos> 3 1 1 </gml:pos>

<gml:pos> 3 3 1 </gml:pos>

<gml:pos> 1 3 1 </gml:pos>

<gml:pos> 1 1 1 </gml:pos>

</gml:LinearRing>

Teil1-ABB3.png

Figure 4: Planar Linear Ring: definition, GML and graphic representation


Please note: The two Linear Rings and are not identical.


Teil1-ABB4a.png Teil1-ABB4b.png

Teil1-ABB4c.png

No Linear Ring: not closed (see (i) closeness)

No Linear Ring:self intersection (see (iii) self-intersection)

No Linear Ring: appears twice in the sequence (see (ii), )

Figure 5: Examples of non-valid Linear Rings


Teil1-ABB5a.png Teil1-ABB5b.png

Linear Ring, but not planar

No Linear Ring: all 3 points are co-linear; self-intersection (see (iii))

Figure 6: Special cases: non-planar and co-linear Linear Ring Elements.

gml:Polygon

  • A Polygon is defined by a planar Linear Ring (exterior ring).
  • A polygon has exactly one exterior ring. In addition, a polygon can have interior rings. These interior rings a planar Linear Rings as well. All interior rings and the exterior ring must be on the same plane (within the given tolerance).
  • As interior rings define holes in the polygon, they have to be completely included in the area defined by the exterior ring.

InnerLoops-02-2.png

Figure 7: Polygon with correct interior ring (left) and incorrect inner ring (right)
  • Interior rings must not overlap other Linear Rings or be included in another Linear Ring (except the exterior Linear Ring).

InnerLoops-04-2.png

Figure 8: Polygon with two correct interior Rings (left) and two interlaced, not correct interior Rings (right)
  • Interior rings and the exterior ring may touch each other in a finite number of points. The inner area of the polygon has to be connected.

InnerLoops-05-2.png

Figure 9: Polygon with correct, interior ring touching the outer ring at exactly one point (left) and incorrect interior Ring touching the outer ring at two points and splitting the polygon (right)
  • • The order of points of the exterior ring defines the orientation of the polygon. The non co-linear points , und define the plane . The normal vector is given by the cross product of the two vectors and :

Please note: that due to the tolerance of planar Linear Rings, the normal vector can be ambiguous.

Remark: The two Linear Rings and define polygons with the same geometric extend but different orientation.

Teil1-ABB7.png

Figure 10: Polygon with normal vector n

gml:OrientableSurface

  • If the value of the attribute “orientation” of an OrientableSurface is "+", the orientation of the OrientableSurface is identical to the one of the baseSurface. If the value of “orientation is " ", the normal of the OrientableSurface has a direction which is opposite to the normal of the baseSurface. The default value of “orientation” is "+".
  • Either the element “baseSurface” references the base surface via a XLink attribute or the element “baseSurface” contains the base surface as child element. The base surface has positive orientation.

gml:MultiSurface

A MultiSurface is an unstructured set of polygons. No further constraints are defined for a MultiSurface element. It is not necessary that is a connected surface. Orientation of the polygons is arbitrary. By a MultiSurface any existing polygonal boundary representation of a rigid body can be described. Unfortunately, also objects that do not exist in real space can be modeled.

Due to the missing constraints it is recommended that MultiSurface elements should only be used to model non-volumetric parts of the building model as shown in Figure 11. Volumetric parts should be modeled as solids (see gml:Solid)

MultiSurface-01a.png

MultiSurface-01a.png

MultiSurface-Explode-01a.png

MultiSurface-Explode-01b.png

Figure 11: Modeling overlapping roof parts (above: complete models, polygons outlined; below: roof polygons exploded)

Please note: the left model in Figure 11 is created with a MultiSurface element containing 7 polygons. However, the polygons do not represent a valid boundary of a rigid body. Calculating a volume is not possible. The right model is the same building geometry but modeled with 1 Solid element (7 polygons) and 1 MultiSurface element (2 polygons F6 and F8) as recommended (see CityGML Standard v1.0,p.61)

gml:CompositeSurface

A set of polygons is a CompositeSurface for which

  1. The intersection of two polygons and of is either empty or contains only points and/or edges that are part of both Linear Rings.

The polygon is defined by the planar Linear Ring . The intersection of and equals

  1. Every edge of a Linear Ring , defining a polygon is used exactly once as an edge in a Linear Ring defining another polygon with and .
  2. All polygons in are oriented such that the normal vectors of neighbouring polygons point to the same direction.
  3. The union of all polygons in without the edges or points where the polygons touch, is isomorphic to a polygon.

It follows from (i) and (ii) that the surface defined by , must not contain any overlapping or penetrating polygons, that is, polygons touch at most at points or edges.

gml:Solid

A solid geometry represents a rigid body. The surface of the solid is defined by a set of polygons with the following properties. The set of polygons bounds a solid if:

  1. The intersection of two polygons and of is either empty or contains only points and edges that are part of both Linear Rings. The polygon is defined by the Linear Ring . The intersection of and equals:
  2. Every Edge of a Linear Ring , defining a polygon , is used exactly once as an edge in a Linear Ring , defining another polygon with and .
  3. All polygons in are oriented such that the normal vector of each polygon points to the outside of the solid.
  4. All polygons in are connected, that is the dual graph of has a path containing all nodes. The dual graph GC =(VC, EC) of consists of a set VC of nodes and a set EC of edges. Every node v of VC represents exactly one polygon of . An edge shared by two polygons and of is represented by an edge in EC.
  5. For every point of a Linear Ring of a polygon of applies: The graph , that is only build by polygons and edges that touch is connected. Each node of represents a polygon which Linear Ring contains . Two nodes are connected by an edge of if the two polygons represented by the nodes have a common edge that touches .

It follows from (i) and (ii) that the surface defined by has no holes. Together with conditions (4) and (5) it follows that the inner of the solid defined by is connected is denoted as closed CompositeSurface.


Examples:

Solid-Fall-01.png

Solid-Fall-02.png

Solid-Fall-03.png

Solid-Fall-04.png

correct: 6 surfaces, closed, correct surface orientation

correct: 11 surfaces, closed, correct surface orientation

correct: 10 surfaces, closed, correct surface orientation

correct: 30 surfaces, closed, correct surface orientation


Solid-Fall-05.png

Solid-Fall-06.png

Solid-Fall-07.png

Solid-Fall-08.png

incorrect: 5 surfaces, not closed, correct surface orientation

incorrect: 6 surfaces, closed, incorrect surface orientation

incorrect: 12 surfaces, no closed (two outer hulls), correct surface orientation

incorrect: 12 surfaces, not closed (inner and outer hull), correct surface orientation

gml:CompositeSolid

A CompositeSolid is represented by a nonempty set of Solids (see 10.) with the following properties:

  1. The intersection of the inner of two solids , , 1 ≤ i ≤ n, 1 ≤ j ≤ n, i ≠ j of is empty, that is either both solids , are disjoint or both solids are connected only by surfaces, lines or points.
  2. Let be the union of all solids from . Then the boundary of (the surface of without the surfaces or points where the solids touch each other) is the boundary of a solid.

In CityGML inner inclusions ( hollow spaces ) are not considered in CompositeSolids, as in solids.


Examples:

CompositeSolid-01-Fall01.png

CompositeSolid-01-Fall02.png

CompositeSolid-01-Fall03.png

CompositeSolid-01-Fall04.png

correct; surface contact

correct; surface contact

correct; surface contact

correct; surface contact


CompositeSolid-01-Fall05.png

CompositeSolid-01-Fall06.png

CompositeSolid-01-Fall07.png

CompositeSolid-01-Fall08.png

not correct; line contact

not correct; point contact

not correct; no contact at all

not correct; intersection


CompositeSolid-01-Fall14.png

CompositeSolid-01-Fall14a.png

CompositeSolid-01-Fall14b.png

not correct; 26 boxes with surface contact

but with internal hollow space

not correct; interior boundaries

gml:Triangle

  • A Triangle is a special case of a polygon that is bounded by one outer Linear Ring with four points.
  • There are no interior rings (no element "interior").

gml:TriangulatedSurface

A triangulated surface is a CompositeSurface that consists of triangles only, but is not closed (it may have boundaries). There is no restriction on how the triangulation is derived.

gml:Tin

In contrast to a gml:TriangulatedSurface, the triangles of a gml:TIN are not represented explicitly, but by its three vertices (called control points). In addition, breaklines, stop lines and the maximal length of a side of a triangle can be represented in a gml:TIN.

  1. A TIN is a triangulated surface that is the result of the application of a Delaunay Algorithm or of a similar algorithm (extended by breaklines, stop lines and the maximal length of a side of a triangle). The surface satisfies the Delaunay criterion:
    1. For each triangle in the network, the circle passing through its vertices does not contain, in its interior, the vertex of any other triangle.
  2. Stoplines are lines where the local continuity or regularity of the surface is questionable. In the area of these pathologies, triangles intersecting a stopline shall be removed from the TIN surface, leaving holes in the surface. If triangles incident to the boundary of the surfaces are removed, the boundary of the surfaces changes.
  3. Breaklines are lines that are critical for the shape of the surface, representing local ridges, or depressions (such as drainage lines) in the surface. As such their constituent segments must be included in the TIN even if doing so violates the Delaunay criterion.
  4. Areas of the surface where the data is not sufficiently dense to assure reasonable calculations shall be removed by adding a retention criterion for triangles based on the length of their sides. For any triangle sides exceeding maximum length, the adjacent triangles to that triangle side shall be removed from the surface. # The number of control points is at least three.
  5. The surface is not affected by the order in which the control points are given. Application schemas may add information based on the ordering of the control points to facilitate the reconstruction of the TIN from the control points.