Mit dem Modul GEOINDEX werden Objekte mit Geometrien in einen Geometrie Index geschrieben. Über geometrische Abfagen können diese Objekte schnell aufgefunden werden.
GEOINDEX wird mit:
|INCL \script\geoindex.mod
verfügbar gemacht.
Folgende Parameter können in der Map
GEOINDEX_PARAM
für den Modul gesetzt werden:
Parameter | req/opt | Beschreibung |
PAGESIZE | o | <real>. Geometrien werden in einem Raster (Pages) indexiert. Mit diesem Parameter wird die Rastergrösse definiert. Je nach der Art der Geometrien und der geplanten Verarbeitung ist eine entsprechende Rastergrösse optimal. |
DISKMEMORY | o | ON oder OFF , Default
= OFF . Per Default speichert das Modul die
indexierten Objekte und Geometrie im Arbeistspeicher. Bei grossen
Datenmengen kann eventuell der Arbeistspeicher nicht ausreichen.
Mit diesem Parameter kann gesetzt werden, dass die indexierten
Objekte und Geometrie auf der Disk gespeichert werden. Dies
Verarbeitung entlastet den Arbeitsspeicher ist aber etwas
langsamer. |
Mit dem Modul werden Objekte mit Geometrien in einen Index geschrieben. Die Objekte können beliebig sein und werden analog wieder gelesen.
Bevor Abfragen auf dem Geometrie Index ausgeführt werden können, muss der Geometrie Index mit Objekten gefüllt werden. Die nachfolgenden Methoden stehen dazu zur Verfügung.
Prozedur | GEOINDEX.OPEN ! [][] |
Beschreibung | Öffnet den Geometrie Index. Objekte mit Geometrien können in den Geometrie Index geschrieben werden. |
Beispiel | GEOINDEX.OPEN |
Prozedur | GEOINDEX.WRITE_OBJECT ! [* object, g geometry][i id] |
Beschreibung | Schreibt ein Objekt unter einer Geometrie in den Geometrie Index. Eine eindeutige Identifikation des Objektes im Geometrie Index wird zurück gegeben.Nachdem die gewünschten Objekte in den Geometrie Index geschrieben sind, können diese mit den geometrischen Abfragen wieder gelesen werden. |
Beispiel | &IN IN.Geometrie GEOINDEX.WRITE_OBJECT [1] |
Prozedur | GEOINDEX.WRITE_OBJECT_CLASS ! [s class, * object, g geometry][i id] |
Beschreibung | Wie
|
Beispiel | 'MyClass' &IN IN.Geometrie GEOINDEX.WRITE_OBJECT_CLASS [1] |
Prozedur | GEOINDEX.CLOSE ! [][] |
Beschreibung | Schliesst den Geometrie Index. Der Geometrie Index wird geleert. Danach sind keine geometrsichen Abfragen auf den Geometrie Index möglich. |
Beispiel | GEOINDEX.CLOSE |
Prozedur | GEOINDEX.SET_CLASS_FILTER ! [s class] [] |
Beschreibung | Für alle nachfolgenden Methoden
GEOINDEX.*_READ_OPEN kann ein Filter gesetzt
werden, welche Klassen zurückgelesen werden sollen. Die Klassen
müssen vorgängig mit
GEOINDEX.WRITE_OBJECT_CLASS in den Geoindex
geschrieben werden. Mehrere Klassen können kommasepariert gesetzt
werden 'MyClass1,MyClass2' . Ist Class
= NULL wird der Filter zurückgesetzt, d.h. es ist kein
Filter aktiv. Ein gesetzter Filter bleibt aktiv bis er wieder mit
der Methode neu gesetzt oder zurückgesetzt wird. |
Beispiel | ['MyClass'] GEOINDEX.SET_CLASS_FILTER [] |
Alle in den Geometrie Index geschriebenen Objekte können sequentiell oder über Ihre Identifikation zurückgelesen werden.Die nachfolgenden Methoden stehen dazu zur Verfügung.
Prozedur | GEOINDEX.READ_OPEN ! [] [] |
Beschreibung | Öffnet den Geometrie Index für das sequentielle Lesen der Objekte im Geometrie Index. |
Beispiel | [] GEOINDEX.READ_OPEN [] |
Prozedur | GEOINDEX.READ_OBJECT ! [] [g geom, * object, i id, b status] |
Beschreibung | List das nächste Objekt aus dem Geometrie Index. |
Beispiel | [] GEOINDEX.READ_OBJECT [geom map 1 TRUE] |
Prozedur | GEOINDEX.READ_CLOSE ! [][] |
Beschreibung | Schliesst den Geometrie Index für das sequentielle Lesen der Objekte im Geometrie Index. |
Beispiel | GEOINDEX.READ_CLOSE |
Prozedur | GEOINDEX.READ_OBJECT_BY_ID ! [i id] [g geom, * object, b status] |
Beschreibung | List ein Objekt aus dem Geometrie Index über dessen Identifikation. |
Beispiel | [1] GEOINDEX.READ_OBJECT_BY_ID [geom map TRUE] |
Alle Objekte, deren maximale Ausdehnung ein Rechteck überlappen, können aus dem Geometrie Index gelesen werden.Die nachfolgenden Methoden stehen dazu zur Verfügung.
Prozedur | GEOINDEX.RECTANGLE_READ_OPEN ! [p point1, p point2] [] |
Beschreibung | Öffnet die Abfrage des Geometrie Indexes über ein Rechteck. |
Beispiel | [point1 point2] GEOINDEX.RECTANGLE_READ_OPEN [] |
Prozedur | GEOINDEX.RECTANGLE_READ_OBJECT ! [g geom, * object, i id, b status] |
Beschreibung | Liest das nächste Objekt aus dem Geometrie Index, dessen maximale Ausdehung das Rechteck überlappt. |
Beispiel | [] GEOINDEX.RECTANGLE_READ_OBJECT [geom map 1 TRUE] |
Prozedur | GEOINDEX.RECTANGLE_READ_CLOSE ! [] [] |
Beschreibung | Schliesst die Abfrage. |
Beispiel | [] GEOINDEX.RECTANGLE_READ_CLOSE [] |
Alle Objekte, deren maximale Ausdehnung eine Fläche überlappen, können aus dem Geometrie Index gelesen werden.Die nachfolgenden Methoden stehen dazu zur Verfügung.
Prozedur | GEOINDEX.AREA_READ_OPEN ! [a area, b overlap] [] |
Beschreibung | Öffnet die Abfrage des Geometrie
Indexes über eine Fläche. overlap = TRUE
bedeutet: Objekte dürfen die Fläche überlappen. overlap =
FALSE bedeutet: Objekte müssen innerhalb der Fläche
sein. |
Beispiel | [area TRUE] GEOINDEX.AREA_READ_OPEN [] |
Prozedur | GEOINDEX.AREA_READ_OBJECT ! [g geom, * object, i id, b status] |
Beschreibung | Liest das nächste Objekt aus dem
Geometrie Index, dessen Geometrie die Fläche überlappt oder dessen
Geometrie innerhalb der Fläche liegt (siehe
overlap ) . |
Beispiel | [] GEOINDEX.AREA_READ_OBJECT [geom map 1 TRUE] |
Prozedur | GEOINDEX.AREA_READ_CLOSE ! [] [] |
Beschreibung | Schliesst die Abfrage. |
Beispiel | [] GEOINDEX.AREA_READ_CLOSE [] |
Alle Objekte werden im Geometrie Index indexiert in Seiten (Pages) abgelegt. Je nach Pagsize und der maximalen Ausdehung der Geometrie eines Objektes, wird das Objekt in einer bis mehreren Seiten indexiert. Zu der Geometrie eines Objektes können alle weiteren Objekte zurückgelesen werden, die sich in denselben Seiten des Indexes befinden. Die nachfolgenden Methoden stehen dazu zur Verfügung.
Prozedur | GEOINDEX.PAGES_READ_OPEN ! [g geometry] [] |
Beschreibung | Öffnet die Abfrage des Geometrie Indexes über die Ausdehnung einer Geometrie. |
Beispiel | [line] GEOINDEX.PAGES_READ_OPEN [] |
Prozedur | GEOINDEX.PAGES_READ_OBJECT ! [g geom, * object, i id, b status] |
Beschreibung | Liest das nächste Objekt aus dem Geometrie Index, das sich in denselben Seiten des Geometrie Indexes befindet. |
Beispiel | [] GEOINDEX.PAGES_READ_OBJECT [geom map 1 TRUE] |
Prozedur | GEOINDEX.PAGES_READ_CLOSE ! [] [] |
Beschreibung | Schliesst die Abfrage. |
Beispiel | [] GEOINDEX.PAGES_CLOSE [] |
Zu einem Punkt können alle Objekte mit Flächen aus dem Geometrie Index gelesen werden, bei denen ein bestimmter Punkt innerhalb der Fläche liegt. Die nachfolgenden Methoden stehen dazu zur Verfügung.
Prozedur | GEOINDEX.AREASBYPOINT_READ_OPEN ! [p point] [] |
Beschreibung | Öffnet die Abfrage des Geometrie Indexes über die den Punkt |
Beispiel | [line] GEOINDEX.AREASBYPOINT_READ_OPEN [] |
Prozedur | GEOINDEX.AREASBYPOINT_READ_OBJECT ! [g geom, * object, i id, b status] |
Beschreibung | Liest das nächste Objekt mit einer Fläche aus dem Geometrie Index, in der der Punkt liegt. |
Beispiel | [] GEOINDEX.AREASBYPOINT_READ_OBJECT [geom map 1 TRUE] |
Prozedur | GEOINDEX.AREASBYPOINT_READ_CLOSE ! [] [] |
Beschreibung | Schliesst die Abfrage. |
Beispiel | [] GEOINDEX.AREASBYPOINT_CLOSE [] |
Zu einer Geometrie können die nächstgelegenden Geometrien aus dem Geometrie Index gelesen werden Die nachfolgenden Methoden stehen dazu zur Verfügung.
Prozedur | GEOINDEX.NEAREST_READ_OPEN ! [g geometry] [] |
Beschreibung | Öffnet die Abfrage des Geometrie Indexes über die Geometrie. |
Beispiel | [line] GEOINDEX.NEAREST_READ_OPEN [] |
Prozedur | GEOINDEX.NEAREST_READ_OBJECT ! [r distance, g geom, * object, i id, b status] |
Beschreibung | Liest das nächste Objekt aus dem Geometrie Index, dessen Geometrie am nächsten zur Geometrie liegt, mit der die Abfrage geöffnet wurde. |
Beispiel | [] GEOINDEX.AREASBYPOINT_READ_OBJECT [1.123 geom map 1 TRUE] |
Prozedur | GEOINDEX.NEAREST_READ_CLOSE ! [] [] |
Beschreibung | Schliesst die Abfrage. |
Beispiel | [] GEOINDEX.AREASBYPOINT_CLOSE [] |
! Diese ICS Konfiguration schreibt in einem 1. Schritt ! Punkte in den Geometrie Index. ! In einem 2. Schritt werden zu einem Punkt die nächstgelegenen ! Punkte im Geometrie Index zurückgelesen. |INCL \script\geoindex.mod MAP GEOINDEX_PARAM PAGESIZE => 50.0 DISKMEMORY => OFF END_MAP ! schreiben von Punkten in den Geometrie Index ! Punkteabstand dx=10,dy=10 ! von x/y-min=0/0 bis x/y-min=100/100 !---------------------------------------------- 0.0 => VAR.ORIGIN 10.0 => VAR.DISTANCE 100.0 => VAR.LIMIT GEOINDEX.OPEN 0 => VAR.I VAR.ORIGIN => VAR.X WHILE VAR.X <= VAR.LIMIT DO VAR.ORIGIN => VAR.Y WHILE VAR.Y <= VAR.LIMIT DO VAR.I INC => VAR.I IF VAR.I 100 MOD = 0 THEN DISPLAY VAR.I,' objects written' END_IF VAR.I => IN.ID VAR.X VAR.Y 0.0 SET_NULL TO_POINT => IN.GEOM &IN IN.GEOM GEOINDEX.WRITE_OBJECT POP VAR.Y VAR.DISTANCE + => VAR.Y END_WHILE VAR.X VAR.DISTANCE + => VAR.X END_WHILE DISPLAY 'objects written=',VAR.I ! lesen der nächsten Punkte aus dem Geometrie Index ! zum Punkt 50/50 !-------------------------------------------------- 0 => VAR.I 50.0 50.0 0.0 SET_NULL TO_POINT => VAR.POINT VAR.POINT GEOINDEX.NEAREST_READ_OPEN WHILE GEOINDEX.NEAREST_READ_OBJECT DO => VAR.ID => VAR.OBJECT => VAR.GEOM => VAR.DISTANCE VAR.I INC => VAR.I DISPLAY 'Distance=',VAR.DISTANCE,' from ',VAR.GEOM,' to ',VAR.POINT END_WHILE DISPLAY 'objects read=',VAR.I