|
|

|
|
|

|
|
|
|
|
|
Quellcode (USE-Modell; die SOIL-Testumgebung folgt demnächst...):
|
|
|
|
... | ... | @@ -16,56 +16,56 @@ model Web3dScans |
|
|
-- Wesentliche Anwendungsobjekte sind:
|
|
|
-- Betrachtungsobjekt (das kann zunächst ein Handstück, Bohrkern oder Fossil
|
|
|
-- sein), der zugehörige 3D-Scan und der zugehörige Steckbrief sowie ein
|
|
|
-- Objekt mit punktförmiger Geometrie und einem thmatischen Attribut, das
|
|
|
-- eine ID zur Verknüpfung der Geometrie mit den anderen genannten zewntralen
|
|
|
-- Objekt mit punktförmiger Geometrie und einem thematischen Attribut, das
|
|
|
-- eine ID zur Verknüpfung der Geometrie mit den anderen genannten zentralen
|
|
|
-- Anwendungsobjekten enthält.
|
|
|
|
|
|
class Betrachtungsobjekt
|
|
|
class Betrachtungsobjekt -- Impl.: ExaminationObject
|
|
|
attributes
|
|
|
id : Integer
|
|
|
-- Reale Objektgröße gegeben in Millimetern (Länge, Breite, Höhe):
|
|
|
extentX : Integer
|
|
|
extentY : Integer
|
|
|
extentZ : Integer
|
|
|
groesseX : Integer
|
|
|
groesseY : Integer
|
|
|
groesseZ : Integer -- Impl.: sizeX, sizeY, sizeZ
|
|
|
end
|
|
|
|
|
|
-- Spezielle Typen von Betrachtungsobjekten:
|
|
|
class Handstueck < Betrachtungsobjekt end
|
|
|
class Bohrkern < Betrachtungsobjekt end
|
|
|
class Fossil < Handstueck end
|
|
|
class Handstueck < Betrachtungsobjekt end -- Impl.: HandSample
|
|
|
class Bohrkern < Betrachtungsobjekt end -- Impl.: CoreSample
|
|
|
class Fossil < Handstueck end -- Impl.: Fossil
|
|
|
|
|
|
class Scan3dModel
|
|
|
class SteinModel3d -- Impl.: RockModel3d
|
|
|
attributes
|
|
|
uri : String
|
|
|
end
|
|
|
|
|
|
class Steckbrief
|
|
|
class Steckbrief -- Impl.: Profile
|
|
|
attributes
|
|
|
uri : String
|
|
|
end
|
|
|
|
|
|
class PktObjekt
|
|
|
class PktObjekt -- Impl.: PointObject
|
|
|
attributes
|
|
|
id: Integer -- im Shape des HLNUG das Attribut PROBE
|
|
|
xCoord: Real
|
|
|
yCoord: Real
|
|
|
zCoord: Real
|
|
|
id: Integer -- im Shape des HLNUG das Attribut PROBE
|
|
|
xKoord: Real
|
|
|
yKoord: Real
|
|
|
zKoord: Real -- Impl.: sizeX, sizeY, sizeZ
|
|
|
crs: String
|
|
|
end
|
|
|
|
|
|
association Betrachtungsobjekt_PktObjekt between
|
|
|
Betrachtungsobjekt[1] role bobj
|
|
|
PktObjekt[0..1] role location
|
|
|
PktObjekt[0..1] role lokation
|
|
|
end
|
|
|
|
|
|
association Betrachtungsobjekt_Steckbrief between
|
|
|
Betrachtungsobjekt[1] role bobj
|
|
|
Steckbrief[0..1] role profile
|
|
|
Steckbrief[0..1] role steckbrief
|
|
|
end
|
|
|
|
|
|
association Betrachtungsobjekt_Scan3dModel between
|
|
|
Betrachtungsobjekt[1] role bobj
|
|
|
Scan3dModel[0..*] role scan
|
|
|
SteinModel3d[0..*] role smodell
|
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
... | ... | @@ -85,95 +85,102 @@ context Handstueck |
|
|
-- Als Handstück wird in der Geologie eine Gesteinsprobe und in der Minera-
|
|
|
-- logie eine Mineralstufe in "Handgröße" bezeichnet, was etwa einer Größe
|
|
|
-- zwischen 8,5 cm × 11,5 cm und 10 cm × 15 cm entspricht.
|
|
|
inv sizeHandstueck:
|
|
|
self.extentX > 85 and self.extentX < 100 and
|
|
|
self.extentY > 115 and self.extentY < 150
|
|
|
inv groesseHandstueck:
|
|
|
self.groesseX > 85 and self.groesseX < 100 and
|
|
|
self.groesseY > 115 and self.groesseY < 150
|
|
|
|
|
|
class Erdzeitalter
|
|
|
class Erdzeitalter < Tag -- Impl.: GeologicalAge
|
|
|
attributes
|
|
|
zeitalter: String
|
|
|
name: String
|
|
|
end
|
|
|
|
|
|
association Steckbrief_Zeitalter between
|
|
|
Steckbrief[1] role profile
|
|
|
Erdzeitalter[1..*] role age
|
|
|
Steckbrief[1] role steckbrief
|
|
|
Erdzeitalter[1..*] role zeitalter
|
|
|
end
|
|
|
|
|
|
constraints
|
|
|
context Erdzeitalter
|
|
|
-- Erzeitalter kann nur einen der in der nachstehenden (unvollständigen)
|
|
|
-- Liste angegebenen Werte enthalten:
|
|
|
inv ageNameList:
|
|
|
inv gueltigesZeitalter:
|
|
|
Set{
|
|
|
'Praekambrium', 'Kambrium', 'Ordovizium', 'Silur', 'Devon', 'Karbon',
|
|
|
'Perm', 'Trias', 'Jura', 'Tertiaer', 'Quartaer'}
|
|
|
->includes(zeitalter)
|
|
|
->includes(name)
|
|
|
|
|
|
-- Jedes Handstück bezieht sich auf ein Erdzeitalter:
|
|
|
context Handstueck
|
|
|
inv handSampleHasAge:
|
|
|
self.profile.age->size() = 1
|
|
|
inv gesetztesHandstueckAlter:
|
|
|
self.steckbrief.zeitalter->size() = 1
|
|
|
|
|
|
-- Bohrkerne können mehr als ein Erdzeitalter abdecken:
|
|
|
context Bohrkern
|
|
|
inv coreSampleHasAges:
|
|
|
let ages = self.profile.age in
|
|
|
inv gesetzteBohrkernAlter:
|
|
|
let ages = self.steckbrief.zeitalter in
|
|
|
ages->size() >= 1
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- Einbindung des Punkt-Layers in die Kartenkomponente:
|
|
|
|
|
|
class Geodienst
|
|
|
class PktObjektLayer -- Impl.: PointObjectLayer
|
|
|
end
|
|
|
|
|
|
class WMS < Geodienst
|
|
|
end
|
|
|
association PktObjekt_PktObjektLayer between
|
|
|
PktObjekt[0..*] role punkt
|
|
|
PktObjektLayer[1] role layer
|
|
|
end
|
|
|
|
|
|
class WFS < Geodienst
|
|
|
end
|
|
|
-- Der Punkt-Layer wird über einen geeigneten Dienst in die interaktive Karte
|
|
|
-- der Anwendung eingebunden, z. B. über einen OGC-WMS mit GetFeatureInfo-
|
|
|
-- Operation oder einen OGC-WFS.
|
|
|
|
|
|
class Map
|
|
|
end
|
|
|
|
|
|
class Tag
|
|
|
class Geodienst -- Impl.: GeoWebService
|
|
|
end
|
|
|
|
|
|
class TagVerzeichnis
|
|
|
end
|
|
|
class WMS < Geodienst end
|
|
|
class WFS < Geodienst end
|
|
|
|
|
|
-- Klasse DI-Paar beinhaltet die Key-Value Paare, die im Steckbrief enthalten sein können
|
|
|
class DIPair
|
|
|
association PktObjektLayer_Geodienst between
|
|
|
PktObjektLayer[1] role layer
|
|
|
Geodienst[1] role layer
|
|
|
end
|
|
|
|
|
|
class KeyData < DIPair
|
|
|
class Karte -- Impl.: Map
|
|
|
end
|
|
|
|
|
|
class InputValue < DIPair
|
|
|
end
|
|
|
association Karte_Geodienst between
|
|
|
Karte[1] role map
|
|
|
Geodienst[1] role service
|
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- Steckbrief-Konzept:
|
|
|
|
|
|
association Pkt_Geodienst between
|
|
|
PktObjekt[0..*]
|
|
|
Geodienst[1] role services
|
|
|
end
|
|
|
class Tag
|
|
|
attributes
|
|
|
name: String
|
|
|
end
|
|
|
|
|
|
association Map_Geodienst between
|
|
|
Map[1]
|
|
|
Geodienst[1..*] role mapping
|
|
|
end
|
|
|
class TagVerzeichnis -- Impl.: TagDirectory
|
|
|
end
|
|
|
|
|
|
association Steckbrief_Tag between
|
|
|
Steckbrief[1..*] role profile
|
|
|
Tag[0..*] role tagging
|
|
|
-- Klasse DI-Paar beinhaltet die Tag/Inhalts-Paare (Key-Value-Paare), die im
|
|
|
-- Steckbrief enthalten sein können.
|
|
|
class TIPaar -- Impl.: TIPair
|
|
|
attributes
|
|
|
tag: Tag
|
|
|
inhalt: String -- Impl.: content
|
|
|
end
|
|
|
|
|
|
association Steckbrief_TIPaar between
|
|
|
Steckbrief[1] role steckbrief
|
|
|
TIPaar[1..*] role inhalt
|
|
|
end
|
|
|
|
|
|
association Tag_TagVerzeichnis between
|
|
|
Tag[0..*]
|
|
|
TagVerzeichnis[1] role tagRegister
|
|
|
end
|
|
|
|
|
|
association Steckbrief_DIPair between
|
|
|
Steckbrief[1] role profile
|
|
|
DIPair[1..*] role InputPairs
|
|
|
TagVerzeichnis[1] role register
|
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
... | ... | @@ -183,22 +190,23 @@ constraints |
|
|
|
|
|
context PktObjekt
|
|
|
-- x- und y-Koordinate müssen gesetzt sein:
|
|
|
inv xyCoordsSet:
|
|
|
self.xCoord.oclIsUndefined() = false and
|
|
|
self.yCoord.oclIsUndefined() = false
|
|
|
inv gesetzteXYKoordinaten:
|
|
|
self.xKoord.oclIsUndefined() = false and
|
|
|
self.yKoord.oclIsUndefined() = false
|
|
|
-- Falls z gesetzt ist, muss der Wert unterhalb der Geländeoberfläche
|
|
|
-- liegen (Ausnahmen?):
|
|
|
inv zCoordBelowGround:
|
|
|
self.zCoord.oclIsUndefined() = true or
|
|
|
self.zCoord < 0 -- wäre noch zu prüfen/vereinbaren... -> ToDo
|
|
|
inv ZKoordUnterGrund:
|
|
|
self.zKoord.oclIsUndefined() = true or
|
|
|
self.zKoord < 0 -- wäre noch zu prüfen/vereinbaren... -> ToDo
|
|
|
|
|
|
context Betrachtungsobjekt
|
|
|
inv extentsSet:
|
|
|
inv definierteObjektGroesse:
|
|
|
--Koordinatendimension == 3
|
|
|
-- Maße für das Betrachtungsobjekt müssen gesetzt sein
|
|
|
self.extentX.oclIsUndefined() = false and
|
|
|
self.extentY.oclIsUndefined() = false and
|
|
|
self.extentZ.oclIsUndefined() = false
|
|
|
self.groesseX.oclIsUndefined() = false and
|
|
|
self.groesseY.oclIsUndefined() = false and
|
|
|
self.groesseZ.oclIsUndefined() = false
|
|
|
|
|
|
-- eof
|
|
|
|
|
|
</pre> |