Geoanwendungen und -verarbeitung in Rust: Ein Einstieg in die GeoRust-Community
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 88 | |
Author | ||
License | CC Attribution 4.0 International: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/56740 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
| |
Keywords |
16
20
32
34
45
46
67
75
78
79
80
85
00:00
MARKUS <Unternehmensspiel>GoogleSpeicherzugriffCompilerBenchmarkAtomic nucleusSystems <München>ObjektorientierungProgramming languageMacro (computer science)Error messageSet (mathematics)AlgorithmBenchmarkC++Template (C++)Function (mathematics)NumberDefault (computer science)Variable (mathematics)CodeDatabaseCompilerCMakeCategory of beingUser interfaceMicrosoftSoftware testingSimilarity (geometry)Computer animation
08:19
MultiplicationDurchschnitt <Mengenlehre>Vector graphicsLINUXWINDOWS <Programm>KommunikationVariable (mathematics)Coordinate systemLinieGeometryGeodesicSystems <München>Voronoi diagramMilitary operationPolygonVector graphicsFile formatCodeFreeBSDKommunikationObject (grammar)WINDOWS <Programm>Hand fanDistanceProjektion <Mathematik>TypInterface (chemistry)Geometry
14:40
ZeitreiheVector graphicsPoint cloudZeitreiheGeodesicDynamic rangeComputer animation
16:01
Server (computing)Ubuntu <Programm>WINDOWS <Programm>Löschen <Datenverarbeitung>Algebraic closureWINDOWS <Programm>Object (grammar)Algebraic closureGeodesicGEOS <Betriebssystem>Systems <München>RectangleLöschen <Datenverarbeitung>Pyramid (geometry)Ubuntu <Programm>Computer animation
18:44
Web page
19:08
Link (knot theory)GEOS <Betriebssystem>Disk read-and-write headModule (mathematics)Online chatProgramming languageAttribute grammarFunktionalitätMeeting/Interview
24:39
MARKUS <Unternehmensspiel>
Transcript: German(auto-generated)
00:08
Herzlich willkommen zu unserem Vortrag zu GeoRust. Mein Name ist Christian und gemeinsam mit Johannes möchten wir euch Geo-Anwendung und Geo-Datenverarbeitung in der Programmiersprache Rust näherbringen. Und hierfür möchten wir euch einen Einstieg in die GeoRust Community bieten.
00:23
Dieser Vortrag basiert zum Teil auf dem letztjährigen Fos4G Vortrag von Firmen und wir danken ihm recht herzlich, dass er uns seine Infos und seine Folien bereitgestellt hat. Zunächst möchte ich einen kurzen Überblick über den Hintergrund von Johannes und mir geben, wir beide sind Mitgründer der Geoengine GmbH. Dies ist ein Startup der Philips Universität Marburg und entstanden aus der Datenbank Systeme
00:44
Arbeitsgruppe der Informatik, gemeinsam mit der Geografie der gleichen Universität. Und dort haben wir im Bereich Biodiversität und Fernerkundung geforscht und über einen BMI gefördert, den X-Sys-Forschungstransfer, nehmen wir nun unsere Forschungsergebnisse und wandern sich in das Produkt Geoengine um.
01:02
Weil Geoengine Rust geschrieben ist, ist es quasi eine Herzensangelegenheit, hier die Programmiersprache Rust näher zu bringen. Als Unternehmen bieten wir verschiedene Leistungen, unter anderem die Entwicklung von Datenportalen auf Basis der Geoengine. Dort hatten wir auch gestern einen Vortrag, der Geoengine als Datenportal mit Python und User Interface näher gebracht hat.
01:24
Wir bieten Datenbereitstellungen an in einer DataCube-artigen Struktur und wir helfen bei der Erstellung von Datenprodukten mit Hilfe der Geoengine und bieten dies als Software-as-a-Service. Für alle Programmiersprachen Interessierte stellt sich natürlich die Frage, wieso gerade Rust und wieso finden wir Rust so gut,
01:40
dass wir einen Vortrag überhalten möchten. Und da können wir zunächst sagen, wir arbeiten sehr gerne mit systemnahen Sprachen, mit einer sehr guten Performance. Denn für Geoengine zum Beispiel brauchen wir eine sehr gute Performance, um Geo-Daten verarbeiten zu können. Und die Programmiersprache Rust bietet hier einen sehr guten Ersatz für C++.
02:00
Wir haben hier ebenso keine garbage collection, aber genauso viel Kontrolle. Und im Vergleich zu C++ haben wir hier mehr Zuverlässigkeit und wir haben eine strikte Typisierung und wir haben viel Schutz beim Speicherzugriff, denn man arbeitet in Rust kaum mit Pointeren, sondern eher mit Referenzen und ist dort sehr gut geschützt vor Speicherzugriffsfehlern.
02:24
Man hat mehr Thread Safety, bei Rust es einfach hindert, Operationen, die vielleicht nicht multi-threadingfähig sind, auszuführen und kann sich dort mehr auf die Sprache verlassen und die Sprachfeatures. Hinsichtlich Produktivität kann man sagen, wir können sehr gut und sehr schnell mit Rust arbeiten, denn es gibt ein sehr gutes, modernes Ökosystem.
02:42
Der Compiler ist im Vergleich zu allem, was man bisher so kennt, sehr, sehr hilfreich. Und es gibt ein sehr modernes Tooling und eine Paketverwaltung, die einem mit stark weiterhilft. Zudem gibt es viel Dokumentation und Lehrmaterial. Die ganze Programmiersprache wird von der Rust Foundation entwickelt und diese hat sehr viele große Unternehmen, die dahinterstehen,
03:03
wie AWS, Meta, Google, Huawei, Microsoft und Mozilla, die das ganze Projekt vor der Gründung der Rust Foundation quasi bis 2021 angeführt haben. Nun möchten wir eine wirklich sehr kurze Einführung in die Programmiersprache Rust geben, um diejenigen, die interessiert sind, vielleicht anzulocken,
03:22
sich mehr einzulesen und weitere Ressourcen anzuziehen. Also es gibt hier auf der linken Seite, wie immer, das Hello World Beispiel, in dem man eine Funktion hat, die heißt Main, die wird halt ausgeführt, wenn man ein Rust-Programm ausführt. Und da drinnen sieht man Printline und da sieht man schon, Main ist eine Funktion, Printline hat ein Ausrubezeichen, das ein Makro.
03:41
Und es gibt also Funktionen, wie die meisten Programmiersprachen, Makros, die im Vergleich zu C++ ähnlich sind, wie Dinge, die man mit Templates erreichen kann. Und es sind halt sehr mächtige Sprachfeatures, die direkt in so kleinen Snippets zu sehen sind. In Schleifen sieht man hier erst eine Variable, die wir definieren.
04:02
Dort sieht man, dass wir gesagt haben Mut, feel mutable, denn im Vergleich zu den meisten anderen Sprachen ist bei Default und Rust so, dass Variable nicht veränderbar sind. Das ist viel einfacher, denn so kann man das halt explizit deklarieren. Und der Default ist der konstante Fall. Jetzt sieht man hier eine moderne For-Each-Syntax,
04:21
die zum Beispiel bei Schleifen, es gibt natürlich auch Wires und Loops ohne quasi Condition. Und auf der rechten Seite sehen wir Structs, die sind ähnlich wie in C und C++. Wir haben hier keine Klassen, weil wir keine klassische Objektorientierung haben, sondern, wie man unten sieht, Implementierungsblöcke für Structs, in denen man Funktionen definieren kann. Und im Vergleich zu Objektorientierung arbeitet man hier mit Trails,
04:43
wo man dann wieder für bestimmte Eigenschaften, die man definiert, weitere Implementierungsblöcke für Structs definieren kann. Was in Rust beispielsweise hervorsteht, sind sehr mächtige Inams. Inams kennt man vielleicht aus anderen Sprachen, aber in Rust können diese auch, der Wert, quasi eine Payload, wie Inhalten, sinnlich einfache Zahlen.
05:02
Mit Matchblöcken kann man dann auf diese einzelnen Varianten zugreifen. Im Sinne von RGB kann man zum Beispiel auf die einzelnen Farbwerte, die als 8-Byte-Anzeihend-Integer gespeichert sind, einzeln zugreifen und hier etwas sehr viel Mächtigeres erreichen mit diesen Matchblöcken als zum Beispiel einfache Switch-Statements aus Javascript, C++, Java oder Ähnlichem.
05:26
Und es gibt halt so viel mehr, wie Traits, die ich vorhin schon erwähnt habe, die Standard Library, die sehr viele Algorithmen und Datensstrukturen bereitstellt, Features to Threading, asynchrone Verarbeitung und streambasiertes Prozessierung, dann ein Error Handling, was auch anders und besser ist als in anderen Sprachen,
05:43
C-Bindings, die sehr einfach machen, bestehende Libraries einzubinden und Makros, die wie bei C++ Templates, sehr viel Magie erlauben, um Code zu vereinfachen und zu strukturieren. Dann gibt es den Manager Cargo, der ist quasi so das zentrale System, wenn man in Rust arbeitet, mit Code.
06:04
Bibliotheken werden in Rust in Crate unterteilt und auf Crate.io findet man quasi alle Building Blocks, um seine Anwendung zusammenzubauen, alle Dependencies. Dann hat man mit Cargo auch eine Paketverwaltung direkt mit dabei, die ist so ungefähr wie NPM relativ einfach und wie CMake.
06:24
Man kann relativ viel damit machen, quasi so wie eine Kombination aus beiden, aber in sehr gut. Und mit Cargo interagiert man mit dem Compiler, das man kompiliert und setzt verschiedene Variablen auch mit Cargo. Cargo ist auch ein Test-Runner, man lässt Tests damit laufen, man lässt Benchmarks damit laufen, man lässt seine Anwendung damit laufen
06:43
und auch Beispiele, das heißt, man bekommt direkt ein Tool mitgeliefert, was man in anderen Programmiersprachen erst extra installieren muss und was auch nie so richtig reinpasst, ist hier einfach nativ dabei. Dann gibt es halt Lernressourcen, wenn man jetzt denkt, ja, Rust hört sich interessant an, wo kann ich mich dann da einlesen? Auf rustlang.org slash learn findet man jede Menge Ressourcen,
07:02
zum Beispiel Rust by example, wenn man gerne mit Beispielen lernt oder ein Rustlings-Kurs, wenn man interaktiv Stück für Stück sich der Programmiersprache nähern möchte. Und jetzt möchten wir auch schon zu GeoRust kommen. Und ganz im Kompakt, was ist GeoRust? Ja, das ist eine Sammlung von Geospatial-Tools und von Bibliotheken, die in Rust geschrieben sind.
07:23
Und GeoRust ist im Prinzip erst mal ein loser Zusammenschluss von GeoRust Entwicklerinnen und Entwicklern, ungefähr 30 im Kern, aber auch viel mehr quasi drum herum. Und das Ziel ist das Aufbau eines umfangreichen Ökosystems mit vielen Tools in Rust und für Rust.
07:41
Und wir können hier natürlich nur eine ganz kleine Auswahl vorstellen, aber viel mehr Ressourcen findet man auf der rechten Seite unter georust.org. Dort findet man zum Beispiel Zugang zu GitHub-Repositories. Dann die vom Firmen geführte Liste Awesome GeoRust, wo man viele Beispieleanwendungen und viele Bibliotheken findet.
08:01
Und auch den Discord-Kanal, in den man einfach reinkommen kann und sich mit anderen GeoRust-Entpeglern und Interessierten unterhalten kann. Jetzt übergebe ich auch schon an Johannes, der eine Übersicht über verschiedene Kategorien und dort Beispielanwendungen oder Beispiel Libraries vorstellt.
08:21
Ja, danke, Christian. Und hallo auch von mir. Ich stelle jetzt ein paar GeoCrates vor. Und das erste Crate ist auch direkt das GeoCrate. Im GeoCrate gibt es verschiedene Objekte für Vektordaten, wie Punkte, Linien, Polygone und eben auch Multipunkte, Multilinien und Multipolygone. Es gibt verschiedene Algorithmen, die man anwenden kann,
08:42
um diese Vektordaten zu bearbeiten. Das ist zum Beispiel das DE9M-Intersection-Modell implementiert worden. Damit kann man dann bestimmen, ob Linien und Punkte und Polygone sich schneiden, intersecten oder überlappen. Und es gibt auch verschiedene andere Algorithmen, wie zum Beispiel die Fläche eines Objekts zu bestimmen,
09:02
die Hülle eines Polygons zu bestimmen oder auch den Abstand zwischen verschiedenen Features zu bestimmen. Und das GeoCrate ist eins der Haupt-Crates für Geodaten in Rust. Es integriert sich sehr gut auch mit anderen Crates, wie dem Proj-Crate, wo eben dann Koordinaten
09:21
umprojiziert werden können. Und es gibt jetzt auch relativ neu in dem GeoCrate selber die Möglichkeit direkt umzuprojizieren. Und man kann zum Beispiel auch serialisieren, zum Beispiel mit GeoJSON, aber auch mit anderen Crates, um die Daten zu laden und abspeichern zu können. Man findet das Crate entweder auf crates.io oder auch auf GitHub,
09:43
wo man auch gerne mitentwickeln kann. Und die meisten Maintainer sind auch immer in Discord zu finden. Genau und hier rechts habe ich mal ein Beispiel mitgebracht. Also man sieht eine Rust-Main-Methode. In der ersten Zeile wird quasi eine Linie angelegt, die aus zwei Punkten besteht. Und in der nächsten Zeile wird eine neue Linie angelegt,
10:00
die auch aus zwei Punkten besteht. Und diese zwei Linien, die sollten sich schneiden. Und das wird dann eben abgefragt in der Variable A intersects B gespeichert. Und das Ganze kann man dann mit dem Printline-Macro auch schön formatiert ausgeben. Und die Ausgabe sieht man dann auch unter diesem Codeschnipsel. Ja, das nächste, was immer wichtig ist,
10:20
wenn man mit Geodaten arbeitet, das kennt wahrscheinlich auch jeder, sind die verschiedenen Formate. Es gibt in Rust verschiedene crates, die implementiert sind. Zum Beispiel das GeoJSON-Crate, das man auch auf crates.io oder auf GitHub findet. Und damit kann man eben lesen und schreiben ins bekannte GeoJSON-Format. Und es wird auch direkt das GeoCrate unterstützt,
10:41
so dass man quasi direkt Geo-Objekte speichern und auch lesen kann. Genau, das nächste sehr interessante Crate ist das DeadGeoBuffer-Crate, das eben ein relativ cloudoptimiertes Speicherformat vor Wektordaten ist. Es ist also extra viel statische Daten ausgelegt und das speichert die Daten intern auch in einem Airbaum
11:00
und ermöglicht so dann auch relativ schnell auch gefiltert, diese Daten daraus zu lesen. Das findet man auch auf GitHub. Und wir sind sehr große Fans des Crates. Genau, dann gibt es noch das Shapefile-Crate. Und Shapefile sind ja immer so eine Sache. Das benutzen wir persönlich nur, wenn es sein muss. Aber es gibt es und es ist auch wichtig, weil viele Daten eben als Shapefile gespeichert sind.
11:21
Und das findet man auch auf GitHub und natürlich auch bei crates.io. Genau, jetzt habe ich hier noch ein Beispiel mitgebracht. In dem Code Snippet sieht man wieder eine Rust-Main-Methode und einen String, der eben ein GeoJSON-Feature beschreibt mit einem Namen und einer Geometrie.
11:41
Und das Ganze wird dann gepasst in ein GeoJSON-Objekt. Und das Ganze kann man dann eben auch wieder ausgeben. Einer der großen Vorteile von Rust ist, dass man relativ einfach Bindings zu T-Libraries generieren kann. Und gerade im Geo-Bereich gibt es ja viele bekannte
12:01
Libraries wie GDAL, Proj und auch Geos, die man nach Möglichkeit verwenden möchte. Und es gibt tatsächlich Crates für alle diese Bibliotheken. Und bei GDAL zum Beispiel bin ich auch einer der Maintainer. Das GDAL-Crate erlaubt das Lesen und Schreiben von Vector-Daten und Rasterdaten. Es wächst beständig und kann zum Beispiel
12:21
auch direkt nach NDR-Array lesen, was quasi das Gleiche ist wie NumPy-Arrays in Python, sodass man Rasterdaten direkt auch als zweidimensionales Cluster verwenden kann. Dann gibt es noch das Proj-Crate, wo man eben Koordinatensysteme und Projektionen verwenden kann, was auch relativ gut mit dem Geo-Crate integriert ist und eben erlaubt, dass man Koordinatensysteme
12:42
oder Objekte in verschiedenen Koordinatensystemen umtransformieren kann. Genau, und dann gibt es noch das Geo-Crate, was eben die Geos-Library unterstützt und eben erlaubt, auf Geometrien verschiedene Operationen auszuführen. Das wächst auch beständig, ist auch mit dem Geo-Crate integriert und unterstützt zum Beispiel sowas wie Voronoi-Diagramme
13:01
auf Polygonen. Genau, ich habe jetzt hier auch nochmal ein Beispiel mitgebracht, wo man eben sieht, wie man mit dem GDAL-Crate arbeiten kann. Erst mal gibt man einen Pfad an, wo eine DNG-Datei, die eben ein Raster ist, liegt und dann öffnet man dieses Dataset, was dann eben quasi schon ein GDAL-Dataset rappt.
13:21
Dann kann man für dieses Dataset sich die Beschreibung anzeigen lassen. Man kann sich ein Rasterband aus diesem Dataset lesen und dann verschiedene Eigenschaften lesen, wie die Beschreibung, den No-Data-Wert und auch, was das für ein Typ ist, den man da überhaupt liest, wie groß das Grid ist. Und dann kann man eben auch die Daten lesen und das Ganze kann man dann über Generics auch typisieren.
13:41
Also man kann sagen, ich möchte Float-Daten lesen oder ich möchte zum Beispiel integer-Daten lesen. Genau, das Ganze kann man dann auch wieder ausgeben. Neben den Crates haben wir jetzt auch Beispiele für verschiedene Systeme mitgebracht, die in Rust geschrieben sind und mit Geodaten arbeiten oder mit denen man Geodaten verarbeiten kann. Das erste ist AB Street. Und AB Street ist ein ziemlich cooles Programm,
14:01
das sich auf jeden Fall anzusehen lohnt. Da ist es ein Projekt zur Planung, Simulation und Kommunikation von Visionen für eine Fußgänger-, Fahrrad- und verkehrsfreundlichere Stadt. Und man sieht rechts schon das animierte Beispielbild, wo tatsächlich Fahrzeuge und Fahrräder und auch Fußgänger unterwegs sind.
14:20
Und das Ganze kann man interaktiv benutzen und zwar auch für sich zu Hause, weil das Ganze auf den Open Streetmap-Daten aufsetzt und man das quasi einfach überall verwenden kann deswegen. Ja, das System läuft quasi auf Linux, Mac, Windows und auch auf FreeBSD und also ist es wirklich wert, sich mal anzuschauen.
14:40
Ja, Christian hat es ja schon erwähnt. Die Geoengine, das System, das wir selber entwickeln, ist auch in Rust geschrieben und basiert auch zum großen Teil auf den Crates, die ich schon vorgestellt habe. Die Geoengine ist eben eine Engine zur Verarbeitung von heterogenen Geodaten. Und wir hatten auch gestern schon einen Vortrag, wo wir das System ausführlich vorgestellt haben.
15:00
Die Idee ist eben, dass man auf Daten zugreifen kann, wie in einem dynamischen Data Cube. Das kann man sich so vorstellen. Man hat eben Raster- und Vektordaten im System. Alles ist quasi eine Zeitreihe. Also ich kann sagen, für wann ich gerne Daten sehen oder verarbeiten möchte. Und man beschreibt die Verarbeitung über Workflows. Und ein Workflow kann man sich so vorstellen wie einen dynamischen Layer,
15:20
der eben on the fly die Daten für mich berechnet, sodass ich sie eben verwenden oder auch darstellen kann. Das Ganze kann man verwenden via WebUI, Python und auch über OGC-IPIs und eben in der Cloud oder auch lokal einsetzen. Jetzt habe ich hier rechts noch mal einen Screenshot mitgebracht. Was man hier ganz schön sieht, ist der NDVI für Marburg.
15:40
Ich habe den invertiert, sodass man hell die Gebäude und Straßen sehen kann der Stadt Marburg und rundrum. Die Vegetation ist halt relativ dunkel. Genau. Und rechts daneben sieht man noch, wie man die Geoengine auch in Python verwenden kann. Und wer sich für Geoengine interessiert, der kann auch gerne auf GitHub vorbeischauen, wo die Geoengine auch zu finden ist.
16:01
Das dritte System, was wir mitgebracht haben, heißt T-Rex und ist ein Vektor-Tiles-Server, der Daten zum Beispiel mit GDAL oder auch mit PostGIS laden kann und dann für verschiedene Webkarten Vektor-Kacheln ausliefern kann. T-Rex ist ein Projekt von Pyramiden und es generiert Tiles eben auch vor.
16:22
Das Ganze macht es parallel. Und es hat dann eine einfache Einbindung an verschiedene Karten, Libraries wie zum Beispiel Mapbox oder auch Openlayers. Man kann die Kacheln auch stylen über Maputnik, was eben die Mapbox.jl-Styles verwendet. Genau. Und es gibt Installer für Ubuntu und Windows und es gibt auch einen Docker-Container.
16:40
Und T-Rex ist auch ein sehr cooles Projekt, wo man auch sehr gerne mal vorbeischauen sollte. Hier rechts ist jetzt auch noch ein Beispiel. Da sieht man sehr schön, wie die Kacheln angelegt werden. Jede Kachel hat einen Namen oder beziehungsweise eine ID, wo sie verortet ist. Und man sieht auch das Zoom-Level entsprechend. Ja, als letztes haben wir noch ein Crate mitgebracht.
17:01
Das ist das R-Sternbaum-Crate, wo eben der R-Sternbaum drin implementiert ist. Der R-Sternbaum ist eine Indexstruktur für multidimensionale Daten. Und das ist gerade bei Geodaten sehr nützlich, wenn man schnell auf Daten zugreifen möchte. Und man kann den R-Sternbaum nämlich verwenden für Punkte, Linien und Rechtecke. Und man kann aber über Trades auch für seine eigenen Objekte
17:24
möglich machen, dass man sie eben einfügen kann und aus dem R-Sternbaum auch wieder herausholen kann. Es gibt verschiedene Operationen, wie Einflügen und Löschen. Man kann Bulk-Loading machen, das heißt, sehr viele Objekte schnell einfügen in den Baum. Man kann eben mit Rechtecken Anfragen stellen,
17:40
sodass man die Objekte zurückbekommt, die in den Rechtecken liegen. Und man kann aber auch eine Nearest-Neighbor-Anfrage machen. Also, welches ist das Objekt in der Nähe von dem Punkt, den ich angefragt habe. Ja, zum Abschluss. Wir haben Rust vorgestellt, eine moderne systemnahe Sprache, die sehr viele gute und auch sehr nützliche Sprachfeatures bietet.
18:03
Wir haben die Geo-Rust-Community vorgestellt, beziehungsweise Crades und Systeme aus der Geo-Rust-Community. Es gibt eben Rapper zu bekannten Tools wie GDAL und Geos. Es gibt aber auch spannende Neuentwicklungen, wie zum Beispiel T-Rex und auch AB Street. Und es gibt schon relativ viele Crades, die man benutzen kann.
18:21
Es lohnt sich also auf jeden Fall mal vorbeizuschauen. Und wer jetzt Interesse hat an Geo-Rust, es gibt die Geo-Rust-Webseite, also einfach georust.org. Und alle Projekte sind auch auf GitHub oder die allermeisten Projekte sind auf GitHub. Da kann man auch gerne vorbeischauen. Und ansonsten gibt es den Geo-Rust Discord, wo auch sehr viele aus der Community immer anwesend sind,
18:42
wo man auch einfach Fragen stellen kann. Ja, vielen Dank fürs Zuschauen und Zuhören. Wir hoffen, dass wir euch für Geo-Rust begeistern konnten. Und wenn ihr Fragen habt zu Geo-Rust oder auch zu Geoengine, dann meldet euch gerne, wie gesagt, entweder einfach direkt bei uns per Mail oder in der Geo-Rust-Community auf einer der Webseiten
19:03
oder im Discord. Und wir freuen uns auf euch. Wir haben so ein paar Fragen gekriegt. Das anfangs vorgestellte Geo-Rust-Modul nutzt es Geos, oder ist das irgendwie intern implementiert,
19:22
diese ganzen Geo-Metrie-Funktionen? Genau. Also die Idee vom Geo-Rust, also von dem Geo-Crate, ist tatsächlich, das in Rust zu implementieren. Also die Dinge, die eben dort sind, außer die Projektion, die dann auch Proj benutzt, sind in Rust implementiert. Genau, das ist dann nicht Geos. Für Geos gibt es halt einen Extra-Crate,
19:41
wo man dann die, ja, viel größere Funktionalität einfach noch in Geos auch benutzen kann. Ja. Gibt es da irgendwie Unterschiede in der Performance? Habt ihr das mal irgendwie ausprobiert, bei dem einen Modul versus dem anderen? Das ist eine gute Frage. Das kann ich jetzt gerade nicht sagen. Das habe ich nicht verglichen.
20:01
Im Prinzip kompiliert Rust ja auch auf BitCode, so wie auch C. Von daher sollte es schon relativ schnell sein. Aber klar, der Algorithmus, vielleicht ist er noch nicht so getunt wie in Geos, aber ich möchte es jetzt nicht sagen. Weiß ich nicht. Ja, auf Geos ist es nicht überall perfekt, was die Performance angeht. Also, vielleicht ist es auch manchmal ganz gut, das neu anzufangen und neu ausprobieren.
20:22
Aber deswegen wäre es interessant, das mal gegeneinander zu stellen. Für dann der nächste Vortrag von irgendjemand. Wie sieht es aus mit dem Support im Rust für Bereich Metadaten, Katalogdienste, wo es viel mit XML zu tun hat und so?
20:41
Gibt es da Support für? Ja, also bei XML-Support, da gibt es auch einige Bibliotheken, die sich halt natürlich damit beschäftigen. Wir versuchen das natürlich immer so ein bisschen zum Gehen und nehmen halt viel JSON, aber haben halt auch schon Dinge parsen müssen aus Katalogdiensten, auch gerade im Bereich OGC, natürlich wie die vorher zum XML.
21:02
Man muss mal so zwei Dinge sagen. Das eine ist halt, dass es Bibliotheken gibt, mit denen man XML-Dokumente verarbeiten kann, zum Beispiel wie QuickXML haben wir auch schon mal eingesetzt, was eigentlich gut funktioniert mit Schema-Parsing, dann auch Anfragen stellen und Text durchschauen, Dinge rausziehen.
21:21
Das andere, was man halt sagen muss, ist, dass in Rust insgesamt eine sehr gute Unterstützung ist für Serialisierung und Deserialisierung von Daten. Das heißt, wenn man jetzt halt feste Schemata hat und diese definiert, gibt es das Serdecrate, was eigentlich so wahrscheinlich überall benutzt wird und dort halt auch eine spezielle Unterstützung für XML.
21:42
Und ich persönlich finde halt, dass es im Vergleich zu anderen Programmiersprachen sehr elegant gelöst ist, wie man quasi von einem Dokument, was irgendwie in JSON ist, was in XML ist, quasi zu einer Deserialisierung von einem Rust-Struct halt kommt. Also sehr elegant mit Feldanulation. Das sollte man sich auf jeden Fall anschauen,
22:01
aber ist auf jeden Fall möglich. Also es gibt genügend Sachen für XML zu verarbeiten und auch zu Serialisieren, Deserialisieren. Okay, jetzt habe ich mal noch eine Frage. Und zwar, ihr habt ja im Vortrag gesagt, dass ihr das Flat-Geo-Buff-Format und das zugehörige Crate ganz besonders mögt.
22:20
Da habe ich mal eine ganz nerdige Frage. Beim Flat-Geo-Buff-Format ist es ja möglich, dass man entweder feste Attributlisten hat und im Header vorgibt, welche Attribute man hat, wie man das aus einem Simple Feature kennt. Oder man kann auch für jedes einzelne Feature festlegen, welche quasi dynamischen Attribute es gibt,
22:42
welche Tags es gibt, so wie USM das macht, wo jedes Objekt eigene Tags eben haben kann. Und ist das unterstützt in dem Crate? Ich habe nämlich festgestellt, das ist nicht in allen, sonst also jeder unterstützt das irgendwie nicht.
23:03
Ja, ich weiß nicht, Johannes, ob du da was dazu sagen kannst. Genau, weil ich kann jetzt auf die Details auch nicht so eingehen. Also es müsste halt das, was man bei Flat-Geo-Buff unterstützen möchte, müsste da eigentlich implementiert sein,
23:20
aber ich kann das halt nicht mehr in die Hand des Feuer legen, weil ich bin halt in dem Team sozusagen nicht drin. Aber das ist auf jeden Fall auch ein guter Punkt, wenn das halt weiter interessiert. Also wir haben mal den Link gepostet zu den Vortragsfolien und da ist ja auch der Discord verlinkt. Und gerne halt in diesen Discord reinkommen, weil da findet man all die Autoren zu diesen ganzen Crates und kann halt die Fragen stellen. Also ihr könnt jetzt glaube ich,
23:41
das gerade nicht beantworten zu den dynamischen Attributlisten, aber gerne halt da reinkommen und einfach die original Autoren fragen. Okay, jetzt ist gerade noch eine Frage reingekommen. Wie sieht GeoRASC, wie geht es damit aus für den Präprozess von OSM-Daten sowie Osmosis oder Osmium, das machen,
24:02
ist da eine Library für oder sowas? Also es ist ja hier im Chat auch schon dieses OSM-2-Lanes gepostet worden. Ich kann es jetzt auch nicht im Detail sagen, aber es gibt ja zum Beispiel dieses AV-Street, was eigentlich eine ganz coole Anwendung ist und das nutzt ja auch die OSM-Daten. Es gibt auf jeden Fall ein Crate für OSM-Daten,
24:20
aber in das Detail gehen kann ich es auch nicht. Alles klar. Ja, aber gerne im Discord, die Autoren sind da alle und dann immer Fragen. Davor, ihr seid auch in dem Discord? Ja oft, genau. Also nicht jeden Tag, aber oft. Okay, sehr gut. Dann wissen ja die Zuschauer, wo sie hingehen können. Dann nochmal vielen Dank für den Vortrag.