Als langjähriges Mitglied der GIS-Stahlhelmfraktion (aka Kreisbögen-Lover) kann ich hier gross verkünden, dass Apache Hop nun auch Kreisbögen versteht. Die Enttäuschung gleich zu Beginn: Geometrie-Operationen (also alles, wo JTS die Finger im Spiel hat) werden mit segmentierten Kreisbögen durchgeführt. Vielleicht ändert sich das, wenn GEOS besseren Kreisbogen-Support hat. Habe das nicht wirklich verfolgt.

Die Integration der Kreisbögen war simpel. Wie? Es gilt das Motto: «Talent borrows, genius steals.». Ili2db unterstützt seit langer Zeit Kreisbögen, indem es JTS-Klassen erweitert. Nichts wie ran an den Speck und den Code (leicht angepasst) im Geometry Type Plugin integrieren. Schauen wir uns das Resultat mal an. Ich verwende dazu einen Datensatz der amtlichen Vermessung und wandle ihn mit ili2gpkg in eine GeoPackage-Datei um. Die Geometrien werden bewusst nicht segmentiert. Anschliessend laden wir die Bodenbedeckung mit dem GDAL-Plugin und schauen uns ein paar Zeilen an:

Text preview curves

Und anschauen können wir die wunderschönen Geometrien auch im Geometry Inspector Plugin:

Inspector preview curves

Das Schöne dabei ist, dass mit dem Geometry Type Upgrade sogar Kreisbögen aus einer PostgreSQL/PostGIS-Datenbank funktionieren sollten. Das habe ich aber noch nicht ausprobiert.

Weitere Arbeiten

Das Geometry Type Plugin wurde massiv verbessert. In einem vorangehenden Beitrag habe ich erklärt, dass ein neuer Datentyp als Plugin ein wenig ein Geknorze ist. Soweit ich es verstanden habe, ist der Grund folgender: Dieser neue Datentyp wird in verschiedenen meiner Geo-Plugins verwendet. Dort muss man prüfen, ob ein Record (eine Variable) ein bestimmter Geometrietyp ist (instanceof). Und hier steckt der Wurm drin. Jedes Plugin lädt den Geometrytypen in einem separaten Classloader und daraus folgt, dass z.B. die Klasse my.package.Polygon ungleich my.package.Polygon ist. Was natürlich ziemlich doof ist. Bisher wurde das mit Reflection in den Plugins gelöst. Neu gibt es eine Classloader-Gruppe und die Plugins verwenden alle diese Gruppe. Problem gelöst.

Und - Freude herrscht - der Windows-Build sollte endlich funktionieren. Ich war sicher, dass ich einen Smoke-Test in der Github Action hatte, nur leider nie wirklich kontrolliert, ob der Test lief…​

Fazit

Ich denke, dass es immer noch sehr sinnvoll wäre, den Geometry Type in den Kern zu bringen. Was die Welt jetzt sicher nicht mehr braucht, sind fünf weitere Geoprocessing oder whatever Geo-Plugins. Sondern mehr Hop-Geo-Institutionalisierung. Jemand sollte sich dem halt konkret und mit genügender Ernsthaftigkeit annehmen. Mir, d.h. für uns im Kanton Solothurn, dürfte wohl «meine» Hop-Distribution locker reichen, um die zwei trümmligen FME-Prozesse der einen Person, abzulösen und ich sage «Good Night, and Good Luck».

HOP_JAVA_HOME=/Users/stefan/.sdkman/candidates/java/25.0.1-tem \
HOP_OPTIONS="--enable-native-access=ALL-UNNAMED -Xmx2048m" \
./hop-gui.sh

Probiert es aus und meldet Fehler.