HOW TO

Erstellen einer auf Oracle Spatial-Funktionen basierenden Indizierung

Last Published: July 22, 2022

Zusammenfassung

Beim Erstellen eines Abfrage-Layers, der eine Oracle-Ansicht referenziert, die ein Oracle Spatial-Attribut enthält, kann es erforderlich sein, einen räumlichen Index zu implementieren. Ohne einen räumlichen Index kann es bei Abfragen von Tabellen und Ansichten mit einer großen Anzahl von Attributen zu Leistungseinbußen kommen.

In Fällen, in denen die Performance ein Problem darstellt, sollte beim Ableiten eines Oracle Spatial-Attributs durch die Ansicht ein funktionsbasierter Index für die Attribute der Tabelle erstellt werden, die zur Ableitung des räumlichen Attributs verwendet werden.

Vorgehensweise

Das folgende Beispiel beinhaltet die Tabelle "ellipse", die kein räumliches Attribut besitzt. Die Ansicht namens "sdo_ellipse" erstellt das Attribut "SDO_Geometry".

  1. Erstellen Sie die Tabelle, und fügen Sie einige Zeilen ein.
DROP TABLE ellipse; CREATE TABLE ellipse ( id NUMBER(38) NOT NULL UNIQUE, name VARCHAR2(50), x NUMBER, y NUMBER, semi_major NUMBER, semi_minor NUMBER, azimuth NUMBER); INSERT INTO ellipse VALUES (1, 'ellipse 1', 10, 10, 500, 250, 0); INSERT INTO ellipse VALUES (2, 'ellipse 2', 10, 10, 500, 250, 90); INSERT INTO ellipse VALUES (3, 'ellipse 3', 10, 10, 500, 250, 180); INSERT INTO ellipse VALUES (4, 'ellipse 4', 10, 10, 500, 250, 45);
  1. Erstellen Sie die Ansicht mit der Funktion "SDO_UTIL.ELLIPSE_POLYGON". Diese Funktion gibt ein Polygon zurück, das einer angegebenen Ellipse ähnlich ist. Weitere Informationen finden Sie in dem Handbuch "Oracle Spatial User's Guide and Reference".
DROP VIEW sdo_ellipse; CREATE VIEW sdo_ellipse AS SELECT id, name, SDO_UTIL.ELLIPSE_POLYGON(x,y,semi_major,semi_minor,azimuth,0.1) shape FROM ellipse;

Jetzt gibt es weder ein räumliches Attribut, noch einen räumlichen Index. Der Layer wird in ArcGIS erfolgreich dargestellt, jedoch treten Leistungsprobleme auf, wenn die Tabelle oder die Ansicht sehr viele Datensätze enthält. Die Implementierung eines funktionsbasierten Index kann zur Leistungsverbesserung beitragen.

  1. Zum Erstellen eines funktionsbasierten Index muss eine Zeile in den "user_sdo_geom_metadata" für die Tabelle eingefügt werden. Stellen Sie sicher, dass die verwendete Funktion vollständig qualifiziert ist.
DROP INDEX sdo_ellipse_spindx; DELETE FROM user_sdo_geom_metadata WHERE table_name = 'ELLIPSE'; INSERT INTO user_sdo_geom_metadata VALUES ( 'ellipse', 'MDSYS.SDO_UTIL.ELLIPSE_POLYGON(x,y,semi_major,semi_minor,azimuth,0.1)', SDO_DIM_ARRAY( SDO_DIM_ELEMENT('Lat', -90, 90, 0.05), SDO_DIM_ELEMENT('Long', -180, 180, 0.05)), 8307);
  1. Da ebenfalls eine Ansicht verwendet wird, sollten der Tabelle "user_sdo_geom_metatdata" für eine bessere Leistung Informationen für die Ansicht hinzugefügt werden. Stellen Sie sicher, dass die verwendete Funktion vollständig qualifiziert ist.
DELETE FROM user_sdo_geom_metadata WHERE table_name = ‘sdo_ellipse’; insert into user_sdo_geom_metadata (table_name, column_name, diminfo, srid) values (‘sdo_ellipse’, ‘SHAPE’, SDO_DIM_ARRAY( SDO_DIM_ELEMENT(‘Lat’, -90, 90, 0.05), SDO_DIM_ELEMENT(‘Long’, -180, 180, 0.05)), 8307); commit;
  1. Jetzt kann der räumliche Index erfolgreich erstellt werden.
CREATE INDEX sdo_ellipse_spindx ON ellipse(SDO_UTIL.ELLIPSE_POLYGON(x,y,semi_major,semi_minor,azimuth,0.1)) INDEXTYPE IS MDSYS.SPATIAL_INDEX_V2;

Aufgrund des erstellten räumlichen Index wird in ArcGIS eine bessere Leistung erzielt, wenn große Datenmengen in der Ansicht bzw. Tabelle angezeigt werden. Weitere Informationen zur räumlichen Indizierung finden Sie in diesem Dokument.

Artikel-ID:000011694

Hilfe von ArcGIS-Expert*innen erhalten

Technischen Support kontaktieren

Die Esri Support-App herunterladen

Zu den Download-Optionen

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden