claeis / ili2db

interlis import/export to relational databases
30 stars 30 forks source link

Testbeispiel mit ili2pkg >= 4.0.0 führt zu `no CRS for attribute RoadsSimple.Roads.LandCover.Geometry` #457

Closed iimsand closed 2 years ago

iimsand commented 2 years ago

Unter https://www.interlis.ch/downloads/testdatensaetze gibt es ein Testbeispiel (https://www.interlis.ch/download/interlis2/Testbeispiel_20160812.zip).

Führt man den folgenden Befehl aus:

java -jar apps/ili2gpkg-4.0.0/ili2gpkg-4.0.0.jar --schemaimport --dbfile RoadsSimple.gpkg samples/Testbeispiel_20160812/RoadsSimple.ili

# output:
Info: dburl <jdbc:sqlite:RoadsSimple.gpkg>
Info: dbusr <>
Info: ili2gpkg-4.0.0-9a3d59426b26f41c7cda8f6144f931ff807f43c1
Info: ili2c-5.0.0-20190401
Info: iox-ili-1.20.11-13a1c5b39c33dae68eca9146e8b26d07cdedfebe
Info: java.version 1.8.0_312
Info: user.name <###>
Info: maxMemory 3642880 KB
Info: currentTime 2022-02-14 12:41:40
Info: dburl <jdbc:sqlite:RoadsSimple.gpkg>
Info: dbusr <>
Info: databaseProduct <SQLite>
Info: databaseVersion <3.8.11>
Info: driverName <SQLiteJDBC>
Info: driverVersion <native>
Info: compile models...
Info: ilifile <samples/Testbeispiel_20160812/RoadsSimple.ili>
no CRS for attribute RoadsSimple.Roads.LandCover.Geometry

Wird das Schema nicht importiert und die Meldung no CRS for attribute RoadsSimple.Roads.LandCover.Geometry erscheint im Output. Der Import wurde auch mit ili2gpkg-4.7.0 getestet, mit dem gleichen Resultat.

Führt man den gleichen Befehl mit ili2gpg-3.12.3 aus, wird das Schema importiert:

java -jar apps/ili2gpkg-3.12.3/ili2gpkg-3.12.3.jar --schemaimport --dbfile RoadsSimple.gpkg samples/Testbeispiel_20160812/RoadsSimple.ili

# output:
Info: dburl <jdbc:sqlite:RoadsSimple.gpkg>
Info: dbusr <>
Info: ili2gpkg-3.12.3-092aadbf6d8b615a2ae4bb7d7b39250c5fdf3e93
Info: ili2c-4.7.9-20180705
Info: iox-ili-1.20.9-0e947c9f9e3d29aa52fb8cfe9d27c95760589398
Info: java.version 1.8.0_312
Info: user.name <###>
Info: maxMemory 3642880 KB
Info: currentTime 2022-02-14 12:45:15
Info: dburl <jdbc:sqlite:RoadsSimple.gpkg>
Info: dbusr <>
Info: databaseProduct <SQLite>
Info: databaseVersion <3.8.11>
Info: driverName <SQLiteJDBC>
Info: driverVersion <native>
Info: compile models...
Info: ilifile <samples/Testbeispiel_20160812/RoadsSimple.ili>
Info: create table structure, if not existing...
Info: ...done

Der Import des Testbeispiels funktioniert nur mit ili2gpkg < 4.0.0. Bei höheren Versionen wird no CRS for attribute RoadsSimple.Roads.LandCover.Geometry gemeldet.

Im Changelog von 4.0.0 ist folgendes zu lesen:- IMPORTANT: ili2db 4.x breaks schema compatibility with ili2db 3.x.

Was muss am Testbeispiel angepasst werden, damit der Import mit ili2gpkg >= 4.0.0 auch funktionert? Oder muss der Befehl angepasst werden?

Testbeispiel RoadsSimple.ili von https://www.interlis.ch/download/interlis2/Testbeispiel_20160812.zip (https://www.interlis.ch/downloads/testdatensaetze):


INTERLIS 2.3;

MODEL RoadsSimple (en) AT "http://www.interlis.ch/models"
  VERSION "2016-08-11" =

  UNIT
    Angle_Degree = 180 / PI [INTERLIS.rad];

  DOMAIN
    Point2D = COORD
      0.000 .. 200.000 [INTERLIS.m], !! Min_East  Max_East
      0.000 .. 200.000 [INTERLIS.m], !! Min_North Max_North
      ROTATION 2 -> 1;
    Orientation = 0.0 .. 359.9 CIRCULAR [Angle_Degree];

  TOPIC Roads =

    CLASS LandCover =
      Type: MANDATORY (
        building,
        street,
        water,
        other);
      Geometry: MANDATORY SURFACE WITH (STRAIGHTS)
        VERTEX Point2D WITHOUT OVERLAPS > 0.100;
    END LandCover;

    CLASS Street =
      Name: MANDATORY TEXT*32;
    END Street;

    CLASS StreetAxis =
      Geometry: MANDATORY POLYLINE WITH (STRAIGHTS)
        VERTEX Point2D;
    END StreetAxis;

    ASSOCIATION StreetAxisAssoc =
      Street -- {1} Street;
      StreetAxis -- StreetAxis;
    END StreetAxisAssoc;

    CLASS StreetNamePosition =
      NamPos: MANDATORY Point2D;
      NamOri: MANDATORY Orientation;
    END StreetNamePosition;

    ASSOCIATION StreetNamePositionAssoc =
      Street -- {0..1} Street;
      StreetNamePosition -- StreetNamePosition;
    END StreetNamePositionAssoc;

    CLASS RoadSign =
      Type: MANDATORY (
        prohibition, 
        indication, 
        danger,
        velocity);
      Position: MANDATORY Point2D;
    END RoadSign;

  END Roads; !! of TOPIC

END RoadsSimple. !! of MODEL
iimsand commented 2 years ago

Mit der Hilfe von https://github.com/claeis/ili2db/blob/master/docs/ili2db.rst#fall-15 und --defaultSrsCode 2056 klappt's nun:

java -jar apps/ili2gpkg-4.7.0/ili2gpkg-4.7.0.jar --defaultSrsCode 2056 --schemaimport --dbfile RoadsSimple.gpkg samples/Testbeispiel_20160812/RoadsSimple.ili
Info: dburl <jdbc:sqlite:RoadSimple.gpkg>
Info: dbusr <>
Info: ili2gpkg-4.7.0-5f0d7297204b098526ced56619a49df9e5fd4d3b
Info: ili2c-5.2.5-b1471c2815bd6f7703c39f0de059eb083e194448
Info: iox-ili-1.21.9-5a42f4e2e39d49e9fc61497e5cfe0fb13abe0205
Info: java.version 1.8.0_312
Info: user.name <###>
Info: maxMemory 3642880 KB
Info: currentTime 2022-02-14 13:49:12
Info: dburl <jdbc:sqlite:RoadSimple.gpkg>
Info: dbusr <>
Info: databaseProduct <SQLite>
Info: databaseVersion <3.8.11>
Info: driverName <SQLiteJDBC>
Info: driverVersion <native>
Info: compile models...
Info: ilifile <samples/Testbeispiel_20160812/RoadsSimple.ili>
Info: create table structure, if not existing...
Info: ...done
cheimlicher commented 2 years ago

Guten Tag allerseits Ich habe gerade versucht, ein LKMAP-Modell einzulesen - und dabei kam ebenfalls die Fehlermeldung "no CRS for attribute SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche.Flaeche". Und ich kann mir nicht erklären, warum? Die Modelle sind hier hochgeladen: Modelle.zip

Beim Import mit der Option --defaultSrsCode 2056 gibt es keine Fehlermeldung mehr. Dies hilft zwar im Augenblick - ich finde aber, dass die erwähnte Fehlermeldung nur aus nachvollziehbaren Gründen erstellt werden soll. Evtl. findet ja jemand den Fehler im Modell (ich bin nicht der Profi...)

Grüsse Christian

claeis commented 2 years ago

In der zip-Datei ist das Modell SIA405_LKMap_2015_LV95 zweimal vorhanden. Welche Datei wird genau benutzt? Und das Attribut SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche.Flaeche benutzt den Wertebereich Base_LV95.Surface und dort fehlt das CRS Metaattribut (darum die Fehlermeldung). https://github.com/claeis/ili2c/blob/master/doc/ili2c.rst#interlis-metaattribute

cheimlicher commented 2 years ago

ja, die Datei SIA405_LKMap_2015_2_d-20180427 ist noch vom Test drin, diese wird nicht benutzt.

Ich habe nun beim Modell Base_LV95 noch das Metaattribut !!@CRS=EPSG:2056 eingefügt:

    !!@CRS=EPSG:2056
    LKoord = COORD 2480000.000 .. 2840000.000 [m], !!{CHLV95/1}, 
                   1070000.000 .. 1300000.000 [m],  !!{CHLV95/2},
                   ROTATION 2 -> 1;

Damit funktionierts. Dann wäre ja das gegebene Modell für LKMap falsch, oder?

Besten Dank für die rasche Hilfe...

beistehen commented 2 years ago

Dann wäre ja das gegebene Modell für LKMap falsch, oder?

Nein, es ist einfach nicht im Modell festgeschrieben, welches CRS zu verwenden sei. Also gibst du es mit der Option --defaultSrsCode dem Werkzeug bekannt.