Open Functions

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche

Open Functions (en)

 Homepage of the Open Functions project (www.openfunctions.org)

'Open functions' build the foundation of interoperable systems of the next generation based on common functionality. Libraries and program interfaces will play an important role here.

Einleitung

 Startseite des Projekts Open Functions (www.openfunctions.ch)

Offene Funktionen bilden dank gemeinsamer Funktionalität die Grundlage für interoperable System der "nächsten Generation". Wichtig sind dabei standardisierte Bibliotheken und Programmschnittstellen.

Überblick

Open Functions eröffnet die Möglichkeit, Funktionalität als Bausteine anzubieten und über eine einfache Datenschnittstelle in Anwendungen und anderen Bausteinen zu nutzen. Open Functions ist insbesondere auch für Funktionen geeignet, die Geometrie und Grafik effizient verarbeiten. Open Functions richtet sich an:

  • Organisationen, deren Aufgaben mit Standardsystemen nicht genügend lösbar sind;
  • Software-Hersteller, die Lösungen für spezialisierte Aufgaben herstellen, ohne sich deswegen um ein Gesamtsystem kümmern zu müssen;
  • Organisationen, die integrierte Systeme entwerfen und herstellen

Open Functions bietet einerseits die nötige technische Grundlage und schafft anderseits einen organisatorischen Rahmen.

Ausgangslage und Zielsetzung

In vielen Software-Projekten werden Standard-Systeme eingesetzt und mittels Konfigurierung und Programmierung spezifischer Teile auf die konkrete Aufgabe ausgerichtet. Der Einbezug weiterer Software-Angebote scheitert oft an der Schwierigkeit, die Software zu integrieren.

Werden Branchenlösungen erstellt, basieren sie meist auf einem bestimmten Grundsystem. Auf dieser Basis werden dann die branchenspezifischen Aufgaben programmiert. Oft wären einem Teil der Nutzer aber aus verschiedenen Gründen aber besser gedient, wenn ein anderes Grundsystem zur Anwendung käme. Die branchenspezifische Funktionalität muss dann erneut programmiert werden. Hier setzt Open Functions ein!

Open Functions eröffnet die Möglichkeit, Funktionalität als Baustein anzubieten und über eine einfache Datenschnittstelle in Anwendungen und anderen Bausteinen zu nutzen.

Technische Grundidee

Anwendungen und Bausteine können miteinander verbunden werden und die nötigen Daten (Objekte mit Attributen (Text, numerische Werte, Koordinaten, etc..) und Unterobjekten) über eine einfache Schnittstelle effizient austauschen.

Abbildung 1

Dabei kann die Anwendung und jeder Baustein definieren, gemäss welcher Struktur (welche Objekte mit welchen Attributen und Unterobjekten) sie Daten liefert bzw. erwartet. Die Bibliothek, welche die Schnittstelle anbietet und die Verbindungspipeline kontrolliert eliminiert Datenelemente, die für den Empfänger nicht von Belang sind und leitet die anderen weiter.

Anwendungen lesen und schreiben Daten, indem sie entsprechende Methoden der Schnittstelle aufrufen. Komponenten können sich gleich verhalten. Dies führt aber dazu, dass die empfangende Komponente in einem anderen Systemprozess ablaufen muss als die Anwendung. Um dies - wo möglich - zu vermeiden, kann das Lesen und Schreiben durch Bausteine innerhalb von Ereignismethoden stattfinden, welche indirekt durch die Lese oder Schreiboperation der Anwendung ausgelöst werden.

Bausteine können ganz unterschiedliche Aufgaben erfüllen. Bausteine können z.B. Daten ab externen Medien lesen oder auf solche schreiben (Decoder, Encoder), Daten nach bestimmten Regeln generieren, Daten überprüfen, Daten mit anderen Daten kombinieren, grafische Darstellungen erzeugen. Bausteine wirken typischerweise auf eine grössere Datenmenge. Sie entsprechen damit nicht einem Methoden oder Prozedur-Aufruf, sondern lösen eine Teilaufgabe möglichst vollständig.

Bausteine können insbesondere auch hintereinander geschaltet werden:

Abbildung 2

Es ist aber auch möglich, dass ein Baustein zur Erfüllung ihrer Aufgabe einen anderen Baustein einsetzt, ohne dass sich die Anwendung kümmern muss.

Abbildung 3

Das Verknüpfen der Bausteine und die Datenübergabe sind dabei klar getrennt, sodass es möglich ist, dass der Programmteil, welcher die Lese bzw. Schreiboperationen ausführt, weitgehend unabhängig von den involvierten Bausteinen aufgebaut sein kann.

Damit möglichst gleich strukturierte Daten übergeben werden können, macht es Sinn, dass für Gruppen von Bausteine eine einheitliche Vorstellung über die Datenstruktur erarbeitet wird.

Hinweise zur technischen Umsetzung

Damit die Anforderungen an die Programmierung der Anwendungen und Bausteine relativ klein gehalten werden können, wurde die Bibliothek in C++ realisiert. Zusätzlich wird eine C-Schnittstelle angeboten.

Die Bibliothek soll als DLL für Windows und .NET angeboten werden und für andere Plattformen mindestens als Quelltext zur Verfügung stehen. Bausteine sollen ebenfalls als DLL’s zur Verfügung gestellt werden. Ob sie auch als Quelltext angeboten werden, ist Sache der Hersteller. Weitergehende Anforderungen müssen im Rahmen der Gemeinschaft der Hersteller koordiniert gelöst werden.

Beispiele von Bausteinen

Anschlüsse an Datenquellen und -Senken:

  • Dateien gemäss verschiedenen Konventionen lesen bzw. schreiben (z.B. CSV, INTERLIS 1, INTERLIS 2)
  • Daten von Datenbanken lesen bzw. auf diese schreiben
  • Anschlüsse an Internet-Dienste

Datenauswertungen:

  • Differenzerkennung (insbesondere auch im geometrischen Bereich)
  • Daten überprüfen
  • View-Operation im Sinne der Datenbanktechnik
  • Statistik
  • Semantische Transformationen
  • Längen und Flächen von Linien berechnen
  • Koordinatentransformationen
  • Geometrische Auswertung (Schnitte, Abgleiche, etc.)
  • 3DLinie aus 2D-Linie plus Geländemodell erzeugen
  • Topologische Auswertungen (z.B. kürzester Weg)
  • Sichtbarkeitsanalysen
  • Generalisierungen

Grafische Visualisierung unterstützen:

  • Text entlang Linien und in Flächen (Label Placement)
  • Bandierungsflächen bestimmen
  • Vermeidung von Darstellungskonflikten
  • Generierung schematischer Darstellungen
  • Umgang mit Farbprofilen

Grafische Oberflächen und grafische Produkte

  • ...

Anwendungsspezifische Bausteine:

  • Schallausbreitung
  • Ausbreitung von elektromagnetischen Wellen
  • Ausgleich von Vermessungsnetzen