claeis / ili2db

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

[ili2fgdb] kryptische Benennung der Geometrie-Klassen #430

Closed mizehnder closed 2 years ago

mizehnder commented 3 years ago

Schemaimport von http://models.geo.admin.ch/ARE/Nutzungsplanung_V1_2.ili führt zu nicht nachvollziehbarer Benennung der Geometrie-Klassen: grafik Folgende Parameter wurden genutzt: --schemaimport --defaultSrsCode 2056 --fgdbXyResolution 0.00005 --fgdbXyTolerance 0.0004 --createEnumTabs --createBasketCol ili2fgdb-Version: 4.5.0

In der Version 1.1 http://models.geo.admin.ch/ARE/replaced/Nutzungsplanung_V1_1.ili wurden die Geometrie-Klassen sinnvoll, gemäss Klassennamen, benannt: grafik

Soweit ich sehe, wurden die Geometrie-Strukturen von 1.1 auf 1.2 nicht angepasst. Wieso werden die Klassennamen nun anders abgebildet?

edigonzales commented 3 years ago

Es liegt einerseits an der Beziehung ASSOCIATION Geometrie_Dokument, die neu ist und andererseits, dass FGDB (und auch GPKG) nur eine Geometriespalte pro Tabelle erlaubt. So greift wohl die "smarte" Abbildungsregel nicht gleich gut und es führt zu einer für den Benutzer undankbaren Normalisierung.

Gegentest: Wenn ich die Assoziation entferne im 1.2er-Modell funktionierts wie anhin. Wenn ich die Daten nach Postgresql mit der Assoziation importiere, funktionierts wie anhin. Wenn ich beim Postgresql-Import --oneGeomPerTable verwende, erhalte ich die gleichen Tabellen wie bei FGDB.

mizehnder commented 3 years ago

Vielen Dank für die Tests Stefan! Nun kann ich nachvollziehen woran es liegt.

@claeis : Könnte man dann die Abbildungsregel entsprechend anpassen, damit auch in diesem Fall die Klassennamen sinnvoll benannt werden oder muss man aufgrund der Modellstruktur damit leben?

claeis commented 3 years ago

Im Prinzip ist es möglich, die automatisch generierten Namen zu übersteuern. Indem man die manuell definierten Namen in die Namensabbildungstabellen (t_ili2db_classname und t_ili2db_attrname) einfügt (vor dem --schemaimport!).

mizehnder commented 3 years ago

Als Workaround gut zu Wissen, klingt aber aufwändig. Kann denn die Abbildungsregel nicht entsprechend angepasst werden, damit auch in diesem Fall die Klassennamen übernommen werden?

claeis commented 3 years ago

Wie wären denn bessere Namen?

edigonzales commented 3 years ago

@mizehnder Geht es dir nur um die Namen oder dass die Tabellen in FGDB wie in der alten ili-Version abgebildet werden?

mizehnder commented 3 years ago

@edigonzales stimmt, es geht mir nicht nur um die Namen. Auch die Struktur verstehe ich nicht.

Bei V1.1 sind in jeder Geometrie-Tabelle die Attribute aus der Abstrakten Klasse Geometrie enthalten wie auch der Schlüssel zur Tabelle typ: grafik

Bei V1.2 sind diese Attribute nur in der Geometrie-Tabelle "geometrie" vorhanden: grafik

Bei den drei anderen Geometrie-Tabellen fehlen diese Attribute: grafik

Wo finde ich diese Angaben? Wie kann ich die Beziehung zur Tabelle typ herstellen?

edigonzales commented 3 years ago

Hilfreich sind ER-Diagramme z.B. in dbeaver (wohl nicht für FGDB aber für GPKG). Dazu muss --createFk verwendet werden. Gibt es sowas nicht in ArcWhatever? Und die Tabelle "t_ili2db_classname". Dort siehst du welche INTERLIS-Klasse zu welcher Tabelle gemappt wurde. Zwei Screenshots (Achtung: habe noch --nameByTopic verwendet).

Screenshot 2021-11-08 at 10 47 38

Screenshot 2021-11-08 at 10 47 35

mizehnder commented 3 years ago

Lösung: Mit --smart2Inheritance erfolgt die Tabellenabbildung gleich wie bei der Modellversion V1.1 und die Geometrie-Tabellen werden gemäss den Klassennamen benannt: grafik

Aktuell lässts sich zwar der Katalog nicht direkt importieren, das ist aber ein anderes Problem.