{"id":14045,"date":"2023-11-24T22:08:52","date_gmt":"2023-11-24T21:08:52","guid":{"rendered":"https:\/\/www.opengis.ch\/?p=14045"},"modified":"2023-11-24T22:30:16","modified_gmt":"2023-11-24T21:30:16","slug":"python-bindings-fuer-interlis","status":"publish","type":"post","link":"https:\/\/www.opengis.ch\/de\/2023\/11\/24\/python-bindings-fuer-interlis\/","title":{"rendered":"Python Bindings f\u00fcr INTERLIS"},"content":{"rendered":"\n<p><strong>Seit einiger Zeit existiert die Idee von Python Bindings, erzeugt durch einen INTERLIS Compiler, welche die Modellinformationen f\u00fcr eine breite Entwicklerbasis zug\u00e4nglich macht, was einen schnelleren Innovationszyklus erm\u00f6glicht und damit die Grundlage f\u00fcr neue Plattformen, Werkzeuge und Integrationen schafft.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How comes<\/h2>\n\n\n\n<p>M\u00f6chte man den Inhalt einer XTF Datei im QGIS visualisieren, muss man heutzutage die folgenden Schritte ausf\u00fchren.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Mit ili2db das physische Schema mit allen n\u00f6tigen Parametern in einer relationalen Datenbank erstellen<\/li>\n\n\n\n<li>Mit ili2db die Daten in die relationale Datenbank importieren<\/li>\n\n\n\n<li>Durch<em> <\/em>Model Baker die Meta-Tabellen analysieren und das QGIS-Projekt erstellen<\/li>\n\n\n\n<li>Und trotzdem sind oft manuelle Nacharbeiten n\u00f6tig, um im Modell enthaltene Informationen auf die Layer und Formulare im QGIS zu \u00fcbertragen<\/li>\n\n\n\n<li>Am Ende muss wieder ein Export aus der relationalen Datenbank erfolgen, um zur\u00fcck zum XTF zu kommen<\/li>\n<\/ol>\n\n\n\n<p>Und jetzt stelle man sich mal vor, dass w\u00fcrde in einem Schritt gemacht werden k\u00f6nnen. Mit Drag&#8217;n&#8217;drop das XTF ins QGIS ziehen, die Formulare w\u00fcrden erstellt und die Daten visualisiert &#8211; ganz ohne Databank.<\/p>\n\n\n\n<p>Nat\u00fcrlich ist f\u00fcr die Datenbearbeitung dann eine Datenbank noch immer sinnvoll (schon nur wegen der Performance), dies schliesst sich aber gegenseitig nicht aus.<\/p>\n\n\n\n<p>Aber besonders n\u00fctzlich w\u00e4re der Ansatz f\u00fcr die allt\u00e4glichen kleinen Arbeiten rund um INTERLIS.<\/p>\n\n\n\n<p>Nur mal schnell \u2026<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2026 das XTF angucken<\/li>\n\n\n\n<li>\u2026 den Fehler lokalisieren<\/li>\n\n\n\n<li>\u2026 eine kleine Korrektur vornehmen<\/li>\n\n\n\n<li>\u2026<\/li>\n<\/ul>\n\n\n\n<p>Beinahe nebenbei erschliessen sich dann ganz neue M\u00f6glichkeiten.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Erzeugen einer objektorientierten Abbildung des Klassenmodelles in Python Code (Insbesondere interessant als Grundlage f\u00fcr komplexere Fachapplikationen)<\/li>\n\n\n\n<li>Automatisierte Erzeugung einer Modelldokumentation aus den INTERLIS Definitionen als HTML, Markdown, Word oder PDF.<\/li>\n\n\n\n<li>Oder auch eines Modelldiagrammes<\/li>\n\n\n\n<li>&#8230;<\/li>\n<\/ul>\n\n\n\n<p>Solche Anforderungen sind mit dem aktuell verf\u00fcgbaren Ansatz via ili2db bedingt l\u00f6sbar auf Datenbankebene. Das zugrunde liegende Datenmodell wird abstrahiert und als \u201cBlackbox\u201d betrachtet. Dazwischen steht ili2c, welches die n\u00f6tige Introspektion der Modelle \u00fcbernimmt. Dies limitiert die M\u00f6glichkeiten bei der Entwicklung von Fachapplikationen basierend auf INTERLIS Datenmodellen und unterst\u00fctzenden Werkzeugen.<\/p>\n\n\n\n<p>Die Konsequenz davon ist, dass f\u00fcr Applikationen, welche darauf aufsetzen, anstelle der kompletten Modellinformationen nur noch ein relationales Abbild oder anderweitig vereinfachte Informationen davon zur Verf\u00fcgung steht. Das erfordert einerseits, dass schwer wartbarer Code in SQL geschrieben wird. Dies ist langfristig ineffizient und fehleranf\u00e4llig. Andererseits k\u00f6nnen gewisse Anforderungen wie rollenbasierte Zugriffsrechte nicht in der Datenbank, sondern nur auf Ebene Webservice umgesetzt werden, was dazu f\u00fchrt, dass Code an zwei Stellen nachgef\u00fchrt werden soll und bei Modell\u00e4nderungen von Hand nachgef\u00fchrt werden muss.<\/p>\n\n\n\n<p>Und ja, wir wissen um die Existenz des <a href=\"https:\/\/gdal.org\/drivers\/vector\/ili.html\">GDAL\/OGR Treibers<\/a>. Doch dieser beh\u00e4lt die Object-Relational-Mapping Denkweise bei und dient mehrheitlich dazu daten von einem <em>Tabellenformat<\/em> in ein anderes zu transformieren. Das ist nicht unser Ziel.<\/p>\n\n\n\n<p>F\u00fcr die effiziente Programmierung von Fachapplikationen w\u00fcnscht man sich, dass Entwickler ein INTERLIS-Modell direkt in ihrem Framework zur Verf\u00fcgung haben, um alle diese Anforderungen entsprechend moderner IT-Entwicklungsans\u00e4tze benutzen und zeitgem\u00e4sse Anwendungen programmieren zu k\u00f6nnen. Stabil und effizient. Unter Ber\u00fccksichtigung der Modells aber mit dem Hauptfokus auf die Anwendungsf\u00e4lle der Nutzer. Immer mit der M\u00f6glichkeit den unvermeidlichen Modell\u00e4nderungen folgen zu k\u00f6nnen, da die Interfaces ja einfach abgeleitet werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ans\u00e4tze<\/h2>\n\n\n\n<p>Es sind einige grunds\u00e4tzlich unterschiedliche Ans\u00e4tze f\u00fcr die Umsetzung denkbar. Dabei ist es wichtig, dass dies in die Strategie Geoinformation Schweiz eingepasst ist und sich gut ins \u00d6kosystem integriert.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Benutzen des bestehenden ili2c XML (XSD) Interfaces womit man Python Bindings generiert<\/li>\n\n\n\n<li>Erstellen der Python Bindings auf der Basis eines <a href=\"https:\/\/www.interlis.ch\/modelle\/metamodell\">Metamodells<\/a><\/li>\n\n\n\n<li>Aufbau einer API auf dem bestehenden ili2c um die Python Bindings zu generieren (aka Java2Python)<\/li>\n\n\n\n<li>Implementierung einer direkten Python Basierten L\u00f6sung um die Zwischenschritte zu verhindern (INTERLIS Python Compiler)<\/li>\n<\/ol>\n\n\n\n<p>Nach eingehender Auseinandersetzung mit dem Thema kann der Weg via ili2c XSD ausgeschlossen werden, da wichtige Informationen nicht transparent \u00fcbermittelt werden (z.B. Constraints). <\/p>\n\n\n\n<p>Die Entwicklung einer auf IOX\/ili2c basierten Java-Komponente um damit Python Code und damit die erw\u00fcnschten Bindings erstellen zu k\u00f6nnen, erscheint m\u00f6glich aber nicht erstrebenswert. <\/p>\n\n\n\n<p>Die Entwicklung eines eigenen Compilers sehen wir als kritisch. Es bestehen bereits 2 Projekte und wir sehen nicht ein, warum ein Werkzeug mit identischem Funktionsumfang und L\u00f6sungsansatz (ANTLR als Parser\/Lexer) nur in einer anderen Programmiersprache einen Mehrwert bieten sollte.<\/p>\n\n\n\n<p>Den gr\u00f6ssten Mehrwert sehen wir bei der Nutzung des Metamodells. Einem XML, welches eigens zu dem angestrebten Zwecke geschaffen wurde. So verfolgen wir bisher den Ansatz, \u00fcber ili2c (oder alternativem Compiler) das Metamodell (IMD16) zu erstellen und daraus die Python-Bindings zu erzeugen. Die logische Konsequenz ist dann aus diesen Bindings auch generisch Reader abzuleiten welche in der Lage sind die zum Modell geh\u00f6renden XTF zu lesen.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/user-images.githubusercontent.com\/28384354\/285478925-d75356fc-ce90-4d64-b607-f06e591d061a.png?w=750&#038;ssl=1\" alt=\"image\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Vorgehen<\/h2>\n\n\n\n<p>Erarbeiten eines Proof of Concepts, um die technologischen Grundlageentscheide zu validieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ziele des PoCs<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Parsen des Metamodells<\/li>\n\n\n\n<li>Generieren der Python Bindings (ILI=&gt;Python-Klassen)<\/li>\n\n\n\n<li>Ableitung generischer Reader (XTF=&gt;Python-Objekte)<\/li>\n\n\n\n<li>QGIS Integration Prototyp (Drag&#8217;n&#8217;Drop ILI oder XTF) zu Demonstrationszwecken<\/li>\n<\/ul>\n\n\n\n<p>Voraussichtlich ist es m\u00f6glich, mit einem Subset an Funktionalit\u00e4ten der breiten Palette von INTERLIS-Konstrukten zu starten (Vererbung und Topics oder Integration von Repositorien sind von h\u00f6herer Priorit\u00e4t als Constraints oder Views. Die genaue Priorisierung ist noch zu pr\u00fcfen).<\/p>\n\n\n\n<p>Die Resultate werden als open source Bibliotheken zur Verf\u00fcgung gestellt, dokumentiert und getestet.<\/p>\n\n\n\n<p>Dieses Projekt setzt eine erfolgreiche Einbettung in die bestehende Werkzeuglandschaft und eine enge Zusammenarbeit mit den Schl\u00fcsselpersonen im INTERLIS Umfeld voraus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Produkte<\/h3>\n\n\n\n<p>Implementierung von Produkten, welche einen tats\u00e4chlichen Mehrwert bieten f\u00fcr eine breitere Anwenderbasis. Hier seien zwei Beispiele vorgestellt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Python Klassengenerator<\/h4>\n\n\n\n<p>Ein Generator f\u00fcr Python-Klassen, der ein Python-Datenmodell \u00e4quivalent zum INTERLIS-Datenmodell erzeugt. Dies ist als erster Schritt in Richtung einer langfristigen Basis f\u00fcr Fachapplikationen zu betrachten. Denkbar ist eine Webapplikation zur Modellkonformen Datenerfassung<br>auf Basis von z.B. Django:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>generate_django_models.py --model &#91;modelname] --output my_source\/generated_classes\/<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Modelldokumentation<\/h4>\n\n\n\n<p>Ein Generator f\u00fcr eine Modelldokumentation, als Markdown (erm\u00f6glicht HTML, PDF, DOCX, \u2026). Ausserdem besteht die Option, das Klassendiagramm grafisch als UML abzubilden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>generate_ili_doc.py --model &#91;modelname] # Online lookup\ngenerate_ili_doc.py --model &#91;filename].ili # Local file<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Visionen<\/h2>\n\n\n\n<p>Bei Fachapplikationen f\u00fcr komplizierten Datenmodelle oder mit komplexen Workflows soll es m\u00f6glich sein, eine durchg\u00e4ngige Entwicklung vom Modell bis zur fertigen Applikation zu erm\u00f6glichen. Das Modell soll sich dabei nahtlos als Basis f\u00fcr Fachapplikationen nutzen lassen.<\/p>\n\n\n\n<p>Frameworks wie beispielsweise Django verf\u00fcgen \u00fcber M\u00f6glichkeiten, um (Web-)applikationen effizient zu entwickeln. Dabei werden Werkzeuge zur Verf\u00fcgung gestellt, um Anforderungen zu l\u00f6sen wie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rollenbasierte Zugriffsrechte:<\/strong> Es ist m\u00f6glich, pro User und Rolle zu definieren, wer, was, unter welchen Umst\u00e4nden lesen und bearbeiten darf<\/li>\n\n\n\n<li><strong>Nebeneffekte bei Bearbeitungsschritten:<\/strong> Es ist m\u00f6glich, sicherzustellen, dass bei gewissen Ver\u00e4nderungen auch Anpassungen in damit verwandten Daten nachgef\u00fchrt werden<\/li>\n\n\n\n<li><strong>Logging von Zugriffen:<\/strong> Es ist m\u00f6glich, Mutationen und Zugriffe sauber zu protokollieren<\/li>\n\n\n\n<li><strong>Migrationen zwischen Versionen von Datenmodellen:<\/strong> Bei einer Anpassung der Datenmodellversion k\u00f6nnen die daf\u00fcr notwendigen Migrationsschritte kontrolliert durchgef\u00fchrt werden (Bindings m\u00fcssen lediglich neu generiert werden).<\/li>\n\n\n\n<li><strong>Ansichten:<\/strong> Es ist m\u00f6glich, den Anwendern eine kontextbasierte Ansicht auf die Daten zu erm\u00f6glichen, welche aus Anwenderperspektive sinnvoll ist.<\/li>\n\n\n\n<li><strong>Erweiterungen:<\/strong> Verschiedene Erweiterungen werden \u00fcber eine grosse Community gepflegt welche sich auch ausserhalb der Geo-Szene befindet. Beispielsweise die M\u00f6glichkeit, Ansichten als OGC API Features zur Verf\u00fcgung zu stellen, inklusive der oben genannten rollenbasierten Zugriffsrechte, Logging etc.<\/li>\n\n\n\n<li><strong>Modularisierung:<\/strong> Saubere Trennung von Datenmodell und darauf aufbauenden Anwendungsf\u00e4llen. Applikationsrelevante Zusatzinformationen wie tempor\u00e4re Stati oder Caches k\u00f6nnen im Applikationscode verwaltet werden.<\/li>\n\n\n\n<li><strong>Testing:<\/strong> Applikationen k\u00f6nnen automatisiert getestet werden<\/li>\n\n\n\n<li><strong>Nahtlos vom Modell zur dokumentierten Python Library:<\/strong> Bereitstellung von Interface-Bibliotheken f\u00fcr Anwendungshersteller, welche die<br>Modelldokumentation bereits als Python-Docstring enthalten.<\/li>\n\n\n\n<li><strong>Kompromissloser Einsatz von Automatisierung:<\/strong> Inwertsetzung des sich ergebenden Potentials in Verbindung mit CI\/CD. Also vom publizierten Modell zur Python-Bibliothek, der Dokumentation in belibigen Formaten oder dem Klassendiagramm ohne manuelle Unterbr\u00fcche.<\/li>\n\n\n\n<li><strong>Verbreitung:<\/strong> Die Schaffung eines <em>\u00d6kosystems<\/em> rund um INERLIS wie beschrieben, f\u00fchrt zwangsl\u00e4ufig zur Verbreitung (Erfassungsapplikationen).<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seit einiger Zeit existiert die Idee von Python Bindings, erzeugt durch einen INTERLIS Compiler, welche die Modellinformationen f\u00fcr eine breite Entwicklerbasis zug\u00e4nglich macht, was einen schnelleren Innovationszyklus erm\u00f6glicht und damit die Grundlage f\u00fcr neue Plattformen, Werkzeuge und Integrationen schafft. How comes M\u00f6chte man den Inhalt einer XTF Datei im QGIS [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":14049,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[6,7,12,14,198,109],"tags":[213,186,214,212],"class_list":["post-14045","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","category-interlis","category-programming","category-python","category-qgis-de","category-unkategorisiert","tag-compiler","tag-interlis","tag-metamodell","tag-pythonbindings"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2023\/11\/pythonbindings.png?fit=1814%2C626&ssl=1","jetpack-related-posts":[{"id":14040,"url":"https:\/\/www.opengis.ch\/de\/2023\/11\/29\/new-qgis-courses-dates-for-2024\/","url_meta":{"origin":14045,"position":0},"title":"New QGIS Courses dates for 2024","author":"Anna Randegger","date":"29. November 2023","format":false,"excerpt":"Are you ready to dive into the world of GIS? We're thrilled to announce that our latest course dates for QGIS Basic and Advanced, Modelbaker, and Interlis are now open for registration! QGIS Basic Course Get started with the essentials of QGIS and discover how to visualize, manage, and analyze\u2026","rel":"","context":"In &quot;QGIS&quot;","block_context":{"text":"QGIS","link":"https:\/\/www.opengis.ch\/de\/category\/gis\/qgis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2023\/11\/AdobeStock_490731056-scaled.jpeg?fit=1200%2C738&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2023\/11\/AdobeStock_490731056-scaled.jpeg?fit=1200%2C738&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2023\/11\/AdobeStock_490731056-scaled.jpeg?fit=1200%2C738&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2023\/11\/AdobeStock_490731056-scaled.jpeg?fit=1200%2C738&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2023\/11\/AdobeStock_490731056-scaled.jpeg?fit=1200%2C738&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":14170,"url":"https:\/\/www.opengis.ch\/2023\/03\/06\/interlis-crashcourse-webinar\/","url_meta":{"origin":14045,"position":1},"title":"INTERLIS Crash Course Webinar","author":"Marco Bernasocchi","date":"6. M\u00e4rz 2023","format":false,"excerpt":"The goal of this crash course is to introduce \u201ccomplete beginners\u201d to INTERLIS. After the crash course, participants will know what INTERLIS is, how it is used, how to read a model, and how to find their way around it. They will also be able to model a simple example\u2026","rel":"","context":"In &quot;INTERLIS &amp; Model Baker courses&quot;","block_context":{"text":"INTERLIS &amp; Model Baker courses","link":"https:\/\/www.opengis.ch\/de\/category\/courses\/interlis-model-baker-courses\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/modelbaker_course.png?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/modelbaker_course.png?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/modelbaker_course.png?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/modelbaker_course.png?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/modelbaker_course.png?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3263,"url":"https:\/\/www.opengis.ch\/de\/2017\/12\/01\/interlis-translation\/","url_meta":{"origin":14045,"position":2},"title":"Interlis translation","author":"Mario Baranzini","date":"1. Dezember 2017","format":false,"excerpt":"Lately, I have been confronted with the need of translating Interlis files (from French to German) to use queries originally developed for German data. I decided to create an automated convertor for Interlis (version 1) Transfer Format files (.ITF) based on the existing cadastral data model from the Swiss confederation\u2026","rel":"","context":"In &quot;Interlis&quot;","block_context":{"text":"Interlis","link":"https:\/\/www.opengis.ch\/de\/category\/gis\/interlis\/"},"img":{"alt_text":"","src":"https:\/\/documents.lucidchart.com\/documents\/d4616523-4323-46c8-b964-a2d408f2051c\/pages\/0_0?a=204&x=162&y=206&w=1276&h=308&store=1&accept=image%2F*&auth=LCA%2090d759de416ce1d7dc7b7a42bd7f9aa5951828d9-ts%3D1505628781","width":350,"height":200,"srcset":"https:\/\/documents.lucidchart.com\/documents\/d4616523-4323-46c8-b964-a2d408f2051c\/pages\/0_0?a=204&x=162&y=206&w=1276&h=308&store=1&accept=image%2F*&auth=LCA%2090d759de416ce1d7dc7b7a42bd7f9aa5951828d9-ts%3D1505628781 1x, https:\/\/documents.lucidchart.com\/documents\/d4616523-4323-46c8-b964-a2d408f2051c\/pages\/0_0?a=204&x=162&y=206&w=1276&h=308&store=1&accept=image%2F*&auth=LCA%2090d759de416ce1d7dc7b7a42bd7f9aa5951828d9-ts%3D1505628781 1.5x, https:\/\/documents.lucidchart.com\/documents\/d4616523-4323-46c8-b964-a2d408f2051c\/pages\/0_0?a=204&x=162&y=206&w=1276&h=308&store=1&accept=image%2F*&auth=LCA%2090d759de416ce1d7dc7b7a42bd7f9aa5951828d9-ts%3D1505628781 2x"},"classes":[]},{"id":14415,"url":"https:\/\/www.opengis.ch\/2024\/05\/28\/the-postgresql-connection-service-file-and-why-we-love-it\/","url_meta":{"origin":14045,"position":3},"title":"The PostgreSQL Connection Service File and Why We Love It","author":"Dave Signer","date":"28. Mai 2024","format":false,"excerpt":"The PostgreSQL Connection Service File pg_service.conf has existed for quite some time and maybe you have already used it sometimes. We love it, and that is why we built the new QGIS plugin PG service parser hashtag#QGIS plugin. Read more about pg_service usages and the new plugin on our latest\u2026","rel":"","context":"In &quot;Interlis&quot;","block_context":{"text":"Interlis","link":"https:\/\/www.opengis.ch\/de\/category\/gis\/interlis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/05\/pgserviceparser-1.png?fit=1200%2C750&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/05\/pgserviceparser-1.png?fit=1200%2C750&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/05\/pgserviceparser-1.png?fit=1200%2C750&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/05\/pgserviceparser-1.png?fit=1200%2C750&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/05\/pgserviceparser-1.png?fit=1200%2C750&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":12905,"url":"https:\/\/www.opengis.ch\/2022\/06\/27\/swiss-qgis-user-group-meeting-berne-2022\/","url_meta":{"origin":14045,"position":4},"title":"Swiss QGIS user group Meeting Berne 2022","author":"Fabian Binder","date":"27. Juni 2022","format":false,"excerpt":"What a blast it was! The first QField user day in Bern with around 40 participants from Switzerland and neighbouring countries was packed with use case presentations and interesting discussions.","rel":"","context":"In &quot;Events&quot;","block_context":{"text":"Events","link":"https:\/\/www.opengis.ch\/de\/category\/events\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/06\/P6153915-scaled.jpg?fit=1200%2C896&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/06\/P6153915-scaled.jpg?fit=1200%2C896&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/06\/P6153915-scaled.jpg?fit=1200%2C896&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/06\/P6153915-scaled.jpg?fit=1200%2C896&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/06\/P6153915-scaled.jpg?fit=1200%2C896&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":13328,"url":"https:\/\/www.opengis.ch\/2022\/11\/15\/model-baker-interlis-data-validator\/","url_meta":{"origin":14045,"position":5},"title":"Model Baker INTERLIS Data Validator","author":"Dave Signer","date":"15. November 2022","format":false,"excerpt":"The fully integrated Data Validator, which allows validating your data directly in QGIS against their INTERLIS model, exists for almost a year now. After lots of user feedback and some investments, it's now shinier than ever. Time for an update and a little step-by-step guide. Why is it so awesome?\u2026","rel":"","context":"In &quot;GIS&quot;","block_context":{"text":"GIS","link":"https:\/\/www.opengis.ch\/de\/category\/gis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/8.png?fit=971%2C581&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/8.png?fit=971%2C581&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/8.png?fit=971%2C581&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2022\/11\/8.png?fit=971%2C581&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_shortlink":"https:\/\/wp.me\/pbdBtI-3Ex","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts\/14045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/comments?post=14045"}],"version-history":[{"count":6,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts\/14045\/revisions"}],"predecessor-version":[{"id":14053,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts\/14045\/revisions\/14053"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/media\/14049"}],"wp:attachment":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/media?parent=14045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/categories?post=14045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/tags?post=14045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}