06 November 2017

Für einige der Datensätze, die gemäss GeoIG / GeoIV als INTERLIS-Datensatz geliefert werden müssen, gibt es bereits in irgendeiner Struktur Daten in der kantonalen Geodateninfrastruktur. Dass gar keine Daten vorhanden sind, dürfte wohl eher die Ausnahme sein. In beiden Fällen dürfte die Umsetzung eine Themas aber die passende Gelegenheit sein, um sich Gedanken über die zukünftige Datenstruktur in der KGDI zu machen.

Wäre es nicht schön, wenn man das minimale Geodatenmodell nach seinen Wünschen erweitern könnte, dieses bei sich in der KGDI implementieren könnte und dann trotzdem automatisch das Bundes-MGDM exportieren und der Aggregationsinfrastruktur liefern könnte? Ja. Und seit kurzem geht das mit ili2pg (und Variationen).

Nehmen wir mal an, dass wir nicht ein eigenes Datenmodell für die Nutzungplanung geschrieben hätten, sondern wir erweitern einfach das Bundesmodell: Wir möchten ein zusätzliches Attribut Baumassenziffer in der Klasse Typ und eine zusätzliche Klasse Grundnutzung_Zonenflaeche_Pos, um die Zonentypen anschreiben zu können (Wer will das heute noch?).

INTERLIS 2.3;

MODEL SO_ARP_Nutzungsplanung_20171106 (en)
AT "http://www.agi.so.ch"
VERSION "2017-11-06"  =
  IMPORTS Nutzungsplanung_LV95_V1_1,GeometryCHLV95_V1;

  TOPIC Geobasisdaten
  EXTENDS Nutzungsplanung_LV95_V1_1.Geobasisdaten =

    CLASS Grundnutzung_Zonenflaeche_Pos =
      Ori : MANDATORY 0.0 .. 399.9;
      HAli : MANDATORY INTERLIS.HALIGNMENT;
      VAli : MANDATORY INTERLIS.VALIGNMENT;
      Pos : MANDATORY GeometryCHLV95_V1.Coord2;
    END Grundnutzung_Zonenflaeche_Pos;

    CLASS Typ (EXTENDED) =
      Baumassenziffer : 0.00 .. 9.00;
    END Typ;

    ASSOCIATION Grundnutzung_Grundnutzung_Pos =
      Grundnutzung -<> {1} Nutzungsplanung_LV95_V1_1.Geobasisdaten.Grundnutzung_Zonenflaeche;
      Grundnutzung_Pos -- {0..*} Grundnutzung_Zonenflaeche_Pos;
    END Grundnutzung_Grundnutzung_Pos;

  END Geobasisdaten;

END SO_ARP_Nutzungsplanung_20171106.

Das Erstellen der leeren Tabellen in der Datenbank geht wie bis anhin:

java -jar ili2pg.jar --dbhost geodb-dev.eu-central-1.rds.amazonaws.com --dbdatabase xanadu2 --dbusr YYYYYY --dbpwd XXXXXX --nameByTopic --disableValidation --defaultSrsCode 2056 --expandMultilingual --strokeArcs --createGeomIdx --createFkIdx --createEnumTabs --beautifyEnumDispName  --modeldir "http://models.geo.admin.ch;." --models "Nutzungsplanung_Hauptnutzung_V1_1;SO_ARP_Nutzungsplanung_20171106" --dbschema npl_polymorph --schemaimport

Anschliessend importiere ich noch die Hauptnutzungen:

java -jar ili2pg.jar --dbhost geodb-dev.eu-central-1.rds.amazonaws.com --dbdatabase xanadu2 --dbusr YYYYYY --dbpwd XXXXXX --nameByTopic --disableValidation --defaultSrsCode 2056 --expandMultilingual --strokeArcs --createGeomIdx --createFkIdx --createEnumTabs --beautifyEnumDispName  --modeldir "http://models.geo.admin.ch;." --models Nutzungsplanung_Hauptnutzung_V1_1 --dbschema npl_polymorph --import Hauptnutzung_CH_V1_1.xml

Aufgrund der Vererbung erhält die Tabelle geobasisdaten_typ in der Datenbank das zusätzliche Attribut t_type. Das Attribut enthält den konkreten Klassennamen resp. den SQL-Namen des qualifizierten INTERLIS-Klassennamens. Zu finden in der Tabelle t_ili2db_classname. Wenn ich jetzt in der Datenbank einen Record erfasse, der zur meiner erweiterten Typ-Klasse gehört, muss ich so_rp_n0171106geobasisdaten_typ reinschreiben. Ich kann nun munter darauflos digitalisieren oder wie in meinem Fall von meinem richtigen kantonalen Nutzungsplanungsmodell in das Fantasiemodell Daten mittels SQL rüberschaufeln.

Die Magie und das Besondere beginnt erst beim Export. Wenn ich die Daten in meinem erweiterten kantonalen Modell exportieren will, reicht immer noch:

java -jar ili2pg.jar --dbhost geodb-dev.eu-central-1.rds.amazonaws.com --dbdatabase xanadu2 --dbusr XXXXXX --dbpwd YYYYYY --nameByTopic --disableValidation --defaultSrsCode 2056 --expandMultilingual --strokeArcs --createGeomIdx --createFkIdx --createEnumTabs --beautifyEnumDispName  --modeldir "http://models.geo.admin.ch;." --models SO_ARP_Nutzungsplanung_20171106 --dbschema npl_polymorph --export npl_so.xtf

Will ich nun direkt das Bundesmodell exportieren, muss ich ili2pg die neue Option --exportModels mitgeben:

java -jar ili2pg.jar --dbhost geodb-dev.eu-central-1.rds.amazonaws.com --dbdatabase xanadu2 --dbusr XXXXXX --dbpwd YYYYYY --nameByTopic --disableValidation --defaultSrsCode 2056 --expandMultilingual --strokeArcs --createGeomIdx --createFkIdx --createEnumTabs --beautifyEnumDispName  --modeldir "http://models.geo.admin.ch;." --models SO_ARP_Nutzungsplanung_20171106 --exportModels Nutzungsplanung_LV95_V1_1 --dbschema npl_polymorph --export npl_ch.xtf

Mit --exportModels Nutzungsplanung_LV95_V1_1 wird die Transformation in das Basismodell gesteuert. Mit --models SO_ARP_Nutzungsplanung_20171106 wird der Dateninhalt des Exportes definiert. In meinem konkreten Fall bedeutet das, dass beim Export in das Bundesmodell (= Basismodell) die zusätzliche Klasse und das zusätzliche Attribut verloren gehen.

Posted by Stefan Ziegler. | INTERLIS , Java , ili2pg , Polymorphismus , MGDM , MGM