3D-Geodatenbank Berlin Dokumentation V1.0 Institut für Kartographie und Geoinformation der Universität Bonn Prof. Dr. Lutz Plümer Dr. Thomas H. Kolbe Dr. Gerhard Gröger Jörg Schmittwilken Viktor Stroh lat/lon Gesellschaft für raumbezogene Informationssysteme mbH Dr. Andreas Poth Ugo Taddei 3D-Geodatenbank Berlin Inhaltsverzeichnis 1 1.1 1.2 Einleitung Features System- und Entwurfsentscheidungen 1 1 3 2 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2 2.2.1 2.2.2 2.2.3 Datenmodellierung UML-Diagramm der 3D-Stadtmodellierung Basisklassen Geometriemodell und Texturen Generische Objekte und Prototypen Gebäudemodell Digitales Geländemodel Orthophotos Relationales Datenbankschema Abbildungsregeln, Schemakonventionen Rasterdatenverwaltung mit Oracle 10g Spatial Datenbankschema 5 5 5 7 9 10 12 14 15 15 17 18 3 3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.17 3.2.18 3.2.19 3.3 3.3.1 3.3.2 3.4 3.5 3.5.1 3.5.2 3.6 Versions- und Historienverwaltung Konzept der Versionen und CityModelAspects Umsetzung in Oracle AddPlanning UpdatePlanning DiscardPlanning AcceptPlanning AddPlanningAlternative UpdatePlanningAlternative DiscardPlanningAlternative GetDiff GetAllDiff GetConflicts GetAllConflicts RefreshPlanningAlternative DeleteAllPlanningAlternatives DeleteTermPlanningAlternatives AddCityModelAspect DeleteCityModelAspect AddPAtoCMA RemovePAfromCMA DeleteAllCityModelAspects Administrationsprogramm „PlanningManager“ Planungen Planungsalternativen Das Menü Extras Konfliktmanagement Differenzen Konflikte Nutzung in Anwendungsprogrammen 35 35 38 40 41 41 41 42 42 42 43 43 43 44 44 44 44 45 45 45 46 46 46 47 48 50 51 51 51 51 i 3D-Geodatenbank Berlin Inhaltsverzeichnis 4 4.1 4.2 4.2.1 4.3 4.3.1 4.3.2 4.3.3 4.4 4.4.1 4.4.2 4.5 4.5.1 4.5.2 4.5.3 4.5.4 Werkzeug für den Datenimport und –export Systemvoraussetzungen Benutzerschnittstelle Der Login-Dialog Import Konzept zum Importieren von Shapefiles Durchführung des Shapefile-Imports Import von Rasterdaten Export Export von Shapefiles Export von Rasterdaten Erläuterung der Import-Konvertierungsprozeduren REALIT_MULTIPATCH RSS_GRUNDRISSE_MPATCH RSS_BUILDING_MPATCH EXTRUDE-Prozedur 52 52 52 53 54 54 55 55 57 57 58 58 58 60 62 64 5 5.1 5.2 Nutzungsbeispiele Direkter Zugriff über SQL Java-Schnittstelle 65 65 67 ii 3D-Geodatenbank Berlin 1 Einleitung Dieses Dokument beschreibt den Aufbau und die Bestandteile der 3D-Geodatenbank zur Speicherung und Verwaltung des virtuellen 3D-Stadtmodells von Berlin. Sie wurde vom Institut für Kartographie und Geoinformation der Universität Bonn (IKG) in Kooperation mit der Fa. lat/lon GmbH im Auftrag der Berliner Senatsverwaltung für Wirtschaft, Arbeit und Frauen und der Berlin Partner GmbH (ehemals Wirtschaftsförderung Berlin International) entwickelt. Das der Datenbank zugrunde liegende Anwendungsschema orientiert sich an der Modellierung von CityGML, dem Austauschformat für 3D-Stadtmodelle, das von der Special-InterestGroup 3D (SIG 3D) der Initiative Geodateninfrastruktur NRW (GDI NRW) derzeit entwickelt und standardisiert wird. Von den in CityGML enthaltenen Konzepten wurde die DGM-, Gebäude- und Gruppierungsmodellierung vollständig für die Level-of-Detail-Stufen 1-3 umgesetzt. Für weitere, auch künftig zu ergänzende Objektarten unterstützt die Datenbank die generische Repräsentation beliebiger Geoobjekte des Stadtraumes. 1.1 • Features Unterstützung dreier unterschiedlicher Arten von Mehrfachrepräsentationen: Levels-of-Detail, Planungsversionen und Historie. Jedes Geoobjekt sowie das DGM und die Luftbilder können in drei verschiedenen Auflösungs- bzw. Genauigkeitsstufen (Levels-of-Detail, LoD) gespeichert werden. Mit aufsteigendem LoD erhalten Objekte nicht nur eine genauere und feinere Geometrie, sondern erfahren auch eine thematische Verfeinerung. Das Versions- und Historienmanagement erfolgt unter Verwendung des Oracle Workspace Managers und ist weitgehend transparent für Anwendungsprogramme, die mit der Datenbank arbeiten. Zur Administration von Planungsgebieten und den darin enthaltenen Planungsvarianten wurde das Werkzeug „PlanningManager“ entwickelt, das der 3D-Geo-DB beiliegt. Ferner werden in der Datenbank gespeicherte Prozeduren (Stored Procedures) bereit gestellt, die Anwendungsprogrammen die bequeme Administration von Planungsalternativen bzw. Versionen ermöglichen. • Implementierung auf Basis von Oracle 10g Spatial. Für die Repräsentation aller Vektor- und Rastergeometrien wird ausnahmslos auf die von Oracle Spatial zur Verfügung gestellten Datentypen zurückgegriffen. Damit werden projektbezogene Speziallösungen vermieden. Verschiedene Geoinformations- und Architektursoftwaresysteme erlauben zudem den direkten Zugriff auf in Oracle gespeicherte GeometrieObjekte und können darüber unmittelbar auf die Daten der 3D-Geodatenbank zugreifen. • Komplexe Digitale Geländemodelle: DGMs können in der 3D-Geodatenbank auf vier unterschiedliche Weisen repräsentiert werden: regelmäßige Raster, unregelmäßige Dreiecksvermaschungen (TINs), 3D-Massenpunkte und 3D-Bruchkanten. Für jeden Level-of-Detail kann ein komplexes DGM definiert werden, das sich aus einer beliebigen Zahl von DGM-Komponenten und –Typen zusammensetzt. Dabei ist es ist möglich, bestimmte Arten der DGM-Repräsentation für das gleiche geographische Gebiet miteinander zu kombinieren (z.B. Massenpunkte und Bruchkanten oder Raster und Bruchkanten). Rasterbasierende DGMs können beliebig groß sein und werden mit Hilfe der Oracle 10g GeoRaster-Funktionalität aus Einzelkacheln zu einem Gesamtraster zusammengesetzt. 1 3D-Geodatenbank Berlin 1. Einleitung • Verwaltung großer Luftbilder: Es können beliebig große Luftbilder gespeichert und verwaltet werden. Mit Hilfe der Oracle 10g GeoRaster-Funktionalität können gekachelte, homogene Einzelbilder in der Datenbank zu einem Gesamtbild aggregiert werden und blattschnittfreie Ausschnitte ausgegeben werden. • Differenzierte Gebäudemodellierung: Gebäude können in der 3D-Geodatenbank von einem Grobmodell bis hin zu geometrisch und semantisch sehr fein ausmodellierten Strukturen verwaltet werden. Das zugrunde liegende Datenmodell setzt die CityGML-Modellierung für Gebäude vollständig von Level-of-Detail 1 bis 3 um. Gebäude können durch einfache, monolithische Objekte repräsentiert werden oder sich aus einer beliebig tiefen Aggregation von Gebäudeteilen zusammensetzen. Gebäudeanbauten wie Balkone und Treppen können genauso wie die einzelnen Flächen thematisch klassifiziert werden und mit Sachattributen versehen werden. Dies erlaubt es u.a. die Gebäudegrundflächen als solche zu markieren, damit diese später zur Ableitung von SmartBuildings oder zur Herleitung einer neuen Extrusionsgeometrie etc. verwendet werden kann. Gebäude können Adressen zugeordnet werden, die auch in der 3D-Geo-DB gespeichert werden. Zur Modellierung von Gebäudekomplexen können Gebäude zu speziellen Gebäudegruppen aggregiert werden. • Repräsentation generischer und prototypischer 3D-Objekte: Generische Objekte erlauben die Speicherung und Verwaltung von 3D-Geoobjekten, die keine Gebäude sind wie z.B. Straßenmöbel, Brücken, Vegetationsobjekte o.ä. oder nur in einem proprietären Dateiformat vorliegen. Damit können unmittelbar Dateien aus anderen Softwaresystemen wie Architektur- oder Grafikprogrammen (uninterpretiert) in die Datenbank importiert werden. Anwendungssysteme, die diese Daten nutzen möchten, müssen allerdings in der Lage sein, diese Dateiformate nach dem Auslesen aus der 3D-Geodatenbank interpretieren zu können. Prototypische Objekte dienen zur speichereffizienten Verwaltung von Objekten, die in großer Zahl im Stadtmodell vorkommen und sich dabei in ihrer Geometrie und Erscheinungsform nicht unterscheiden. Beispiele sind Straßenmöbel wie Laternen, Verkehrsschilder oder Bänke, können aber auch Vegetationsobjekte wie Sträucher, bestimmte Baumtypen o. ä. umfassen. Jede Instanz eines prototypischen Objekts kann für jeden Level-of-Detail auf ein eigenes Prototyp-Objekt verweisen. Die Geometrien (und Erscheinungsformen wie Texturen, Farben etc.) sowohl von generischen Objekten als auch Prototypen können entweder als Oracle-Spatial-Objekte oder in proprietären Dateiformaten gespeichert werden. In letzterem Fall kann für jedes Objekt eine eigene Datei gespeichert werden, wobei der Dateityp (MIME-Typ), die Koordinatentransformationsmatrix zur Einpassung des Objekts in das Weltkoordinatensystem sowie das Zielkoordinatensystem der Transformation mit angegeben werden muss. • Erweiterbare Objektattributierung: Alle Objekte in der 3D-Geodatenbank können mit beliebig vielen zusätzlichen generischen Attributen ergänzt werden. Damit ist es möglich, den Objekten jederzeit weitere Sachinformationen sowie auch weitere räumliche Eigenschaften hinzuzufügen. In Verbindung mit dem Konzept der generischen 3D-Objekte ergibt sich damit eine sehr flexible Speicherungsmöglichkeit neuer Objektarten, die im Datenmodell nicht explizit ausmodelliert sind. Jedes zusätzliche Attribut besteht aus einem Tripel von Attributname, Datentyp und Wert. Die unterstützten Datentypen sind dabei: String, Ganz- und Fließkommazahlen, Datum und Uhrzeit, 2 3D-Geodatenbank Berlin 1. Einleitung Binärobjekt (BLOB, z.B. zur Speicherung einer Datei), Oracle-Spatial-Geometrie oder texturierbare 3D-Volumenkörper und 3D-Flächen(aggregate). • Freie, auch rekursive Gruppierung von Geoobjekten: Geoobjekte können beliebig gruppiert werden, wobei die Aggregate benannt werden können und selber wieder Geoobjekte darstellen. Als solche dürfen sie auch mit beliebigen weiteren Attributen versehen werden (s.o.). Objektgruppen dürfen als Bestandteile auch Objektgruppen besitzen, wodurch eine beliebig tiefe Aggregationstiefe ermöglicht wird. Zu jedem Objekt einer Gruppierung kann noch explizit die Rolle angegeben werden, die es in der Gruppe spielt (qualifizierbare Assoziation). • Externe Verweise für alle Geoobjekte: Alle Geoobjekte können mit beliebig vielen Verweisen auf korrespondierende Objekte in externen Datenquellen versehen werden. Damit können z.B. zu den Gebäuden die IDs der entsprechenden ALK- oder später auch ALKIS-Objekte gespeichert werden. Jeder Verweis besteht aus der Bezeichnung des externen Datenbestands (z.B. ALK) und der darin verwendeten Objekt-ID. • Flexible 3D-Geometrien: Die Geometrie von Gebäuden und generischen 3D-Objekten kann durch die Kombination von Volumenkörpern und Flächen sowie einer beliebigen, auch rekursiven Aggregation davon repräsentiert werden. Die Flächen können auf beiden Seiten unterschiedlich texturiert oder eingefärbt sein und beinhalten auch Transparenzinformationen. Weitere Geometrietypen (beliebige Oracle-Spatial-Geometrie) können den Geoobjekten durch die Verwendung generischer Attribute hinzugefügt werden. • Programm zum Import und Export von Shapefiles und Rasterdaten: Für die 3DGeo-DB wurde ein Werkzeug entwickelt, das den Import und Export von RasterDGMs, Luftbildern und 3D-Shapefiles ermöglicht. Mit Hilfe des Werkzeugs können beliebige Ausschnitte des in der Datenbank gehaltenen Gesamt-DGMs bzw. Gesamtluftbilds in Form georeferenzierter TIFF-Bilder blattschnittfrei ausgegeben werden. Da beim Import von Geoobjekten wie z.B. Gebäuden aus verschiedenen Systemen die konkrete Struktur der Shapefiles i.d.R. unterschiedlich ist, wurde ein flexibler Konvertierungsmechanismus realisiert: Die Interpretation der in den Shapefiles enthaltenen Daten wird durch in der Datenbank gespeicherte Prozeduren realisiert. Mitgeliefert werden Prozeduren zum Import der Gebäude aus den Shapefiles der Fa. Real.IT sowie der Fa. RSS. Weitere Prozeduren für andere Shapefile-Typen können der Datenbank später hinzugefügt werden. Auf diese Weise könnten künftig auch z.B. Digitale Geländemodelle in Form von Dreiecksvermaschungen (TINs) über Shapefiles importiert werden. • Automatische Propagierung von Änderungen: In der 3D-Geodatenbank realisierte Trigger-Mechanismen sorgen dafür, dass bei Änderungen von Geometrien diese – wo nötig – an alle mit dem Objekt in Relation stehenden Geoobjekte weiter propagiert werden. Dies ist z.B. sinnvoll zur automatischen Aktualisierung der BoundingBox aller Geoobjekte, in denen ein Objekt mit geänderter Geometrie enthalten ist. 1.2 System- und Entwurfsentscheidungen Die 3D-Geodatenbank wird unter Verwendung von Oracle Spatial 10g realisiert. Neben vielen allgemeinen Gründen, die für die Verwendung eines kommerziellen und weit verbreiteten Relationalen Datenbankmanagementsystems (RDBMS) sprechen, bietet Oracle Spatial 10g die folgenden speziellen Leistungsmerkmale, die eine effiziente Implementierung der benötigten Funktionalitäten erst ermöglichen: 3 3D-Geodatenbank Berlin 1. Einleitung • Oracle Spatial 10g unterstützt räumliche Datentypen von 2D bis 4D. Die meisten Operationen und Selektionsfilter berücksichtigen bislang zwar nur die ersten beiden Dimensionen der Geometriekoordinaten, allerdings reichen die unterstützten räumlichen 3D-Indizes bereits für die am häufigsten benötigten Selektionskriterien aus. Der Spatial-Datentyp wird zudem auch unmittelbar von kommerziellen GIS, die eine DBAnbindung ermöglichen wie z.B. ArcGIS/ArcSDE der Fa. ESRI, unterstützt, so dass ein solches System auch direkt auf die 3D-Geo-DB zugreifen könnte. • Das Oracle RDBMS stellt in der Version 10g Methoden zur effizienten Verwaltung sehr umfangreicher georeferenzierter Rasterdaten zur Verfügung. Damit ist es möglich, das gesamte DGM sowie das gesamte Luftbild von Berlin jeweils als ein homogenes Objekt ohne Kachelung in der Datenbank zu speichern. • Mit dem Workspace Manager stellt Oracle eine umfassende Komponente zum Versions- und Historienmanagement bereit. Dieses erfolgt weitgehend transparent für die Anwendungen, die mit der Datenbank arbeiten. • Mit Hilfe von Stored Procedures und Trigger-Mechanismen können Regeln implementiert werden, die Änderungen an Objekten an davon ebenfalls betroffene Objekte in der Datenbank (transparent für den Benutzer) propagieren. Nach der Entscheidung über die Verwendung von Oracle Spatial 10g wurden noch die folgenden Entwurfsentscheidungen gefällt: • Die Abbildung des objektorientierten Datenmodells auf eine Oracle-Datenbank erfolgt als relationales Schema. Über die Verwendung der Oracle Spatial Datentypen hinaus kommen keine objektrelationalen Modellierungsmöglichkeiten von Oracle zum Einsatz, da diese in der Version 10g nicht in Verbindung mit dem Oracle Workspace Manager genutzt werden können. Ein weiterer Grund, der für die Verwendung einer rein relationalen Modellierung spricht, ist die Möglichkeit, die 3D-Geo-DB künftig direkt an kommerzielle GIS-Systeme wie ArcGIS (unter Verwendung von ArcSDE) anzukoppeln, die alle nur relationale Datenbankstrukturen unterstützen. • Gekachelt vorliegende, homogen strukturierte Rasterdaten (Luftbilder, Digitales Geländemodell) werden in der Datenbank zu jeweils einem Rasterdatenobjekt aggregiert. Konkret bedeutet dies, dass aus allen Luftbild- bzw. DGM-Kacheln ein einziges Rasterobjekt erzeugt wird. Dieses Vorgehen erlaubt die effiziente und blattschnittfreie Ausgabe beliebiger geographischer Ausschnitte durch eingebaute Funktionen des Oracle RDBMS. Nutzer der Geodatenbank brauchen sich dadurch nicht mit der bei der Datenerfassung durchgeführten Kachelung auseinander zu setzen. • Der zur Verwaltung von Rasterdaten verwendete Datentyp GeoRaster ist in Oracle objektrelational implementiert. GeoRaster-Objekte können deshalb (derzeit) nicht unter die Kontrolle des Versionsmanagements gestellt werden (s.o.). Aus diesem Grund sind in der 3D-Geodatenbank die Luftbilder sowie rasterbasierende Digitale Geländemodelle bislang nicht versionierbar. Luftbilder und DGMs können zwar geändert werden, die Änderungen wirken sich aber unmittelbar auf alle Versionen des Stadtmodells aus. Aus der Sicht der Speichereffizienz wäre die Versionierung von Rasterdaten jedoch ohnehin problematisch zu bewerten, da jede (noch so kleine) Änderung an einem Luftbild oder dem DGM das Anlegen einer Versionskopie des mehrere Gigabytes großen Objektes zur Folge hätte. 4 3D-Geodatenbank Berlin 2 Datenmodellierung 2.1 UML-Diagramm der 3D-Stadtmodellierung In diesem Abschnitt wird das 3D-Stadtmodell auf der abstrakten Ebene graphischer UMLKlassendiagramme beschrieben. Diese bilden die Grundlage für die implementierungsabhängige Realisierung des Modells mit relationalen Datenbanksystemen, die im folgenden Abschnitt 2.2 dargelegt wird. UML-Diagramme können aber auch die Basis für andere Implementierungen bilden, z.B. für die Definition eines Austauschformats basierend auf XML oder GML. Die einzelnen UML-Diagramme des 3D-Stadtmodells sind in den Abbildungen 2.1 bis 2.4 und 2.6 wiedergegeben. 2.1.1 Basisklassen Die Basisklasse aller thematischen Objekte des Stadtmodells – z.B. Gebäude, Gebäudeteile, Wände, Fenster, Orthophotos, Dreiecksnetz - ist die Klasse CityObject (vgl. Abb. 2.1). Alle diese thematischen Objekte verfügen somit über die Basisfunktionalität der Klasse CityObject, die in diesem Abschnitt beschrieben wird. Ein CityObject verfügt zunächst über Metadaten in Form einer BoundingBox, die die ungefähre Lage des Objekts durch den umschreibenden dreidimensionalen Quader angibt, wodurch das Auffinden von Objekten unterstützt wird. Die Bounding Box wird durch die ISO 19107-Klasse GM_Envelope realisiert. Weiterhin können zu einem CityObject Bezüge auf Vorkommen desselben Realweltobjekts in anderen Datenbanken oder Datenbeständen angeben werden (Fremdbezug, ExternalReference). Diese Bezüge können für Datenverknüpfungen, oder die Bereitstellung ergänzender Angaben genutzt werden. Ein Gebäude kann z.B. einen Fremdbezug zu dem entsprechenden Katasterobjekt in ALK/ALKIS haben, über den Eigentümerinformationen bezogen werden können. Ein Fremdbezug besteht aus der Angabe des fremden Systems, z.B. ALK/ALKIS oder ATKIS, und der ID des Objekts in diesem System. Fremdbezüge sind optional, ein Cityobjekt kann über mehrere Fremdbezüge verfügen. Die Attribute der Klasse CityObject dienen zur Aufnahme weiterer Metadaten. Im einzelnen sind dies: • das Datum der Erzeugung des Objekts in der Datenbank (creationDate) • das Löschdatum in der Datenbank (terminationDate) • das letzte Änderungsdatum in der Datenbank (lastModificationDate) • Angaben zur Person, die diese Änderung veranlasst hat (updatingPerson) • der Grund dieser aktuellsten Änderung (reasonForUpdate) • Angaben zur Herkunft der Daten (lineage) Bis auf das Erzeugungsdatum sind alle diese Attribute optional. 5 3D-Geodatenbank Berlin 2. Datenmodellierung Abbildung 2.1: UML-Diagramm der Basisklassen sowie der Prototypen und generischen Objekte 6 3D-Geodatenbank Berlin 2. Datenmodellierung CityObjects können nach beliebigen, benutzerdefinierten Kriterien zu Gruppen zusammengefasst werden. Eine CityObjectGroup setzt sich aus beliebig vielen CityObjects zusammen. Beispiele für die Nutzung einer CityObjectGroup wären alle Gebäude in einem bestimmten Stadtteil, oder alle Kirchen. Eine Gruppe kann einen Namen (z.B. „Kirchen in Moabit“) und einen Typ (z.B. „Sehenswürdigkeiten“) haben, sowie eine Beschreibung. Die Rolle, die ein CityObject in einer Gruppierung spielt, kann durch den Rollennamen angegeben werden. z.B. die Rolle „älteste Kirche in Moabit“ in der Gruppe „Kirchen in Moabit“. Ein konkretes CityObject kann in mehreren Gruppierungen auftauchen, und auch jeweils verschiedene Rollen haben. Das Gebäude in der Gruppe „Kirchen in Moabit“ mit der Rolle „älteste Kirche in Moabit“ kann z.B. auch in der Gruppe „Gebäude des Architekten XY“ auftreten, und dort die Rolle „weniger sehenswertes Gebäude des Architekten XY“ spielen. Da eine CityObjectGroup auch ein CityObject ist, verfügt diese über alle Eigenschaften von CityObjects, wie den Fremdbezug, die BoundingBox, oder weitere Metadaten. Insbesondere kann auch eine Gruppe wieder Teil einer Gruppe sein, so dass beliebig verschachtelte Gruppierungen möglich sind. Die Gruppen „Gebäude des Architekten XY“ und „Gebäude des Architekten ABC“ könnten z.B. zu der Gruppe „Architektonisch interessante Gebäude“ zusammengefasst werden. Anwendungsprogramme, die die Erzeugung einer Gruppe und die Einfügung von CityObjects in diese ermöglichen, müssen sicherstellen, dass dabei keine zyklischen Gruppenzugehörigkeiten entstehen. Eine Gruppe darf nicht Teil von sich selber sein, oder indirekt eine Gruppe enthalten, die die oberste Gruppe wiederum enthält. Auf Ebene des Schemas können solche zyklischen Zugehörigkeiten nicht aufgedeckt werden. 2.1.2 Geometriemodell und Texturen Die geometrische Beschreibung der Objekte des Stadtmodells basiert weitgehend auf der ISO-Norm 19107, mit einer Ergänzung. In Abb. 2.2 ist die Teilmenge der ISO 19107-Klassen dargestellt, die verwendet werden. Diese sind zum Teil hinsichtlich der gegenseitigen Durchdringungsfreiheit von Volumenkörpern und anderer topologischer Eigenschaften sehr strikt definiert; im Kontext des 3D-Stadtmodells werden diese Eigenschaften aus pragmatischen Gründen etwas flexibler gehandhabt. GM_Composite ist die allgemeinste Klasse, die dann verwendet werden kann, wenn der Typ des Raumbezugs offen gehalten werden soll. Dieser kann in diesem Fall entweder ein zusammengesetzter Volumenkörper (ISO-Klasse: GM_CompositeSolid) für volumenhafte Objekte oder eine zusammengesetzte Oberfläche (GM_CompositeSurface) für flächenhafte Objekte sein. Ist der Typ des Raumbezugs festgelegt, können direkt die Klassen GM_CompositeSolid oder GM_CompositeSurface zur Angabe der Geometrie verwendet werden. Eine GM_CompositeSurface ist eine Zusammenfassung von mehreren, aber mindestens einer GM_OrientableSurface. Im ISO-Modell dürfen sich diese einzelnen GM_OrientableSurface nur in den Rändern berühren, sie müssen aber ein zusammenhängendes Geometrieobjekt bilden. Im 3D-Stadtmodell wird diese Eigenschaft des Zusammenhangs jedoch nicht notwendigerweise gefordert. Eine GM_OrientableSurface ist eine Fläche, die im dreidimensionalen Raum beliebig positioniert ist. Im Kontext des Stadtmodells sind diese Flächen planar, d.h. alle Punkte des Randes und des Inneren der Fläche müssen in einer Ebene liegen. Es handelt sich um orientierbare Flächen. d.h. man kann eindeutig zwei Seiten, eine vordere (front) und eine hintere (back) unterscheiden. Soll eine Seite (oder beide Seiten) mit einer Textur versehen sein, so wird eine TexturedSurface verwendet. Hier kann differenziert für jede Seite (back oder front) die eigentliche Textur in Form eines Rasterbildes, die Farbe als RGB-Werte und zur Positionierung der Textur auf der Fläche die Texturkoordinaten angegeben werden. 7 3D-Geodatenbank Berlin 2. Datenmodellierung Die RGB-Werte müssen jeweils im Bereich zwischen 0 und 1 liegen. Die frontOpacity und die backOpacity1 geben jeweils für die entsprechende Seite den Grad der Transparenz an. Auch diese beiden Werte müssen im Bereich zwischen 0 und 1 liegen, wobei 1 voll deckend bedeutet und 0 vollständig transparent. Das Konzept der Texturkoordinaten ist dem Standard X3D, dem Nachfolger von VRML, entnommen. Da weder in ISO 10107 noch in GML ein geeignetes Konzept für die Texturierung verfügbar ist, musste die Klasse TexturedSurface ergänzt werden. Während GM_CompositeSurfaces zur Repräsentation flächenhafter CityObjects verwendet werden, dienen GM_CompositeSolids zur Modellierung volumenhafter Objekte wie z.B. der von Gebäuden. Ein GM_CompositeSolid ist eine Zusammenfassung von mindestens einem GM_Solid. Im ISO-Modell müssen die Inneren dieser Solids disjunkt sein, und die Zusammenfassung dieser Solids muss ein zusammenhängendes Gebilde sein. Diese strikten Eigenschaften der Durchdringungsfreiheit und des Zusammenhanges werden im 3D-Stadtmodell jedoch nicht gefordert. Ein Solid ist ein Volumen, das von einem oder mehreren GM_CompositeSurface so begrenzt wird, dass das Volumen vollständig umschlossen wird. Abbildung 2.2: UML-Diagramm der Klassen zur Repräsentation der Geometrie 1 Die front- und backOpacity müssen im UML-Diagramm noch ergänzt werden. 8 3D-Geodatenbank Berlin 2. Datenmodellierung 2.1.3 Generische Objekte und Prototypen Neben denjenigen CityObjects, die zu einer Unterklasse wie z.B. Building gehören und deren Struktur und Attribute somit festgelegt sind, können CityObjects, die nicht in ein solches Schema passen, flexibel als GenericCityElement mit beliebigen Attributen (CityObjectGenericAttribute) repräsentiert werden (vgl. Abb. 2.1). Ein GenericCityElement hat einen Namen, einen Typ und einen Klassennamen (class), der die Art des Objekts (Ampel, Baum,...) festlegt. Eine beliebige Menge von Attributen kann durch Zuordnung beliebig vieler CityObjectGenericAttribute, geerbt von CityObject, erfolgen, die jeweils einen Attributnamen haben. Der Typ des Attributs kann durch die Wahl der jeweiligen Unterklasse (StringAttribute, IntAttribute) festgelegt werden. Der Wert wird dann von dem entsprechenden value aufgenommen. Zur Repräsentation der Geometrie eines GenericCityElement gibt es prinzipiell zwei Alternativen. Zunächst kann diese wie bei den üblichen Objekten des Stadtmodells wie Gebäuden durch Verweis auf einen GM_Composite realisiert werden, die in Abschnitt 2.1.2 näher erläutert wurden. Diese Repräsentation kann für die einzelnen Detaillierungsgrade (LoD) unterschiedlich sein, weswegen die Beziehung zur Geometrie durch die Angabe der LOD-Stufe differenziert wird: lodX_GeometryProperty, mit X aus {1,2,3}. Zum anderen kann die Geometrie jedoch auch in einem ‚fremden’ Schema vorliegen, z.B. als VRML-Datei, als Shapefile oder als DXF-Datei, und für jeden Detaillierungsgrad unterschiedlich sein. In diesem Fall ist für jeden LoD das Geometrieformat im Attribut lodXNativeFormat als Mime-Type (z.B.„model/vrml“ für ein VRML-Objekt) angegeben, und die Geometrie ist im entsprechenden Format als BLOB2 über die Beziehung lodX_NativeProperty zugeordnet, für jeden LoD. Da viele Geometrieformate nicht über eine Georeferenzierung verfügen und somit in einem lokalen Bezugssystem vorliegen („Nullpunkt in der linken unteren Ecke“), kann eine Transformationsmatrix (lodXTransformationmatrix, für jeden LoD X) angegeben werden, durch die die Geometrie aus dem lokalen in das georeferenzierte System des 3D-Stadtmodells transformiert werden kann. Das Koordinatenreferenzsystem, in dem die Koordinaten nach der Transformation vorliegen, kann für jeden LoD X in dem Attribut lodX_SRS3 abgelegt werden, unter Nutzung der entsprechenden Spezifikation ISO 19111 für solche Systeme. CityObjects wie generische Objekte oder Gebäude haben i. d. R. eine eigene, georeferenzierte Geometrie, die individuell die absolute Lage des Objekts im Raum beschreibt. Oft müssen jedoch eine Vielzahl gleichförmiger identischer Objekte repräsentiert werden, die sich nicht durch Ihre Gestalt, sondern nur durch die Lage unterscheiden. Beispiele hierzu sind Ausschmückungen wie Bäume oder Parkbänke, aber auch Gebäude einer gleichförmigen Siedlung. Hier wäre es ineffizient, für jedes Objekt die unter Umständen sehr umfangreiche und komplexe Geometrie individuell abzulegen. Stattdessen kann hier das Konzept des Prototypen genutzt werden, bei dem die Geometrie nur einmal für die ganze Klasse von Objekten, z.B. für die Klasse „Eiche“, abgelegt, wird (vgl. Abb. 2.1). Diese Klasse wird durch Objekte Prototyp repräsentiert, der Klassenname ergibt sich aus dem Attribut class. Jedes individuelle Objekt wird nun durch ein PrototypeCityElement repräsentiert, das einen Verweis auf seine „Klasse“, differenziert nach LoD durch die Beziehung lodX_property, hat. Das individuelle Objekt hat keine eigene Geometrie, sondern bezieht diese von seinem Prototypen, so dass diese durch Angabe einer Transformationsmatrix – differenziert nach LoD - in die tatsächliche Lage des Objekts transformiert werden kann. Auch hier gibt das Attribut lodX_SRS4 für jeden LoD X das Koordinatenreferenzsystem nach der Transformation an. Die Geometrie des Prototypen kann entweder im üblichen Stadtmodell-Format vorliegen (geometry_Property), 2 Ein BLOB (Binary Large Object) ist ein Datentyp, der binäre Daten jedes Typs aufnehmen kann. Diese Attribute müssen im UML-Diagramm noch ergänzt werden. 4 Diese Attribute müssen im UML-Diagramm noch ergänzt werden. 3 9 3D-Geodatenbank Berlin 2. Datenmodellierung oder in einem Fremdsystem. Im letzteren Fall ist sie als BLOB repräsentiert (nativeProperty), und der Typ der Geometrie ergibt sich aus dem Attribut nativeFormat (Mime-Typ) des Prototypen. Die Attributwerte der individuellen Objekte werden durch die von CityObject geerbten CityObjectGenericAttribute repräsentiert. Das Konzept der CityObjectGenericAttribute kann auch dazu genutzt werden, spezifische Unterklassen von CityObject wie z.B. Building flexibel – insbesondere zur Laufzeit des Systems – um Attribute zu ergänzen, die im entsprechenden Schema nicht vorgesehen sind. 2.1.4 Gebäudemodell Im Zentrum des Gebäudemodells (vgl. Abb. 2.3) steht die Klasse AbstractBuilding, die zur Repräsentation eines Gebäudes dient. AbstractBuilding ist eine abstrakte Unterklasse von CityObject und erbt somit deren Eigenschaften und Metadaten (vgl. Abschnitt 2.1.1). Die Geometrie eines AbstractBuilding wird durch die Beziehungen zu der Klasse GM_Composite realisiert. Es ist für jeden der drei Detailierungsgrade LoD1 bis LoD3 eine eigene Geometrierepräsentation vorgesehen, realisiert durch die Beziehungen lod1GeometryProperty, .., lod3GeometryProperty. Dasselbe Gebäude kann somit zugleich mehrere räumliche Repräsentationen in verschiedenen Detaillierungsstufen haben. Im LoD1 ist die räumlich Repräsentation durch einen GM_Solid repräsentiert, während in den LoD2 und 3 neben der Verwendung von GM_Solids auch die Modellierung flächenhafter Bestandteile wie Dachüberstände durch GM_Surfaces möglich ist. Als Attribute eines AbstractBuilding sind der Name, die Funktion (z.B. Wohnhaus, Kirche),das Baujahr, die Dachform als Aufzählungstyp (z.B. 1 = Flachdach, 2= Satteldach,...), die gemessene Höhe, und die Anzahlen der ober- bzw. unterirdischen Stockwerke vorgesehen. Einem Gebäude können mehrere Adressen zugeordnet sein. Das Gebäudemodell erlaubt sowohl die Repräsentation einfacher Gebäude, die nur aus einem Teil bestehen, als auch die von komplexen Bestandteilsbeziehungen zwischen Gebäudeteilen, z.B. eines Gebäudes, das aus drei Teilen – einem Haupthaus, einer Garage und einem Anbau – besteht. Die Teile können wiederum aus Teilen bestehen usw. Diese Modellierungen werden durch die Unterklassen Building und BuildingPart von AbstractBuilding ermöglicht. Im Fall eines einfachen, einteiligen Hauses liegt nur ein Building vor, dass alle Attribute und Beziehungen von AbstractBuilding erbt. Ein solches Building kann aber als Bestandteile auch BuildingParts haben, die ebenfalls alle Eigenschaften von AbstractBuilding erben. Insbesondere können die BuildingParts wiederum BuildingParts als Bestandteile haben, durch die Vererbung der Aggregationsbeziehung. Somit ergibt sich eine baumartige Hierarchie, an deren Wurzel ein Building steht, und deren Nichtwurzelknoten BuildingParts sind. Die Attributwerte sind in der Regel in der unteren Hierarchieebene belegt, da durchaus jedes Teil ein eigenes Baujahr und eine eigene Funktion haben kann. Die Funktion kann aber ebenfalls auch in der Wurzel der Hierarchie definiert sein und gilt somit für das ganze Gebäude. Die einzelnen BuildingParts innerhalb eines Building dürfen sich gegenseitig nicht durchdringen, und müssen ein zusammenhängendes Objekt bilden. Buildings können zu einem Gebäudekomplex (BuildingGroup) zusammengefasst werden, der als Attribute einen Namen und eine Funktion hat. Genau ein Gebäude des Komplexes kann als Hauptgebäude ausgezeichnet sein. Bestandteile von Gebäuden, die nicht die Bedeutung eines Gebäudeteils haben, werden als Gebäudecharakteristik (BuildingCharacteristic) modelliert, z.B. Balkone, Fahrstuhlaufbauten auf Dächern oder Dachgauben. Diese kommen erst in den LoD 2 und 3 vor und haben dort eine eigene Geometrie, realisiert als GM_Composite. Die Gebäudecharakteristik ist durch eine Aggregationsbeziehung (outerCharacteristic) mit dem zugehörigen Gebäude verknüpft. 10 3D-Geodatenbank Berlin 2. Datenmodellierung Abbildung 2.3: UML-Diagramm des Gebäudemodells 11 3D-Geodatenbank Berlin 2. Datenmodellierung Sowohl Gebäudekomplexe als auch Gebäudecharakteristiken sind CityObjects und erben somit alle deren Eigenschaften, einschließlich der Fremddatenbeziehung. In den LoD 2 und 3 können die Begrenzungsflächen von Gebäuden als eigenständige thematische Objekte modelliert werden. Dazu werden die Unterklassen der Klasse BoundarySurface – Wand-, Boden- und Dachflächen – verwendet. Abschlussflächen (ClosureSurface) können genutzt werden, um offene Gebäude wie z.B. Hangars abzuschließen und so z.B. Volumenberechnungen zu ermöglichen. Alle thematischen Begrenzungsflächen haben eine eigene Geometrie, repräsentiert durch flächenhafte GM_Composites. Geometrisch sind diese Flächen auch in der Begrenzung der Solids vertreten, die das entsprechende übergeordnete thematische Objekt, i.d.R ein Gebäude, repräsentieren. Diese geometrischen Flächen müssen redundanzfrei abgelegt sein, d.h. eine solche GM_Composite muss sowohl Teil der Geometrie des Gebäudes sein als auch zugleich die thematische Begrenzungsfläche repräsentieren. Im LoD3 kommen Öffnungen (Opening) wie Türen oder Fenster als spezielle Begrenzungsflächen hinzu. Diese sind mit der sie enthaltenen Begrenzungsfläche (Wand oder Dach) durch die Beziehung openingProperty verknüpft. Eine Öffnung, die eine Türe ist, kann mit der entsprechenden Adresse verknüpft sein (Relation addressProperty). Eine Adresse mit den üblichen Attributen (Straßenname, Hausnummer, Postleitzahl, Stadtname) wird durch die Klasse Address repräsentiert und kann einem Gebäude oder einer Tür zugeordnet werden. 2.1.5 Digitales Geländemodell Das Stadtmodell verfügt über ein sehr flexibles Digitales Geländemodell (DGM), das die Kombination heterogener, in verschiedenen Detaillierungsgraden vorliegender DGM-Typen (Raster, TIN, Bruchkanten, Massenpunkte) erlaubt. Ein zu einem bestimmten Stadtmodell passendes DGM wird durch ein Objekt Relief repräsentiert. Dieses ist ein CityObject und hat als Attribut einen Namen und die LOD-Stufe, zu der das DGM passt (LODGroup). Ein Relief besteht aus mehreren ReliefComponent, wobei jeder dieser Komponenten, die ebenfalls CityObjects sind, einen Namen und die LoD-Stufe beinhaltet. Die einzelnen geometrischen Ausprägungen der Komponenten werden durch die vier Unterklassen von ReliefComponent definiert: Bruchkanten, Dreiecksvermaschungen (TIN), Raster, und Massenpunkte. Geometrisch sind diese Ausprägungen durch entsprechende ISO 19107 bzw. GML-Klassen definiert: Bruchkanten durch einzelne GM_LineStrings, TINs durch GM_Triangle, und Massenpunkte durch GM_Point. Ein Relief kann durchaus ReliefComponents mit heterogenem Typ und auch verschiedenen LoDs beinhalten. Ein Relief im LoD2 kann z.B. einige LoD3-TIN-ReliefComponents neben einer LoD2-Raster-ReliefComponent enthalten. Gegebenenfalls kann in einigen Bereichen auch nur ein LoD1-Raster im Relief vorhanden sein. Wenn dieses Relief zu einem LoD2Stadtmodell passt, wird der Wert des Attributs LoDGroup des Gesamtreliefs auf 2 gesetzt. Ein Raster ist durch die GML3-Klasse RectifiedGridCoverage definiert, die auch die Repräsentation nicht achsenparalleler Raster ermöglicht. Bei der Verwaltung von Rastern ist eine Besonderheit zu beachten, die sich aus der Zweistufigkeit des Importvorganges ergibt. Dabei werden zunächst einzelne, kleinere Rasterkacheln importiert, die dann in einem zweiten Schritt zu einem Gesamtraster kombiniert werden. Um zwischenzeitlich diese kleineren Raster (Tiles) abzulegen, dient die Beziehung importetRasterTiles zwischen Raster und RectifiedGridCoverage. Das im zweiten Importschritt erzeugte Gesamtraster wird dann als RectifiedGridCoverage angelegt, das über die Beziehung rasterProperty verknüpft ist. Um die einzelnen Komponenten eines Raster, die in verschiedenen LoD vorliegen können, geometrisch voneinander abzugrenzen, dient das Gültigkeitspolygon einer Komponente (ex12 3D-Geodatenbank Berlin 2. Datenmodellierung tent). Dieses legt den Bereich fest, in dem die Komponente gültig ist. Abb. 2.5 zeigt als Beispiel ein Raster mit drei Komponenten: einem groben Raster und zwei darin liegenden hochaufgelösten TINS (TIN 1 und 2). Das Gültigkeitspolygon des Rasters ist blau skizziert, während die Gültigkeitspolygone der TINs grün und rot umrandet sind. Das Gültigkeitspolygon des Rasters hat hier zwei Löcher bzw. Aussparungen, in denen zwar auch das Raster vorhanden ist, es aber nicht gültig ist und stattdessen die höher aufgelösten TINs zur Repräsentation des Geländes verwendet werden. Die beiden Gültigkeitspolygone der TINs liegen dabei exakt in den beiden Löchern des Gültigkeitspolygon des Rasters. Im einfachsten und auch häufigsten Fall entspricht das Gültigkeitspolygon eines Rasters exakt seiner Bounding Box, also der räumlichen Ausdehnung des Rasters. Abbildung 2.4: UML-Diagramm des DGM 13 3D-Geodatenbank Berlin 2. Datenmodellierung Raster TIN 1 TIN 2 Abbildung 2.5: Ein Relief, bestehend aus drei Komponenten, mit ihren Gültigkeitspolygonen (blau für das Raster, und rot bzw. grün für die TIN-Komponenten. 2.1.6 Orthophotos Orthophotos werden im 3D Stadtmodell durch ähnliche Konzepte modelliert, wie sie auch für die Repräsentation von Rastern in DGMs (vg. Abschnitt 2.1.5) Verwendung finden. Das UML-Diagramm für Orthophotos ist in Abb. 2.6 dargestellt. Ein Objekt der Klasse Orthophoto ist ein CityObject, hat eine LoD-Stufe, ein Befliegungsdatum und einen Namen. Realisiert wird ein Orthophoto durch die GML-Klasse RectifiedGridCoverage, die auch die Speicherung nicht achsenparalleler Photos ermöglicht. Aus Gründen des Imports ist hier die Speicherung mehrerer kleiner Orthophotos (Tiles) erforderlich, analog zu der Vorgehensweise bei DGM-Rastern (vgl. Abschnitt 2.1.5). Abbildung 2.6: UML-Diagramm der Klassen zur Repräsentation von Orthophotos 14 3D-Geodatenbank Berlin 2.2 2. Datenmodellierung Relationales Datenbankschema 2.2.1 Abbildungsregeln, Schemakonventionen 2.2.1.1 Abbildung der Klassen auf Tabellen In der Regel wird jede Klasse des UML-Diagramms auf genau eine Tabelle abgebildet; der Tabellenname ist identisch zu dem Klassennamen (führende Unterstriche für abstrakte Klassen werden weggelassen). Die skalaren Attribute der Klassen werden zu Spalten der entsprechenden Tabelle mit identischem Namen. Die Typen der Attribute werden an OracleDatentypen angepasst. Die Ausnahmen von der Regel, jede Klasse auf eine Tabelle abzubilden, sind: • Die Klasse FT_Feature wird mit der Klasse CityObject zur Tabelle CITYOBJECT verschmolzen. • Die Klasse FT_FeatureCollection und die Klasse CityModel fallen weg, da zurzeit nur ein einziges 3D-Stadtmodell in der 3D-Geo-DB repräsentiert werden muss und deshalb die Gruppierung zur FeatureCollection entfallen kann. • Die Geometrieklassen der ISO 19107/19123 werden zu Attributen des Datentyps SDO_GEOMETRY oder SDO_GEORASTER. • Die Klasse ReliefComponent wird mit den Klasse BreaklineLines, TIN, Raster und MassPoints verschmolzen und als Tabellen BREAKLINE_RELIEF, TIN_RELIEF, RASTER_RELIEF und MASSPOINT_RELIEF dargestellt. • Die Klasse BLOB wird zum Attribut des Datentyps Blob. • Die Klasse GM_Composite wird mit allen Unterklassen auf die Tabelle SURFACE_GEOMETRY abgebildet. • Die Klasse CityObjectGenericAttrib wird mit allen Datentypenunterklassen in der Tabelle CITYOBJECT_GENERICATTRIB zusammengefasst. • Die Klassen Abstractbuilding, Building und BuildingPart werden auf die Tabelle BUILDING abgebildet. • Die Klassen BoundarySurface und Unterklassen ClosingSurface, FloorSurface, WallSurface und RoofSurface werden auf die Tabellen THEMATIC_SURFACE und THEMATIC_SURFACE_GEOMETRY abgebildet. 2.2.1.2 Abbildung der Ober- Unterklassenbeziehung Bei der Umsetzung der Vererbung wird für jede Klasse eine Tabelle gebildet mit den unter Abschnitt 1 aufgeführten Ausnahmen. Jede Tabelle hat als Primärschlüssel ein Attribut mit dem Namen ID. Der Name des Primärschlüssel-Constraints ist der Tabellenname, gefolgt von „_PK“. Das ID-Attribut der Unterklassetabelle wird als Fremdschlüssel auf das ID-Attribut der Oberklassetabelle definiert. Diese Fremdschlüsselbeziehung wird nach dem Schema benannt: • GEN_<SUBOBJECT_ID>_<OBJEKT_ID>_< laufende Nummer > 15 3D-Geodatenbank Berlin 2. Datenmodellierung SUBOBJECT_ID ist der Primärschlüssel der Unterklassentabelle und OBJECT_ID ist der Primärschlüssel der Oberklassentabelle. Die laufende Nummer dient dazu, den Fremdschlüsselnamen global eindeutig zu machen. 2.2.1.3 Abbildung der Aggregation Zur Abbildung der Aggregation wird in der Teileklassentabelle ein Attribut definiert, das als Fremdschlüssel auf den Primärschlüssel der Aggregatklassentabelle dient. Diese Fremdschlüsselbeziehung wird nach dem Schema benannt: • AGG_<FREMDSCHLÜSSEL_TEILEKLASSE>_ <PRIMÄRSCHLÜSSEL_AGGREGATKLASSE>_< laufende Nummer > FREMDSCHLÜSSEL_TEILEKLASSE ist das Attribut in der Teileklassentabelle, das als Fremdschlüssel auf den Primärschlüssel der Aggregattabelle (PRIMÄRSCHLÜSSEL_AGGREGATKLASSE) dient. Die laufende Nummer dient dazu, den Fremdschlüsselnamen global eindeutig zu machen. 2.2.1.4 Abbildung allgemeiner Relationen Zur Abbildung allgemeiner 1:n Relationen wird in der n-seitigen Tabelle ein Attribut definiert, das als Fremdschlüssel auf den Primärschlüssel der 1-seitigen Tabelle dient. Diese Fremdschlüsselbeziehung wird nach dem Schema benannt: • REL_<FREMDSCHLÜSSEL_n-seitig>_ <PRIMÄRSCHLÜSSEL_1-seitig>_< laufende Nummer> Die laufende Nummer dient dazu, den Fremdschlüsselnamen global eindeutig zu machen. Ggf. kann die laufende Nummer weggelassen werden. 2.2.1.5 Explizite Angabe der Klassenzugehörigkeit In der (Meta-)Tabelle OBJECTCLASS werden alle Klassennamen (Attribut CLASSNAME) des Schemas verwaltet. Die Relation von der Unter- zur Oberklasse wird als Attribut SUPERCLASS_ID in der Unterklasse als Fremdschlüssel auf die ID der Oberklasse repräsentiert. Die Tabelle OBJECTCLASS wird genutzt, um in den Oberklassentabellen die Zugehörigkeit zu einer Klasse effizient ermitteln zu können. Dazu gibt es in den Tabellen CITYOBJECT und RELIEFCOMPONENT ein Attribut CLASS_ID, das auf die entsprechende Tabelle OBJECTCLASS verweist. Dadurch kann bei Betrachten eines Tupels z.B. in CITYOBJECT unmittelbar die Unterklasse und – falls benötigt – der Klassenname ermittelt werden. Wenn z.B. eine Reliefkomponente mit der ID 375 dargestellt werden soll, müsste in jeder der vier Tabellen BREAKLINE_RELIEF, TIN_RELIEF, MASSPOINT_RELIEF und RASTER_RELIEF nachgesehen werden, ob die ID dort vorhanden ist. Mit der Information über die Klassenzugehörigkeit in der Tabelle RELIEFCOMPONENT kann gezielt in der „richtigen“ der vier Tabelle gesucht werden. Die Information über die Klassenzugehörigkeit ist nicht nur in der höchsten Oberklasse CITYOBJECT vorhanden, sondern in den unteren Oberklassen (Z.B. RELIEFCOMPONENT). Dadurch kann ein Zugriff auf die Tabelle CITYOBJECT, in der alle Objekte der Datenbank repräsentiert sind, vermieden werden. 16 3D-Geodatenbank Berlin 2. Datenmodellierung 2.2.1.6 Einschränkung der Wertebereiche von Attributen Attribute mit eingeschränktem Wertebereich, z.B. LOD, die ganzzahlige Werte zwischen 1 und 3 annehmen können, können durch Constraints der Form: • <Attributname>_CHK_< laufende Nummer> definiert werden, gefolgt von der Definition des Wertebereichs. 2.2.1.7 Sequenzen für die automatische Iteration der IDs Um die automatische Generierung der Zahlenreihen für die Vergabe der eindeutigen IDs zu ermöglichen, werden Oracle-Sequenzen mit dem Startwert und dem Iterationsschritt gleich 1 angelegt. Der Höchstwert einer ORACLE Sequenz entspricht der größten 28-stelligen Zahl. Die Benennung wird wie folgt realisiert: • <Tabellenname>_SEQ Für alle Klassen die von CITYOBJECT abgeleitet sind, werden keine eigenen Sequenzen erstellt, da diese IDs den Cityobject-IDs entsprechen. Den Zugriff auf die Sequenz ermöglichen die Methoden nextval und currval. 2.2.2 Rasterdatenverwaltung mit Oracle 10g Spatial Oracle 10g verwaltet Rasterdaten nicht unmittelbar in den Tabellen, in denen ein Feld vom Typ MDSYS.SDO_GEORASTER angelegt wurde. Statt dessen werden sogenannte RASTERDATATABLE (RDT) verwendet, die ein von Oracle vordefiniertes Schema aufweisen müssen. Aus Gründen der Übersichtlichkeit verfügt jede Tabelle, die ein Feld vom Typ MDSYS.SDO_GEORASTER aufweist, über eine eigene RDT. Hierbei wurde die Konvention angewendet, dass die einer Tabelle zugeordnete RDT den selben Namen plus das Postfix ‚RDT’ erhält (z.B.: ORTHOPHOTO Æ ORTHOPHOTO_RDT). Aufgrund der Größe des abzudeckenden Raums (Berlin) liegen die Rasterdaten nicht in einer einzigen großen TIFF-Datei sondern gekachelt in mehreren Dateien vor. Werden diese importiert, liegt jede Kachel als eigenes Rasterobjekt vor. Diese können bei Anfragen nur getrennt behandelt werden. Soll z.B. ein Reliefausschnitt abgefragt werden, der sich über mehrere Kacheln erstreckt, ist es zunächst nicht möglich, diesen als ein Objekt abzufragen; für jede tangierte Kachel liefert die Oracle-Datenbank ein eigenes Rasterobjekt bzw. Bild zurück! Insbesondere bei der Abfrage größerer Raumausschnitte, bei denen u.U. mehrere hundert oder tausend Kacheln betroffen sind, ist dies jedoch inakzeptabel. Um dennoch eine gemeinsame Abfrage auf den gesamten Raum mit der Rückgabe nur eines Objekts zu ermöglichen, bietet das Georaster-Modul von Oracle 10g die Möglichkeit, über die Funktion sdo_geor.mosaic(..) aus den in einer Tabelle vorhandenen Kacheln ein einziges, großes GeoRaster zu erzeugen, das seinerseits in einer Tabelle abgelegt wird. Die Identifikation der Ursprungskacheln geht dabei verloren. Aufgrund der Größe der Ausgangsdaten ist diese Operation sehr aufwändig in Bezug auf Speicherbedarf und Rechenzeit und kann daher nicht bei jeder Aktualisierung einzelner Kacheln durchgeführt werden. Die Verwendung eines Triggers zur automatischen Neuberechnung des Gesamtrasters scheidet daher aus. Betrachtet man die zu verwaltenden Rasterobjekte genauer, so ist davon auszugehen, dass es nur eine beschränkte Anzahl von Instanzen geben wird, deren Metadaten (Attribute) sich zudem eher selten ändern. Daher wurden neben den Tabellen RASTER_RELIEF und ORTHOPHOTO jeweils eine weitere Tabelle angelegt, in die zunächst alle vorhandenen Kacheln importiert werden. Updates auf einzelne Kacheln werden ebenfalls auf diese Tabelle(n) ausgeführt. Der verantwortliche Administrator entscheidet, wann er über die mosaic-Funktion das eigentliche Relief in der Tabelle RASTER_RELIEF bzw. ORTHOPHOTO aktualisiert. 17 3D-Geodatenbank Berlin 2. Datenmodellierung Die Verwendung von Importtabellen und der mosaic-Funktion bringt einige grundsätzliche Implikationen mit sich, die es bei der Anwendungsentwicklung zu beachten gilt: • Im erzeugten Gesamtraster sind die ursprünglichen Kacheln nicht mehr identifizierbar. • Aktualisierungen des Gesamtrasters unmittelbar nach dem Einspielen einzelner Kacheln sind defacto ausgeschlossen. • Die von CITYOBJECT geerbten Datumsfelder haben für die Gesamtraster nur eine begrenzte Aussagekraft. • Die zusammenzufassenden Kacheln müssen geschlossen sein; es darf keine Lücken zwischen zwei benachbarten Kacheln geben. • Sie müssen vollständig sein; der abgebildete Raumausschnitt muss vollständig mit Kacheln besetzt sein (ggf. durch leere Dummy-Kacheln). • Die einzelnen Kacheln dürfen sich nicht überlappen. • Alle Kacheln müssen die selbe räumliche Auflösung haben (kann ggf. manuell über die scale(..)-Funktion erreicht werden). Nach dem Import bzw. dem Zusammenfassen von Rasterdaten über die Oracle-mosaicFunktion liegen diese als ein großes Objekt in der Datenbank mit einer homogenen räumlichen Auflösung vor. Dies erschwert den Export der Daten in einer anderen als der Originalauflösung (z.B. beim Erzeugen von Übersichtskarten). Daher sieht das GeoRaster-Modul von Oracle 10g vor, dass Raster über eine Pyramidenstruktur in unterschiedlichen Auflösungen vorgehalten werden können. Diese wird unmittelbar nach dem Import bzw. Update einer Instanz von RASTER_RELIEF bzw. ORTHOPHOTO erstellt. Oracle bietet hierzu verschiedene Verfahren der Interpolationen der Rasterzellen an. Die Wahl des anzuwendenden Verfahrens dürfte im wesentlichen von der Performanz und den zu erwartenden Artefakten abhängen. Als Standardverfahren verwenden die bereitgestellten Importmethoden eine bikubische Interpolation (höchstmögliche optische Qualität; relativ langsam)5. Jedes Rasterobjekt kann in der 3D-Geodatenbank in drei verschiedenen Levels of Detail vorgehalten werden. Zur Kennzeichnung dient das Feld LOD in den Tabellen ORTHOPHOTO und RASTER_RELIEF. Nicht jeder LOD muss dabei besetzt sein. Unabhängig davon können Rasterdaten für jeden LOD in verschiedenen räumlichen Auflösungsstufen angefragt werden. Die genaue Struktur der Tabellen zur Rasterdatenverwaltung wird in Abschnitt 2.2.3.6 ausführlich dargestellt. 2.2.3 Datenbankschema Im folgenden Abschnitt werden die Tabellen des relationalen Schemas im Detail beschrieben. Graphisch ist das Schema in den Abbildungen 2.7 – 2.13 dargestellt. Die Beschreibung baut auf den Ausführungen zu den UML-Diagrammen in 2.1 auf und verweist darauf, soweit das Schema identisch die UML-Modellierung abbildet. Nur wenn sich durch die Umsetzung in Tabellenform Änderungen der Modellierung ergeben, werden diese im folgenden näher dargelegt. 2.2.3.1 Tabellen für Basisklassen Die Tabellen für die Basisklassen sind in Abbildung 2.7 wiedergegeben. 5 Bei einem Relief, das sich u.a. durch schroffe Kanten auszeichnet, führt die Verwendung des NearestNeighbor (NN) Verfahrens ggf. zu einer räumlichen Verschiebung oder u.U. auch zu einer Eliminierung derartiger Kanten. Die Verwendung einer (bi)kubischen Interpolation (CUBIC) glättet dagegen vorhandene Kanten. 18 3D-Geodatenbank Berlin 2. Datenmodellierung Abbildung 2.7: Tabellen zur Realisierung der Basisklassen 19 3D-Geodatenbank Berlin 2. Datenmodellierung CITYOBJECT, CITYOBJECT_SEQ CityObjects werden durch Einträge in der Tabelle CITYOBJECT repräsentiert. Die Felder sind identisch zu den Attributen der entsprechenden UML-Klasse. Die BoundingBox (Envelope) wird durch ein Feld mit Typ SDO_GEOMETRY realisiert, das ein achsenparalleles 2DPolygon (SDO_GTYPE = 2003, SDO_ETYPE = 1003 und SDO_INTERPRETATION = 3) enthält6. Neu ist hier nur ein Feld CLASS_ID, das dazu dient, Informationen über die Klassenzugehörigkeit des CityObject effizient verfügbar zu machen, und so sofort auf die richtige Tabelle für die Unterklasse zugreifen zu können. Die nächste freie ID für die Tabelle CITYOBJECT wird durch die Sequenz CITYOBJ_SEQ bereitgestellt. OBJECTCLASS Der Fremdschlüssel CLASS_ID der Tabelle CITYOBJECT verweist auf den Schlüssel in der Tabelle OBJECTCLASS, die für jede Unterklasse von CityObject im UML-Diagramm einen Eintrag mit dem Klassennamen enthält. Die Oberklassenbeziehung wird durch das Feld SUPERCLASS_ID realisiert, das auf die eindeutige Oberklasse – falls vorhanden – verweist. Die Klasse CityObject hat die ID 0. EXTERNALREFERENCE, EXTERNALREF_SEQ Die Tabelle EXTERNALREFERENCE setzt das Fremdbezugssystem um; dabei verweist der Fremdschlüssel CITYOBJECT_ID auf das zugehörige CityObject. Die Sequenz EXTERNALREF_SEQ stellt die nächste freie ID für EXTERNALREFERENCE bereit. CITYOBJECT_GENERICATTRIB, CITYOBJECT_GENERICATT_SEQ Die Tabelle CITYOBJECT_GENERICATTRIB dient, wie in 2.1.3 beschrieben, zur Repräsentation des generischen Attributskonzepts. Es wurde jedoch auf die Erstellung einer Tabelle je Attributtyp verzichtet; stattdessen werden alle Typen durch eine einzige Tabelle CITYOBJECT_GENERICATTRIB repräsentiert, wobei die Typen durch die Werte des Attributs DATATYPE differenziert werden. Diese Tabelle sieht für jeden Datentyp ein Feld vor. Es ist nur jeweils ein Feld belegt; Informationen über den Datentyp enthält das Feld DATATYPE, dessen Inhalt die in der folgenden Tabelle dargelegte Bedeutung hat: DATATYPE 1 2 3 4 5 6 7 Attributtyp STRING INTEGER REAL DATE BLOB Oracle-Geometrie (SDO_GEOMETRY) Geometrie durch Flächen in der Tabelle SURFACE_GEOMETRY Die Beziehung des generischen Attributs zu seinem CityObject ergibt sich aus dem Fremdschlüssel CITYOBJECT_ID (REL_CITYOBJ_ID_ID_1). Die nächste freie ID für die Tabelle CITYOBJECT_GENERICATTRIB wird durch die Sequenz CITYOBJECT_GENERICATT_SEQ bereitgestellt. 6 Langfristig sollte hier über die Verwendung dreidimensionaler BoundingVolumes nachgedacht werden. 20 3D-Geodatenbank Berlin 2. Datenmodellierung IMPORT_PROCEDURES In der Tabelle IMPORT_PROCEDURES sind die Namen der zum Datenimport bereitgestellten Prozeduren abgelegt. Diese können durch Eintrag des Namens in diese Tabelle registriert werden und stehen dann in dem Werkzeug zum Datenimport zur Auswahl bereit, um z.B. je nach Art des importieren Shapefiles die erforderlichen Datenbankoperationen zum Füllen der Tabellen auszuführen. 2.2.3.2 Objektgruppen CITYOBJECTGROUP, GROUPTOCITYOBJECT Das in Abschnitt 2.1.2. beschriebene Gruppierungskonzept wird durch die Tabellen in Abb. 2.8 umgesetzt. Die Unterklassenbeziehung zwischen der Gruppe (Tabelle CITYOBJECTGROUP) und CityObject wird durch die Relation GEN_ID_ID_12 realisiert. Da es sich bei der Beziehung zwischen CityObjects und Gruppen um eine m:n-Beziehung handelt, wurde die Tabelle GROUPTOCITYOBJECT eingeführt, die die IDs beider Tabellen zuordnet. Abbildung 2.8: Tabellen zur Realisierung von Objektgruppen 21 3D-Geodatenbank Berlin 2. Datenmodellierung 2.2.3.3 Tabellen zur Repräsentation der Geometrie Die Repräsentation der Geometrie im DB-Schema (Abb. 2.7) unterscheidet sich wesentlich von der im UML-Diagramm, bietet jedoch dieselbe Funktionalität. SURFACE_GEOMETRY, SURFACE_GEOM_SEQ Im DB-Schema besteht die Geometrie zunächst aus planaren Flächen, die jeweils einem Eintrag in der Tabelle SURFACE_GEOMETRY entsprechen. Die Geometrie wird in dem Feld GEOMETRY als SDO_GEOMETRY (jeweils ein planares Polygon, ggf. mit Aussparungen) abgelegt. Jede Fläche kann Texturen oder eine Farbe, jeweils auf beiden Seiten, haben. Für die Beschreibung dieser Attribute wird auf die der Klasse TexturedSurface im UMLDiagramm verwiesen. Die SDO_GEOMETRY im Feld GEOMETRY der Tabelle SURFACE_GEOMETRY wird wie folgt eingeschränkt: o der SDO_GTYPE muss den Typ Polygon haben, d.h. ein 3D-Polygon (SDO_GTYPE = 3003), und o der SDO_ETYPE muss 1003/2003 mit SDO_INTERPRETATION = 1 sein (d.h. Polygon mit 3D-Koordinaten im Umring, begrenzt durch gerade Liniensegmente, ggf. mit Löchern). o es kann auch ein Rechteck vorliegen (SDO_ETYPE=1003/2003, mit SDO_INTERPRETATION = 3), repräsentiert durch zwei Eckpunkte. Flächen können zusammengefasst werden, um entweder einen Komplex aus Flächen oder die Begrenzung eines Volumenkörpers zu bilden. Die Zusammenfassung mehrerer Flächen, z.B. F1 bis Fn, wird so umgesetzt, dass ein neues Flächentupel Fn+1 erzeugt wird, dem keine Geometrie zugeordnet ist. Bei den Flächen F1 bis Fn verweist nun die PARENT_ID auf die ID von Fn+1. Dieser Baum mit Wurzel Fn+1 repräsentiert nun die Zusammenfassung der Flächen, d.h. eine CompositeSurface. Diese kann entweder geschlossen, sein, d.h. die Begrenzung eines Solid bilden. In diesem Fall ist der Wert des Feldes IS_SOLID in der Wurzel gleich 1. Andernfalls ist er 0. Zusammengefasste Flächen können wiederum mit anderen (zusammengesetzten) Flächen gruppiert werden, durch Erzeugen eines gemeinsamen Parent. So können beliebige Aggregationen von Flächen, CompositeSurfaces, Solids, CompositeSolids flexibel gebildet werden. Die nächste freie ID für die Tabelle SURFACE_GEOMETRY wird durch die Sequenz SURFACE_GEOM_SEQ bereitgestellt. Beispiel: Die Geometrie in der Abbildung, bestehend aus sieben Flächen, die ein Volumen begrenzen, ist durch die folgenden Tabellenzeilen repräsentiert: 6 5 7 2 4 3 1 Abbildung 2.9: Sieben Surfaces, die ein geschlossenes Volumen bilden. 22 3D-Geodatenbank Berlin SURFACE_GEOMETRY ID PARENT_ID GEOMETRY ... ... ... 8 NULL NULL 1 8 Geometrie der Fläche 1 2 8 Geometrie der Fläche 2 3 8 Geometrie der Fläche 3 4 8 Geometrie der Fläche 4 5 8 Geometrie der Fläche 5 6 8 Geometrie der Fläche 6 7 8 Geometrie der Fläche 7 .... .... ....... 2. Datenmodellierung IS_SOLID ... 1 0 0 0 0 0 0 0 ...... ...... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... Das thematische Objekt (z.B. Building), das durch diese Geometrie repräsentiert wird, würde dies durch einen Verweis auf die ID 8 zum Ausdruck bringen. Sollen dagegen nur die beiden Dachflächen als CompositeSurface repräsentiert werden, ergeben sich die folgenden Tupel: SURFACE_GEOMETRY ID PARENT_ID GEOMETRY ... ... ... 12 NULL NULL 6 12 Geometrie der Fläche 6 7 12 Geometrie der Fläche 7 .... .... ....... IS_SOLID ... 0 0 0 ...... ...... ....... ....... ....... ....... ......s Hier würde das thematische Objekt (Dachfläche), das durch diese Geometrie repräsentiert wird, auf die ID 12 verweisen. 2.2.3.4 Tabellen für generische Objekte und Prototypen Die generischen Objekte und Prototypen, die auf UML-Ebene in Abschnitt 2.1.1 beschrieben wurden, sind durch die Tabellen in Abbildung 2.10 umgesetzt. PROTOTYPECITYELEMENT, PROTOTYPE, PROTOTYPE_SEQ Das PrototypeCityElement wird durch die Tabelle PROTOTYPECITYELEMENT realisiert, wobei die Unterklassenbeziehung zu CityObject durch die gemeinsame ID (Relation GEN_ID_ID_9) realisiert ist. Die Beziehung zu den zugehörigen Prototypen in jedem LoD werden durch die Fremdschlüssel LOD1_PROTOTYPE_ID bis LOD3_PROTOTYPE_ID dargestellt. Die Klasse Prototyp entspricht der Tabelle PROTOTYPE, die Attribute bzw. Felder sind identisch. Die Geometrie eines Prototypen ergibt sich aus dem Fremdschlüssel SURFACE_ID, der auf die ID der Wurzel – des obersten Elements – eines Flächen/Volumenaggregats verweist (vgl. Abschnitt 2.2.3). Alternativ kann die SURFACE_ID gleich NULL sein, wenn stattdessen die Geometrie in einem nativen Format gegeben ist (vgl. Abschnitt 2.1.3). Die nächste freie ID für die Tabelle PROTOTYPE wird durch die Sequenz PROTOTYPE_SEQ bereitgestellt. 23 3D-Geodatenbank Berlin 2. Datenmodellierung Abbildung 2.10: Tabellen für Prototypen und generische Klassen 24 3D-Geodatenbank Berlin 2. Datenmodellierung GENERICCITYELEMENT Generische Objekte sind in der Tabelle GENERICCITYELEMENT repräsentiert. Die Felder sind größtenteils identisch zu den Attributen der UML-Klasse GenericCityElement. Die Geometrie ergibt sich aus den drei Fremdschlüsseln LOD1_SURFACE_ID,..., LOD3_SURFACE_ID, die auf eine Fläche oder das oberste Element eines Flächen/Volumenaggregats verweisen (vgl. Abschnitt 2.2.3). Alternativ kann eine LODX_SURFACE_ID gleich NULL sein, wenn stattdessen die Geometrie in einem nativen Format gegeben ist (vgl. Abs. 2.1.3). CS_SRS Die Tabelle CS_SRS ist eine Oracle-Systemtabelle, in der Koordinatenreferenzsysteme mit ihrer Definition abgelegt sind. Jede Oracle-Geometrie verweist auf den entspechenden Eintrag durch Angabe der ID in dieser Tabelle, der SRID. Die Tabelle CS_SRS wurde um den Eintrag für das Berliner Soldner-System erweitert. Für diese wurde die SRID 81989002 gewählt. 2.2.3.5 Gebäudemodell BUILDING Das in Abschnitt 2.1.4 abstrakt beschriebene Gebäudemodell wird durch die Tabellen in Abb. 2.11 umgesetzt. Die drei UML-Klassen AbstractBuilding, Building und BuildingPart wurden dabei zu einer einzelnen Tabelle BUILDING verschmolzen. Die Unterklassenbeziehung zu CITYOBJECT ergibt sich aus identischen IDs (Relation GEN_ID_ID_10). Die Bedeutung und der Name der meisten Felder ist identisch zu denen der Attribute im UML-Diagramm, so dass hier darauf verwiesen werden kann. Die Geometrie wird durch die drei Fremdschlüssel LOD1_SURFACE_ID bis LOD3_SURFACE_ID repräsentiert, die auf Einträge in der SURFACE_GEOMETRY-Tabelle verweisen und die Geometrie in jeweils einem LoD umsetzen. Diese Fremdschlüssel verweisen auf eine Surface, die ein Flächenaggregat – in der Regel ein Volumen – bildet (vgl. das Beispiel in 2.2.2.3). Zusätzlich können noch rein flächenhafte Bestandteile (z.B. Dachüberhänge) mit aggregiert sein. Die Bestandteilshierarchie innerhalb eines Gebäudes wird durch den Fremdschlüssel BUILDING_AGGREGATE_ID realisiert (REL_BUILD_AGG_ID_ID), der auf das darüberliegende Gebäudeaggregat verweist, und NULL enthält, falls dieses nicht existiert. Somit ergibt sich auch bei den Gebäudeaggregaten eine Baumstruktur, wobei BUILDING_AGGREGATE_ID jeweils auf den Vorgänger im Baum zeigt. BUILDING_GROUP Gebäudegruppen sind in der Tabelle BUILDING_GROUP abgelegt. Die Zugehörigkeit eines Gebäudes zu einer Gruppe ergibt sich dabei durch den Fremdschlüssel BUILDING_GROUP_ID in der Tabelle BUILDING (REL_MBUILD_ID_ID). Die Beziehung einer Gruppe zu ihrem Haupthaus wird durch den Fremdschlüssel MAINBUILDING_ID in der Tabelle BUILDING_GROUP repräsentiert. BUILDING_OPENING Öffnungen (UML-Klasse Opening) werden durch die Tabelle BUILDING_OPENING repräsentiert. Dabei wird ebenfalls auf eigene Tabellen für die Unterklassen verzichtet und diese Differenzierung durch das Feld TYPE bei BUILDING_OPENING (gültige Werte sind „Door“ und „Window“; es sind aber auch andere Werte möglich) geleistet. Die Unterklassenbeziehung der Öffnung zur THEMATIC_SURFACE ergibt sich durch gemeinsame IDs, und die Relation zur umgebenden Fläche durch den Fremdschlüssel SURROUNDING_SURFACE_ID in der Tabelle BUILDING_OPENING. 25 3D-Geodatenbank Berlin 2. Datenmodellierung Abbildung 2.11: Tabellen für das Gebäudemodell 26 3D-Geodatenbank Berlin 2. Datenmodellierung THEMATIC_SURFACE Thematische Begrenzungsflächen (UML-Klasse BoundarySurface) repräsentiert die Tabelle THEMATIC_SURFACE. Auf eigene Tabellen für die Unterklassen GroundSurface,... von BoundarySurface wurde in dem Tabellenschema verzichtet, stattdessen gibt das Feld Type der Tabelle THEMATIC_SURFACE die Art der Begrenzungsfläche an. Mögliche Werte für dieses Feld Type sind die Namen der Unterklassen von BoundarySurface (“ClosureSurface“, “GroundSurface“, “WallSurface“, “RoofSurface“), es kann aber auch andere Werte enthalten. Die Aggregationsbeziehung zwischen Gebäuden und den zugehörigen Begrenzungsflächen ergibt sich aus dem Fremdschlüssel BUILDING_ID der Tabelle THEMATIC_SURFACE, der auf die ID des zugehörigen Gebäudes verweist. THEMATIC_SURFACE_GEOMETRY Da die Relation zwischen THEMATIC_SURFACE-Tupeln und ihrer Geometrie eine m:nBeziehung ist, wird diese durch eine eigene Tabelle THEMATIC_SURFACE_GEOMETRY umgesetzt, die einer THEMATIC_SURFACE ID eine SURFACE_GEOMETRY ID zuordnet und zugleich den LoD dieser Repräsentation im Feld LOD angibt. Thematische Flächen und das zugehörige Gebäude müssen sich ihre Geometrie teilen, d.h. diese ist nur einmal vorhanden und wird gemeinsam genutzt. Die SURFACE_GEOMETRY, die z.B. ein Dach geometrisch definiert, muss zugleich Teil der Volumengeometrie des Gebäudes sein, zu der das Dach gehört. Die nächste freie ID für die Tabelle THEMATIC_SURFACE_GEOMETRY wird durch die Sequenz THEMATIC_SURFACE_GEOM _SEQ bereitgestellt. Beispiel: In der Abb. 2.12 ist die Geometrie eines Gebäudes, das aus einem geschlossenen Volumenkörper und zwei Dachüberständen besteht, dargestellt. Soll das Dach im LoD2 als eigenständige THEMATIC_SURFACE modelliert werden, neben dem Gebäude mit einer LOD2-Geometrie, so ergeben sich die folgenden Tabellen: SURFACE_GEOMETRY ID PARENT_ID GEOMETRY ... ... ... IS_SOLID ...... ... ....... 1 2 3 4 5 6 7 8 9 10 11 .... 0 0 0 0 0 0 0 0 0 1 0 ...... 10 10 10 10 10 10 10 11 11 11 NULL .... Geometrie der Fläche 1 Geometrie der Fläche 2 Geometrie der Fläche 3 Geometrie der Fläche 4 Geometrie der Fläche 5 Geometrie der Fläche 6 Geometrie der Fläche 7 Geometrie der Fläche 8 Geometrie der Fläche 9 NULL NULL ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... 27 3D-Geodatenbank Berlin BUILDING ID ......... ... ......... 333 ......... .... ......... 2. Datenmodellierung LOD2_SURFACE_ID ... 11 .... THEMATIC_SURFACE ID Name Typ ... ......... ... 555 „Dachfläche_links“ „RoofSurface“ 556 „Dachfläche_rechts“ „RoofSurface“ .... ......... .... THEMATIC_SURFACE_GEOMETRY ID SURFACE_ID LOD ... ......... ... 123 7 2 124 8 2 125 9 2 126 6 2 .... ......... .... ...... ....... ....... ....... BUILDING_ID ....... 333 333 ....... THEMATIC_SURFACE_ID ....... 556 556 555 555 ....... 8 6 9 5 7 2 4 3 1 Abbildung 2.12: Sieben Surfaces, die ein geschlossenes Volumen bilden, sowie zwei Flächen (8 und 9, rot hervorgehoben), die einen Dachüberstand repräsentieren. In dem Beispiel dienen die SURFACE_GEOMETRIE-Tupel mit IDs 6 und 7 zugleich der Definition der Dachflächen und der Geometrie des Aggregats, das den Volumenkörper des Gebäudes bildet. Die Flächen 1 – 7 werden zunächst zum Surface-Tupel 10 aggregiert und durch IS_SOLID=1 als geschlossener Volumenkörper angezeigt, der dann wiederum zusammen mit den Flächen 8 und 9 zum Surface-Tupel 11 aggregiert wird. BUILDING_CHARACTERISTIC Die UML-Klasse BuildingCharacteristic wird durch die Tabelle BUILDING_CHARACTERISTIC umgesetzt, mit identischen Attributen bzw. Feldern. Die Beziehung zu dem entsprechenden Gebäude ergibt sich aus dem Fremdschlüssel BUILDING_ID, und die Geometrie in den LoD 2 und 3 durch die Fremdschlüssel LOD2_SURFACE_GEOMETRY und LOD3_SURFACE_GEOMETRY zur Tabelle SURFACE_GEOMETRY. 28 3D-Geodatenbank Berlin 2. Datenmodellierung ADDRESS, ADDRESSTOBUILDING und ADDRESS_SEQ Adressen setzt die Tabelle ADDRESS um. Die m:n-Relation zu Gebäuden ergibt sich aus der Tabelle ADRESSTOBUILDING, die eine Gebäude-ID einer Adress-ID zuordnet. Einer Tür (Tabelle BUILDING_OPENING) kann eine Adresse durch den Fremdschlüssel ADDRESS_ID in der Tabelle BUILDING_OPENING zugewiesen werden. Die nächste freie ID für die Tabelle ADDRESS wird durch die Sequenz ADDRESS_SEQ bereitgestellt. 2.2.3.6 Digitales Geländemodell Das Datenbankschema des Digitalen Geländemodells entspricht weitgehend der UMLModellierung. (vgl. Abschnitt 2.1.5) RELIEF Ein Tupel in der Tabelle RELIEF repräsentiert ein komplexes Reliefobjekt, das aus verschiedenen Reliefkomponenten besteht. Es hat ein Attribut LODGROUP, das die Zugehörigkeit des komplexen Reliefobjekts zu einem Level of Detail (LOD) eines Stadtmodells beschreibt. Darüber hinaus besitzt es das Attribut NAME, das die Bezeichnung des Reliefs enthält. Die einzelnen Komponenten eines komplexen Reliefobjekts sind in den Tabellen BREAKLINE_RELIEF, MASSPOINT_RELIEF, TIN_RELIEF und RASTER_RELIEF abgelegt. Um das Datenbankschema flacher und effizienter zu halten wurde auf die Definition einer Oberklassentabelle RELIEFCOMPONENT verzichtet. Jede Reliefkomponente hat ein Attribut LOD, das die Zugehörigkeit zu einem Detaillierungsgrad (Auflösung, Genauigkeit) beschreibt. Die einzelnen Komponenten eines komplexen Reliefobjekts können durchaus zu verschiedenen LOD gehören und heterogen sein, d.h. eine Mischung aus TINs, Rastern und Massenpunkten. Die geometrische Abgrenzung zwischen diesen einzelnen Reliefkomponenten eines komplexen Reliefobjekts erfolgt durch Polygone (Attribut EXTENT), die den Gültigkeitsbereich der Reliefkomponente angeben. Jede Reliefkomponente hat ein Attribut NAME, das der Benennung der Komponente dient. Sowohl das Relief wie auch jede Reliefkomponente sind von CITYOBJECT abgeleitet und erhalten die gleiche ID wie das Cityobject. Der Fremdschlüssel-Constraint eines Reliefs auf die CITYOBJECT-Tabelle ist mit GEN_ID_ID_1 bezeichnet. Die Tabellen RELIEF, BREAKLINE_RELIEF, MASSPOINT_RELIEF, TIN_RELIEF, RASTER_RELIEF, BREAKLINE, TRIANGLE und MASSPOINT werden unter Verwendung des Oracle Workspace Managers versioniert. Geometrieattribute des Oracle-Datentyps SDO_GEOMETRY werden in den nachfolgend beschriebenen Reliefkomponenten auf folgende Wertebereiche beschränkt: • Tabelle BREAKLINE_RELIEF – Attribut BREAKLINE_PROPERTY – SDO_GTYPE: MULTILINE • Tabelle TIN_RELIEF – Attribut TIN_PROPERTY – SDO_GTYPE: MULTIPOLYGON Tabelle MASSPOINT_RELIEF – Attribut MASSPOINT_PROPERTY – SDO_GTYPE: MULTIPOINT • • Die Rasterkomponententabellen BREAKLINE_RELIEF, MASSPOINT_RELIEF, RASTER_RELIEF, TIN_RELIEF – Attribut EXTENT – SDO_GTYPE: 3D-POLYGON, d.h. die SDO_GEOMETRIE ist eingeschränkt auf SDO_GTYPE=3003, SDO_ETYPE=1003 und SDO_INTERPRETATION=1 oder SDO_INTERPRETATION = 3 für ein RECTANGLE. 29 3D-Geodatenbank Berlin 2. Datenmodellierung Abbildung 2.13: Tabellen zur Realisierung des Digitalen Geländemodells 30 3D-Geodatenbank Berlin • 2. Datenmodellierung Die Rasterimporttabelle RASTER_RELIEF_IMP – Attribut FOOTPRINT – SDO_GTYPE: 3D-POLYGON, d.h. die SDO_GEOMETRIE ist eingeschränkt auf SDO_GTYPE = 3003, SDO_ETYPE = 1003 und SDO_INTERPRETATION = 1 oder SDO_INTERPRETATION = 3 für ein RECTANGLE. BREAKLINE_RELIEF und BREAKLINE Die Tabelle BREAKLINE speichert die Geometriekomponente einer Bruchkante in dem Attribut GEOMETRY. Über das Attribut BREAKLINE_RELIEF_ID wird auf die BREAKLINE_RELIEF Tabelle verwiesen. Der dazu gehörende Constraint trägt den Namen REL_BRKLINE_RLF_ID_ID. Über den Fremdschlüssel RELIEF_ID wird eine Bruchkantenkomponente zu dem Geländemodell (Relief) zugeordnet. Der dazu gehörende Constraint trägt den Namen AGG_BREAKLINE_ID_ID. MASSPOINT_RELIEF und MASSPOINT Die Tabelle MASSPOINT speichert die Geometriekomponente der Geländemesspunkte in dem Attribut GEOMETRY. Über das Attribut MASSPOINT_RELIEF_ID wird auf die MASSPOINT_RELIEF Tabelle verwiesen. Der dazu gehörende Constraint trägt den Namen REL_MPOINT_RLF_ID_ID. Über den Fremdschlüssel RELIEF_ID wird eine Bruchkantenkomponente zu dem Geländemodell (Relief) zugeordnet. Der dazu gehörende Constraint trägt den Namen AGG_RELIEF_ID_ID_4. TIN_RELIEF und TRIANGLE Die Tabelle TRIANGLE speichert die Geometriekomponente eines TINs in dem Attribut GEOMETRY. Über das Attribut TIN_RELIEF_ID wird auf die TIN_RELIEF Tabelle verwiesen. Der dazu gehörende Constraint trägt den Namen REL_TIN_RLF_ID_ID. Über den Fremdschlüssel RELIEF_ID wird eine Bruchkantenkomponente zu dem Geländemodell zugeordnet. Der dazu gehörende Constraint trägt den Namen AGG_RELIEF_ID_ID_2. RASTER_RELIEF und RASTER_RELIEF_IMP Die Tabelle RASTER_RELIEF ist im Gegensatz zu den anderen Reliefkomponenten wegen der Verbindung zu der Objekttabelle (RASTER_RELIEF_RDT) mit den Rasterdaten nicht versioniert. Das Attribut RASTERPROPERTY ist vom Typ SDO_GEORASTER. In dem Attribut werden die DGM-Rasterdaten mit Hilfe der Stored Procedure mosaicRasterReliefInitial aus den einzelnen Rasterkacheln der Importtabelle RASTER_RELIEF_IMP erzeugt und gespeichert. Ein RASTER_RELIEF ist ein Cityobjekt und erhält einen Fremdschlüssel auf dessen ID Attribut. Die referentielle Integrität muss manuell sichergestellt werden, da die Aktivierung der Versionierung über den Oracle Workspace Manager keine Fremdschlüssel von den nicht versionierten auf versionierte Tabellen erlaubt. Die Tabelle RASTER_RELIEF_IMP wird für den Import der einzelnen Rasterkacheln verwendet. Mit Hilfe der Stored Procedure mosaicRasterReliefInitial wird aus diesen Kacheln ein einzelnes Raster erzeugt und in der Tabelle RASTER_RELIEF abgelegt. Das Attribut FILENAME enthält den Namen der Datei, aus der die Kachel importiert wurde. Der geometrische Gültigkeitsbereich oder die Ausdehnung einer Kachel wird in dem Attribut FOOTPRINT abgespeichert. Die Tabelle ist nicht versioniert. 31 3D-Geodatenbank Berlin 2. Datenmodellierung RASTER_RELIEF_RDT Die Tabelle RASTER_RELIEF_RDT wird vom Typ SDO_RASTER abgeleitet und dient als Container für die Rasterdaten der Tabelle RASTER_RELIEF. Diese Objekttabelle kann unter Oracle 10g nicht unter der Verwendung des Workspace Mananagers versioniert gespeichert werden. RASTER_RELIEF_IMP_RDT Die Tabelle RASTER_RELIEF_IMP_RDT wird vom Typ SDO_RASTER abgeleitet und dient als Container für die Rasterdaten der Tabelle RASTER_RELIEF_IMP. Die Objekttabelle ist nicht versioniert. ID-Sequenzen Für die Objekte, die nicht von CITYOBJECT abgeleitet sind, werden folgende Sequenzen zur automatischen Inkrementierung der IDs angelegt: Sequenz BREAKLINE _SEQ MASSPOINT_SEQ TRIANGLE _SEQ RASTER_RELIEF_IMP_SEQ RASTER_RELIEF_RDT_SEQ RASTER_RELIEF_RDT_IMP_SEQ Zugehörige Tabelle BREAKLINE MASSPOINT TRIANGLE RASTER_RELIEF_IMP RASTER_RELIEF_RDT RASTER_RELIEF_IMP_RDT 2.2.3.7 Orthophotos Die Modellierung des ORTHOPHOTO-Datenbankschemas entspricht weitgehend der UMLModellierung. (vgl. Abschnitt 2.1.6) ORTHOPHOTO und ORTHOPHOTO_IMP Die Tabelle ORTHOPHOTO wird wegen der Verbindung zu der Objekttabelle ORTHOPHOTO_RDT nicht versioniert. Das Attribut ORTHOPHOTOPROPERTY ist vom Typ SDO_GEORASTER. In dem Attribut werden die ORTHOPHOTOS mithilfe der Stored Procedure mosaicOrthophotoInitial aus den einzelnen Orthophotokacheln der Importtabelle ORTHOPHOTO_IMP erzeugt und gespeichert. Ein Orthophoto ist ein Cityobjekt und erhält einen Fremdschlüssel auf dessen ID-Attribut. Die referentielle Integrität muss manuell sichergestellt werden, da die Versionsverwaltung des Oracle Workspace Managers keine Fremdschlüssel von den nicht versionierten auf versionierte Tabellen erlaubt. Die Tabelle ORTHOPHOTO_IMP wird für den Import der einzelnen Rasterkacheln verwendet. Mit Hilfe der Stored Procedure mosaicRasterReliefInitial wird aus diesen Kacheln ein einzelnes Raster erzeugt und in der Tabelle ORTHOPHOTO abgelegt. Das Attribut FILENAME erhält den Namen der Datei, aus der die Kachel importiert wurde. Der geometrische Gültigkeitsbereich oder die Ausdehnung einer Kachel wird in dem Attribut FOOTPRINT abgespeichert. ORTHOPHOTO_RDT Die Tabelle ORTHOPHOTO _RDT wird vom Typ SDO_RASTER abgeleitet und dient als Container für die Rasterdaten der Tabelle ORTHOPHOTO. Die Tabelle ist nicht versioniert. 32 3D-Geodatenbank Berlin 2. Datenmodellierung Abbildung 2.14: Diagramm für die Tabellen für Orthophotos 33 3D-Geodatenbank Berlin 2. Datenmodellierung ORTHOPHOTO_IMP_RDT Die Tabelle ORTHOPHOTO_IMP_RDT wird vom Typ SDO_RASTER abgeleitet und dient als Container für die Rasterdaten der Tabelle ORTHOPHOTO_IMP. Die Tabelle ist nicht versioniert. ID-Sequenzen Für die Objekte, die nicht von CITYOBJECT abgeleitet sind, werden folgende Sequenzen zur automatischen Inkrementierung der IDs angelegt: Sequenz ORTHOPHOTO_IMP_SEQ ORTHOPHOTO_RDT_SEQ ORTHOPHOTO_IMP_RDT_SEQ Tabelle ORTHOPHOTO_IMP ORTHOPHOTO_RDT ORTHOPHOTO_IMP_RDT 34 3D-Geodatenbank Berlin 3 Versions- und Historienverwaltung 3.1 Konzept der Versionen und CityModelAspects Der Nutzen der 3D-Geodatenbank beschränkt sich nicht auf die reine Repräsentation des aktuellen Datenbestandes und die Verwaltung des zeitlichen Verlaufs dieser Daten (Historie). Vielmehr kann der Datenbestand dazu genutzt werden, bestimmte Stadtbereiche neu zu planen. Diese Planungsvorhaben zeichnen sich dadurch aus, dass unterschiedliche Entwürfe und Modelle (Versionen) des selben räumlichen Ausschnitts existieren. Das in diesem Kapitel vorgestellte Datenbankschema bietet die Möglichkeit, räumlich festgelegte Planungsgebiete zu definieren und jedem Planungsgebiet beliebig viele Planungsalternativen zuzuordnen. Zur Verdeutlichung des Nutzen und der Notwendigkeit der Versions- und Historienverwaltung hier ein einführendes Beispiel: Zum Zeitpunkt t wird beschlossen, Änderungsmaßnahmen in den Stadtteilen Prenzlauer Berg und Kreuzberg durchzuführen. Es werden hierfür Planungsgebiete definiert und räumlich eingegrenzt. Die Stadtplaner A und B planen jeweils eigene Entwürfe für das Gebiet Prenzlauer Berg. Die Stadtplaner I und II tun dies für das Gebiet Kreuzberg. Ihre Planungen beruhen alle auf dem gleichen Grunddatenbestand des Zeitpunkts t. Jeder Stadtplaner wird in seinen Planungen bestehende Gebäude entfernen oder ändern und neue Gebäude hinzufügen. Teilweise werden die Stadtplaner A und B bzw. I und II das gleiche, im Grunddatenbestand befindliche Gebäude ändern. Zur Präsentation von Teilergebnissen oder Abstimmung zwischen den Entwürfen für den Prenzlauer Berg und Kreuzberg ist es beispielsweise notwendig, die Planungen von A und I zu kombinieren und in einem gemeinsamen 3D-Stadtmodell darzustellen. Ebenso kann es notwendig sein, die Planung vom Stadtplaner B noch einmal auf den mittlerweile überschriebenen Stand vom Zeitpunkt t1 zurückzusetzen oder den gesamten Datenbankzustand incl. aller Planungen noch einmal von dem Stand zum (vergangenen) Zeitpunkt t2 zu betrachten. Abbildung 3.1: Übersicht über Versions- und Historienverwaltung bei parallelen Planungen und die verwendeten Bezeichnungen 35 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung Alle im Beispiel beschriebenen Szenarien können mit dem im Folgenden dargestellten Datenbankschema realisiert werden. Zur Historienverwaltung und Versionierung der Daten wird das Workspace Manager Konzept genutzt, das vom Oracle 10g DBMS bereitgestellt wird1. Abbildung 3.1 zeigt die Hierarchie paralleler Planungen und verdeutlicht die im Folgenden verwendeten Bezeichnungen: • LIVE ist der Originaldatenbestand (GeneralWorkspace) auf dessen Grundlage Planungen durchgeführt werden. • Planungen (Planning) sind räumlich festgelegte Gebiete. • Planungsalternativen (PlanningAlternative) sind (beliebig viele) parallel existierende Varianten von Änderungen, die einer Planung zugeordnet sind. • Ansichten (CityModelAspect) sind Sichten, die Planungsalternativen unterschiedlicher Planungen kombiniert darstellen. Hier darf maximal eine Planungsalternative pro Planung gewählt werden. Alle in der Abbildung als Oval dargestellten Objekte (GeneralWorkspace, PlanningAlternative und CityModelAspect) werden als Workspaces des Oracle Workspace Managers realisiert und zusätzlich mit Metadaten in eigenen Tabellen verwaltet. Die Abhängigkeiten und Zusammenhänge der einzelnen Elemente zeigt das UML-Diagramm in Abbildung 3.2. 1 An dieser Stelle sei das offizielle Handbuch zum Oracle Workspace Manager erwähnt. Es ist unter der ID B10824-01 mit dem Titel „Application Develeoper’s Guide – Workspace Manager“ auf der Webseite der Fa. Oracle zu finden und bietet weitreichendere Informationen zum Umgang mit Workspaces. 36 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung Abbildung 3.2: UML-Diagramm mit Klassen, Attributen und Methoden für parallele Planungen. 37 3D-Geodatenbank Berlin 3.2 3. Versions- und Historienverwaltung Umsetzung in Oracle Zur Umsetzung des oben beschriebenen Konzepts der parallelen Planung unterschiedlicher Varianten werden Funktionen des Oracle Workspace Managers verwendet. Das Datenbankschema der 3D-Geo-Datenbank wird um einige Tabellen zur Speicherung von Metadaten der Versionsverwaltung erweitert (vgl. Abb. 3.3). Die jeweiligen Spaltenbezeichnungen und –typen sind dem grafischen Schema zu entnehmen, ihre Bedeutung und Funktion werden unten im Kapitel 3.3 (Administrationsprogramm PlanningManager) erläutert. Abbildung 3.3: Datenbankschema für parallele Planungen. 38 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung Da die eigentliche Versionierung und Historienverwaltung vom Oracle Workspace Manager übernommen wird, dienen die Metadatentabellen und die zugehörigen Prozeduren einer „Versionierung der Versionierung“. Zur Führung einer lückenlosen Versionsdokumentation und Historie werden zu keinem Zeitpunkt Daten gelöscht. So werden abgeschlossene Planungen und Planungsalternativen lediglich als „beendet“ gekennzeichnet. Die zugeordneten Workspaces werden aber nicht gelöscht. Wird bei der Abfrage der Datenbank ein Betrachtungszeitpunkt aus der Vergangenheit gewählt, so kann der zu diesem Zeitpunkt gültige Datenbankbestand betrachtet werden. Um die Integrität der Daten zu gewährleisten, ist ein direkter schreibender Zugriff auf die Tabellen durch Nutzer oder Anwendungsprogramme nicht vorgesehen. Aus diesem Grund werden eine Reihe von Prozeduren für diesen Zweck bereitgestellt. Sie werden in den nachfolgenden Kapiteln beschrieben. Mit diesen Prozeduren ist es Anwendungsprogrammen möglich, die Versionsverwaltung innerhalb ihrer Programmfunktionalität zu bedienen. Es wird auch eine grafische Benutzerschnittstelle (PlanningManager, vgl. Kapitel 3.3) zur Verfügung gestellt, die ebenfalls auf diese Methoden zurück greift. Hinweis: Für die Verwendung der Prozeduren mit SQL*Plus (Kommandozeile) muss der Parameter SERVEROUTPUT auf ON gesetzt sein (Befehl: SET SERVEROUTPUT ON), damit ein Rückgabewert angezeigt werden kann. In den folgenden Kapiteln werden die einzelnen Prozeduren vorgestellt und erläutert. Tabelle 3.1 bietet einen Überblick über die Prozeduren. Name der Funktion Beschreibung Kap. AcceptPlanning Übernehmen einer Planungsalternative 3.2.4 AddPlanning Eröffnen einer Planung 3.2.1 DiscardPlanning Beenden einer Planung 3.2.3 UpdatePlanning Aktualisieren der Metadaten einer Planung 3.2.2 AddPlanningAlternative Eröffnen einer Planungsalternative 3.2.5 DeleteAllPlanningAlternatives Löschen aller Planungsalternativen u. Workspaces 3.2.13 DeleteTermPlanningAlternatives Löschen aller beendeten Planungsalternativen u. 3.2.14 Workspaces DiscardPlanningAlternative Beenden einer Planungsalternative 3.2.7 GetAllConflicts Abfrage der Konflikte aller Planungsalternativen 3.2.11 GetAllDiff Abfrage der Differenzen aller Planungsalternati- 3.2.9 ven GetConflicts Abfrage der Konflikte einer Planungsalternativen 3.2.10 39 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung GetDiff Abfrage der Differenzen einer Planungsalternativen 3.2.8 RefreshPlanningAlternative Aktualisieren des Datenbestandes einer Planungsalt. 3.2.12 UpdatePlanningAlternative Aktualisieren der Metadaten einer Planungsalternative 3.2.6 AddCityModelAspect Eröffnen eines CityModelAspects 3.2.15 AddPAtoCMA Hinzufügen einer Planungsalternative zu einem CMA 3.2.17 DeleteAllCityModelAspects Löschen aller CityModelAspects incl. Workspaces 3.2.19 DeleteCityModelAspect Löschen eines CityModelAspects incl. Workspace 3.2.16 RemovePAfromCMA Entfernen einer Planungsalternative aus einem CMA 3.2.18 Tabelle 3.1: Übersicht über Prozeduren zur Verwaltung paralleler Planungen. 3.2.1 AddPlanning Die Prozedur beginnt eine Planung, indem ein Datensatz in der Tabelle PLANNING angelegt wird. Soll zu der Planung keine räumliche Begrenzung gespeichert werden, so ist der Parameter mit NULL anzugeben. Syntax: AddPlanning( title description executive spatialExtent Parameter: title IN IN IN IN VARCHAR2, VARCHAR2, VARCHAR2, MDSYS.SDO_GEOMETRY); Kurzbezeichnung der Planung, die in Anwendungsprogrammen (z.B. PlanningManager) in Menüs angezeigt wird. Diese sollte kurz und eindeutig sein. description Beschreibung der Planung (max. 4000 Zeichen) executive Verantwortliche Person/Stelle für das Anlegen der Planung spatialExtent räumliche Begrenzung des Planungsgebiets 40 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung 3.2.2 UpdatePlanning Die Prozedur ändert die Parameter Titel, Beschreibung, Verantwortliche Stelle und Räumliche Begrenzung einer bestehenden Planung. Alle vorherigen Inhalte werden überschrieben. Syntax: UpdatePlanning( id title description executive spatialExtent IN IN IN IN IN NUMBER VARCHAR2, VARCHAR2, VARCHAR2, MDSYS.SDO_GEOMETRY); Parameter: id ID der Planung, deren Metadaten geändert werden sollen title Kurzbezeichnung der Planung description Beschreibung der Planung (max. 4000 Zeichen) executive Verantwortliche Person/Stelle für das Anlegen der Planung spatialExtent räumliche Begrenzung des Planungsgebiets 3.2.3 DiscardPlanning Die Prozedur beendet eine Planung, indem für alle Alternativen und für die Planung selber ein Terminierungsdatum gesetzt wird. Für die Workspaces der Planungsalternativen werden Savepoints mit dem Namen "terminated" gesetzt. Die Workspaces werden nicht gelöscht! Die Prozedur wird nur ausgeführt, wenn die Planung noch aktiv ist. Es werden nur aktive Alternativen beendet. Syntax: DiscardPlanning(id Parameter: id IN NUMBER); ID der zu beendenden Planung 3.2.4 AcceptPlanning Die Prozedur beendet eine Planung. Die ausgewählte Planungsalternative wird in den Elternworkspace LIVE und damit in den Grunddatenbestand überführt. Anschließend wird für alle Alternativen und die Planung selber ein Terminierungsdatum gesetzt. Für die Workspaces der Alternativen werden Savepoints mit dem Namen "terminated" gesetzt. Die Workspaces werden nicht gelöscht! Die Prozedur wird nur dann ausgeführt, wenn die Planung noch aktiv ist und kein Terminierungsdatum hat. Syntax: AcceptPlanning( planningId planningAlternativeId IN NUMBER, IN NUMBER); Parameter: planningId ID der zu beendenden Planung planningAlternativeId ID der zu übernehmenden Planungsalternative 41 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung 3.2.5 AddPlanningAlternative Die Prozedur legt einen Datensatz in der Tabelle PLANNING_ALTERNATIVE an und erzeugt einen Workspace. Der Workspacename setzt sich aus der Kennung 'PA', der ID der Planung und der ID der Planungsalternative zusammen (z.B. PA_37_5) und wird aus dem Workspace LIVE abgeleitet. Die Prozedur wird nur ausgeführt, wenn die angegebene Planung noch aktiv ist. Syntax: AddPlanningAlternative( planningId IN NUMBER , title IN VARCHAR2, description IN VARCHAR2, generator IN VARCHAR2, planner IN VARCHAR2); Parameter: planningId ID der Planung, der eine Alternative hinzugefügt werden soll title Kurzbezeichnung der Planungsalternative, die in Anwendungsprogrammen (z.B. PlanningManager) in Menüs angezeigt wird. Diese sollte kurz und eindeutig sein. description Beschreibung der anzulegenden Alternative (max. 4000 Zeichen) generator Name desjenigen, der die Alternative in der Datenbank anlegt hat planner Name des Autors dieser Alternative (Planer, Architekt) 3.2.6 UpdatePlanningAlternative Die Prozedur ändert die Parameter Titel, Beschreibung, Datenbankerzeuger und Planer einer bestehenden Planungsalternative. Alle existierenden Einträge werden überschrieben. Syntax: UpdatePlanningAlternative( id IN NUMBER, title IN VARCHAR2, description IN VARCHAR2, generator IN VARCHAR2, planner IN VARCHAR2); Parameter: id ID der Planungsalternative, die geändert werden soll. title Neue Kurzbezeichnung der Planungsalternative description Neue Beschreibung der Planungsalternative (max. 4000 Zeichen) generator Neuer Name desjenigen, der die Planungsalternative in der Datenbank anlegt hat planner Neuer Name des Autors dieser Planungsalternative (Planer, Architekt) 3.2.7 DiscardPlanningAlternative Die Prozedur beendet eine Planungsalternative. In der Tabelle PLANNING_ALTERNATIVE wird ein Terminierungsdatum gesetzt, der zugehörige Workspace wird nicht gelöscht. Es wird 42 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung lediglich ein Savepoint mit dem Namen "terminated" gesetzt. Die Prozedur wird nur ausgeführt, wenn die Planung noch nicht beendet wurde. Syntax: DiscardPlanningAlternative(id IN NUMBER); Parameter: id ID der zu beendenden Planungsalternative 3.2.8 GetDiff Die Prozedur gibt die Gesamtzahl der Tupel zurück, die im angegebenen Workspace gegenüber dem Grunddatenbestand (Workspace LIVE) geändert wurden. Zur Berechnung wird die Summe der Differenzen über alle versionierten Tabellen (z.B. BUILDINGS, CITYOBJECT usw.) gebildet. Diese Zahl ist einerseits ein Indikator für den Umfang der in der Planungsalternativen durchgeführten Änderungen am 3D-Stadtmodell. Andererseits gibt er Aufschluss über die Komplexität der Übernahme einer Planungsalternative in den LIVE Workspace. Syntax: GetDiff(workspace IN VARCHAR2); Parameter: workspace Name des Workspaces (z.B. PA_21_3), dessen Differenzen zu LIVE gezählt werden sollen 3.2.9 GetAllDiff Die Prozedur ruft die Prozedur GetDiff für alle Workspaces auf, die Planungsalternativen zugeordnet sind. Das Ergebnis gibt also einen Eindruck über den Bearbeitungsstand und – umfang aller Planungen, also der gesamten Datenbank. Syntax: GetAllDiff(); Parameter: Keine 3.2.10 GetConflicts Die Prozedur gibt die Gesamtzahl der Tupel zurück, die sowohl im Workspace LIVE, als auch im angegebenen Workspace geändert wurden. Zur Berechnung wird die Summe der Konflikte über alle versionierten Tabellen (z.B. BUILDINGS, CITYOBJECT usw.) gebildet. Die Funktion zeigt also an, ob eine Übernahme der Planungsalternative in den LIVE Workspace (Merge) oder ein Aktualisieren des Datenbestandes einer Planungsalternative mit dem LIVE Workspace (Refresh) möglich ist. Merge und Refresh können nur für Workspaces durchgeführt werden, zwischen denen keine Konflikte bestehen. Syntax: GetConflicts(workspace IN VARCHAR2); Parameter: workspace Name des Workspaces (z.B. PA_21_3) 43 3D-Geodatenbank Berlin 3.2.11 3. Versions- und Historienverwaltung GetAllConflicts Die Prozedur ruft die Prozedur GetConflicts für alle Workspaces auf, die Planungsalternativen zugeordnet sind. Das Ergebnis gibt einen Eindruck der Möglichkeit, die einzelnen Planungen abzuschließen und in den Grunddatenbestand (Workspace LIVE) zu übernehmen. Syntax: GetAllConflicts(); Parameter: Keine 3.2.12 RefreshPlanningAlternative Die Prozedur aktualisiert die Daten des Workspaces der angegebenen Planungsalternative mit denen des LIVE-Workspaces. Dies ist notwendig, wenn sich der Datenbestand in LIVE seit dem Anlegen der Planungsalternative geändert hat. Das ist beispielsweise dann der Fall, wenn eine andere Planungsalternative in den Workspace LIVE übernommen wurde. Änderungen im LIVE-Workspace werden nicht automatisch in die Kind-Workspaces (Planungsalternativen) übernommen! Der Aufruf dieser Prozedur ist nur dann möglich, wenn keine Konflikte zwischen dem LIVE Workspace und dem Workspace der angegebenen Planungsalternative existieren. Es werden durch den Aufruf nur die Tupel der versionierten Tabellen geändert, die in LIVE jünger (neuer) sind, als im Workspace der Planungsalternative. Die Anzahl dieser Tupel kann mit der Prozedur GetDiff vorab analysiert werden. Vor der Aktualisierung des Workspaces wird ein Savepoint mit dem Namen "refreshed" gesetzt (ggf. überschrieben), der es ermöglicht, das Datum des letzten Aufrufens der Prozedur zu speichern. Syntax: RefreshPlanningAlternative(id IN NUMBER); Parameter: id 3.2.13 ID der Planungsalternative DeleteAllPlanningAlternatives Die Prozedur löscht alle in der Tabelle PLANNING_ALTERNATIVE vermerkten Workspaces und die entsprechenden Tupel in der Tabelle. Es werden somit alle Planungsalternativen und ihre Workspaces gelöscht! Achtung: Dies Prozedur löscht sämtliche Daten der Workspaces unwiderrufbar und dient dem Optimieren der Systemperformance bzw. dem Löschen des Datenbankinhalts. Syntax: DeleteAllPlanningAlternatives(); Parameter: Keine 3.2.14 DeleteTermPlanningAlternatives Die Prozedur löscht alle in der Tabelle PLANNING_ALTERNATIVE vermerkten beendeten Workspaces und die entsprechenden Tupel in der Tabelle. Es werden somit alle beendeten Planungsalternativen und ihre Workspaces gelöscht! 44 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung Achtung: Dies Prozedur löscht sämtliche Daten der betroffenen Workspaces unwiderrufbar und dient dem Optimieren der Systemperformance und dem Ausdünnen bzw. Optimieren des Datenbestands! Syntax: DeleteTermPlanningAlternatives(); Parameter: Keine 3.2.15 AddCityModelAspect Die Prozedur erzeugt einen neuen CityModelAspect, schreibt ein neues Tupel in die entsprechende Tabelle und erzeugt einen neuen Workspace. Der Name des Workspaces setzt sich aus der Kennung 'CMA' und der ID des CityModelAspect zusammen (CMA_ CMAID). CityModelAspects dienen lediglich der gleichzeitigen Betrachtung mehrerer Planungsalternativen und sind somit temporärer Natur. Syntax: AddCityModelAspect( title description generator planningAlternativeId Parameter: title IN IN IN IN VARCHAR2, VARCHAR2, VARCHAR2, NUMBER); Kurzbezeichnung der Ansicht description Beschreibung der anzulegenden Ansicht (max. 4000 Zeichen) generator Name desjenigen, der die Ansicht anlegt hat planningAlternativeId ID der darzustellenden Planungsalternative 3.2.16 DeleteCityModelAspect Die Prozedur löscht einen CityModelAspect. Die Tupel in den entsprechenden Metadatentabellen (CITY_MODEL_ASPECT und CITY_MODEL_ASPECT_COMPONENT) werden ebenso gelöscht wie der zugeordnete Workspace. Mit dem Löschen von CityModelAspects werden keine Bestands- oder Planungsdaten gelöscht. Syntax: DeleteCityModelAspect(id IN NUMBER); Parameter: id ID des zu entfernenden CityModelAspect 3.2.17 AddPAtoCMA Die Prozedur fügt eine Planungsalternative zu einem CityModelAspect hinzu. Die Prozedur wird nur ausgeführt, wenn die angegebene Planungsalternative und die zugehörige Planung noch aktiv sind. Falls schon eine Alternative der selben Planung verwendet wird, bricht die Prozedur ab. Syntax: AddPAtoCMA( 45 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung cityModelAspectId planningAlternativeId Parameter: cityModelAspectId planningAlternativeId 3.2.18 IN NUMBER, IN NUMBER); ID des CityModelAspect, dem die Planungsalternative zugeordnet werden soll. ID der Planungsalternative RemovePAfromCMA Die Prozedur entfernt eine Planungsalternative aus einem CityModelAspect. Syntax: RemovePAfromCMA( cityModelAslpectId planningAlternativeId Parameter: cityModelAspectId planningAlternativeId 3.2.19 IN NUMBER, IN NUMBER); ID des CityModelAspect, aus dem die Planungsalternative entfernt werden soll. ID der zu entfernenden Alternative DeleteAllCityModelAspects Die Prozedur löscht alle CityModelAspects. Die Tupel in den entsprechenden Metadatentabellen (CITY_MODEL_ASPECT und CITY_MODEL_ASPECT_COMPONENT) werden ebenso gelöscht wie die zugeordneten Workspaces. Da CityModelAspects nur als temporär definierte Sichten konzipiert sind, werden keine Bestands- oder Planungsdaten gelöscht. Syntax: RemoveAllCMAWorkspaces(); Parameter: Keine 3.3 Administrationsprogramm „PlanningManager“ Zur einfacheren Verwaltung der Planungen, Planungsalternativen und CityModel-Aspekte dient die grafische Oberfläche PlanningManager. Das Programm setzt eine Java-Installation ab Version 1.4 voraus und kann ohne Installation per Doppelklick auf die Datei PlanningManager.exe gestartet werden. Alternativ kann das Programm über die Kommandozeile gestartet werden. Bei diesem Aufruf können die Datenbankparameter übergeben werden, so dass beim Programmstart sofort eine Datenbankverbindung hergestellt wird. PlanningManager.exe <host> <port> <sid> <user> <password> oder java –jar PlanningManager.jar <host> <port> <sid> <user> <password> Anwendungsprogramme, die mit der 3D-Geo-Datenbank arbeiten, können sich durch diesen Kommandozeilenaufruf der Funktionalität des PlanningManagers bedienen. Dies ist gerade beim Arbeiten in oder mit unterschiedlichen Planungsalternativen notwendig. Näheres erfahren Sie im Kapitel 3.6 „Nutzung in Anwendungsprogrammen“. Wird das Programm ohne die Parameter aufgerufen, so kann die Verbindung zur Datenbank über den Menüleistenpunkt „Datenbank“ – „verbinden“ hergestellt werden. Der Verbindungs46 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung status wird in der linken unteren Ecke des Programmfensters angezeigt („connected“ oder „disconnected“). Beim Herstellen der Verbindung mit der Datenbank werden die existierenden und noch nicht terminierten Planungen und Planungsalternativen aus den entsprechenden Tabellen ausgelesen und in einer Baumansicht dargestellt. Durch die Auswahl einer Planung oder einer Planungsalternative werden die entsprechenden Metadaten angezeigt. 3.3.1 Planungen Im PlanningManager können alle nicht beendeten Planungen verwaltet werden. Abbildung 3.4 zeigt die Metadatenansicht einer Planung. Die gezeigten Informationen haben folgende Bedeutung: • ID ID der Planung (automatisch fortlaufende Nummerierung) • Titel Bezeichnung der Planung (256 Zeichen) • Beschreibung Erläuterung zur Planung (4000 Zeichen) • Ausführende Stelle Behörde / Betreuung der Planung (256 Zeichen) • Begrenzung räumliches Begrenzungspolygon (2D) der Planung (Koordinatenliste s.u.) • Beginn Datum und Uhrzeit des Anlegens der Planung • Ende Datum und Uhrzeit des Beendens einer Planung Abb. 3.4: Anwendungsprogramm PlanningManager: Oberfläche zur Verwaltung von Planungen. 47 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung Grau hinterlegte Informationen werden automatisch generiert und können nicht vom Benutzer bearbeitet werden. Die räumliche Begrenzung eines Planungsgebiets wird durch eine Liste von Koordinaten angegeben, die ein Polygon beschreiben, durch welches das Planungsgebiet begrenzt wird. Es sind folgende Trennzeichen zu verwenden: • Das Dezimaltrennzeichen ist ein Punkt (“.“) • Rechtswert und Hochwert werden durch ein Komma zu trennen (“,“) • Koordinatenpaare (Punkte) sind durch Leerzeichen zu trennen (“ “) Die Eckpunkte des Polygons sind ausschließlich durch Rechts- und Hochwert zu beschreiben, eine Höhenangabe ist unzulässig. Das so eingegebene Polygon wird in der Tabelle PLANNING im entsprechenden Feld vom Typ MDSYS.SDO_GEOMETRY gespeichert. Im Gegensatz zu Oracle Spatial muss bei der Eingabe der Polygonstützpunkte das erste Koordinatenpaar nicht noch einmal am Ende der Liste wiederholt werden. Für die Verwaltung der Metadaten von Planungen stehen folgende Buttons zur Verfügung, die kontextabhängig aktiviert bzw. deaktiviert sind: • Löschen Löschen der ausgewählten Planung. Eine Planung wird gelöscht, indem in der Tabelle PLANNING das aktuelle Datum in die Spalte TERMINATION_DATE des entsprechenden Tupels geschrieben wird. Das Tupel besteht also weiterhin. Die Planung wird im PlanningManager nicht mehr angezeigt. • Neu Definieren einer neuen Planung. Eine neue Planung wird erzeugt, indem die eingegebenen und automatisch erzeugten Metadaten unter einer neuen ID in die Tabelle PLANNING geschrieben werden. Hinweis: Soll einer neuen Planung keine räumliche Begrenzung zugeordnet werden, so ist „null“ (ohne Anführungszeichen) in das entsprechende Feld einzutragen oder das Feld leer zu lassen! • Ändern Geänderte Einträge werden übernommen. Die geänderten Metadaten werden in die entsprechende Zeile der Tabelle PLANNING geschrieben. 3.3.2 Planungsalternativen Im PlanningManager können alle nicht beendeten Planungsalternativen verwaltet werden. Abbildung 3.5 zeigt die Metadatenansicht einer Planungsalternative. Die gezeigten Informationen haben folgende Bedeutung: • ID ID der Planungsalternative (automatisch fortlaufende Nummerierung) • Titel Bezeichnung der Planungsalternative (256 Zeichen) • Beschreibung Erläuterung zur Planungsalternative (4000 Zeichen) • In DB eingefügt von Name / Benutzername desjenigen, der die Planungsalternative in der Datenbank angelegt hat (256 Zeichen) • Planer Name des Planers/Architekten der Planungsalternative (256 Zeichen) 48 3D-Geodatenbank Berlin • Workspacename 3. Versions- und Historienverwaltung Name des Workspaces der Planungsalternative. Der Name wird automatisch generiert und setzt sich aus der Kennung PA_, der ID der Planung, der diese Planungsalternative zugeordnet ist, und der ID der Planungsalternative zusammen. (PA_25_21 ist demnach der Workspace, welcher der Planungsalternativen 21 zugeordnet ist. Die Planungsalternative 21 ist wiederum der Planung 25 zugeordnet.) Durch Drücken des Buttons wird der Name des Workspaces in die Zwischenablage übernommen. So kann dieser leicht in andere Anwendungsprogramme übernommen werden. Sollen Geodaten einer Planungsalternative geändert werden (in SQL*Plus oder einem Anwendungsprogramm), so muss vorab der entsprechende Workspace durch den Aufruf EXEC DBMS_WM.GoToWorkspace(’<Workspacename>’) ausgewählt werden. • Beginn Datum und Uhrzeit des Anlegens der Planungsalternative • Ende Datum und Uhrzeit des Beendens einer Planungsalternative Abbildung 3.5: Anwendungsprogramm PlanningManager: Oberfläche zur Verwaltung von Planungsalternativen Grau hinterlegte Informationen werden automatisch generiert und können nicht vom Benutzer bearbeitet werden. 49 3D-Geodatenbank Berlin 3. Versions- und Historienverwaltung Für die Verwaltung der Metadaten von Planungsalternativen stehen folgende Buttons zur Verfügung, die kontextabhängig aktiviert bzw. deaktiviert sind: • Übernehmen Übernehmen der ausgewählten Planungsalternative. Der Inhalt des entsprechenden Workspaces wird in den Workspace LIVE überführt. Der Datenbestand von LIVE (Grunddatenbestand) wird somit geändert! Weiterhin werden die Planungsalternative, alle konkurrierenden Planungsalternativen und die Planung selber durch Setzen des Beendigungsdatums beendet. Die entsprechenden Tupel verbleiben in den Tabellen PLANNING und PLANNING_ALTERNATIVE, sie werden jedoch nicht mehr im PlanningManager angezeigt. • Löschen Löschen der ausgewählten Planungsalternative. Eine Planungsalternative wird gelöscht, indem in der Tabelle PLANNING_ALTERNATIVE das aktuelle Datum in die Spalte TERMINATION_DATE des entsprechenden Tupels geschrieben wird. Das Tupel besteht also weiterhin. Für den zugehörigen Workspace wird eine Rücksetzmarke (Savepoint) mit dem Namen „terminated“ gesetzt, der Workspace aber nicht gelöscht. Die Planungsalternative wird im PlanningManager nicht mehr angezeigt. • Neu Definieren einer neuen Planungsalternative. Eine neue Planungsalternative kann nur erzeugt werden, wenn eine Planung ausgewählt ist, da eine Alternative genau einer Planung zugewiesen wird. Eine Planungsalternative wird erzeugt, indem die eingegebenen und automatisch Metadaten unter einer neuen ID in die Tabelle PLANNING_ALTERNATIVE geschrieben werden. Es wird ein neuer Workspace in der Datenbank angelegt. • Ändern Geänderte Einträge werden übernommen. Die geänderten Metadaten werden in die entsprechende Zeile der Tabelle PLANNING_ALTERNATIVE geschrieben. 3.4 Das Menü Extras Einige Funktionalitäten für Planungsalternativen werden unter dem Menüpunkt Extras angeboten. Bei Auswahl einer Planung ist der Menüpunkt inaktiv. • Differenzen Abfrage der Anzahl der Differenzen zwischen dem Workspace LIVE und dem Workspace der gewählten Planungsalternative (vgl. 3.2.8 Prozedur GetDiff). Der Aufruf der Funktion kann einige Zeit (Minuten) in Anspruch nehmen! • Konflikte Abfrage der Anzahl der Konflikte zwischen dem Workspace LIVE und dem Workspace der gewählten Planungsalternative (vgl. 3.2.10 Prozedur GetConflicts). Der Aufruf der Funktion kann einige Zeit (Minuten) in Anspruch nehmen! • Aktualisierungsdatum Datum der letzten Aktualisierung des Workspaces der gewählten Planungsalternative (vgl. 3.2.12 RefreshPlanningAlternative. Wurde noch keine Aktualisierung durchgeführt, so wird das Datum des Anlegens der Planungsalternative ausgegeben. 50 3D-Geodatenbank Berlin • 3.5 Aktualisieren 3. Versions- und Historienverwaltung Aktualisieren des Workspaces der Planungsalternative mit dem derzeitigen Datenbestand des Workspace LIVE. Konfliktmanagement Planungsalternativen sind auf der Datenbankseite als Workspaces des Oracle Workspace Managers realisiert. Ein Workspace ist die logische Gruppierung der Änderungen von Zeilen von versionierten Tabellen (siehe „Oracle - Database Application Developer’s Guide – Workspace Manager“). Alle Workspaces für Planungsalternativen sind vom Workspace LIVE abgeleitet. Es existieren also parallel mehrere Versionen des Originaldatenbestandes LIVE, die den Planungsalternativen entsprechen. Auf Ebene der jeweiligen Planungsalternativen wird der Datenbestand modifiziert. 3.5.1 Differenzen Die einzelnen Änderungen der Datensätze eines Workspaces führen sowohl zu Differenzen unter den Planungsalternativen (Workspaces), als auch zu Differenzen zum Originaldatenbestand, aus dem sie ursprünglich abgeleitet sind. Um einen Überblick zu bekommen, wie viele Datensätze im Falle der Übernahme einer Planungsalternative in den Originaldatenbestand LIVE (Merging) geändert werden müssen, kann im PlanningManager im Menü Extras der Menüpunkt Differenzen ausgewählt werden. Dort werden die Differenzen zwischen dem Workspace der aktuell gewählten Planungsalternative und dem LIVE Workspace analysiert. 3.5.2 Konflikte Wird ein Datensatz sowohl im Originaldatenbestand des LIVE Workspaces als auch im Workspace einer Planungsalternative geändert, so handelt es sich um einen Konflikt. Eine Überführung der Planungsalternative in den Originaldatenbestand ist bei Existenz von Konflikten nicht möglich. Im PlanningManager können Konflikte über das Menü Extras im Menüpunkt Konflikte ähnlich den Differenzen, gezählt werden. Hinweis: Konflikte können immer dann auftreten, wenn die Tupel des Originaldatenbestand nach dem Anlegen einer Planungsalternative geändert werden, die auch in der Planungsalternative geändert werden! Durch die räumliche Beschränkung der Planungen sind diese Fälle prinzipiell vermeidbar. Konflikte betreffen die Objektebene und müssen unbedingt vor dem Aktualisieren einer Planungsalternative oder der Übernahme einer Planungsalternative gelöst werden. Sinnvollerweise werden Konflikte einzeln gelöst. Dies sollte in einem Anwendungsprogramm durch eine grafische Darstellung der beiden Objekte geschehen. Der PlanningManager bietet keine Funktionalität zum Lösen von Konflikten. 3.6 Nutzung in Anwendungsprogrammen Ein Anwendungsprogramm muss, um auf eine Planungsalternative zugreifen zu können, vor der Abfrage der Datenbank in den entsprechenden Workspace der Planungsalternative wechseln. Dies geschieht durch den SQL Aufruf EXEC DBMS_WM.GoToWorkspace(’<Name>’) Wobei <Name> durch den Namen des Workspaces (z.B. PA_32_25) zu ersetzen ist. Der Name des Workspaces einer Planungsalternative kann über das Administrationsprogramm PlanningManager angezeigt und in die Zwischenablage kopiert werden. Hier bietet sich der Aufruf des PlanningManagers mit Übergabe der Datenbankparameter aus dem Anwendungsprogramm heraus an. 51 3D-Geodatenbank Berlin 4 Werkzeug für den Datenimport und –export Das Import-/Exportprogramm stellt Funktionen zum Einlesen und Ausgeben von Gebäuden, Digitalen Geländemodellen und Luftbildern zur Verfügung. DGMs und Luftbilder werden in Form von georeferenzierten Rasterdateien (TIFF-Format mit zusätzlichem Worldfile) verarbeitet. Gebäude werden als 3D-Shapefiles gelesen bzw. gespeichert. Die Importfunktionalität dient dem Befüllen der 3D-Geodatenbank mit neuen Datensätzen. Importierte Geodaten werden dabei als neue Objekte unter Vergabe neuer, eindeutiger Objekt-IDs der Datenbank hinzugefügt. Da keine Datensätze in der Datenbank ersetzt werden, ist der Importer als Werkzeug zur Datenfortführung allerdings nur begrenzt geeignet. Das Befüllen der Datenbank mit Rasterdaten erfolgt durch den Import einzelner Rasterdatenkacheln, die abschließend zu einem großen, homogenen Rasterdatenobjekt (Luftbild bzw. DGM) verschmolzen werden. Mit der Exportfunktionalität können Auszüge der 3D-Geodatenbank generiert werden. Als Auswahlkriterium steht grundsätzlich die Angabe eines umschließenden Rechtecks (Bounding Box) zur Verfügung. Bei der Ausgabe von Gebäuden können darüber hinaus auch Objekt-IDs oder die Zugehörigkeit von Gebäuden zu einer CityObject-Gruppierung als Selektionskriterium verwendet werden. Für alle Import- und Exportvorgänge kann grundsätzlich der Oracle-Workspace explizit angegeben werden, aus dem die Daten ausgegeben werden bzw. in den die Daten importiert werden sollen (vgl. Kapitel 3). Damit ist beispielsweise möglich, Gebäudeentwürfe gezielt einer Planungsalternative hinzuzufügen. 4.1 Systemvoraussetzungen Das Import/Export-Werkzeug benötigt eine Java Runtime Environment Standard Edition ab der Version 1.4.2 (JRE 1.4.2). Diese kann über folgenden Link heruntergeladen werden: http://java.sun.com/j2se/1.4.2/download.html und muss vor dem Ausführen des Import/Export Tool installiert werden. Bitte beachten Sie, dass Sie die betriebssystemspezifische (z.B. Windows, Linux, Solaris) entsprechende JRE herunterladen. Für die JRE 1.4.2 werden ca. 15 MB Festplattenplatz benötigt. Das Import/Export Tool benötigt ca. 9 MB Festplattenplatz und erfordert mindestens 256 MB Arbeitspeicher. Dieser reicht aus, um kleine Shapefiles (Richtwert: kleiner 10MB) oder Rasterdaten (Richtwert: kleiner 50 MB) zu im- bzw. exportieren. Für den Import von großen Bildern, bspw. die gelieferten Bilder in Originalgröße, wird mindestens 1 GB Arbeitsspeicher vorausgesetzt. Bitte beachten Sie, dass weiterer Festplattenplatz für den Export benötigt wird. Dieser hängt von der Größe des zu exportierenden Datensatzes ab. Als Richtwert gilt ein Wert von 500 MB für exportierte Daten. Diese können nach dem Export verschoben werden. Ferner wird beim Kacheln von Bildern temporärer Festplattenplatz benötig. Dieser hängt von der Größe des zu kachelnden Bildes ab. (Für die Kachelung sollte genau so viel temporärer Festplattenplatz vorhanden sein wie die Größe des Originalbild selbst.) 4.2 Benutzerschnittstelle Die Anwendung wird mit folgendem Aufruf gestartet: java.exe -Xms256m -Xmx1024m -jar berlin3d_tool.jar jdbc:oracle:thin:@<myserver>:1521:<myDBinstance> 52 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Hinweis: Für das Betriebssystem Windows besteht die Möglichkeit auch die Programme „javaw.exe“ bzw. „start java.exe“ zu nutzen. Das Kommandofenster zum Start der Applikation wird dadurch geschlossen. Der angegeben Aufruf startet das Programm mit vier Parametern: den Parametern der Java Virtual Maschine (JVM) für den Hauptspeicher (256 MB als Anfangswert bzw. 1GB maximaler Arbeitspeicher), dem jar-Parameter für die Anwendung und den Datenbankparametern. Bei Letzteren sind die Parameter <myserver> durch die IP Adresse des Datenbankservers und <myDBinstance> durch die SID der Datenbank zu ersetzen. Der Systemadministrator sollte diese Werte ggf. anpassen. Alle benötigten Systembibliotheken befinden sich im Unterverzeichnis ./libs/. Diese werden automatisch geladen. Nach erfolgreichem Start erscheint die graphische Benutzerschnittstelle (vgl. Abb. 4.1). Abbildung 4.1 Das Import/Export Tool 4.2.1 Der Login-Dialog Um Daten zu importieren bzw. exportieren muss sich der Benutzer zuerst bei der Datenbank anmelden. Dazu klickt er auf die Schaltfläche Einloggen, gibt seinen Login-Namen und sein Paßwort ein, und bestätigt die Eingabe mit OK (vgl. Abb. 4.2). Abbildung 4.2 Anmeldemaske 53 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Anschließend stellt die Anwendung eine Verbindung zur Datenbank her. Ist die Verbindung aufgebaut, werden die Auswahlliste der Import-Konvertierungsprozeduren (mit Titel „Prozedurbeschreibung“ bzw. „Prozedurname“) und die Auswahlbox „CityObjectGroup“ freigeschaltet. Die Prozedurauswahlliste wird beim Import von Shapefiles verwendet. Sie wird im Folgenden beschrieben. 4.3 Import 4.3.1 Konzept zum Importieren von Shapefiles Für den Import von Geodaten über 3D-Shapefiles musste ein flexibler Konvertierungsmechanismus realisiert werden, da die konkreten Attribute und Geometrierepräsentation jeweils von dem Anwendungsprogramm abhängen, das die Shapefiles erzeugt hat. Im Rahmen des initialen Aufbaus des Berliner 3D-Stadtmodells sind bereits drei unterschiedliche Arten von 3DShapefiles zu unterstützen. Beispielsweise sind die Gebäude des Stadtteils Ostkreuz im Shapefile der Fa. RealIT als 3D-Multipatches gespeichert, wobei jeder Datensatz genau ein Gebäude repräsentiert. Das Shapefile der Fa. RSS des gleichen geographischen Gebiets repräsentiert hingegen einzelne Gebäudeteile, wobei die Geometrie in Form von 3D-Grundrisspolygonen gegeben ist. Die Auswahl und Benennung der thematischen Attribute ist ebenfalls verschieden. Der Import von Shapefiles erfolgt aus diesen Gründen in zwei Schritten: 1. Einlesen des Shapefiles in die Datenbank im Rohformat 2. Erzeugen der 3D-Geoobjekte Im ersten Schritt werden alle Datensätze des Shapefiles uninterpretiert in die Datenbank kopiert. Für jeden Datensatz wird dabei in der Tabelle CITYOBJECT ein neues Tupel erzeugt, wobei die CLASS_ID auf 0 gesetzt wird. An letzterem kann man in der Tabelle CITYOBJECT grundsätzlich jene Tupel erkennen, die durch den Importer geladen und noch nicht interpretiert wurden, da reguläre CITYOBJECTS eine CLASS_ID>0 besitzen müssen. Für jedes einzelne Attribut des Datensatzes wird dann ein Tupel in der Tabelle CITYOBJECT_GENERICATTRIB angelegt, wobei je nach Attributdatentyp im Shapefile der entsprechende Datentyp im Tabellenfeld DATATYPE gesetzt wird und der Attributwert in die zugehörige Tabellenspalte STRVAL, INTVAL, REALVAL, DATEVAL oder GEOMVAL geschrieben wird. Jedes Tupel erhält zudem im Attribut ATTRNAME den jeweiligen Spaltennamen des Shapefiles und im Attribut CITYOBJECT_ID den Verweis auf den zugehörigen Datensatz in CITYOBJECT. Da Shapefiles pro Datensatz genau eine Geometrie besitzen, wird somit auch genau ein entsprechendes Tupel in CITYOBJECT_GENERICATTRIB pro Datensatz erzeugt. Die Geometrie wird als Oracle-Geometrie (Datentyp MDSYS.SDO_GEOMETRY) gespeichert. Für ein Shapefile mit 375 Datensätzen, das 10 Attribute besitzt (inkl. Geometrie), würden demnach 375 Tupel in CITYOBJECT angelegt und insgesamt 3750 Tupel in CITYOBJECT_GENERICATTRIB. Der zweite Schritt besteht darin, die eingelesenen Daten des Shapefiles zu interpretieren und entsprechende Geoobjekte in der Datenbank daraus zu erzeugen. Da dieser Schritt abhängig vom jeweiligen Shapefiletyp bzw. –hersteller ist, muss für jeden Typ eine eigene Konvertierungsprozedur vorgesehen werden. Diese Prozeduren werden als Stored Procedure (PL/SQLProzedur ohne Übergabe- und Rückgabeparameter) in der Datenbank gespeichert und jeweils durch einen Eintrag in der Tabelle IMPORT_PROCEDURES registriert. Alle registrierten Konvertierungsprozeduren werden im Import-/Exportprogramm nach dem Einloggen in die Datenbank in einer Auswahlliste präsentiert. Der Vorteil dieser Vorgehensweise besteht darin, dass die Datenbank jederzeit – im laufenden Betrieb – um weitere Konvertierungsprozeduren für neue Shapefile-Typen weiterer GIS-Anwendungen ergänzt werden kann, ohne dass dazu eine neue Version des Import-/Exportprogramms installiert werden muss. 54 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Die mitgelieferten Konvertierungsprozeduren für die drei zu unterstützenden Shapefile-Typen der Firmen RSS und RealIT werden in Abschnitt 4.5 ausführlich beschrieben. 4.3.2 Durchführung des Shapefile-Imports Für den Import von Shapefiles wird vorausgesetzt, dass der Benutzer sich vorher angemeldet hat. Zuerst klickt der Benutzer auf die Schaltfläche Gebäude, und anschließend auf Öffnen, um ein Shapefile zu öffnen. Gültige Shapefiles sind nur solche, die PolygonZ (Shapetyp 15) oder Multipatches (Shapetyp 31) enthalten. Nach erfolgter Wahl und erfolgreicher Analyse eines Shapefiles wird die Schaltfläche „Import“ freigeschaltet. Nun darf der Benutzer die Daten importieren. Zuvor kann er mittels Eingabe ins Textfeld Workspace den DatenbankWorkspace ändern. Das ist notwendig, wenn die Daten für eine Planungsalternative importiert werden sollen. Der entsprechende Workspacename kann mit dem PlanningManager ermittelt und in die Zwischenablage kopiert werden (vgl. 3.3.2). Außerdem kann der Benutzer die nach dem Import aufzurufende Konvertierungsprozedur auswählen. Ein Textfeld unter der Auswahlliste beschreibt die Prozedur näher. Das Betätigen der Schaltfläche Import startet den Import. Der Benutzer wird nun nach der Datenherkunft gefragt (Abb. 4.3). Diese darf nicht leer sein und nicht mehr als 255 Zeichen enthalten. Der eingegebene Wert wird im Feld LINEAGE aller neu erzeugten Cityobjects gespeichert. Nach Eingabe der Datenherkunft zeigt ein Fortschrittfenster an, wieviele Objekte bereits importiert wurden. Abbildung 4.3: Maske zur Eingabe der Lineage Im Menü Optionen kann man bestimmen, nach wie vielen Objekt ein „commit“ aufgerufen werden soll. Defaulteingabe ist Commit nach 100 Objekten. Dies ist der optimale Wert. Commit nur am Ende des Imports bewirkt einen schnellen Import. Sollte dabei aber etwas nicht in Ordnung sein, z.B. ungültige Daten, dann können unter Umständen die Daten fehlerhaft importiert sein. Ein Commit nach jedem Objekt ist langsamer, dafür aber robuster, da dabei nur fehlerhafte Objekte nicht importiert werden. Es wird empfohlen, diese Option nicht zu ändern. Während eines laufenden Importvorgangs sollte weiterhin keine andere Aktion mit dem Import-/Export Tool durchgeführt werden. 4.3.3 Import von Rasterdaten Das Speicherkonzept der 3D-Geo-DB sieht vor, sowohl Luftbilder als auch DGMs für jeden Level-of-Detail als jeweils ein homogenes Rasterdatenobjekt in der Datenbank zu verwalten (vgl. Abschnitt 2.2.2). Um ein solches flächendeckendes Gesamtraster zu erzeugen, müssen die Rasterdaten in Form einzelner „Rasterdatenkacheln“ vorliegen, die zunächst einzeln mit dem Import-/Exportprogramm in die Datenbank geladen werden müssen. Nachdem alle Kacheln für einen Level-of-Detail in die Datenbank übertragen wurden, kann der Benutzer durch den Aufruf einer bestimmten Prozedur in der Datenbank das Gesamtraster erstellen lassen. Der Aufruf dieser Prozeduren wird in den folgenden Abschnitten 4.3.3.1 und 4.3.3.2 erläutert. 55 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Um die Rasterdatenkacheln zu importieren, muss der Benutzer am System angemeldet sein. Es besteht die Möglichkeit, die Daten als Luftbilder oder als digitale Geländemodelle zu importieren. Voraussetzung hierfür ist, dass eine sog. Worlddatei (Worldfile) mit Koordinateninformation vorhanden ist. Diese Datei muss den gleichen Namen wie die Bilddatei haben und statt der Dateierweiterung „.tif“ (für TIFF Datei) „.tfw“ heißen. Das Tool geht aus davon aus, dass im Worldfile das Trennzeichen für Dezimalstellen ein Punkt “.“ ist, und nicht das Komma! Kommata werden beim Einlesen automatisch in Punkte umgewandelt. Nach erfolgreicher Auswahl eines TIFF-Bildes klickt der Benutzer auf Import, um den Einlesevorgang zu starten. Dieser kann bei großen Dateien (500MB) abhängig von der Serverleistung und Netzwerkverbindung durchaus 15 Minuten in Anspruch nehmen. Bitte beachten Sie, dass Bilder einzeln hochgeladen werden müssen. Sollte beim Einlesen sehr großer Rasterdatendateien eine Fehlermeldung bzgl. Speicherplatzmangels auftreten, kann die Rasterdatendatei vor dem Import in kleinere Kacheln zerlegt werden (Richtwert: ab etwa 400MB). Dafür bietet das Tool unter dem Menüpunkt Optionen -> Tile Image eine Kachelungsfunktion. Klickt der Benutzer diesen Menüpunkt an, wird er aufgefordert, dass zu kachelnde Bild anzugeben. Nach Eingabe des neuen Bildnamen, z.B. „neues_Bild“, wird das originale Bild nun in vier Teilbilder zerlegt, die in „neues_bild_0_0.tif“, „neues_bild_0_1.tif“, „neues_bild_1_0.tif“ und „neues_bild_1_1.tif“ benannt werden. Entsprechende Worldfile-Dateien werden automatisch generiert. 4.3.3.1 Mosaikbildung von DGMs Die Erstellung eines Gesamtrasterobjekts aus einzelnen Rasterkacheln wird vollständig innerhalb des Oracle-DBMS mittels Stored Procedures ausgeführt. Aufgrund der großen Datenmengen, die dabei bewegt werden müssen, kann dieser Vorgang einige Stunden bis hin zu einem Tag dauern. Die Durchführung des sogenannten „Mosaik-Vorgangs“ wird nicht über das Import-/Exportprogramm gesteuert, sondern muss über die Eingabe des entsprechenden Befehls in einer SQL-Eingabekonsole erfolgen, wie z.B. dem Oracle beiliegenden SQL*Plus oder der Enterprise Manager Console. Dazu muss sich der Benutzer zunächst in dem Konsolenprogramm bei der 3D-Geodatenbank anmelden. Er kann dann die Prozedur „mosaicRasterReliefInitial“ aufrufen, die alle importierten DGM-Rasterkacheln – wie in einem Mosaik – zu einem Gesamtrasterobjekt verschmilzt. Damit ein homogener Gesamtrasterdatensatz erzeugt werden kann, müssen verschiedene Voraussetzungen erfüllt sein. So müssen die Kacheln insgesamt ein rechteckiges Gebiet überlappungs- und klaffungsfrei abdecken. Ferner muss die räumliche Auflösung aller Kacheln identisch sein. Nähere Details zu den Voraussetzungen sind in Abschnitt 2.2.2 beschrieben. Die Mosaik-Prozedur generiert über das eigentliche Gesamtraster hinaus ein RasterReliefObjekt, das schließlich ersteres beinhaltet, sowie ein Relief-Objekt, welches das gesamte DGM für den angegebenen Level-of-Detail repräsentiert (vgl. Modellierung in Abschnitt 2.1.5 sowie DB-Schema in Abschnitt 2.2.3.6). Beide Geoobjekte sind CityObjects, die durch jeweils ein eigenes Tupel in der Tabelle CITYOBJECT sowie je ein zugehöriges Tupel in RASTER_RELIEF und RELIEF repräsentiert werden. Die ID-Werte für die beiden CITYOBJECT-Tupel werden automatisch generiert und nach erfolgreichem Ablauf der Prozedur in dem Konsolenfenster angezeigt. Sie sollten in einer Datenbank-Dokumentation notiert werden, da sie für spätere Zugriffe (z.B. für den Export) wieder benötigt werden. Die Syntax für den Aufruf der Mosaik-Prozedur lautet wie folgt: execute mosaicRasterReliefInitial(<Name>, <Typ>, <Herkunft>, <LOD>); 56 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Der Parameter <Name> ist ein Textstring und bezeichnet den Namen des Gesamtrasters (z.B. ’Gesamt-DGM von Berlin’). <Typ> ist ebenfalls vom Typ String und dient zur näheren Beschreibung der Art der Rasterdaten wie z.B. ’regelmäßiges Raster 0.5m’. Der Textstring <Herkunft> gibt Auskunft über die Datenquelle bzw. den Datenlieferanten (z.B. ’photogrammetrische Bildauswertung von HRSC-Daten, Fa. RSS GmbH’). Der Parameter <LOD> ist vom Typ Integer und darf eine ganze Zahl aus dem Intervall 1-3 sein. Er gibt an, welchem Level-of-Detail das DGM zuzuordnen ist. Wenn zuvor alle DGM-Kacheln mit dem Import-/Exportprogramm in die Datenbank geladen wurden, könnte das LOD2-Gesamt-DGM von Berlin z.B. durch die Eingabe folgender Befehle in SQL*Plus erzeugt werden (bitte den 2. Befehl ohne Zeilenumbruch eingeben): set serveroutput on execute mosaicRasterReliefInitial (’DGM von Berlin’, ’regelmäßiges Raster 0.5m Auflösung’, ’Photogrammetrische Auswertung, Fa. RSS GmbH’, 2); 4.3.3.2 Mosaikbildung von Luftbildern Die Zusammenstellung des Gesamtluftbildes aus einzelnen Luftbildkacheln erfolgt analog zu der Mosaikbildung von DGMs (siehe vorheriger Abschnitt). Auch hier muss der Benutzer eine in der 3D-Geo-DB befindliche Stored Procedure aufrufen. Diese Mosaik-Prozedur generiert ein Orthophoto-Objekt, das das Gesamtraster beinhaltet. Das Orthophoto-Objekt ist ein CityObject, das durch ein Tupel in der Tabelle CITYOBJECT sowie ein zugehöriges Tupel in ORTHOPHOTO repräsentiert wird. Der ID-Wert ist für die beiden Tupel identisch. Er wird automatisch generiert und nach erfolgreichem Ablauf der Prozedur in dem Konsolenfenster angezeigt. Er sollte in einer Datenbank-Dokumentation notiert werden, da er für spätere Zugriffe (z.B. für den Export) wieder benötigt wird. Die Syntax der Mosaik-Prozedur lautet wie folgt: execute mosaicOrthophotosInitial (<Name>, <Typ>, <Herkunft>, <LOD>); Der Parameter <Name> ist ein Textstring und bezeichnet den Namen des Gesamtrasters (z.B. ’Luftbild von Berlin’). <Typ> ist ebenfalls vom Typ String und dient zur näheren Beschreibung der Art der Rasterdaten wie z.B. ’True Orthophoto’. Der Textstring <Herkunft> gibt Auskunft über die Datenquelle bzw. den Datenlieferanten (z.B. ’HRSC-Kamerabefliegung, Fa. RSS GmbH’). Der Parameter <LOD> ist vom Typ Integer und darf eine ganze Zahl aus dem Intervall 1-3 sein. Er gibt an, welchem Level-of-Detail das Luftbild zuzuordnen ist. Wenn zuvor alle Luftbildkacheln mit dem Import-/Exportprogramm in die Datenbank geladen wurden, könnte das LOD2-Gesamtorthophoto von Berlin z.B. durch die Eingabe folgender Befehle in SQL*Plus erzeugt werden (bitte den 2. Befehl ohne Zeilenumbruch eingeben): set serveroutput on execute mosaicOrthophotosInitial (’Luftbild von Berlin’, ’True Orthophoto’, ’HRSC-Kamerabefliegung, Fa. RSS GmbH’, 2); 4.4 Export 4.4.1 Export von Shapefiles Beim Export von Gebäuden wird die komplexe Gebäudemodellierung auf die einfache Struktur von Shapefiles abgebildet. Dabei wird jedes einzelne Gebäudeteil als ein Geoobjekt mit dem Geometrietyp "3D-Multipatch" im Shapefile ausgegeben. Da das Shapefile-Format keine 57 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Möglichkeit zur Aggregation der enthaltenen Geodatensätze bietet, werden Gebäude, die in der Datenbank aus mehreren Aggregationsebenen bestehen, bei der Ausgabe auf eine flache, einstufige Aggregation reduziert. Jedes Gebäudeteil erhält ein Attribut "Building_ID", das die Zugehörigkeit des Teils zu einem bestimmten Gebäude anzeigt. Die skalaren Attribute der Gebäudeteile wie z.B. Name, Geschossanzahlen usw. werden unmittelbar übertragen. Da Shapefiles keine texturierten Flächen zulassen, können Texturen nicht mitexportiert werden. Einzelnen Gebäudeflächen können in der Datenbank noch weitere thematische Informationen zugeordnet sein. Aufgrund der eingeschränkten Möglichkeiten des Shapefile-Formats, können auch diese Informationen beim Shapefile-Export nicht berücksichtigt werden. Um Gebäudedaten als Shapefile zu exportieren, klickt der Benutzer nach erfolgreicher Anmeldung auf die Export Schaltfläche. Hier hat er die Möglichkeit die Export-Bounding-Box (Raumausschnitt) zu bestimmen, in welcher sich die Gebäude befinden. Alternativ kann er die Gebäude IDs (als minimaler und maximaler Wert) eingeben oder die CityObjectGroup in der Auswahlliste bestimmen. Nach Bestätigen der entsprechenden Schaltfläche wird der Benutzer nach der Zieldatei gefragt. Die „.shp“ Erweiterung fügt das Tool automatisch hinzu. 4.4.2 Export von Rasterdaten Der Export von Rasterdaten erfolgt ähnlich wie der von Shapefiles, nur dass hier die Angaben über Gebäude-IDs oder City Object Group irrelevant sind. Es werden bei der Auswahl des zu exportierenden Gebietes nur die Angaben zur Bounding Box berücksichtigt. Der Benutzer wählt durch einen Klick auf die entsprechende Schaltfläche (Luftbilder bzw. DGM), ob er Luftbild- oder DGM-Daten exportieren möchte. Nach Betätigen der Schaltfläche Export wird der Benutzer nach der Zieldatei gefragt. Die Dateiendung „.tif“ fügt das Tool automatisch zum Namen hinzu. Neben der Bilddatei wird auch eine Worlddatei mit dem gleichen Namen wie der des Bildes mit der Dateiendung „.tfw“ generiert, die die Georeferenzierungsinformationen zu dem Bild beinhaltet. 4.5 Erläuterung der Import-Konvertierungsprozeduren Dieser Abschnitt erläutert die PL/SQL Prozeduren, die für den Import der Shapefiles der Firmen RealIT und RSS in die Berliner 3D-Geodatenbank benötigt werden. Mit Hilfe des Import-/Exportprogramms werden Shapefiles mit 3D-Multipatch- sowie 3DPolygon-Geometriedaten zunächst uninterpretiert in die 3D-Geo-DB eingelesen. Alle Attribute des Shapefiles werden ihrem Typ entsprechend in der CITYOBJECT_GENERICATTRIB gespeichert (siehe Abschnitt 4.3.1). Zur Konvertierung der eingelesenen Shapefiles in 3DGebäudeobjekte stehen derzeit die folgenden Prozeduren zur Verfügung: REALIT_MULTIPATCH, RSS_GRUNDRISSE_MPATCH, RSS_BUILDING_MPATCH. 4.5.1 REALIT_MULTIPATCH Das von der Fa. RealIT gelieferte Shapefile besitzt neben dem Shape-Attribut mit 3DMultipatch-Geometriedaten nur die Attribute “Building_I“, “X_ref“, “Y_ref“ und “Z_ref“ (siehe Abb. 4.4). 58 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Abbildung 4.4: Shapefile im RealIT-Format Das Import-/Exportprogramm importiert diese Attribute entsprechend als GEOM, BUILDING_I, X_REF, Y_REF und Z_REF in die Tabelle CITYOBJECT_GENERICATTRIB (siehe Abb. 4.5). Abbildung 4.5: Importierte RealIT-Daten in der Tabelle CITYOBJECT_GENERICATTRIB 59 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Die Prozedur REALIT_MULTIPATCH generiert aus den importierten Rohdaten schließlich 3D-Gebäude. Dabei werden folgende Attribute des Shapefiles in die Tabellen SURFACE_GEOMETRY bzw. BUILDING übernommen: GEOM (SHAPE-Attribut in der Datei) und BUILDING_I (Name des Gebäudes). Nach der Generierung der entsprechenden Datensätze in der Building-Tabelle werden diese beiden Attribute aus der Tabelle CITYOBJECT_GENERICATTRIB gelöscht. Die anderen Attribute (X_REF, Y_REF und Z_REF) haben keine Entsprechung im Datenmodell und verbleiben deshalb als generische Attribute in der CITYOBJECT_GENERICATTRIB-Tabelle. Für die Bestimmung der zu konvertierenden Objekte in der Tabelle CITYOBJECT wird das Attribut CLASS_ID benutzt. Da es keine regulären CityObjects mit der CLASS_ID=0 gibt, wird dieser Wert zur Kennzeichnung importierter Shapefile-Rohdaten verwendet. Es werden zu jedem importierten Cityobject (CLASS_ID=0) die Flächengeometrien mit Hilfe der Stored Procedure GENERATE_SOLID aus der CITYOBJECT_GENERICATTRIB-Tabelle geholt und in der SURFACE_GEOMETRY-Tabelle abgespeichert. In der Tabelle BUILDING wird neben dem Verweis auf die Geometrie in der SURFACE_GEOMETRY-Tabelle (SolidAggregat) der Name des Gebäudes abgelegt. Dazu wird das Attribut “Building_I“ des Shapefiles verwendet. Nach der Konvertierung wird schließlich die CLASS_ID der betreffenden Tupel in der Tabelle CITYOBJECT auf 10 (= Building) gesetzt. 4.5.2 RSS_GRUNDRISSE_MPATCH Das Shapefile mit Grundrisspolygonen der Fa. RSS GmbH besitzt neben dem Shape-Attribut mit 3D-Polygonen die Attribute “Id“, “AREA“, “PERIMETER“, “GEBT_ID“, “GEB_ID“, “HM_TRAUF“, “HM_RFIRSTN“ und “HM_PLATTE“ (siehe Abb. 4.6). Abbildung 4.6: Shapefile im RSS-Format mit Grundrissdaten 60 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Das Import-/Exportprogramm speichert die Attribute des Shapefiles entsprechend in der CITYOBJECT_GENERICATTRIB-Tabelle (siehe Abb. 4.7). Abbildung 4.7: Importierte RSS-Grundrissdaten in der Tabelle CITYOBJECT_GENERICATTRIB Für die abschließende Konvertierung wird die Prozedur RSS_GRUNDRISSE_MPATCH verwendet. Folgende Attribute des Shapefiles werden dabei in die Tabellen SURFACE_GEOMETRY bzw. BUILDING übernommen: GEOM (SHAPE-Attribut in der Datei), GEBT_ID (Name des Gebäudeteils), GEB_ID (Name des Gebäudes), HM_RTRAUF (Gebäudehöhe). Die Grundrisspolygone werden mit Hilfe der EXTRUDE-Prozedur zu 3D-Volumenkörpern extrudiert. Die dazu benötigte Höhe wird dem Attribut HM_RTRAUF entnommen. Gebäude, die aus mehr als einem Gebäudeteil bestehen, werden als ein Gebäudeaggregat abgespeichert. Das Attribut GEBT_ID wird als Name für das Gebäudeteil übernommen. Es wird der Buchstabe „t“ angehängt, um es als Gebäudeteil zu kennzeichnen. Das Attribut GEB_ID wird als Name des Gebäudeaggregats oder Gebäudes, das nur aus einem Gebäudeteil besteht, übernommen. Der Wert des Attributs HM_RTRAUF wird als Gebäudehöhe abgespeichert. Bei der Konvertierung werden nur solche Tupel in der Tabelle CITYOBJECT berücksichtigt, deren Attribut CLASS_ID = 0 ist. Nach der Konvertierung werden alle importierten Attribute aus der GENERICATTRIB-Tabelle gelöscht und die CLASS_ID der importierten Cityobjekte in der CITYOBJECT Tabelle auf 10 (= Building) gesetzt (vgl. Abb 4.8). Abbildung 4.8: Inhalt der BUILDING-Tabelle nach dem Import der RSS-Grundrissdaten. 61 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export 4.5.3 RSS_BUILDING_MPATCH Für den Import in die 3D-Geodatenbank wurde das Shapefile der Fa. RSS mit den ca. 67000 Gebäudegrundrissen des Berliner Zentrums mittels ArcScene extrudiert und gespeichert, so dass die Gebäudegeometrien durch 3D-Multipatches repräsentiert werden. Dieses Shapefile besitzt neben dem Shape-Attribut die weiteren Attribute “Id”, “AREA”, “PERIMETER”, “AOBJID”, “OBJART”, “OBJEKTART”, “HM_TRAUF”, “HM_RFIRSTN”, “HM_PLATTE”, “HMAX_DACH”, “HMIN_DACH” und “VEG” (siehe Abb. 4.9). Abbildung 4.9: Shapefile im RSS-Format mit 3D-Gebäudedaten als Multipatches Das Import-/Exportprogramm speichert die Attribute des Shapefiles entsprechend in der Tabelle CITYOBJECT_GENERICATTRIB (siehe Abb. 4.10). Abbildung 4.10: Importierte RSS-Multipatch-Daten in der Tabelle CITYOBJECT_GENERICATTRIB 62 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export Die Prozedur RSS_BUILDING_MPATCH generiert aus den importierten Rohdaten schließlich 3D-Gebäude. Dabei werden folgende Attribute des Shapefiles in die Tabellen SURFACE_GEOMETRY, BUILDING und EXTERNALREFERENCE übernommen: GEOM (Shape-Attribut des Shapefiles), ID (Name des Gebäudes), OBJEKTART (Funktion des Gebäudes), HM_RTRAUF (Gebäudehöhe) und AOBJID (ALK-Schlüssel). Das Attribut “ID“ wird als Name, das Attribut “HM_RTRAUF“ als Höhe und das Attribut “OBJEKTART“ als Funktion des Gebäudes übernommen und in der Tabelle BUILDING abgespeichert. Der ALK-Verweis wird dem Attribut AOBJID entnommen und in die Tabelle EXTERNALREFERENCE zusammen mit der INFOSYS Bezeichnung ’urn:ALK’ abgelegt (siehe Abb. 4.11). Die Tabelle BUILDING erhält einen Verweis auf die Tabelle SURFACE_GEOMETRY, in der die Geometrie des Gebäudes mit Hilfe der Prozedur GENERATE_SOLID abgelegt wird. Abbildung 4.11: Inhalt der Tabelle EXTERNALREFERENCE nach der Konvertierung der RSSMultipatch-Daten Bei der Konvertierung werden nur solche Tupel in der Tabelle CITYOBJECT berücksichtigt, deren Attribut CLASS_ID = 0 ist. Nach der Konvertierung werden alle importierten Attribute aus der GENERICATTRIB-Tabelle gelöscht und die CLASS_ID der importierten Cityobjekte in der CITYOBJECT-Tabelle auf 10 (= Building) gesetzt (vgl. Abb 4.12). Abbildung 4.12: Inhalt der Tabelle BUILDING nach der Konvertierung der RSS-Multipatch-Daten 63 3D-Geodatenbank Berlin 4. Werkzeug für den Datenimport und -export 4.5.4 EXTRUDE-Prozedur Die Prozedur EXTRUDE erzeugt für CityObjects mit Grundrissgeometrie (als CITYOBJECT_GENERICATTRIB) die extrudierten Wand- und Dachflächen und speichert diese als CITYOBJECT_GENERICATTRIB ab. Dabei • wird die Extrusionshöhe dem CITYOBJECT_GENERICATTRIB entnommen, dessen Name als Parameter “heightAttributeName“ übergeben wird (dieses muss vom Typ REAL sein), • hat die Grundrissgeometrie als Attribut den Namen, der als Parameter “geometryAttributeName“ übergeben wird (Typ GEOMVAL, DATATYPE=6). • Die Grundrissgeometrie muss ein Polygon ggf. mit Aussparungen (Löchern) sein, d.h. die SDO_GEOMETRY ist eingeschränkt auf SDO_GTYPE = 2003/3003, SDO_ETYPE = 1003/2003 und SDO_INTERPRETATION = 1. • Die Prozedur geht davon aus, dass es nur ein Attribut dieses Namens gibt. • Es werden nur CityObjects mit CLASS_ID = 0 berücksichtigt. • Die erzeugte Boundary-Representation-Geometrie wird als CITYOBJECT_GENERICATTRIB abgespeichert mit dem Namen, der als Parameter “newGeometryAttributeName“ übergeben wird. • wird jede Fläche als einzelnes Attribut abgespeichert, • jedes dieser Attribute hat als Wert eine SDO_GEOMETRY (DATATYPE = 6). • Die Orientierung wird durch den Parameter “changeOrientation“ gesteuert: Falls die Grundrisspolygone richtig orientiert sind (Normale zeigt nach der "Rechte-Hand-Regel" nach unten=Außen), muss “changeOrientation“ FALSE sein, ansonsten TRUE. Dann wird die Orientierung der Grundrissfläche umgedreht. • Die IDs der CITYOBJECT_GENERICATTRIB für ein CityObject sind nach Aufruf der Prozedur aufsteigend so angeordnet, dass zuerst das Grundrisspolygon, dann die Wandpolygone und zuletzt das Dachpolygon kommt. • In dem Attribut “strval“ eines CITYOBJECT_GENERICATTRIB, das eine extrudierte Fläche repräsentiert, steht als Wert die Art der Fläche: Boden-, Wand- oder Dachfläche • Jedes CityObject darf nur ein einzelnes Höhenattribut haben. Beispiel für Aufruf: exec extrude('GEOM', 'h', 'NEW_GEOM', false); Beispiel für Aufruf für die Daten aus der Datei “Grundrisse_Ostkreuz_3D_Polygon.shp“: exec extrude('GEOM', 'HM_RTRAUF', 'NEW_GEOM', false); 64 3D-Geodatenbank Berlin 5 Nutzungsbeispiele 5.1 Direkter Zugriff über SQL Im Folgenden werden zwei Beispiele vorgestellt, über die Orthophotos (Beispiel 1) und Gebäude (Beispiel 2) aus der Datenbank selektiert werden können. Insbesondere bei der Extraktion von Rasterobjekten sind reinen SQL-Mechanismen oder auch SQL*Plus Grenzen gesetzt. So exportiert Oracle 10g von sich aus keine Bildformate; diese müssen erst mit einer Anwendung aus den gelieferten Rohdaten und Metainformationen erzeugt werden. Beispiel 1 – Abfrage von Orthophotos Eine direkte Abfrage eines Rasterobjekts über eine SQL-Select-Anweisung analog zur Abfrage von Vektorgeometrien ist in Oracle 10g nicht vorgesehen. Stattdessen muss durch den Aufruf von Stored-Procedures ein entsprechender Raumausschnitt bei angegebener räumlicher Auflösung aus einem Georaster ausgeschnitten und in eine Datenstruktur abgelegt werden. Über einen zusätzlichen Aufruf werden die Metainformationen zum ausgewählten Georaster selektiert. Diese enthalten u.a. Informationen zur verwendeten Farbtabelle und zum Raumbezug. Die von Oracle angebotene Methode zum Export eines Georasters in eine Datei kann an dieser Stellen nicht genutzt werden, da die meisten Nutzer über keinen direkten Zugang zum Datenbankrechner verfügen ( mdsys.sdo_geor.exportTo(...) ). Grundsätzlich stehen zwei Methoden zur Verfügung, über die Ausschnitte aus einem Georaster selektiert werden können. Streng genommen handelt es sich dabei um dieselbe Methode, der jedoch unterschiedliche Arten von Parametern übergeben werden. 1. Selektion über Angabe der Pixelkoordinaten: Aus einem Georaster wird ein Teilraster ausgeschnitten/selektiert, wobei der Nutzer die Koordinaten des gewünschten Ausschnitts in Pixel (minx, miny, maxx, maxy) angibt. declare geor sdo_georaster; lb blob; begin -- // lb must be created outside this method!!! -- // e.g. lb can be loaded from a already existing table -- // SELECT datacol INTO lb from TEMP_TABLE WHERE id = 1 -- // FOR UPDATE; SELECT orthophotoproperty INTO geor from ORTHOPHOTO where id = 1; sdo_geor.getRasterSubset(geor, 0 , sdo_number_array( 100 , 150 , 450 , 1000 ), null, lb ); end Die Pixelkoordinaten werden der Methode sdo_geor.getRasterSubset(...) in Form eines Arrays übergeben. Ferner muss der Methode als erster Parameter mitgeteilt werden, aus welchem Georaster sie einen Ausschnitt extrahieren soll; zu diesem Zweck muss dieses zunächst über eine Select-Anweisung aus der fraglichen Rasterdatentabelle bestimmt werden. Die WHERE-Bedingung dieser Selektion muss sicher stellen, dass genau ein Objekt selektiert wird. Das Ergebnis der Abfrage eines Sub-Rasters wird im Beispiel auf die als letztes übergebene und als BLOB definierte Variable ‚lb’ gelegt. Diese steht dann zur Verarbeitung über weitere Stored Procedures bzw. SQL*Plus-Methoden oder bei externem Aufruf z.B. durch ein Java-Programm zur Verfügung. Wichtig ist, dass ‚lb’ zuvor erzeugt wurde. Dies kann entweder durch das aufrufende Programm oder Selektion eines bereits existierenden BLOBs aus der Datenbank geschehen. 65 3D-Geodatenbank Berlin 5. Nutzungsbeispiele 2. Selektion über Angabe eines georeferenzierten Raumausschnitts (Envelopes): In diesem Fall gibt der Nutzer anstelle der Pixelkoordinaten ein georeferenziertes Rechteck (mdsys.sdo_geometry) zur Bestimmung des zu selektierenden Raumausschnitts an. declare geor sdo_georaster; lb blob; begin -- // lb must be created outside this method!!! -- // e.g. lb can be loaded from a already existing table -- // SELECT datacol INTO lb from TEMP_TABLE WHERE id = 1 -- // FOR UPDATE; SELECT orthophotoproperty INTO geor from ORTHOPHOTO where id = 1; sdo_geor.getRasterSubset(geor, 0 , mdsys.sdo_geometry (2003, null, null, mdsys.sdo_elem_info_array (1,1003,3), mdsys.sdo_ordinate_array (-109,37,-102,40)), null , lb ); end Die übrigen Übergabeparameter sind identisch zur Selektion über Pixelkoordinaten. Beispiel 2 – Abfrage von Gebäuden Die Abfrage von Gebäuden bzw. der zugeordneten Geometrien gestaltet sich auf der einen Seite einfacher als die Abfrage von Georastern, da einfache SQL-Ausdrücke verwendet werden können. Auf der anderen Seite ist die Selektion komplizierter, da die benötigten Informationen auf mehrere Tabellen mit einer zum Teil rekursiven Struktur verteilt sind. Das folgende Statement selektiert alle Gebäude mit ihren Attributen, deren ID in einem definierten Wertebereich (9850 < ID < 9860) liegen: SELECT a.LOD2_SURFACE_ID, a.NAME, a.FUNCTION, a.YEAR_OF_CONSTRUCTION, a.ROOF_TYPE, a.MEASURED_HEIGHT, a.NO_OF_STOREYS_ABOVE_GROUND, a.NO_OF_STOREYS_UNDER_GROUND, a.BUILDING_AGGREGATE_ID, b.ID, b.CREATIONDATE, b.TERMINATIONDATE, b.LASTMODIFICATIONDATE, b.UPDATINGPERSON, b.REASONFORUPDATE, b.LINEAGE FROM building a, cityobject b WHERE a.LOD2_SURFACE_ID is not NULL and a.ID = b.ID and a.ID > 9850 and a.ID < 9860 Zu beachten ist, dass das Feld a.LOD2_SURFACE_ID selektiert wird. Dieses enthält eine Referenz auf einen Eintrag in der Tabelle SURFACE_GEOMETRY, über die die Geometrien eines Gebäudes verfügbar sind. Neben LoD2 stehen auch noch Referenzen zu LoD1 und LoD3 zur Verfügung. Da i.d.R. davon zugehen ist, dass ein Gebäude über mehr als eine Geometrie verfügt, ist das referenzierte Element in SURFACE_GEOMETRY mit großer Wahrscheinlichkeit eine Aggregation von Surfaces (Flächen). Das bedeutet, der entsprechende Eintrag verfügt selbst über keine Geometrie, statt dessen existieren in der selben Tabelle weitere Einträge die diesen als ,Parent’ führen (vgl. Abschnitt 2.2.3.3). Eine rekursive Anfrage über SURFACE_GEOMETRY sorgt dafür, dass alle ‚Kinder’, Enkel’ etc. gefunden werden. Die Rekursion bricht dann ab, wenn ein selektierter Eintrag über eine Geometrie verfügt (GEOMETRY is not NULL). 66 3D-Geodatenbank Berlin 5. Nutzungsbeispiele Selektion der Eltern-Geometrie: SELECT ID, GEOMETRY FROM SURFACE_GEOMETRY WHERE ID = $LOD2_SURFACE_ID$ ($LOD2_SURFACE_ID$ Æ zuvor selektierte ID der mit einem Gebäude verbundenen Geometrie für LoD 2) Folgendes Statement wird in einer Rekursion aufgerufen bis die Bedingung GEOMETRY is not NULL erfüllt ist: SELECT ID, GEOMETRY FROM SURFACE_GEOMETRY WHERE PARENT_ID = $ID$ ($ID$ Æ aus der vorherigen Iteration bestimmte SURFACE_GEOMETRY-Schlüssel) 5.2 Java-Schnittstelle Im Folgenden wird eine mögliche Java-Schnittstelle zum Auslesen von Gebäuden aus der Oracle-Datenbank dargestellt. Das in diesem Kapitel vorgestellte Beispielprogramm wird Beispiel 2 aus Kapitel 5.a in ein Java-Programm umsetzen und so den Export von Gebäuden demonstrieren. Zum Ausführen des Beispielprogramms werden die folgenden Java-Libraries benötigt: • • • • • deegree.jar ojdbc14.jar sdoapi.jar sdoutl.jar jts.jar Alle Libraries liegen auf der mitgelieferten CD vor. Das Beispielprogramm nutzt das Open Source Framework deegree, um die aus Oracle ausgelesenen Objekte in lesbare Geometrien (XML) umzuwandeln (siehe http://www.deegree.org). Die Methode selectBuildings(...) selektiert alle Gebäude sowie die relational verbundenen Cityobjects und Objectclasses deren ID größer der übergebenen Minimum-ID und kleiner der übergeben Maximum-ID sind. Das Ergebnis wird in einem Tabellenobjekt abgelegt und an die aufrufende Methode ( main(...) ) zurückgegeben. Diese ruft als nächstes die Methode selectSurfaceGeometries(...) auf, wobei die zuvor erzeugte Tabelle übergeben wird. Innerhalb von selectSurfaceGeometries(...) wird zunächst eine FeatureCollection erzeugt, in der die Gebäude später als Feature abgelegt werden sollen. Das Schema der Gebäude-Feature wird durch Aufruf der Methode createFeatureType() erzeugt. In der folgenden Schleife über jede Zeile der übergebenen Tabelle werden für jedes Gebäude zunächst alle zugehörigen alphanumerischen Attribute bestimmt und in FeatureProperties abgelegt. Als letztes werden durch den Block: Object id = table.getValueAt( i, 0 ); Table t1 = osa.performTableQuery( "select ID, GEOMETRY, IS_SOLID from " + "SURFACE_GEOMETRY where ID = " + id ); List list = new ArrayList(); if ( t1.getValueAt( 0, 1) == null ) { getChildrenGeometries( t1.getValueAt( 0, 0), list ); } else { list.add( t1.getValueAt( 0, 1) ); } alle Flächen bestimmt, die mit einem Gebäude verbunden sind und anschließend in das FeatureProperty mit dem Namen ‚GEOM’ geschrieben. Aus den FeatureProperties wird abschließend ein Feature erzeugt und in der FeatureCollection abgelegt. Nach Beendigung der Schleife, wird die gefüllte FeatureCollection an die aufrufende Methode zurückgegeben und 67 3D-Geodatenbank Berlin 5. Nutzungsbeispiele dort in eine XML/GML2-Datei exportiert. Die Flächen eines Gebäudes werden dabei als MultiPolygon wiedergegeben. import java.sql.Connection; import java.util.ArrayList; import java.util.List; import import import import import import import import import import import import import org.deegree.model.feature.Feature; org.deegree.model.feature.FeatureCollection; org.deegree.model.feature.FeatureProperty; org.deegree.model.feature.FeatureType; org.deegree.model.feature.FeatureTypeProperty; org.deegree.model.geometry.GM_MultiSurface; org.deegree.model.geometry.GM_Surface; org.deegree.model.table.Table; org.deegree_impl.io.DBConnectionPool; org.deegree_impl.io.OracleSpatialAccess; org.deegree_impl.io.shpapi.ShapeFile; org.deegree_impl.model.feature.FeatureFactory; org.deegree_impl.model.geometry.GeometryFactory; public class Object3DSelecter { private Connection con = null; public Object3DSelecter(Connection con) { this.con = con; } /** * selects all buildings of an objectclass and a given range of * range of ID-values */ public Table selectBuildings(String objectClass, int idMin, int idMax) throws Exception { OracleSpatialAccess osa = new OracleSpatialAccess( con ); Table table = osa.performTableQuery( "select a.LOD2_SURFACE_ID," + "a.NAME, a.FUNCTION, a.YEAR_OF_CONSTRUCTION, a.ROOF_TYPE, " + "a.MEASURED_HEIGHT,a.NO_OF_STOREYS_ABOVE_GROUND, " + "a.NO_OF_STOREYS_UNDER_GROUND, b.ID, b.CREATIONDATE, " + "b.TERMINATIONDATE, b.LASTMODIFICATIONDATE, " + "b.UPDATINGPERSON, b.REASONFORUPDATE, b.LINEAGE, " + "c.CLASSNAME, a.BUILDING_AGGREGATE_ID from " + "building a, cityobject b, OBJECTCLASS c where " + "a.LOD2_SURFACE_ID > -1 and " + "c.CLASSNAME = '" + objectClass +"' and c.ID = " + "b.CLASS_ID and a.ID = b.ID and a.ID > " + idMin + " and a.ID < " + idMax ); return table; } /** * selektiert die Wurzelgeometrie für jedes in der übergebenen Tabelle * enthaltene Gebäude * @param table * @return * @throws Exception */ public FeatureCollection selectSurfaceGeometries(Table table) throws Exception { 68 3D-Geodatenbank Berlin 5. Nutzungsbeispiele FeatureCollection fc = FeatureFactory.createFeatureCollection("FC",table.getRowCount()); FeatureType ft = createFeatureType(); OracleSpatialAccess osa = new OracleSpatialAccess( con ); for ( int i = 0; i < table.getRowCount(); i++ ) { String parentAttrib[] = null; if ( table.getValueAt(i, 16) != null ) { parentAttrib = getParentAttributes( table.getValueAt(i,16) ); } else { parentAttrib = new String[2]; } FeatureProperty[] fp = new FeatureProperty[18]; fp[0] = FeatureFactory.createFeatureProperty( "NAME", table.getValueAt( i, 1 ) ); fp[1] = FeatureFactory.createFeatureProperty( "FUNCTION", table.getValueAt( i, 2 ) ); fp[2] = FeatureFactory.createFeatureProperty( "YOC", table.getValueAt( i, 3 ) ); fp[3] = FeatureFactory.createFeatureProperty( "ROOFTYPE", table.getValueAt( i, 4 ) ); fp[4] = FeatureFactory.createFeatureProperty( "HEIGHT", table.getValueAt( i, 5 ) ); fp[5] = FeatureFactory.createFeatureProperty( "SAG", table.getValueAt( i, 6 ) ); fp[6] = FeatureFactory.createFeatureProperty( "SUG", table.getValueAt( i, 7 ) ); fp[7] = FeatureFactory.createFeatureProperty( "ID", table.getValueAt( i, 8 ) ); fp[8] = FeatureFactory.createFeatureProperty( "CREATION", table.getValueAt( i, 9 ).toString() ); fp[9] = FeatureFactory.createFeatureProperty( "TERM", table.getValueAt( i, 10 ) ); fp[10] = FeatureFactory.createFeatureProperty( "MOD", table.getValueAt( i, 11 ) ); fp[11] = FeatureFactory.createFeatureProperty( "UPDATEPERS", table.getValueAt( i, 12 ) ); String reason = (String)table.getValueAt( i, 13 ); if ( reason != null ) { int k = reason.length(); if ( k > 255 ) k = 255; reason = reason.substring( 0, k ); } fp[12] = FeatureFactory.createFeatureProperty( "REASON", reason ); fp[13] = FeatureFactory.createFeatureProperty( "LINEAGE", table.getValueAt( i, 14 ) ); fp[14] = FeatureFactory.createFeatureProperty( "CLASSNAME", 69 3D-Geodatenbank Berlin 5. Nutzungsbeispiele table.getValueAt( i, 15 ) ); fp[15] = FeatureFactory.createFeatureProperty( "P_NAME", parentAttrib[0] ); fp[16] = FeatureFactory.createFeatureProperty( "P_FUNCTION", parentAttrib[1] ); Object id = table.getValueAt( i, 0 ); Table t1 = osa.performTableQuery( "select ID, GEOMETRY, " + IS_SOLID from SURFACE_GEOMETRY where ID = " + id ); List list = new ArrayList(); if ( t1.getValueAt( 0, 1) == null ) { getChildrenGeometries( t1.getValueAt( 0, 0), list ); } else { list.add( t1.getValueAt( 0, 1) ); } GM_Surface[] surfs = (GM_Surface[])list.toArray( new GM_Surface[list.size()] ); GM_MultiSurface msurf = GeometryFactory.createGM_MultiSurface( surfs ); fp[17] = FeatureFactory.createFeatureProperty( "GEOM", msurf ); Feature feat = FeatureFactory.createFeature( "ID"+i, ft, fp ); fc.appendFeature(feat); } return fc; } /** * ermittelt die Attribute der 'Eltern-Gebäudes' falls ein * selektiertes Gebäude Bestandteil einer Aggregation ist * @param parentid * @return * @throws Exception */ private String[] getParentAttributes(Object parentid) throws Exception { OracleSpatialAccess osa = new OracleSpatialAccess( con ); Table table = osa.performTableQuery( "select parentid, name, " + "function from BUILDING where ID = " + parentid ); String[] parentAttrib = null; if ( table.getValueAt( 0, 0 ) != null ) { parentAttrib = getParentAttributes( table.getValueAt( 0, 0 ) ); } else { parentAttrib = new String[2]; parentAttrib[0] = (String)table.getValueAt( 0, 1 ); parentAttrib[1] = (String)table.getValueAt( 0, 2 ); } return parentAttrib; } /** * erzeugt den FeatureType, der das Schema eines Gebäudes beschreibt * @return */ private FeatureType createFeatureType() { FeatureTypeProperty[] ftp = new FeatureTypeProperty[18]; 70 3D-Geodatenbank Berlin 5. Nutzungsbeispiele ftp[0] = FeatureFactory.createFeatureTypeProperty( "NAME", "java.lang.String", true ); ftp[1] = FeatureFactory.createFeatureTypeProperty( "FUNCTION", "java.lang.String", true ); ftp[2] = FeatureFactory.createFeatureTypeProperty( "YOC", "java.lang.Integer", true ); ftp[3] = FeatureFactory.createFeatureTypeProperty( "ROOFTYPE", "java.lang.Integer", true ); ftp[4] = FeatureFactory.createFeatureTypeProperty( "HEIGHT", "java.lang.Double", true ); ftp[5] = FeatureFactory.createFeatureTypeProperty( "SAG", "java.lang.Integer", true ); ftp[6] = FeatureFactory.createFeatureTypeProperty( "SUG", "java.lang.Integer", true ); ftp[7] = FeatureFactory.createFeatureTypeProperty( "ID", "java.lang.Integer", true ); ftp[8] = FeatureFactory.createFeatureTypeProperty( "CREATION", "java.lang.String", true ); ftp[9] = FeatureFactory.createFeatureTypeProperty( "TERM", "java.lang.String", true ); ftp[10] = FeatureFactory.createFeatureTypeProperty( "MOD", "java.lang.String", true ); ftp[11] = FeatureFactory.createFeatureTypeProperty( "UPDATEPERS", "java.lang.Integer", true ); // consider to skip because just 255 are accepted ftp[12] = FeatureFactory.createFeatureTypeProperty( "REASON", "java.lang.String", true ); ftp[13] = FeatureFactory.createFeatureTypeProperty( "LINEAGE", "java.lang.String", true ); ftp[14] = FeatureFactory.createFeatureTypeProperty( "CLASSNAME", "java.lang.String", true ); ftp[15] = FeatureFactory.createFeatureTypeProperty( "P_NAME", "java.lang.String", true ); ftp[16] = FeatureFactory.createFeatureTypeProperty( "P_FUNCTION", "java.lang.String", true ); ftp[17] = FeatureFactory.createFeatureTypeProperty( "GEOM", "org.deegree.model.geometry.GM_Object", true ); return FeatureFactory.createFeatureType(null, null, "Building", ftp); } /** * ermittelt in einer Rekursion alle zu einem Gebäude gehörenden * Flächen * @param id * @param list * @return * @throws Exception */ public List getChildrenGeometries(Object id, List list) throws Exception { OracleSpatialAccess osa = new OracleSpatialAccess( con ); Table table = osa.performTableQuery( "select ID, GEOMETRY from " + SURFACE_GEOMETRY where PARENT_ID = " + id); for ( int i = 0; i < table.getRowCount(); i++ ) { if ( table.getValueAt( i, 1) == null ) { getChildrenGeometries( table.getValueAt( i, 0), list ); } else { list.add( table.getValueAt( i, 1) ); } } 71 3D-Geodatenbank Berlin 5. Nutzungsbeispiele return list; } public static void main(String[] args) throws Exception { DBConnectionPool pool = DBConnectionPool.getInstance(); Connection con = pool. acuireConnection( "oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@*****:1521:devs", "berlin3d", "****" ); Object3DSelecter bs = new Object3DSelecter( con ); Table table = bs.selectBuildings( "Building", 1, 12 ); FeatureCollection fc = bs.selectSurfaceGeometries(table); FileOutputStream fos = new FileOutputStream("e:/temp/out" ); GMLFeatureAdapter.export( fc, fos ); fos.close(); System.exit(0); } } 72