: Public abstract <<type>> Class
Created: 23.5.2022 18.05.07
Modified: 1.8.2022 13.54.09
Project:
Advanced:
GM_Object (Figure 6) is the root class of the geometric object taxonomy and supports interfaces common to all geographically referenced geometric objects. GM_Object instances are sets of direct positions in a particular coordinate reference system. A GM_Object can be regarded as an infinite set of points that satisfies the set operation interfaces for a set of direct positions, TransfiniteSet#lt;DirectPosition#gt;. Since an infinite collection class cannot be implemented directly, a Boolean test for inclusion shall be provided by the GM_Object interface. This international standard concentrates on vector geometry classes, but future work may use GM_Object as a root class without modification.<br/>NOTE As a type, GM_Object does not have a well-defined default state or value representation as a data type. Instantiated subclasses of GM_Object will.<br/>
Operation
Public
boundary():GM_Boundary
Details:
Sequential
Notes: The operation "boundary" shall return a finite set of GM_Objects containing all of the points on the boundary of this GM_Object. The finite set of GM_Objects returned shall be in the same coordinate reference system as this GM_Object. If the GM_Object is in a GM_Complex, then the boundary GM_Objects returned will be in the same GM_Complex. If the GM_Object is not in any GM_Complex, then the boundary GM_Objects returned may have been constructed in response to the operation. <br/>GM_Object::boundary() : Set#lt;Reference#lt;GM_Object#gt;#gt;<br/>The organization of the set returned is dependent on the type of GM_Object. Each of the subclasses of GM_Object described below will specify more completely the organization of their boundary set. <br/>The elements of a boundary shall be smaller in dimension than the original element.<br/>
Public
buffer( radius: Distance,
):GM_Object
Details:
Sequential
Notes: The operation "buffer" shall return a GM_Object containing all points whose distance from this GM_Object is less than or equal to the "distance" passed as a parameter. The GM_Object returned is in the same reference system as this original GM_Object. The dimension of the returned GM_Object is normally the same as the coordinate dimension - a collection of GM_Surfaces in 2D space and a collection of GM_Solids in 3D space, but this may be application defined.<br/>GM_Object::buffer(radius : Distance) : GM_Object<br/>NOTE There are cases for which this GM_Object would be partially outside the domain of validity of the object's coordinate reference system. If this case should arise the implementation shall decide on appropriate action.<br/>
Public
centroid():DirectPosition
Details:
Sequential
Notes: The operation "centroid" shall return the mathematical centroid for this GM_Object. The result is not guaranteed to be on the object. For heterogeneous collections of primitives, the centroid only takes into account those of the largest dimension. For example, when calculating the centroid of surfaces, an average is taken weighted by area. Since curves have no area they do not contribute to the average.<br/>GM_Object::centroid() : DirectPosition<br/>NOTE : There may be cases for which this position would be outside the domain of validity of the object's coordinate reference system, but this is unlikely, since the domain of validity of most coordinate reference systems is convex. If this unlikely case should arise the implementation shall decide on appropriate action.<br/>
Public
closure():GM_Complex
Details:
Sequential
Public
convexHull():GM_Object
Details:
Sequential
Notes: convex hull of a geometric object <br/>smallest convex set containing the original geometric <br/><br/>convex set <br/>geometric set in which any third point on the straight-line segment joining any two points in the set is also contained in the set <br/>The operation "convexHull" shall return a GM_Object that represents the convex hull of this GM_Object.<br/>GM_Object::convexHull() : GM_Object<br/>NOTE There may be cases for which this GM_Object would be partially outside the domain of validity of the object's coordinate reference system, but this is unlikely, since the domain of validity of most coordinate reference systems is convex. If this unlikely case should arise the implementation shall decide on appropriate action.<br/>
Public
coordinateDimension():Integer
Details:
Sequential
Notes: coordinate dimension<br/>number of measurements or ordinates needed to describe a position in a coordinate system<br/><br/>The operation "coordinateDimension" shall return the dimension of the coordinates that define this GM_Object, which must be the same as the coordinate dimension of the coordinate reference system for this GM_Object.<br/>GM_Object::coordinateDimension(): Integer<br/>
Public
dimension( point: DirectPosition,
):Integer
Details:
Sequential
Notes: geometric dimension at a point<br/>largest number n such that this point in the geometric set has a subset with the point in its interior that is similar (isomorphic) to a small copy of Rn, Euclidean n-space. <br/><br/>The operation "dimension" shall return the inherent dimension of this GM_Object, which shall be less than or equal to the coordinate dimension. The dimension of a collection of geometric objects shall be the largest dimension of any of its pieces. Points are 0-dimensional, curves are 1-dimensional, surfaces are 2-dimensional, and solids are 3-dimensional. Locally, the dimension of a geometric object at a point is the dimension of a local neighborhood of the point 3/4 that is the dimension of the best local coordinate neighborhood of the point. Dimension is unambiguously defined only for DirectPositions interior to this GM_Object. If the passed DirectPosition is NULL, then the operation shall return the largest possible dimension for any DirectPosition in this GM_Object.<br/>GM_Object::dimension(point : DirectPosition = NULL) : Integer<br/>
Public
distance( geometry: GM_Object,
):Distance
Details:
Sequential
Notes: The operation "distance" shall return the distance between this GM_Object and another GM_Object. This distance is defined to be the greatest lower bound of the set of distances between all pairs of points that include one each from each of the two GM_Objects. A "distance" value shall be a positive number associated to distance units such as meters or standard foot. If necessary, the second geometric object shall be transformed into the same coordinate reference system as the first before the distance is calculated.<br/>GM_Object::distance(geometry : GM_Object) : Distance<br/>If the geometric objects overlap, or touch, then their distance apart shall be zero. Some current implementations use a "negative" distance for such cases, but the approach is neither consistent between implementations, nor theoretically viable.<br/>The type "Distance" is one of the units of measure types included in annexes to ISO 15046-3.<br/>NOTE The role of the reference system in distance calculations is important. Generally, there are at least three types of distances that may be defined between points (and therefore between geometric objects): map distance, geodetic distance, and terrain distance.  <br/>Map distance is the distance between the points as defined by their positions in a coordinate projection (such as on a map when scale is taken into account). Map distance is usually accurate for small areas where scale functions have well-behaved derivatives.  <br/>Geodesic distance is the length of the shortest curve between those two points along the surface of the earth model being used by the coordinate reference system. Geodesic distance behaves well for wide areas of coverage, and takes the earth's curvature into account. It is especially handy for air and sea navigation, although care should be taken to distinguish between rhumb line (curves of constant bearing) and geodesic curve distance. <br/>Terrain distance will take into account the local vertical displacements (hypsography). Terrain distance can be based either on a geodesic distance or a map distance.<br/>
Public
envelope():GM_Envelope
Details:
Sequential
Notes: The operation "envelope" shall return the minimum bounding box for this GM_Object. This shall be the coordinate region spanning the minimum and maximum value for each ordinate taken on by DirectPositions in this GM_Object. The simplest representation for an envelope consists of two DirectPositions, the first one containing all the minimums for each ordinate, and second one containing all the maximums. However, there are cases for which these two positions would be outside the domain of validity of the object's coordinate reference system. This operation is included here only as an interface, as applications may chose to implement in different manners.<br/>GM_Object::envelope() : GM_Envelope<br/>
Public
isCycle():Boolean
Details:
Sequential
Notes: The operation "isCycle" shall return TRUE if this GM_Object has an empty boundary after topological simplification (removal of overlaps between components in non-structured aggregates, such as subclasses of GM_Aggregate). This condition is alternatively referred to as being "closed." This creates some confusion since there are two distinct and incompatible definitions for the word "closed." The use of the word cycle is rarer (generally restricted to the field of algebraic topology), but leads to less confusion. Essentially, an object (which must be representable by a geometric complex, for reasons that will be explained later) is a cycle if it is isomorphic to a geometric object that is the boundary of a region in some Euclidean Space. Thus a curve is a cycle, if it is isomorphic to a circle (has the same start and end point). A surface is a cycle if it isomorphic to the surface of a sphere, or some torus. A solid, with finite size, in a space of dimension 3 or less is never a cycle. <br/>GM_Object::isCycle(): Boolean<br/>The following OCL takes boundary producing a GM_Object and then applies TransfiniteSet#lt;DirectPosition#gt;::isEmpty() to test for the empty set. <br/>GM_Object:<br/>isCycle() = boundary().isEmpty()<br/>
Public
isSimple():Boolean
Details:
Sequential
Notes: The operation "isSimple" shall return TRUE if this GM_Object has no interior point of self-intersection or self-tangency. In mathematical formalisms, this means that every point in the interior of the object must have a metric neighborhood whose intersection with the object is isomorphic to an n-sphere, where n is the dimension of this GM_Object.<br/>GM_Object::isSimple() : Boolean<br/>Since most coordinate geometries are represented, either directly or indirectly by functions from regions in Euclidean space of their topological dimension, the easiest test for simplicity is requiring that a function exist that is one-to-one and bicontinuous (continuous in both directions). Such a function is a topological isomorphism. This test does not work for "closed" objects (that is, objects for which the isCycle operation returns TRUE).<br/>While GM_Complexes shall contain only simple GM_Objects, non-simple GM_Objects are often used in "spaghetti" data sets.<br/>
Public
maximalComplex():Set<GM_Complex>
Details:
Sequential
Notes: As a set of primitives, a GM_Complex may be contained as a set in another larger GM_Complex, referred to as a "super complex" of the original. A GM_Complex is maximal if there is no such larger super complex. The operation "maximalComplex" shall return the set of maximal GM_Complexes within which this GM_Object is contained.<br/>GM_Object::maximalComplex() : Set#lt;Reference#lt;GM_Complex#gt;<br/>If the application schema used does not include GM_Complex, then this operation shall return a NULL value.<br/>
Public
mbRegion():GM_Object
Details:
Sequential
Notes: The operation "mbRegion" is included here only as an interface, as different applications may choose to implement it in different manners. It shall return a region in the coordinate reference system that contains this GM_Object. The default shall be to return the same object as "GM_Object::envelope," from the operator "envelope." The most common use of mbRegion will be to support indexing methods that use extents other than minimum bounding rectangles (MBR or envelopes).<br/>GM_Object::mbRegion() : GM_Object<br/>This does not restrict the returned GM_Object from being a non-vector geometric representation, although those types are not defined within this part.<br/>
Public
representativePoint():DirectPosition
Details:
Sequential
Notes: The operation "representativePoint" is included here only as an interface that may be implemented in different ways. It shall return a point value (DirectPosition) that is guaranteed to be on this GM_Object. The default logic may be to use the DirectPosition of the point returned by the operation "GM_Object::centroid" if that point is on the object. <br/>GM_Object::representativePoint() : DirectPosition<br/>Another use of representativePoint may be for the placement of labels in systems based on graphic presentation. Definitions for symbology and type placement are out of the scope of this part of ISO 15046.<br/>
Public
transform( newCRS: SC_CRS,
):GM_Object
Details:
Sequential
Notes: The operation "transform" shall return a new GM_Object that is the coordinate transformation of this GM_Object into the passed coordinate reference system within the accuracy of the transformation as defined in ISO 15046 Part 11.<br/>GM_Object::transform(newCRS : CRS) : GM_Object<br/>
Element Source Role Target Role
«type» SC_CRS
Class  
Name: object
 
Name: CRS
 
Details:
The association "CRS" links this GM_Object to the coordinate reference system, as defined in ISO150456-9, used in its DirectPosition coordinates<br/>GM_Object::CRS : CRS<br/>NOTE This association shall only be navigable from GM_Object to CRS. This means that the coordinate reference system objects in a data set do not keep a list of GM_Objects that use them. A detailed description of reference systems may be found in ISO 15046 Part 11.<br/>
«interface» CRS
Class  
Name: object
 
Name: CRS
 
Details:
The association "CRS" links this GM_Object to the coordinate reference system, as defined in ISO150456-9, used in its DirectPosition coordinates<br/>GM_Object::CRS : CRS<br/>NOTE This association shall only be navigable from GM_Object to CRS. This means that the coordinate reference system objects in a data set do not keep a list of GM_Objects that use them. A detailed description of reference systems may be found in ISO 15046 Part 11.<br/>
«interface» CRS
Class  
Name: object
 
Name: CRS
 
Details:
The association "CRS" links this GM_Object to the coordinate reference system, as defined in ISO150456-9, used in its DirectPosition coordinates<br/>GM_Object::CRS : CRS<br/>NOTE This association shall only be navigable from GM_Object to CRS. This means that the coordinate reference system objects in a data set do not keep a list of GM_Objects that use them. A detailed description of reference systems may be found in ISO 15046 Part 11.<br/>
Element Source Role Target Role
«type» GM_Aggregate
Class  
Name:  
 
Name: element
 
Details:
 
Tag Value
persistence persistent
Details:
 
Constraint Type Status
dimension() > boundary().dimension Invariant Approved
Details:
 
boundary().notEmpty() implies boundary().dimension() = dimension() -1 Invariant Approved
Details:
 
boundary().isEmpty() = isCycle() Invariant Approved
Details:
 
Property Value
isFinalSpecialization: 0
Object Type Connection Direction Notes
Geometry Interface Dependency To  
«metaclass» GF_SpatialAttributeType Class Dependency From  
«Metaclass» SpatialAttributeType Class Dependency From  
«type» GM_Aggregate Class Generalization From  
TransfiniteSet Interface Realization To  
«Metaclass» SpatialAttributeType Class Dependency From  
«type» GM_Complex Class Generalization From  
«type» GM_Primitive Class Generalization From