Mit dem Skriptmodul können Objekte in eine PostGreSQL-Datenbank via ODBC geschrieben werden. Der Modul unterstützt speziell die PostGreSQL Option PostGIS für räumliche Daten. Der Modul kann mit RUN1 verwendet werden.
PGRESOUT unterstützt sämtliche Geometry-Typen von PostGIS.
Der Modul beinhaltet folgende Besonderheiten:
Schreibt Daten nach PostGreSQL/PostGIS.
Legt Tabellen für die Daten an.
Schreibt die notwendigen Definitionen für PostGreSQL/PostGIS.
Schreibt die Geometrien für PostGIS nach OGC Simple Feature Specification.
Schreibt den Spatial Index für die Geometrien von PostGIS.
Die Datenbank kann nach dem Schreiben der Daten direkt mit PostGIS weiterbearbeitet werden.
Der Modul wird mit:
|INCL \script\pgresout.mod
in einer ICS Konfiguration verfügbar gemacht.
Der Modul PGRESOUT ist eine Erweiterung des Moduls DBOUT. Alle im
Modul DBOUT beschriebenen Anteile gelten auch für das Modul PGRESOUT.
Ziehen Sie deshalb die Dokumentation des Modules DBOUT bei, insbesondere
die Abschnitte über die Parametermaps DB_PARAM
und
DBOUT_PARAM
.
Folgende Parameter können in der Map DB_PARAM für den Modul gesetzt werden:
Parameter | req/opt | Beschreibung |
SOURCE | o | ODBC-Source der Datenbank. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird. |
USER | o | Datenbank User für die Verbindung mit der ODBC-Source. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird. |
PASSWORD | o | Datenbank Password für die Verbindung mit der ODBC-Source. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird. |
TRACE | o | ON oder OFF, Default = OFF. Für jedes gelesene Objekt eine Zeile ausgeben. |
Folgende Parameter können in der Map DBOUT_PARAM für den Modul gesetzt werden:
Parameter | req/opt | Beschreibung |
CREATE_TABLE | o | ON , OFF ,Default
= OFF . Definiert ob die Tables definiert
mit Record-Definitionen (siehe weiter unten) in der
Datenbank erzeugt werden sollen. Mit OFF
werden die Tabellen nicht erzeugt. Mit ON
werden die Tabellen erzeugt und zwar zum Zeitpunkt, wenn das
erste Objekt in die Tabelle geschrieben wird. Tables in die
keine Objekte geschrieben werden, werden auch nicht
erzeugt. |
DELETE_OLD | o | ON , OFF oder
DROP , Default = OFF .
Löscht bestehende Daten in Tables definiert mit
Record-Definitionen (siehe weiter unten). Mit
OFF werden keine Daten gelöscht. Mit
ON werden die Daten über ein
delete-sql-statement gelöscht. Mit DROP
wird die Table und damit die Daten gelöscht. Zusammen mit
DROP und dem Parameter
CREATE_TABLE => ON werden die Tables
gelöscht und wieder erzeugt. |
SQLTRACE | o | ON oder OFF ,
Default = OFF . Zeigt alle sql-statements
im Logfile an. |
STATISTICS | o | ON oder OFF ,
Default = OFF . Statistik
anzeigen. |
DATASET | o | ON oder OFF ,
Default = OFF . Definiert, ob die in die
Datenbank geschriebenen Daten als Datasets verwaltetet
werden. Sie dazu mehr unter dem Kapitel Datasets. Der Wert
ON hebt den Parameter
DELETE_OLD auf. |
Folgende Parameter können in der Map PGRESOUT_PARAM für den Modul gesetzt werden:
Parameter | req/opt | Beschreibung |
WITH_OIDS | o | ON oder OFF ,
Default = undefiniert . Definiert ob
Tabellen mit OID's kreiert werden sollen. Ist der Parameter
auf ON gesetzt, werden die Tabellen mit
OID's kreiert. Ist der Parameter auf OFF
gesetzt, werden die Tabellen ohne OID's kreiert. Ist der
Parameter nicht defiiniert, gilt die PostGreSQL
Konfiguration Variable default_with_oids ,
welche definiert, ob Tabellen mit OID's kreiert werden
sollen. OID ist ein PostGreSQL-Systemattrinbut und
beinhaltet einen eindeutigen Objektschlüssel. Zum Beispiel
der MapServer verwendet diese OID's. |
SPATIAL_STROKE | o | <real> , Default =
0.001 . PostGIS basiert auf der OGC Simple
Feature Specification. Diese Spezifikation unterstützt keine
Kreisbögen, deshalb müssen Kreisbögen in Liniensegmente
aufgelöst werden. Als Stroke-Tolerance können dieselben
Werte wie für die ICS-Methode ICS.STROKE
verwendet werden (s.a. iG/Script Benutzer- und
Referenzhandbuch). |
SPATIAL_INDEXCREATE | o | ON oder OFF ,
Default = ON . Definiert ob die Indexe für
die Geometrie-Spalten für PostGIS erzeugt werden sollen.
Aufgrund der Tabelle und des Attributes wird automatisch ein
Indexname erzeugt. |
SPATIAL_INDEXDROP | o | ON oder OFF ,
Default = ON . Definiert ob die Indexe für
die Geometrie-Spalten vor dem Schreiben der Daten gelöscht
werden sollen. Dies ermöglicht das schnellere Schreiben der
Daten. Mit PGRESOUT_PARAM.SPATIAL_INDEXCREATE =>
ON werden die Indizes nach dem Schreiben wieder
angelegt. |
SPATIAL_SRID | o | <integer> oder
OFF , Default = OFF .
Definiert die PostGIS-SRID-Identifikation für die
Geometrien. Jede Geometrie wird mit dem definierten
SRID nach PosGIS geschrieben. Das SRID
muss in der PostGIS-Systemtabelle
spatial_ref_sys definiert sein. |
Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:
Komponente | req/opt | Beschreibung |
OUT.TABLE(s) | r | Tablename des OUT Objekts. |
OUT.<Attribut>(s) | o | Attributname der Tabelle. Der Wert der Komponente
beinhaltet den Wert für die Datenbank. Der Type des Wertes
muss mit dem Type des Attributes in der Datenbank
übereinstimmen. Es können beliebig viele Attribute definiert
werden. Geometrien werden mit der PostGIS-Funktion
GeometryFromText(OGC-WKT-Geometry)
geschrieben. Eine ICS-Geometry wird in eine OGC-WKT-Geometry
mit der Methode OGC.GEOM2WKT umgewandelt
(siehe w. u.). |
Dieses Objektmodell gilt für die Anwendung mit der
Prozedur PGRESOUT_WRITE_OBJECT0
. Die Tabellen mit den
Attributen müssen in der Datenbank bereits bestehen oder in einer
Konfiguration mit Prozeduren und Methoden vorgängig kreiert werden.
Falls die Datenbankstrukturen automatisiert mit dem Modul erstellt
werden sollen, so beachten Sie das Kapitel mit den Record-Definitionen
und die Prozedur PGRESOUT_WRITE_RECORD1
.
Mit Record Definitionen können nicht nur Objekte in die Datenbank
geschrieben werden, sondern auch Datenbank-Tabellen automatisiert in der
Datenbank angelegt werden. Die Record Definitionen werden von der
Prozedur PGRESOUT_WRITE_RECORD1
verarbeitet. Eine
Record Definition sieht wie folgt aus.
MAP RECORD_<n>
TABLE => <Table-Name>
:
<Attribute-Name> => <Attribute-Type>,<Attribute-Value>
:
END_MAP
Die einzelnen Bestandteile einer Record-Definition sind:
RECORD_<n>
Eine Record Definition ist eine Map. Der Map-Name muss
mit dem Prefix RECORD_
beginnen und eine
eindeutige Nummer <n>
für die Record
Definition beinhalten.
TABLE
Diese Komponente ist obligatorisch und definiert die Datenbank-Tabelle.
<Table-Name>
Definiert als Wert der Komponente
TABLE
die Datenbank-Tabelle.
<Attribute-Name>
Definiert als Komponente einen Attribut-Namen innerhalb der Tabelle. Es können beliebig viele Attribute als Komponenten definiert werden.
<Attribute-Type>
Definiert den Attribut-Type in der Datenbank. Im Normalfall können der Datenbank bekannt Typen verwendet werden. Spezialtypen einer Datenbank werden eventuell nocht nicht unterstützt. Solche Spezialtypen werden bei Bedarf und auf Anfrage implementiert. Bei den Typen ist auf folgendes zu achten.
CHAR(<length>)
Stringtypen sind immer als
CHAR
mit der Länge
<length>
zu definieren. Je
nach Datenbank wird der Typ vom Modul in einen der
Datenbank bekannten Type umgewandelt z.B. PostGreSQL
als VARCHAR2
.
NUMBER
Number-Typen ohne Argumente werden vom Modul als
double precision
interpretiert.
INTEGER
Integer.
DATE
Date.
OGC_GEOMETRY(<type>;<dimension>)
PostGIS Spatial Geometrien müssen als Type
OGC_GEOMETRY
definiert werden.
Dabei sind folgende weiteren Definitionen
notwendig.
<type>
Type der Geometrie, einer der Werte:
point|line|area.
<dimension>
Dimension der Geometrie, einer der Werte:
2D
|3D.
<Attribut-Value>
Definiert den Wert für das Attribut. Als Wert können
Konstanten oder ICS-Variablen, die einen Wert beinhalten - z.B.
IN.OBJID
- verwendet werden.
Beispiel einer Record Definition.
MAP RECORD_1 TABLE => Fixpunkte_LFP OBJID => CHAR(10),IN.OBJID ENTSTEHUNG => CHAR(10),IN.Entstehung.OBJID NUMMER => CHAR(12),IN.Nummer GEOMETRIE => OGC_GEOMETRY(point;3D),IN.Geometrie LAGEZUV_TXT => CHAR(4),IN.LageZuv_TXT HOEHEZUV_TXT => CHAR(4),IN.HoeheZuv_TXT BEGEHBARKEIT_TXT => CHAR(14),IN.Begehbarkeit_TXT SYMBOLORI => NUMBER,IN.SymbolOri ART_TXT => CHAR(4),IN.Art_TXT HERKUNFT => CHAR(30),IN.Herkunft END_MAP
Zur Verwaltung von Datasets in der Datenbank ist das analoge Kapitel des Modules DBOUT zu beachten.
Falls basierend auf den Record-Definitionen vor einem
Datentransfer das gesamte Datenbankmodell inklusive den notwendigen
PostGreSQL/PostGIS Spatial Definitionen erstellt werden soll, so ist der
Parameter CONFIG_PARAM.GENERATE_MODEL
auf
ON
zu setzen und das Script
il2pgres.lib
zu includen:
MAP CONFIG_PARAM GENERATE_MODEL => ON END_MAP : |INCL \script\il2db\il2pgres.lib
Entsprechend den Record-Definitionen wird vor einem Datentransfer das Datenbankmodell angelegt, falls es nicht schon angelegt wurde.
Der Modul beinhaltet alle Prozeduren und Methoden wie der Modul DBOUT. Ziehen Sie deshalb die Dokumentation des Modules DBOUT bei.
Zusätzlich stellt der Modul PGRESOUT folgende Prozeduren und Methoden zur Verfügung.
Prozedur | PGRESOUT_OPEN [][] |
Beschreibung | Öffnet eine Datenbank definiert
mit DB_PARAM.SOURCE . Die Prozedur wird
von RUN1 automatisch aufgerufen. |
Beispiel |
|
Prozedur | PGRESOUT_WRITE_OBJECT0 |
Beschreibung | Schreibt einen Objekt in die Datenbank. Das OUT-Objekt muss gemäss dem Objektmodell vorbereitet sein. |
Beispiel |
|
Prozedur | PGRESOUT_WRITE_RECORD1 ! s recordname |
Beschreibung | Schreibt ein Objekt
definiert in
|
Beispiel |
|
Prozedur | PGRESOUT_CLOSE [][] |
Beschreibung | Schliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen. |
Beispiel |
|
Methode | OGC.GEOM2WKT [g|li geometry][s ogc-wkt-geometry] |
Beschreibung | Übersetzt eine ICS-Geometrie point,line oder area in eine OGC WKT Geometrie als String. Als Input können auch Listen von Geometrien übergeben werden. Falls die Geometrien nicht übersetzt werden können, wird auf dem Stack ein NULL-String zurückgegeben. (WKT: Well Known Text nach OGC Simple Feature Specification). |
Beispiel |
|
Folgende Konversionen werden durchgeführt:
|
Neben diesen Prozeduren des Modules stehen auch die Prozeduren und Methoden des Modules DBOUT zur Verfügung. Diese Prozeduren und Methoden sind im Modul DBOUT beschrieben.
! Diese ICS Konfiguration liest ein INTERLIS FIle, ! kreiert eine Tabelle für LFP's in der Datenbank ! und schreibt die LFP's in die Tabelle. |LICENSE \license\iltools.lic MAP USER_INPUT1 DIALOG => FILE MESSAGE => 'Enter INTERLIS Input File' FILE_FILTER => itf FILE_EXISTS => TRUE OPT => input END_MAP MAP USER_INPUT2 DIALOG => ODBC OPT => output END_MAP MAP ILIN_PARAM INTERLIS_DEF => \models\Grunddatensatz.ili STATISTICS => ON CALC_SURFACE => ON ENUM_TO_TEXT => ON TRACE => OFF END_MAP MAP ILIN_TOPO DEFAULT => OFF END_MAP MAP DB_PARAM SOURCE => '' ! ODBC-Source USER => '' ! ODBC-User PASSWD => '' ! ODBC-Password TRACE => OFF END_MAP MAP DBOUT_PARAM STATISTICS => ON CREATE_TABLE => ON DATASET => ON END_MAP MAP PGRESOUT_PARAM SPATIAL_STROKE => 0.001 ! a real Stroke-Tolerance SPATIAL_INDEXDROP => ON ! ON|OFF Spatial Index Drop before Insert SPATIAL_INDEXCREATE => ON ! ON|OFF Spatial Index Create after Insert SPATIAL_SRID => -1 END_MAP MAP RECORD_1 TABLE => Fi_LFP OBJID => CHAR(10),IN.OBJID ENTSTEHUNG => CHAR(10),IN.Entstehung.OBJID NUMMER => CHAR(12),IN.Nummer GEOMETRIE => OGC_GEOMETRY(point;3D),IN.Geometrie LAGEZUV_TXT => CHAR(4),IN.LageZuv_TXT HOEHEZUV_TXT => CHAR(4),IN.HoeheZuv_TXT BEGEHBARKEIT_TXT => CHAR(14),IN.Begehbarkeit_TXT SYMBOLORI => NUMBER,IN.SymbolOri ART_TXT => CHAR(4),IN.Art_TXT HERKUNFT => CHAR(30),IN.Herkunft END_MAP MAP INPUT_SOURCES I1 => ILTOPO,OPT.input END_MAP MAP INOUT I1 => IN.TOPIC,IN.TABLE I1,Fixpunkte,LFP => PGRESOUT_WRITE_RECORD1,RECORD_1 I1,* => OFF END_MAP |INCL \script\iltopo.mod |INCL \script\pgresout.mod |INCL \script\run1.prg