ORACLE Spatial/Locator

Ermöglicht den Zugriff auf ORACLE Datenbanken mit Geometriedaten. Die Implementierung verwendet die OciLIB. D.h. ein Oracle-Instant Client mit installierte OCI Komponente muss auf dem ausführendem Rechner installiert sein. Die installierte Version des Oracle Client wird zur Laufzeit beim ersten Zugriff ermittelt.

Hinweis: Beachten Sie, dass je nach Komponenten die entsprechende 32Bit/64 Bit Version installiert sein muss. Wir empfehlen die Verwendung des Oracle Instant-Client ab Version 11.

Abfragen mittels GeoSQL sind möglich.

Das Einbinden einer Quelle ohne Geometriespalte ist möglich.

Argumente

Typname: OracleLayer

  • db: TNS Name oder EZ-Connect (//server:1521/ora) Verbindungszeichenfolge zum Datenbankserver ()

  • userName: Datenbank Benutzername, kann verschlüsselt angegeben werden

  • passWord: Kennwort des Datenbankbenutzers, kann verschlüsselt angegeben werden

  • source :Tabelle oder Abfrage der Datenquelle

  • geomColumnName: (""): wenn nicht angegeben, dann wird aus der Abfrage {source} die erste Spalte vom Typ Geometry verwendet, sonst bleibt es ein Nicht-Spatial Layer

  • idColumnName (""): optionaler Name einer Spalte die eindeutige Werte enthält.

  • srid (-1): Die SRID der Geometrie, muss angegeben werden, wenn quickLoad true ist.

    Die Srid wird nur für das korrekte Erstellen der Geometrien für Vergleiche verwendet, die Projektion wird ausschließlich durch den EpsgCode festgelegt.

    Der Wert -1 wird als SRID NULL interpretiert.

  • epsgCode (-1): Epsg-Code der Daten, wenn nicht definiert, dann wird eine automatische Ermittlung aus der Bounding-Box versucht

  • quickLoad (false): Wenn false, dann werden Count, SRID und BBox über diese Abfrage ermittelt

  • sde_version (): Wird dieser Wert übergeben, wird in der Datenbankverbindung nach dem Erstellen sde.version_util.set_current_version({version}) aufgerufen.

  • style|cssFile: hier immer vom Typ Vektor CSS.

Ladevorgang

Der Ladevorgang wird im Wesentlichen durch die Argumente beeinflusst. In jedem Fall wird eine Abfrage SELECT * FROM {source} WHERE 1 = 0, bzw. wenn kein IdColumnNamen angegeben ist SELECT ROWID,* FROM {source} WHERE 1 = 0 durchgeführt.

Je nach Quickload wird eine weitere Abfrage für die Statistik ausgeführt.

Beispiel

Hier wird auf die Tabelle SpatialTabelle zugegriffen.

{
  "Ora1": {
	"type": "OracleLayer",
	"userName":"scott",
	"password":"tiger",
	"db":"//host.local:1521/ora",
	"source":"SpatialTabelle",
	"epsgCode":31469,
	"cssfile": "Marker.css",
	"idColumnName":"id"
	}
}

Implementierungsdetails / Features und Einschränkungen

Folgende Oracle SDO Funktionen der Datenbank werden verwendet:

  • SDO_AGGR_MBR(geom)
  • SDO_FILTER(geom,geom,QueryType)
  • SDO_RELATE(geom,geom,MASK)

Liste der Geometrieformate: siehe hier

Nicht unterstützte Datentypen

Folgende Oracle-Datentypen werden derzeit nicht unterstützt, d.h. beim Auslesen ignoriert:

  • INTERVAL
  • OBJECT (außer SDO_GEOMETRY)
  • STATEMENT
  • FILE
  • RAW
  • COLLECTION
  • REFERENCE

Konvertierungsregeln für numerische Typen

Anbei eine Aufstellung der Datenkonvertierungsregeln für numerische Typen.

Definition Oracle Ergebnisdatentyp
NUMBER Double
NUMBER(*,10) Double
NUMBER(20,10) Double
NUMBER(10) Int32
NUMBER(*, 0) Int64
NUMBER(10,-2) Double
NUMBER(5,0) Int16
INTEGER Int64
DECIMAL Int64
DECIMAL(10,5) Double
FLOAT Double
BINARY_FLOAT Double
BINARY_DOUBLE Double
ROUND((NI/10),4) Double
SQL Statments für intern durchgeführte Abfragen

Ermittlung von Count/BBox (siehe auch Parameter quickLoad):

(
with mbr as 
(select rownum coord_seq, column_value coord from table (select sdo_aggr_mbr({geomCol}).sdo_ordinates
  from {source})) 
 select
	   (select count(*) from {source}) cnt
	  , (select distinct a.{geomCol}.sdo_srid from {source} a) srid
	  , (select coord x1 from mbr where coord_seq = 1) MinX
	  , (select coord y1 from mbr where coord_seq = 2) MinY
	  , (select coord x2 from mbr where coord_seq = 3) MaxX
	  , (select coord y2 from mbr where coord_seq = 4) MaxY      
   from dual
)

Ist quickLoad true, dann wird lediglich SELECT COUNT(*) FROM ausgeführt.

Übersetzung der Geometrie-Filter Aktionen

Für ST_Intersects und ST_Relate mit der Relation-Matrix T******** werden folgende Übersetzungen vorgenommen:

Intersects:

SDO_RELATE(COL,cmp,
   'mask=anyinteract querytype=WINDOW'
   ) = 'TRUE'

DefaultRelateT8Stars:

SDO_RELATE(COL,cmp,
   'mask=contains+coveredby+covers+inside+on+overlapbdydisjoint+overlapbdyintersect+equal querytype=WINDOW'
   ) <> 'FALSE'

Hinweise zum Oracle-Client

Für die Nutzung der Oracle Komponenten ist ein OracleClient auf dem ausführendem Rechner erforderlich.

Es genügt ein Instant-Client. Auf Grund verschiedener Probleme im Zusammenhang mit weiteren installierten Komponenten haben wir mit Version 7.1.0.9 eine eigene Suchstrategie für den zu verwendenden OracleClient eingeführt.

  1. Es wird geprüft, ob eine Umgebungsvariable IDUIT_ORACLIENT_PATH vorhanden ist,
  2. ... wenn nicht, wird als Pfad C:\OracleInstanceClient4IduIT angenommen.

In dem so ermitteltem Pfad muss ein Unterordner x86, bzw. x64 vorhanden sein. Wenn dieser Ordner vorhanden ist, wird der dort hinterlegte Instant-Client verwendet.

Das Vorgehen ist optional, ist die o.g. Bedingung nicht gegeben, wird die Standard-Suche entsprechend der Oracle Regeln durchgeführt.

Wir empfehlen, eine aktuelle Version des Oracle-Instant Client zu verwenden.

Laden Sie von der Oracle Downloadseite die Version für Microsoft Windows (x64) und Microsoft Windows 32-bit herunter.

Sie benötigen ein Login auf der Oracle Seite.

Speichern Sie den Inhalt der Zip-Dateien in dem entsprechend benannten Ordner.

Oraclient Folder

Alternativ: Unsere Kunden finden das Zip unter /downloads/OracleInstanceClient4IduIT.zip

Beachten Sie: Ein Prozess kann nur eine Version des Oracle Clients laden. Sollten bspw. die IduIT.GeoLib.Net im IIS eingesetzt werden, dann stellen Sie sicher, dass eine evtl. genutzte andere Version (bspw. Oracle ODB.Net) die gleichen Binaries verwendet. Im genannten Fall kann dies durch Eintragen des DLLPath in der web.config sichergestellt werden:

<configuration>
  <oracle.dataaccess.client>
    <settings>
     <add name="DllPath" value="C:\OracleInstanceClient4IduIT\x86"/>
    </settings>
  </oracle.dataaccess.client>
 ...

Zuletzt geändert: 09.12.2019 08:05:21 (erstmals erstellt 19.04.2017)