Sei sulla pagina 1di 69

ISO19107 Geographic information Spatial schema

Pusan National University Dept. of Computer Engineering Spatiotemporal Database Lab. Joon-Seok Kim joonseok@pnu.edu

Outline
Introduction Schema
Geometry
Geometry root Geometry primitive Coordinate geometry Geometry aggregate Geometry complex

Topology
Topology root Topology primitive Topology complex

Summary
2

Introduction
ISO19107
Providing conceptual schemas for describing and manipulating the spatial characteristic Formal language
Unified Modeling Language (UML) ISO19103

Vector geometry and topology up to 3-D Spatial operations


For use in access, query, management, processing, and data exchange of geographic information
3

ISO 19115-2 M etadata - Imagery

ISO 19116 Positioning Services

ISO 19132 Location Based Services Reference Model

ISO 06709

IS O 1 911 1 S pa tial Re ferencing by Coo rdin ate s

ISO 19115 Metadata

IS O 1 910 9 Rule s fo r Ap pli cati on Sch ema

M M

M M M

ISO 19137 Generally Used Profiles

M M M

ISO 1910 7 Spat ial Schema


M M M M M

ISO 19112 Location by Ide ntif ier

ISO 19134 MultiModal Navigation

ISO 19130 Sensor and data models for imagery and gridded data

ISO 1 912 3 Coverages

ISO 19133 Tracking and Navigation

ISO 19141 Moving Features

ISO 19144 Classifi cation

IS O 1 910 8 Temporal

M ISO 19144-1 Classifi cation Systems

Package Clients of ISO19107

ISO 19111 Spatial Referencing by Coordinates

IS O 19103 Conceptual S chema Language

M M

ISO 19107 Spatial Schema

Package Suppliers of ISO19107

<<normative>>

Topology

<<normative>> Geometry

Basic Types (from ISO 19103 Conceptual Schema Language)

Main Diagram of ISO19107 Spatial Schema

Geometry

<<Leaf >> Geometric aggregates + GM_Aggregate + G M_MultiCur v e + GM_MultiPoint + GM_MultiPrimitiv e + GM_MultiSol id + GM_MultiSurf ace

<<Leaf >> Geometry root + GM_Boundary + GM_Object

<<Leaf >> Coordinate geometry + DirectPosition + GM_Af f inePlacement + GM_Arc + GM_ArcBy Bulge + GM_ArcString + GM_ArcStringBy Bulge + GM_BSplineCurv e + GM_BSplineSurf ace + GM_BSplineSurf aceForm + GM_Bezier + GM_BicubicGrid + GM_BilinearGrid + GM_Circle + GM_Clothoid + GM_Cone + GM_Conic + GM_CubicSpline + GM_Cy linder + GM_Env elope + GM_GenericCurv e + GM_GenericSurf ace + GM_Geodesic + GM_GeodesicString + GM_GriddedSurf ace + GM_Knot + GM_KnotTy pe + GM_LineSegment + GM_LineString + GM_Of f setCurv e + GM_ParametricCurv eSurf ace + GM_Placement + GM_PointArray + GM_PointGrid + GM_PointRef + GM_Poly gon + GM_Poly hedralSurf ace + GM_Poly nomialSpline + GM_Position + GM_Sphere + GM_SplineCurv e + GM_SplineCurv eForm + GM_Tin + GM_Triangle + GM_TriangulatedSurf ace + Trans finiteSet<DirectPosition>

<<Leaf >> Geometric primitiv e + Bearing + GM_Curv e + GM_Curv eBoundary + GM_C urv eI nterpolation + GM_CurveSegment + GM_OrientableCurv e + GM_OrientablePrim it iv e + GM_OrientableSurf ace + GM_Point + GM_Prim it iv e + GM_Prim it iv eBoundar y + G M_Ring + GM_Shell + GM_Solid + GM_SolidBoundary + GM_Sur face + G M_Sur faceB oundary + GM_Surf aceInterpolation + GM_Sur faceP atch

<<Leaf >> Geometric complex + GM_Complex + GM_ComplexBoundary + GM_C omposi te + GM_CompositeCurv e + GM_CompositePoint + GM_C omposi teSo lid + GM_CompositeSurf ace

Geometry Packages

<<Type>> GM_Object

<<Type>> GM_Complex

<<Ty pe>> GM_Aggregate

<<Ty pe>> GM_Prim ti ve i

<<Type>> GM_Composite

<<Ty pe>> GM_MultiPrimitive

<<Type>> GM_Point

<<Ty pe>> GM _CompositePoint

<<Type>> GM_MultiPoint

<<Type>> GM_OrientablePrimitive
( fr om Geo met ri c pr imit ive)

<<Type>> GM_OrientableCurve
(f rom Geometric primitiv e)

<<Type>> G M_Com positeCurve

<<Ty pe>> GM_Mult iCurve

<<Type>> GM_OrientableSurface
(f rom Geometric primitiv e)

<<Ty pe>> GM_CompositeSurface

<<Type>> GM_MultiSurface

<<Type>> GM_Curve <<Ty pe>> GM_Surface <<Type>> GM_Solid <<Type>> GM_CompositeSolid <<Ty pe>> GM_Mult iSoli d

Geometry basic classes

Basic Concept
Point Line Rectangle

Geometry object

Infinite set of points Point set theory

10

Concept of Interior, Exterior and Boundary


U

Interior U Boundary = Closure

Interior Boundary Exterior

11

Boundary and Dimension


Dim. Point Curve Surface Solid 0 1 2 3 Boundary Empty Point Curve Surface
12

Example

Simple and Cycle


s e s e s e s e

(a)

(b)

(c)

(d)

simple (a), (b), (d)

cycle (d)
13

<<Interface>> TransfiniteSet<DirectPos it ion>


(from Coordinate geometry)

{dimension() > boundary().dimension} {boundary().notEmpty() implies boundary().dimension() = dimension() -1} {boundary().isEmpty() = isCycle()}

<<Type>> GM_Object mbRegion() : GM_Object representativePoint() : DirectPosit ion boundary () : GM_Boundary closure() : GM_Complex isSimple() : Boolean isCycle() : Boolean distance(geometry : GM_Object ) : Distance dimension(point : DirectPosition = NULL) : Integer coordinat eDimension() : Integer maximalComplex () : Set<GM_Complex> transform(newCRS : SC_CRS) : GM_Object envelope() : GM _Envelope centroid() : Direct Pos ition convexHull() : GM_Object buffer(radius : Distance) : GM_Object

Coordinate Ref erenc e System +object 0..*

0..* +element

0..1

+CRS <<Type>> SC_CRS

(from Coordinate Reference Systems)

<<Type>> GM_Primit ive


(from Geometric primitive)

<<Type>> GM_Complex
(from Geometric complex)

<<Type>> GM_Aggregate
(from Geometric aggregates)

14

GM_Object

convexHull() and buffer()

convexHull()

buffer (radius: d)

15

<<Type>> GM_Complex
(f rom Geometri c comp lex )

{isCycle() = TRUE}

<<Abstract>> GM_Boundary
(f rom Geometry root )

<<Abstract>> GM_PrimitiveBoundary

<<Type>> GM_ComplexBoundary
(from Geometric complex)

<<Type>> GM_CurveBoundary 0..* 0..*

<<Type>> GM_SurfaceBoundary 1 1 1

<<Type>> GM_SolidBoundary 1

1 +startPoint

<<Type>> GM_Point

1 +endPoint

0..1 <<Type>> 0..* +exterior GM_Ring +interior

0..1 <<Type>> +exterior GM_Shell

0..* +interior

<<Type>> GM_CompositeSurface
(f ro m G eometric complex)

<<Type>> GM_CompositeCurve
(from Geometric complex)

<<Type>> GM_Shell

{isSimple() = TRUE} {isCycle() = TRUE}

<<Type>> GM_Ring

16

Geometry Boundary Data Types

The Number of Exterior of GM_SurfaceBoundary

2-Dimension plane 1 exterior

3-Dimension surface 0 exterior

17

<<Type>> GM_Object
(from Ge om etry ro ot)

{dimension() > = cotainedPrimitive.dimension()}

Complex

1..* +element

+containedPrimitive <<Type>> 0..* GM_Primitive Interior to

0..* +containingPrimitive +complex 0..* <<Type>> GM_Complex


(from Geometric complex)

<<Type>> GM_Orientab lePrimitive

<<Ty pe> > GM_OrientableCurve

<<Ty pe> > GM_OrientableSurface

<<Type>> GM_P oint

<<Type>> GM_Curve

<<Type>> GM_Surface

<<Type>> GM_Solid

18

GM_Primitive

Geometric Primitive

<<Type>> GM_Primitive

<<DataType>> Bearing angle[0,1,2] : Angle direction[0..1] : Vector

<<Ty pe>> GM_Point position : DirectPosition boundary() : NULL bearing(toPoint : GM_Position) : Bearing GM_Point(position : GM_Position) : GM_Point -- at least one value is not NULL {angle.isEmpty{} implies Not direction.isEmpty()} {direction.isEmpty{} implies Not angle.isEmpty()}

20

GM_Point

Concept of Orientation
s

For curves, direction in which the curve is traversed

When used as bounding curves, left of oriented curve

-
For surfaces, Z-axis that would form a right-handed system When used as bounding surfaces, below the surface 21

<<Type>> GM_Primitive 1 +primitive

{(orientation = "+" ) im plies (primitive = self )}

0,2 Oriented +proxy

<<Type>> GM_OrientablePrimitive orientation : Sign

<<Type>> GM_OrientableCurve boundary () : GM_CurveBoundary ... {primitive = self} {orientation = "+"}

<<Type>> GM_OrientableSurface boundary() : GM_SurfaceBoundary

<<Type>> GM_Curve

<<Type>> GM_Surface

{primitive.isTypeOf(GM_Curv e)}

{primitive.isTypeOf(GM_Surface)}

22

GM_OrientedPrimitive

<<Type>> GM_P rimit ive

<<Interface>> GM_Generic Curve


(from Coordinate geometry)

<<Type>> GM_OrientablePrimitive

<<Type>> GM_OrientableCurve boundary() : GM_CurveBoundary ...

<<Abstract>> GM_CurveSegment 1..* {sequenc e} +segment Segmentation

+curve <<Type>> GM_Curve

0..1

GM_Curve(segment[1..*] : GM_CurveSegment) : GM_Curve

23

GM_Curve

<<Type>> GM_Primitive

<<Interface>> GM_GenericSurface
(from Coordinate geometry)

<<Type>> GM_OrientablePrimitive

<<Abstract>> GM_SurfacePatch +patch Segmentation 1..*

<<Type>> GM_OrientableSurface boundary() : GM_Surfac eBoundary

+surface <<Type>> GM_Surface GM_Surface(patch[1..*] : GM_SurfacePatch) : GM_Surface GM_Surface(bdy : GM_SurfaceBoundary) : GM_Surface

0..1

24

GM_Surface

<<Type>> GM_Primitive

<<Type>> GM_Solid boundary() : GM_SolidBoundary area() : Area volume() : Volume GM_Solid(boundary : GM_SolidBoundary) : GM_Solid

25

GM_Solid

Coordinate Geometry

{coordinateReferenceS yst em. dimens ion = coordinate. size = dimens ion}

<<DataType>> GM_Envelope upperCorner : DirectPosition lowerCorner : DirectPosition

<<DataType>> DirectPosition coordinate : Sequence<Number> / dimension : Integer 0..* +directPosit ion if not populated, then the NameSpac e of t he datat ype determines the CRS, e.g. the CRS of the including GM_Object

<<Union>> GM_Position direct : DirectPosition indirect : GM_PointRef

Coordinate Reference System

<<DataType>> GM_PointRef 0..*

+CRS <<Type>> SC_CRS

0..1

+point <<Type>> GM_Point

(from Coordinate Reference Systems)

(from Geometri c primiti ve)

<<DataType>> GM_PointGrid

i : Integer

+row 0..1

<<DataType>> GM_PointArray

j : Integer

+column 0..1

<<Union>> GM_Position

row.column.count is constant

27

DirectPosition

<<Ty pe>> <<Interf ace>>

<<CodeList>>

GM_Curve
(f rom Geo metri c pri miti v e)

GM_CurveInterpolation
(f rom Geometric primitiv e)

GM_GenericCurve startPoint() : DirectPosition endPoint() : DirectPosition param(s : Distance) : DirectPosition tangent(s : Distance) : Vector startParam() : Distance endParam() : Distance paramForPoint(p : DirectPosition) : Set<Distance>, DirectPosition constrParam(cp : Real) : DirectPosition startConstrParam() : Real endConstrParam() : Real length(point1 : GM_Position, point2 : GM_Position) : Length length(cparam1 : Real, cparam2 : Real) : Length asLineString(spacing : Distance, offset : Distance) : GM_LineString

0..1

+curve

Segmentation {sequence} 1..* +segment


1 +baseCurv e

linear geodesic circularArc3Points circularArc2PointWithBulge elliptical clothoid conic polynomialSpline cubicSpline rationalSpline

<<Abstract>>

GM_CurveSegment
(from Geom etric primitive)

<<Ty pe >>

<<Ty pe >>

<<Ty pe>>

<<Ty pe >>

<<Ty pe>>

<<Ty pe>>

<<Ty pe>>

GM_ArcString

GM_ArcStringByBulge

GM_SplineCurve

GM_Clothoid

GM_GeodesicString

GM_LineString

GM_Conic

<<Ty pe>>

<<Ty pe>>

<<Ty pe >>

<<Ty pe >>

<<Ty pe>>

GM_Arc

GM_PolynomialSpline

GM_BSplineCurve

GM_Geodesic

GM_LineSegment

0..* <<Ty pe>>

GM_OffsetCurve

<<Ty pe>>

<<Ty pe>>

<<Ty pe >>

GM_Circle

GM_CubicSpline

GM_Bezier

28

Curve segment classes

<<Abstract>> GM_CurveS egment


(from Geometric primitive)

{interpolation = "linear"}

{interpolation = "geodesic"}

<<Type>> GM_LineString controlP oint : GM_P ointArray GM_LineS tring(points[2..*] : GM_Position) : GM_LineString ... asGM_LineS egment() : Sequence<GM_LineS egment >

<<Type>> GM_Geodes icS tring controlPoint : GM_PointArray GM_Geodes icS tring(point s[2..*] : GM_P osition) : GM_Geodesic St ring ... asGM_Geodesic() : Sequenc e<GM_Geodesic>

<<Type>> GM_LineSegment GM_LineSegment(point [2] : GM_Position) : GM_LineSegmen ...

<<Type>> GM_Geodesic GM_Geodesic(point [2] : GM_Position) : GM_Geodesic ...

--all points in the controlPoint sequence are colinear

--all points in the controlPoint sequence lie on the same geodesic

29

Linear and Geodetic Interpolation

<<Abstract>> GM_CurveSegment
(from Geometric primitive)

<<Type>> GM_ArcString numArc : Integer controlPoints : GM_PointArray GM_ArcString(point[3,5,7,..] : GM_Position) : GM_ArcString asGM_Arc() : Sequence<GM_Arc> bulge : Sequence<Real> numArc : Integer normal : Sequence<Vector>

<<Type>> GM_ArcStringByBulge

GM_ArcStringByBulge(point[2..n] : GM_Position, bulge[1..n] : Real, normal[1..n] : Vector) : GM_ArcStringByBulge asGM_ArcString() : GM_ArcString

{in terp ola tion = "c ircularArc3 Poin ts"} {cont rolPo ints.cou nt = 2*nu mArc + 1

{in terp olation = " circularArc2 Poin tWi thBul ge" } {bulge .co unt = n ormal.cou nt = num Arc}

<<Type>> GM_Arc GM_Arc(point[3] : GM_Position) : GM_Arc GM_Arc(point[2] : GM_Position, bulge : Real, normal : Vector) : GM_Arc center() : DirectPosition radius() : Distance startOfArc() : Bearing endOfArc() : Bearing

<<Type>> GM_ArcByBulge GM_ArcByBulge(point[2] : GM_Position, bulge : Real, normal : Vector) : GM_ArcByBulge

-- all arc are on the sa...

<<Type>> GM_Circle GM_Circle(point[3] : GM_Position) : GM_Circle GM_Circle(center : GM_Position, radius : Distance) : GM_Circle

-- all points in the controlPoint sequence are on the same circle

-- the first a nd l ast po ints in th e controlPo int se que nce a re th e sam e

30

Arcs

<<Abstrac t>> GM_CurveSegment


(f ro m Ge omet ric primit ive)

<<Interface>> GM_Placement inDimension() : Integer outDimesion() : Integer transform(in : Vector) : Vector

<<Type>> GM_Conic position : GM_AffinePlacement shifted : Boolean eccentricity : Real semiLatusRectum : Real startConstrParam : Real endConstrParam : Real <<Type>> GM_AffinePlacement location : GM_Position refDirection[1..*] : Vector inDimension() : Integer outDimesion() : Integer transform(in : Vector) : Vector

{interpolation = "c onic "}

{refDirection->dimension = outDimension} {refDirection.count = inDimension}

31

Conics and placements

<<Type>> GM_OffsetCurve 0..* distance : Length refDirection[0..1] : Vector ...

1 +b as eCurve <<Ab stract>> GM_ Curve Seg ment


(from Geometric primitive)

<<CodeList>> GM_SplineCurveForm polylineForm circularArc ellipticArc parabolicArc hyperbolicArc

<<CodeList>> GM_KnotType uniform quasiUniform piecewiseBezie ...

<<Type>> GM_Clothoid refLocation : GM_AffinePlacement ... scaleFactor : Number startParameter : Real endParameter : Real

{degree = 3} {interpolation = "cubicSpline"} {interpo lation = cloth oid}

<<Type>> GM_ SplineCurve degree : Integer knot : Sequence<GM_Knot> controlPoints : GM_PointArray ...

<<Type>> GM_PolynomialSpline vectorAtStart : Se quence <Vector > ... vectorAtEnd : Se qu ence<Vector>

<<Type>> GM_ CubicSp line

{deg ree > 0} {in terpolation = "pol ynomi alSpline"} {vectorAtEnd.count = vectorAtStart.count... <<Type>> GM_BSplineCurve

curveForm[0..1] : GM_Splin eCur veForm knotSpec[0 ..1] : GM_KnotType isPo lyno mial : Boo lean GM_ BSplin eCurve(deg : Inte ge r, pts : GM_PointArray, k[0,1 ] : Sequen ce<GM_Knot>, ks [0,1] : GM_KnotType) : GM_BSpl ineCurve ... {(interpolation = "polynomialSpline") OR (interpolation = "rationalSpline)} {degree = controlPoint.count -1} {interpolation = "polynomial"} <<Type>> GM_Bezier <<D ataTyp e>> GM_ Kno t value : Real multiplicity : Integer ... weight : Real

32

Spline and specialty curves

<<Interface>>

<<Type>>

GM_GenericSurface upNormal(point : DirectPosition) : Vector perimeter() : Length area() : Area

GM_Surface
(from Geometric primitive)

<<CodeList>>

GM_Surface Interpolation
(from Geometric primitive)

<<Abstract>>

GM_SurfacePatch
(from Geometric primitive)

interpolation : GM_SurfaceInterpolation = "planar" numDerivativesOnBoundary[0..1] : Integer = 0 boundary() : GM_SurfaceBoundary

<<Type>>

GM_PolyhedralSurface

none planar spherical elliptical conic tin parametricCurve polynomialSpline rationalSpline triangulatedSpline

<<Type>>

<<Type>>

GM_ParametricCurveSurface

GM_Polygon

<<Typ e>>

GM_TriangulatedSurface

<<Type>>

<<Type>>

<<Type>>

GM_GriddedSurface

GM_Tr iangle

GM_Tin

<<Type>>

<<Type>>

<<Type>>

<<Type>>

<<Type>>

<<Type>>

GM_Cone

GM_BicubicGrid

GM_Cylinder

GM_BilinearGrid

GM_Spher e

GM_BSplineSurface

33

Surface patches

<<Type>> GM_Surface
(from Geometric primitive)

<<Abstract>> GM_SurfacePatch Segmentation 0..1 +surface 1..* +patch bo und ary() : GM_SurfaceBoun dary subset << Type> > GM _P olygon
(from Geometric prim ive) it

interpolati on : GM_SurfaceInt erpol ation = " pl anar" nu m Derivati vesO nBoundary[0..1] : Integer = 0

GM_Surface(patch[1..*] : GM_SurfacePatch) : GM_Surface GM_Surface(bdy : GM_SurfaceBoundary) : GM _Surface

<<Type>> GM_Pol yhedralSurface GM _P ol yhed ral Surface (til es[1 ..*] : G M_ Pol ygo n) : GM _P olyh ed ralS urfa ce

0..1

Segmentation

1..* +patch

boundary : GM_SurfaceBoundary spanni ngSurface[0..1] : GM _Surface GM_Pol ygon(boundary : GM_SurfaceBoundary) : GM_Pol ygon GM_Pol ygon(boundary : GM_SurfaceBoundary, spanSurf : GM_Surface) : GM_Pol ygon

+surface

su bse t -- the spanni ... <<Type>> GM_Triangl e co rners[3] : G M_ Posi tio n

<<Type>> GM_Triangul atedSurface

0. .1

Segmentation

1..* +patch

+surface

<<Type>> GM_Tin stopLines : Set<GM_LineString> breakLines : Set<GM_Li neString> maxLength : Di stance control Poi nt[3..*] : GM_Posi tion GM_Tin(post : Set<GM_Position>, stopLines : Set<GM_Li neString>, breakLines : Set<GM_Li neString>, maxLength : Number) : GM_Tin

34

Polygonal surface

35

TIN construction

{i nterpol ati on = " para metricCurv e" }

<<Type>> GM_Cone

{horizontalCurveType = "conic"} {verticalCurveType = "linear"}

<<Co deList>> GM_BS pli neSurfaceForm planar cylindrical conical spherical toroidal unspecified

<<Type>> GM_ParametricCurveSurface horizontalCurveType : GM_CurveInterpolation verticalCurveType : GM_CurveInterpolation horizontalCurve(t : Real) : GM_Curve verticalCurve(s : Real) : GM_Curve surface(s : Real, t : Real) : DirectPosition

<<Type>> GM_Cylinder

{horizontalCurveType = " conic"} {verticalCurveType = "linear"}

<<Type>> G M_Sphere

{horizontalCurveType = "circularArc3Point...

<<Type>> GM_GriddedSurface controlPoint : GM_PointGrid / rows : Integer / columns : Integer

<<Type>> GM_BicubicGrid horiVectorAtStart : S equence<V ecto r> horiVectorAtEnd : Sequ ence<Vector> vert Vect orAtS tart : Sequence<Vector> vert Vect orAtE nd : Sequen ce <Vector>

{horizontal CurveType = vertical CurveType = "cubic Spl ine "} {num Derivative sO nBoun dary = 2 }

{horizontalCurveType = verticalCurveType = "linear"

<<Type>> GM_BilinearGrid

{ho rizonta lCu rveType = " pol ynomial Spi ne" OR horizont alCurveType = " rati onalSpine" } { verticalCurv eT ype = " p olynom ialSpine" OR verti calCurve T ype = "rationalSpine" }

< <Ty pe>> GM_BSplineSurface degree[1,2] : Integer knot[2] : Sequence<GM_Knot> knotSpec : GM_KnotType surfaceForm : GM_BSplineSurfaceForm isPolynomial : Boolean GM_BSplineSurface(pts : GM_PointGrid, deg[1,2] : Integer, k[0,2] : Sequence<GM_Knot>, ks[0,1] : GM_KnotType) : GM_BSplineSurface <<DataT ype>> GM_Knot value : Real multiplicity : Integer weight : Real

36

GM_ParmetricCurveSurface and its subtypes

Geometric Aggregate Geometric Complex

<<Type>> GM_Ob ject


(from Geometry root)

<<Type>> GM_Agg re ga te fromSet(s et : Set<GM_Object>) : GM_Aggregate

+ele men t 0..*

<<Type>> GM_Ob ject


(fro m G eomet ry roo t)

<<Type>> GM_MultiPrimitive

{e lemen ts.s ub Typ eOf(GM_Pri mitive)}

<<Type>> GM_MultiPoint / position : Set<DirectPosition>

<<Typ e>> GM_MultiCurve / length : Length

<<Type>> GM_MultiSurface / area : Area / perimeter : Length

<<Type>> GM_MultiSolid / volume : Volume / area : Area

{element.subTypeOf(GM_Point)}

{element.subTypeOf(GM_OrientableSurface)}

{e lement.subTypeOf(GM_OrientableCu rve)}

{element.subTypeOf(GM_Solid)}

38

GM_Aggregate

<<Type>>

GM_Object
(from Geome try root)

-- a complex is closed under the boundary operation {subComplex includes boundary()}

<<Type>>

0..*

+superComplex Contains

GM_Complex isMaximal() : Boolean


0..* +complex 0..*

+subComplex

Complex

subset
<<Type>>

1..*

+ele ment

+composite
0..*

+generator Composition
1..*

<<Type>>

GM_Composite

GM_Primitive
(fro m Geometric primitive)

--All primitives in the generator are in the complex (as a set of primitives) {Set::element->includesAll(generator)}

39

GM_Complex

<<Type>> GM_Complex

{dimension() = generator.dimension()}

<<Type>> GM_Composite

+composit e 0..*

Composition

+generator1..*

<<Type>> GM_P rimit ive


(from Geometric primitive)

<<Type>> GM_CompositePoint 0..* +composite

<<Type>> GM_Composit eCurve 0..* +composit e

<<Type>> GM_CompositeSurface 0..* +composit e

<<Type>> GM_CompositeSolid 0..* +composite

Composition

Composition

Composition

Composition

{sequence} +generator 1 <<Type>> GM_Point


(from Geometric primitive)

+generator 1..* <<Type>> GM_OrientableCurve


(from Geometric primitive)

+generator 1..* <<Type>> GM_OrientableSurface


(from Geometric primitive)

+generator 1..* <<Type>> GM_Solid


(from Geometric primitive)

40

CM_Composite

Topology

Concept of Topology
Topology
Deal with characteristics of geometric figures that remain invariant if the space is deformed elastically and continuously E.g. connectivity of an n-dimensional graph

42

<<Leaf>> Topology root + TP_Object <<Leaf>> Topological primitive + TP _B oundary + TP_ComplexBoundary + TP_DirectedTopo + TP_DirectedEdge + TP_DirectedFace + TP_DirectedNode + TP_DirectedSolid + TP_Edge + TP _E dgeBoundary + TP_Expression + TP_ExpressionTerm + TP_Face + TP_FaceBoundary + TP_Node + TP_Primitive + TP_PrimitiveBoundary + TP_Ring + TP_Shell + TP_Solid + TP_SolidBoundary

<<Leaf>> Topological Complex + TP_Complex

43

Topology packages

<<Interface>> TP_Object

<<Type>> TP_Primitive

+element 1..*

Complex

+complex 1..*

<<Type>> TP_Complex

<<Type>> TP_Node

<<Type>> TP_Edge

<<Type>> TP_Face

<<Type>> TP_Solid

<<Type>> TP_DirectedNode

<<Type>> TP_DirectedEdge

<<Type>> TP_DirectedFace

<<Type>> TP_DirectedSolid

<<Type>> TP_DirectedTopo

<<DataType>> TP_Expression

44

Topological class diagram

<<Interface>>

TP_Object
(from Topology roo t)

<<Type>>

TP_Primitive
(fro m Topological p rimiti ve)

1..* +element

Complex

1..* +complex

<<Type>>

TP_Complex
(from Topological Complex)

+subComplex 1..* /Contains 1..* +superComplex

+topology

0..* {geometry.complex -> includesAll complex.geometry}

0..1

+topology

Realization

Realization

0..1

+geometry +element 1..* Complex 0..* +complex

+geometry

0..1

<<Type>>

<<Type>>

GM_Primitive
(from Geometric primitive)

GM_Complex
(from Geometric complex)

+subComplex 0..* Contains 0..* +superComplex

<<Type>>

GM_Object
(from Ge ometry root)

45

Relation between geometry and topology

{boundary().dimension() = dimension() - 1}

<<Interface>> TP_Object dimension() : Integer boundary() : TP_Boundary coBoundary() : Set<TP_DirectedTopo> interior() : Set<TP_Primitive> closure() : Set<TP_Primitive> exterior() : Set<TP_Primitive> maximalComplex() : TP_Complex

<<Type>> TP_Complex
(from To pological Complex)

<<Type>> TP_Primitive
(from Topological primitive)

46

TP_Object

<<Type>> TP_Node

1 +topo

Center

+proxy 2

<<Type>> TP_DirectedNode +boundary 2

<<Type>> TP_Node 1 +hub

+topo 1

Center

2 +proxy

<<Type>> TP_DirectedNode

Boundary 0..* +primitive <<Type>> TP_Edge 1 +topo Center +proxy 2 <<Type>> TP_DirectedEdge +boundary 1..* Boundary 0..* +primitive <<Type>> TP_Face Center 1 +topo +proxy 2 <<Type>> TP_DirectedFace +boundary 1..* Boundary 0..2 2 +primitive <<Type>> TP_Solid Center 1 +topo +proxy 2 <<Type>> TP_DirectedSolid <<Type>> TP_Solid +t opo 1 <<Type>> TP_Face +hub 1..* +topo 1 <<Type>> TP_Edge 1..* +hub +topo 1

CoBoundary

0..* +spoke Center 2 +proxy <<Type>> TP_DirectedEdge

CoBoundary 0..* +spoke {CircularS equence} <<Type>> TP_DirectedFace

Center

2 +proxy

CoBoundary 0..2 2 +spoke Center 2 +proxy <<Type>> TP_DirectedSolid

47

Boundary and coboundary operation

<<DataType>> TP_Expression

<<DataType>> TP_Boundary

<<DataType>> TP_Ring

<<DataType>> TP_Shell

{isCycle()}

{isCycle()} {isSimple()} {isConnected()} {support().dimension() = 1} {isCycle()} {isSimple()} {isConnected()} {support().dimens ion() = 2}

<<DataType>> TP_Prim itiveBoundary

<<DataType>> TP_ComplexBoundary

<<DataType>> TP_EdgeBoundary startNode : TP_DirectedN ode endNode : TP_DirectedNode

<<DataType>> TP_FaceBoundary exterior[0..1] : TP_Ring interior[0..*] : TP_Ring

<<DataType>> TP_SolidBoundary exteri or[0..1] : TP_Shell interior[0..*] : TP_Shell

{support().dimension() = 0}

{support().dimension() = 1}

{support() .dimension () = 2}

48

Boundary relation data types

<<Interface>> TP_Object
(from Topology root)

<<Ty pe>> GM_Primitive


(from Geometri c primiti ve)

0.. 1

+geo metry Realization

<<Type>> TP_Complex
(from Topol ogical Compl ex)

+maximalComplex 1

+topo logy <<Type>> TP_Primitive 0.. * asTP_Direct edTopo(orient ation : Sign) : TP_DirectedTopo dimension() : Int eger boundary() : TP_Boundary coBoundary() : Set <TP_Direct edTopo> int erior() : S et <TP_Primitiv e> clos ure() : Set<TP_Primitive> exterior() : Set< TP _P rimit ive> maximalComplex() : TP_Complex +element 1..* 0..1 +container I solated I n 0..* +isolated

+complex

1..*

Complex

-- topological dimension agrees with geometric dimension {geometry->forAll(geometry.dimension() = dimension())} -- basic geometric operation are preserved {complex.geometry->forAll(element->includes(geometry))} {boundary().asTP_Primitive().geometry = geometry.boundary()} -- isolated topology is codimension at least 2 {coincidentSubelement.dimension() < dimension() -1} -- a primitive is its own positive TP_DirectedTopo {asTP_DirectedTopo(+) = self}

49

TP_Primitive

<<Type>> TP_Primitive +topo 1

{primitive = s elf} {orientat ion = "+"}

<<Type>> TP_Node 1 +topo Center +proxy 2

<<Type>> TP_Edge +topo

<<Type>> TP_Face +topo Center

<<Type>> TP_Solid 1 +topo Center +proxy 2 <<Type>> TP_DirectedSolid

1 Center +proxy

Center

+proxy

<<Type>> TP_DirectedNode

<<Type>> TP_DirectedEdge

<<Type>> TP_DirectedFace

<<Ty pe>> TP_DirectedTopo orientation : Sign = "+" negate() : TP_DirectedTopo asTP_Expres sion() : TP_Ex pression

+proxy

2 {orientation = "+" implies topo = self}

<<Type>> TP_DirectedTopo

50

TP_DirectedTopo subclasses

CoBoundary <<Type>> TP_Primitive 1 1 +topo

0..* +spoke

<<Type>> TP_DirectedEdge

+hub <<Type>> TP_Node boundary() : NULL 1

+topo Center +proxy 2 subset Center +proxy 2

<<Type>> TP_Direc tedNode

<<Type>> TP_DirectedTopo

51

TP_Node

CoBoundary <<Type>> TP_Primitive +t opo

{CircularSequence} +spoke 0..*

<<Type>> TP_DirectedFace

<<Type>> TP_DirectedNode 1 2 +hub 1..* 0..* +primitive Boundary +boundary

<<Type>> TP_Edge boundary() : TP_EdgeBoundary ... 1 +topo

Center +proxy 2 subset Center +proxy 2

<<Type>> TP_DirectedEdge

<<Type>> TP_Direc tedTopo

52

TP_Edge

<<Type>> TP_Primitive 1 +topo

CoBoundary

0..2 +spoke

<<Type>> TP_DirectedSolid

<<Type>> TP_DirectedEdge +hub 1..* 0..* +primitive Boundary +boundary 1..*

<<Type>> TP_Face 1

+topo Center +proxy 2 subset +proxy <<Type>> TP_DirectedTopo <<Type>> TP_DirectedFace

Center

53

TP_Face

<<Type>> TP_Primitive 1 +t opo

<<Type>> TP_Direc tedFace 1..* +boundary

<<Type>> TP_Solid boundary() : TP_SolidBoundary 1 +topo Center

0..2 +primitive

Boundary

2 +proxy

<<Type>> TP_DirectedSolid

subset Center 2

<<Type>> TP_DirectedTopo +proxy

54

TP_Solid

<<DataType>> TP_Expression TP_Expression(dt : TP_DirectedTopo) : TP_Expression TP_Expression(sdt : Set<TP_DirectedTopo>) : TP_Expression plus(s : TP_Expression) : TP_Expression minus(s : TP_Expression) : TP_Expression negate() : TP_Expression isZero() : Boolean isCycle() : Boolean boundary() : TP_Expression coBoundary() : TP_Expression equals(s : TP_Expression) : Boolean support() : TP_Complex

1 +expression Terms

<<Type>> TP_Direc tedTopo orientation : Sign = "+" negate() : TP_DirectedTopo asTP_Expression() : TP_Expression

0..* <<DataType>> TP_ExpressionTerm coefficient : Integer = 1

+term

+variable 1 Variable

+t erm 0..*

55

TP_Expression

<<Interface>> TP_Object
(from Topology root)

1 <<Type>> TP_Complex <<Type>> TP_Primitive


(f rom To pologica l primit ive)

+maximalComplex

+element 1..* Complex

+complex 1..*

<<Type>> GM_Complex
(f ro m Ge om ric co mpl ex) et

+geometry 0..1 Realization

+topology 0..1

isMaximal() : Boolean isConnected() : B oolean boundary() : TP_ComplexBoundary TP_Complex(GC : GM_Complex) : TP_Complex dimension() : Integer coBoundary() : Set<TP _DirectedTopo> int erior() : Set <TP_Primitive> closure() : Set<TP_Primitive> exterior() : Set<TP_Primitive> max im alComplex() : TP_Complex 1..* +superComplex 1..* +subComplex

-- the maximalComplex contains this complex {superComplex->contains(maximalComplex)} -- a maximal complex is contained only in itself {(self = maximalComplex) implies (superComplex = {self}) } {isMaximal() implies (self = maximalComplex)} /Contains

56

TP_Complex

Summary

<<Leaf>>

<<Leaf>>

Geometric aggregates
(from Geometry)

Geometry root
(from Geometry)

<<Leaf>>

Coordinate geometry
<<Leaf>> (from Geometry) <<Leaf>>

Geometric primitive
(from Geometry)

Geometric complex
(from Geometry)

<<Leaf>>

Topology root
(from Topology) <<Leaf>> <<Leaf>>

Topological primitive
(from Topology)

Topological Complex
(from Topology)

58

Geometry and Topology Packages

<<Type>> GM_Object

<<Type>> GM_Complex

<<Ty pe>> GM_Aggregate

<<Ty pe>> GM_Prim ti ve i

<<Type>> GM_Composite

<<Ty pe>> GM_MultiPrimitive

<<Type>> GM_Point

<<Ty pe>> GM _CompositePoint

<<Type>> GM_MultiPoint

<<Type>> GM_OrientablePrimitive
( fr om Geo met ri c pr imit ive)

<<Type>> GM_OrientableCurve
(f rom Geometric primitiv e)

<<Type>> G M_Com positeCurve

<<Ty pe>> GM_Mult iCurve

<<Type>> GM_OrientableSurface
(f rom Geometric primitiv e)

<<Ty pe>> GM_CompositeSurface

<<Type>> GM_MultiSurface

<<Type>> GM_Curve <<Ty pe>> GM_Surface <<Type>> GM_Solid <<Type>> GM_CompositeSolid <<Ty pe>> GM_Mult iSoli d

59

Geometry basic classes

<<Type>> GM_Complex
(f rom Geometri c comp lex )

{isCycle() = TRUE}

<<Abstract>> GM_Boundary
(f rom Geometry root )

<<Abstract>> GM_PrimitiveBoundary

<<Type>> GM_ComplexBoundary
(from Geometric complex)

<<Type>> GM_CurveBoundary 0..* 0..*

<<Type>> GM_SurfaceBoundary 1 1 1

<<Type>> GM_SolidBoundary 1

1 +startPoint

<<Type>> GM_Point

1 +endPoint

0..1 <<Type>> 0..* +exterior GM_Ring +interior

0..1 <<Type>> +exterior GM_Shell

0..* +interior

<<Type>> GM_CompositeSurface
(f ro m G eometric complex)

<<Type>> GM_CompositeCurve
(from Geometric complex)

<<Type>> GM_Shell

{isSimple() = TRUE} {isCycle() = TRUE}

<<Type>> GM_Ring

60

Geometry Boundary Data Types

<<Interface>> TP_Object

<<Type>> TP_Primitive

+element 1..*

Complex

+complex 1..*

<<Type>> TP_Complex

<<Type>> TP_Node

<<Type>> TP_Edge

<<Type>> TP_Face

<<Type>> TP_Solid

<<Type>> TP_DirectedNode

<<Type>> TP_DirectedEdge

<<Type>> TP_DirectedFace

<<Type>> TP_DirectedSolid

<<Type>> TP_DirectedTopo

<<DataType>> TP_Expression

61

Topological class diagram

<<Interface>>

TP_Object
(from Topology roo t)

<<Type>>

TP_Primitive
(fro m Topological p rimiti ve)

1..* +element

Complex

1..* +complex

<<Type>>

TP_Complex
(from Topological Complex)

+subComplex 1..* /Contains 1..* +superComplex

+topology

0..* {geometry.complex -> includesAll complex.geometry}

0..1

+topology

Realization

Realization

0..1

+geometry +element 1..* Complex 0..* +complex

+geometry

0..1

<<Type>>

<<Type>>

GM_Primitive
(from Geometric primitive)

GM_Complex
(from Geometric complex)

+subComplex 0..* Contains 0..* +superComplex

<<Type>>

GM_Object
(from Ge ometry root)

62

Relation between geometry and topology

Spatial Examples from ISO19107

Geometric objects in a 2-D CRS

64

P1 = GM_Point < position = < 1.00, 5.00 > > P2 = GM_Point < position = < 3.00, 5.00 > > P3 = GM_Point < position = < 3.00, 2.00 > > P4 = GM_Point < position = < 1.75, 2.75 > > P5 = GM_Point < position = < 1.50, 4.50 > > P6 = GM_Point < position = < 2.00, 3.25 > > P7 = GM_Point < position = < 5.00, 4.00 > >

65

CS1 = GM_CurveSegment <controlPoint = <P1,P2>, interpolation = linear > CS2 = GM_CurveSegment <controlPoint = <P2,P3 >, interpolation = linear > CS3 = GM_CurveSegment <controlPoint = <P2,(6,5),(6,2),P3>, interpolation = linear > CS4 = GM_CurveSegment <controlPoint = <P1,(1,2), P3> , interpolation = linear > CS5 = GM_CurveSegment <controlPoint = <P5,(1.9,4.25), (2,4)> interpolation = arc> CS6 = GM_CurveSegment <controlPoint = <(2,4),P6>, interpolation = linear > CS7 = GM_CurveSegment <controlPoint = <P7,(4.25,4),(4.25,3.25),(5,3.25),P7 >, interpolation =linear>

66

C1 = GM_Curve C2 = GM_Curve C3 = GM_Curve C4 = GM_Curve C5 = GM_Curve C6 = GM_Curve

segments = <CS1> segments = <CS2> segments = <CS3> segments = <CS4> segments = <CS5, CS6> segments = <CS7>

67

S0 = GM_Surface patch = <GM_Polygon S1 = GM_Surface patch = <GM_Polygon interior = << C5, -C5 >> > S2 = GM_Surface patch = <GM_Polygon interior = << -C6 >> > S3 = GM_Surface patch = <GM_Polygon

interior = << C1, C3, -C4 >> > exterior = < C4, -C2, -C1 >, exterior = < -C3, C2 >, exterior = < C6 > >

68

Lake = AreaFeature featureType=Hydrography::WaterBody, extent = S3 RoadCenterline = LineFeature featureType = Transportation::Road, centerline = C2 RoadArea = RoadCenterLine.centerline.buffer < distance = 10m > RoadExtent = AreaFeature featureType = LandCover::Road, extent = RoadArea RoadInstance = ComplexFeature featureType = LandUse::Road, featureComponents = {RoadCenterline, RoadArea } Trail = LineFeature featureType = CulturalFacilities::HikingTrail, centerline = C5 School = PointFeature featureType = CulturalFacilities::School, Location = P4

69

Potrebbero piacerti anche