[NAS] Erfahrungen mit kreisweiter Datenbank

Ralf Suhr Ralf.Suhr at itc-halle.de
Mon Feb 7 05:38:38 EST 2011


Hallo Herr Jäger,

doppelte Einträge können Sie mit einem Datenbanktrigger verhindern. Damit gdal 
1.8.0 damit funktioniert muss der Schalter " --config OGR_PG_RETRIEVE_FID 
FALSE" gesetzt sein.

MfG
Ralf Suhr

Am Freitag 04 Februar 2011, 12:53:05 schrieb Jäger, Frank (KRZ):
> Moin!
> 
> (english short-version at bottom)
> 
> Bisher hatte ich mit PostNAS die RLP-Musterdaten geladen und Daten aus
> NBAs, die jeweils nur für ein Stadtgebiet eingerichtet wurden (abgebende
> Software von AED/ESRI). Auf der Basis dieser Datenbanken hatte ich die
> "Auskunft" und die "Navigation" entwickelt.
> 
> Nun habe ich Daten aus einem NBA für ein ganzes Kreisgebiet in eine
> Datenbank geladen, die abgebende Software stammte diesmal von ibR.
> 
> Zunächst war bei der anfallenden Datenmenge die Schmerzgrenze erreicht, wo
> man NAS noch unkomprimiert lagern kann. Ich habe die Daten nun gezippt
> abgelegt und die Shellscripte zur Verarbeitung angepasst.
> 
> Ich bin mal davon ausgegangen, dass man die NAS-Daten nicht "pipen" kann (
> unzip | ogr2ogr ), also von stdout des unzip direkt an stdin von ogr2ogr
> übergeben. Es wird ja im Ordner der *.xml eine gleichnamige *.gfs
> angelegt. Dazu müssen die NAS-Daten wirklich als Datei verortet sein. Also
> lasse ich die Daten in einem Temp-Ordner auspacken. Das birgt die Gefahr,
> das parallelle Prozesse darin ihre Daten durcheinander werfen. Wenn jemand
> andere Ideen hat .....
> 
> Dann habe ich versehentlich mal eine Handvoll NAS-Dateien noch einmal
> konvertiert. PostNAS hat sich als "geduldig" erwiesen und die Objekte, die
> alle schon in der Datenbank waren, noch ein zweites Mal "fehlerfrei"
> eingetragen. Erst beim Zusammenfassen der Nutzungsarten für die
> Buchauskunft hat es gekracht. So etwas müsste eigentlich danbanktechnisch
> unterbunden werden, sonst bemerkt man den Fehler nicht und kommt zu
> falschen Flächenbilanzen.
> 
> Das Problem ist, dass die "gml_id" eigentlich in ALKIS 'für alles und
> jedes' ein eindeutiges Kennzeichen ist, dies Feld in der Datenbank aber
> mehrfach vorkommen darf. Als Primary Key wird statt dessen das serial
> "ogc_fid" erfunden, dass in den NAS-Daten gar nicht vorkommt.
> 
> Das sollte im Datenbankschema angepasst werden, z.B.:
> 
>   CREATE UNIQUE INDEX ax_besondereflurstuecksgrenze_gml
>                    ON ax_besondereflurstuecksgrenze USING btree (gml_id);
> 
> Frage: Kann es sein, dass der Konverter bei Fortführungen
> (Aktualisierungen) Objekte (temporär) doppelt braucht?
> 
> Um den Fehler auszubügeln, wollte ich dann die doppelten Einträge wieder
> entfernen. Mit der Logik "wenn ein gml_id mehrfach vorkommt, dann davon
> nur die letzte ogc_fid behalten" habe ich z.B. folgendes SQL abgeschickt:
> 
> DELETE
>   FROM ax_besondereflurstuecksgrenze AS dublette
> WHERE EXISTS
>    (SELECT solitaer.gml_id
>       FROM ax_besondereflurstuecksgrenze AS solitaer
>      WHERE solitaer.gml_id  = dublette.gml_id
>        AND dublette.ogc_fid > solitaer.ogc_fid);
> 
> Bei kleineren Tabellen konnte das noch ausgeführt werden, aber bei Tabellen
> mit mehren hundertausend Zeilen ist der Server sehr lange seeeehr
> beschäftigt, solange noch kein Index auf gml_id liegt. Der Index ist
> bisher nur dort vorhanden, wo in der Auskunft JOINs verwendet werden, wo
> also Einträge von "alkis_beziehungen" auf eine Tabelle verweisen.
> 
> Ich meine nun, jede Tabelle sollte einen Index auf gml_id haben!
> Evtl. taugt das sogar als PrimaryKey wodurch ocg_fid überflüssig würde.
> Aber das greift dann wohl doch zu tief in die ogr-Logik ein.
> 
> Um nun die Kreis-Datenbank auch für einzelne Städte verwenden zu können
> müssen die Filter in Auskunft und Navigation noch verbessert werden.
> 
> Alle von mir angepassten Dateien stelle ich im svn des Projektes zur
> Verfügung. http://trac.wheregroup.com/PostNAS/browser
> 
> 
> @Frank W.
> Hallo,
> 
> Can ogr2ogr read zipped NAS(XML)-Files?
> 
> If a NAS-file is konverted twice into the same Database, then PostNAS does
> this "without error". But ...
>  the column "gml_id" is a wold-wide-Unique-Key for every object in ALKIS.
> Maybe this is also a great (UNIQUE) Primary Key for every table, and a
> serial becomes obsolete.
> 
> I try to change the database:   CREATE UNIQUE INDEX ... (gml_id);
> 
> 
> 
> 
> Mit freundlichen Grüßen
> Frank Jäger
> 
> Kommunales Rechenzentrum
> Minden-Ravensberg/Lippe
> _______________________________________________
> NAS mailing list
> NAS at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/nas