|
Geodatenimport für PostgreSQL und Oracle SDO
cardo unterstützt unter anderem PostgreSQL/PostGIS und Oracle Spatial/Locator basierte Geodatenquellen. Diese können zur einfachen Anzeige im Kartenteil im Zusammenhang mit dem Geodateneditor und im Kleinkataster verwendet werden.
I.d.R. geht der Nutzung ein Import aus einer Shape-Datei voraus. Die zu den jeweiligen Datenbanken mitgelieferten Importwerkzeuge (shp2sdo.exe bzw. shp2pgsql.exe) können durch die Funktionen der Anwendung geoTools (Bestandteil der cardo Installation und generell frei verfügbar) ersetzt werden.
Im Folgenden wird der Import in PostgreSQL und ORACLE SDO beschrieben. Es wird vorausgesetzt, dass "geoTools.exe" auf dem Rechner vorhanden ist und die jeweiligen Tools der Datenbankanbieter erreichbar sind.
Import von Shapedateien mit dem Werkzeug geoTools in PostgreSQL/PostGIS
Für den Import in PostgreSQL steht die Option Shape2OGCInsert zur Verfügung. Dabei wird eine SQL Datei erstellt, welche direkt importiert werden kann. Die Argumente im Einzelnen:
Shape2OGCInsert infile.shp outFile TableName GeoColumnName {CREATE|APPEND} {WKB|WKT} {SRID} {SerialPkColumnName}
- infile - der (vollständige) Name der Datenquelle,
- outFile - der vollständige Name der Ergebnisdatei; diese wird ohne Rückfrage überschrieben,
- TableName - der Name der Zieltabelle, ein Schema kann durch Schema.Tabelle angegeben werden,
- GeoColumnName - der Name der zu erstellenden Geometriespalte; dieses darf nicht mit einem Spaltennamen aus der Shapedatei kollidieren,
- {CREATE|APPEND} - bei CREATE wird ein CREATE TABLE Statement erzeugt, bei Append muss die Tabelle bereits vorhanden sein,
- {WKB|WKT} - die Geometrierepräsentation in Text- bzw. Binärschreibweise ausgeben,
- {SRID} - die SRID der Geodaten, gemäß der PostGIS Spezifikation.
- {SerialPkColumnName} - Name einer anzulegenden Autowertspalte
Nach der Erstellung der SQL Datei muss diese mit psql zum Server transportiert werden.
Features
Die generierte SQL Datei enthält alle Angaben (bei der Option Create) ...
- zur Erstellung der Tabelle,
- dem Befüllen der Tabelle GEOMETRY_COLUMNS,
- dem Erstellen des GIS - Indizes,
- dem Erstellen eines Indizes auf die OID Spalte,
- einem abschließenden Vacuum dieser Tabelle,
- eine Liste der invaliden Objekte wird zur Information ausgegeben
Demzufolge muss der ausführende Datenbankbenutzer Rechte für die genannte Objekte haben, vor allem ein Schreibrecht auf die Tabelle GEOMETRY_COLUMNS muss gewährleistet sein.
Beim Import werden die Geodaten einer Prüfung unterzogen, um möglichst wenige invalide Objekte in der Datenbank zu hinterlassen. Typische Probleme sind falsche Multi/Inselpolygone und doppelte Stützpunkte.
Ebenso werden die Datentypen so gewählt, dass keine IWAN iInkompatiblen Typen enthalten sind (z.B. keine Numeric's)
Beispiel
Hier die zwei Schritte zur Konvertierung einer Shapedatei und dem anschließenden Import in die Datenbank. Die Optionen zu psql, dem Frontend der Postgres, sind der Hilfe zu entnehmen. Wenn Sie ein Password übergeben müssen, z.B. bei Import im Batch-Betrieb, kann vorher die Umgebungsvariable PGPASSWORD gesetzt werden.
set PGPASSWORD=sagIchNicht geoTools Shape2OGCInsert C:\rahmen.shp c:\test.sql g_tab1 geom CREATE psql -h ServerName -U BenutzerName -d DatenBankName -f c:\test.sql
Die durch die Konvertierung entstandene Ausgabedatei:
DROP TABLE g_tab1; BEGIN; CREATE TABLE g_tab1 ( ID int8, geom geometry )WITH OIDS; COPY g_tab1 (ID,geom) FROM stdin; 0 SRID=-1;POLYGON((11215.26793132 9370.97681856,11215.26793132 10154.14505773,12006.37368643 10154.14505773,12006.37368643 9370.97681856,11215.26793132 9370.97681856))
\ . SELECT 'Erstelle - GEO Index ...'; CREATE INDEX IDX_G_g_tab1 ON g_tab1 USING GIST (geom GIST_GEOMETRY_OPS); SELECT 'Ungueltige Elemente: '|| (SELECT COUNT(*) FROM g_tab1 WHERE NOT IsValid(geom)); SELECT 'Erstelle - OID Index ...'; CREATE INDEX IDX_OID_g_tab1 ON g_tab1 (OID ); DELETE FROM geometry_columns WHERE f_table_schema = 'public' AND f_table_name = 'g_tab1' AND f_geometry_column = 'geom'; INSERT INTO geometry_columns (f_table_catalog ,f_table_schema ,f_table_name ,f_geometry_column ,coord_dimension ,srid ,"type")
VALUES ('','public','g_tab1','geom',2,'-1','GEOMETRY'); END; SELECT 'VACUUM ...'; VACUUM ANALYZE g_tab1;
Import von Shapedateien mit dem Werkzeug geoTools in Oracle SDO
Der Import in ORACLE (Datenbank ab Version 9) erfolgt ebenfalls in zwei Schritten, dem Erstellen der Daten für den sqlldr (Bestandteil der Oracle Client Installation) und dem Import in die Datenbank mit dem genannten Werkzeug. Die geoTools Option für die Erstellung der Dateien lautet Shape2ORALdr.
Die Argumente im Einzelnen:
Shape2ORALdr infile.shp outFile TableName GeoColumnName APPEND|INSERT|REPLACE|TRUNCATE SRID {RecnoColumnName} {RecnoStartNumber}
- infile - der (vollständige) Name der Datenquelle,
- outFile - der vollständige Name der Ergebnisdateien (es werden CTL,SQL und DAT genriert); diese werden ohne Rückfrage überschrieben, evtl. angegebene Extensionen werden ignoriert,
- TableName - der Name der Zieltabelle, ein Schema kann durch Schema.Tabelle angegeben werden,
- GeoColumnName - der Name der zu erstellenden Geometriespalte, dieses darf nicht mit einem Spaltennamen aus der Shapedatei kollidieren,
- APPEND (anfügen an bestehende Tabelle)|INSERT (anlegen einer neuen Tabelle und befüllen)|REPLACE (leeren einer vorhandenen Tabelle und befüllen)|TRUNCATE (löschen einer vorhandenen Tabelle, neu anlegen und befüllen)- bei INSERT und TRUNCATE wird ein CREATE TABLE Statement erzeugt, im Control File für den SQL-Loader wird dieser Modus mit ausgegeben, weitere Informationen sind der Oracle Dokumentation zu entnehmen,
- SRID - SRID der Geodaten, gemäß der Oracle Spezifikation, GK 4 ist z.B. 82032, alternativ kann auch -1 für unbekannt definiert werden,
- RecnoColumnName - der Name einer Spalte für eine eindeutige ID, optional
- RecnoStartNumber - entweder ein numerischer Start-Wert für die eindeutige ID oder ein Dateiname, in welcher die ID abgelegt werden.
Nach der Erstellung müssen die Dateien mit sqlLdr zum Server transportiert werden.
Features
- Wenn die Tabelle erstellt wird, also bei den Optionen INSERT oder TRUNCATE, wird ein Statement zur Befüllung des USER_SDO_GEOM_METADATA Views generiert. Der unbedingt benötigte Spatial-Index muss manuell erstellt werden.
- Die Geometrien werden ebenso wie beim Postgres Import validiert und evtl. korrigiert.
- Der Import unter Angabe einer SRID ist möglich.
Beispiel
Import der Shapedatei 'rahmen'. Die benötigten Dateien werden in dem vorhandenen Ordner c:\o\ erstellt.
set NLS_LANG=American_America.WE8ISO8859P1 geoTools Shape2ORALdr C:\rahmen c:\o\test g_tab1 geom TRUNCATE -1 sqlplus scott/tiger@instance @c:\o\test.sql EXIT; sqlldr control=c:\o\test.ctl userid=scott/tiger@instance silent=feedback log=c:\o\test.log bad=c:\o\test.bad
Der Aufruf von sqlplus ist nur für den Modus TRUNCATE relevant. Werden Daten angefügt, sollte vorher ein evtl. vorhandener Index gelöscht werden.
Nach erfolgtem Import muss unbedingt ein Spatial Index erstellt werden. Dazu kann folgende SQL Anweisung genutzet werden:;
CREATE INDEX IDX_G_TAB1 ON G_TAB1(GEOM) indextype is mdsys.spatial_index;
Die erstellte SQL Datei:
CREATE TABLE g_tab1 ( ID NUMBER, geom MDSYS.SDO_GEOMETRY );
DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'G_TAB1' AND COLUMN_NAME = 'GEOM'; INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME , COLUMN_NAME, DIMINFO,SRID) VALUES ('G_TAB1', 'GEOM', MDSYS.SDO_DIM_ARRAY (MDSYS.SDO_DIM_ELEMENT ('X', 11215.27, 12006.37, 0.000000050), MDSYS.SDO_DIM_ELEMENT('Y', 9370.98, 10154.15, 0.000000050) ),NULL); COMMIT;
quit ;
|