den van de functie 'return_polygon'.
In Oracle 9i wordt dit in twee stappen
geïmplementeerd. Ten eerste door het
toevoegen van een regel aan de tabel
USER_SDO_GEOMJVIETADATA en ver
volgens door het creëren van de ruim
telijke index door het opgeven van de
functienaam en de gebruikte para
meters
insert into user_sdo_geom_metadata values(
'LKI_PARCEL', 'RETURN_POLYGON(OBJECT_ID)\
mdsys.sdo_dim_array
mdsys.sdo_dim_element('X', 82291, 84261, 0.0005),
mdsys.sdo_dim_element('Y', 453039, 455632,
0.0005)), NULL);
create index lki_parcel_idx on
lki_parcel(return_polygon(object_id))
indextype is mdsys.spatialJndex;
select municip, osection, parcel, sdo_geom.sdo_area
(shape,0.5)
from lki_parcel_pgn_vw;
select max(sdo_geom. sdo_area(shape, 0.5))
from lki_parcel_pgn_vw;
De volgende geometrische vraag levert alle percelen die bin
nen een afstand van honderd meter van een gegeven recht
hoek liggen (gespecificeerd door een linksonder- en rechts
boven-punt).
select parcel from lki_parcel
where sdo_within_distance(
return_polygon(objectJd),mdsys.sdo_geometry
(2003,NULL,NULL,
mdsyssdo_elem_info_array( 1,1003,3),
mdsysSD0_0KDINATE_ ARRAY (832018,453536,
832824,453610)),
'distance 100')='TRUE';
Nu een topologische vraag die alle buren van perceel 'X'
selecteert.
select distinct l_obj_id neighbour_parcel
from lMboundary where r_obj_id='X'
union all
select distinct r_obj_id neighbour_parcel
from lMboundary where l_obj_id='X';
Een andere puur topologische vraag is het vinden van alle
grenzen van perceel 'X'.
select distinct object Jd pareel_boundary
from lki_boundary where r_obj_id='X' or l_obj_id='X';
de exacte overlaptest kan worden uit
gevoerd. In Informix is het mogelijk
om een r-tree te bouwen die ook de po
lygonen zelf opslaat in plaats van al
leen de kleinst omhullende rechthoek;
in dat geval behoeft bij overlap bevra
ging de 'return_polygon' functie niet
nogmaals te worden uitgevoerd.
Bevragen van topologie en
geometrie
We zullen nu een aantal voorbeeldvra
gen behandelen, die de eerder beschre
ven functie gebruikt om geometrie te
realiseren op basis van de topologische
structuur. De eerste twee geometri
sche vragen resulteren in respectieve
lijk de oppervlakte per perceel en de
maximum oppervlakte van alle perce
len (met een tolerantie van 0,5) van de
gerealiseerde polygonen.
De eerder gecreëerde view (llci_parcel_
pgnjvw) kan nu deze index gebruiken
om bij ruimtelijk zoeken een goede
performance te realiseren. Zonder de
functie-gebaseerde index zou het niet
goed mogelijk zijn geweest om de
faces goed te indexeren. Gedurende de
overlap-query (of welke andere ruimte
lijke zoekopdracht dan ook), worden
de objecten nu snel uitgefilterd op
basis van de index. Dat wil zeggen, de
voorberekende kleinst omhullende
rechthoeken (bounding boxes) uit de
r-tree worden gebruikt voor deze filter
operatie. Daarna moet de 'return_poly-
gon'-functie worden uitgevoerd om
het polygoon zelf te verkrijgen, zodat
Fig. 4.
Topologische data
bekeken in een
niet-topologische
front-end.
iediun-r-nornal"~Xd
-■edlu«-r—nor«al"-ld
'I'll? uarnornal-~Zd
Iki_paicel
return _polygon(object_id)
(return.
rrrnrnTTig-
Harning
Warning
Query
SELECT return_polygon(obJect_id).rowid FR(
lygon(object_id)ndsys.SD0_GE0HETRY<2003,
3).ndsys.SDO„ORDINATEJWRAY(8.180580444<
32349E8))"■ask=ANYINTERACT querytype Hl
File Layer
ect_id)rowid FROM lki_parcel WHERE adsys.sdo„relate
NULL. NULL. adsys.S00jELEN_INF0„ARRAY(l
.4.53039689E8.8.474704455967079E7
*aask=ANYINTERACT querytype HIND0M') 'TRUE'
objecta loaded in 12.461 seconds (25 per second) tlki_parcel]
Cancel
Edit
.Cancel" to type VirtualBinding
egin" to type VirtualBinding
p" to type VirtualBinding
!ey_Nenu" to type VirtualBinding
ley„Menu" to type VirtualBinding
<Key>KP„Enter_Key_Execute" to type VirtualBinding
-- -- - - type VirtualBinding
tainwt tomr» rsrrrng1 TTWpf -i
Cannot convert string
Cannot convert string "Alt<Key>Return.Alt„Key_KP_Enter'
GEODES1A 2003-2