NGT GEODESIA 1996-6 dimensie voor het betreffende niveau in de Field-tree. Het is duidelijk dat dit altijd minder of gelijk is dan het beschikbare aantal gridcellen. Het to taal aantal gridcellen per niveau in de Field-tree is aangegeven in de kolom #celper niveau. Fig. 5 toont een voorbeeld waarin het fijnste niveau „0" bestaat uit 25 m x 25 m cellen. Dit kan worden aange past indien een groter domein nodig is; zie ,,*25" in de kolom len cel in m. Het grofste niveau is „7" met 3,2 km x 3,2 km cellen. Alles wat te groot is om in het grofste niveau te passen, krijgt een speciale SLC-waarde (bijvoor- NRLEVELS=8 5 niveaus kan beter zijn FINEGRID=25 II 100m kan beter zijn THEORIGX=0 THEORIGY=0 for (i=0; kNRLEVELS; i++) do NR[i] 2A(15-i); SIZEji] FINEGRID 2Ai; 0R1GX[NRLEVELS-1] THEORIGX; ORlGYjNRLEVELS-1] THEORIGY; for (i=NRLEVELS-2; i>=0; i-) do ORIGX[i]= ORIGXji+1] - SIZE[i+l]/4; ORIGY[i]= ORIGY[i+l] - SIZE[i+l]/4; II bitpatronen voor coderen niveau BITS[MAXLEVEL]= 01000000 00000000 00000000 00000000, 00110000 00000000 00000000 00000000, 00100000 00000000 00000000 00000000, 00010000 00000000 00000000 00000000, 00001100 00000000 00000000 00000000, 00001000 00000000 00000000 00000000, 00000100 00000000 00000000 00000000, beeld -1): de „overloopbak", welke niet al te vol zou moeten worden. In dien veel objecten in de overloopbak komen, dan moet er een grover niveau worden toegevoegd aan de Field-tree. In het geval dat het linker-onderpunt van het domein ligt op (0,0), dan ligt het rechter-bovenpunt op (816,816) in km. In de kolom oorsprong domein (x) in m kan men zien dat fijnere niveaus een kleine verplaatsing krijgen in de Field-tree. Ook in fig. 3 is dit zichtbaar. 0. SLC -1 waarde voor „niet passen"! 1get bbox max extend (in x of y dimension) -> max_ext 2. go to finest level with size>max_ext -> level [i] 3. for (j=i; j<i+3 j<NRLEVELS SLC== -1; j++) uiterlijk op niveau i+3 if (Compute_SLC_Point(j,x_min(bbox),y_min(bbox)) Compute_SLC_Pomt(j,x_max(bbox),y_max(bbox))) SLC=Compute_SLC_Point(j,x_min(bbox),y_min(bbox)) Fig. 7. Functie Compute_SLC (bbox). Fig. 6. Enige constanten (algemene oplossing). Fig. 8. Functie Compute_SLC_ Point (level, x, y). De x- en y-coördinaten van elke gridcel worden bit voor bit afgewisseld. Dit heeft het effect van een Morton-ordening per niveau, die weer nauw gerelateerd is aan de Quadtree (fig. 1). De niveau-indicatie (bit-patroon, fig. 5) samen met de Morton-waarde vormt de complete SLC-waarde van elk mogelijk object binnen het domein. Merk op dat deze techniek algemeen is en kan worden aangepast met meer of minder niveaus (bijvoorbeeld 5, 8, 11 of 15) of zelfs hogere dimensies (bijvoorbeeld drie dimensionaal). Het zou kunnen blijken dat acht niveaus niet echt nodig zijn, gegeven een bepaalde dataset. Wan neer slechts vijf niveaus worden gebruikt, dan moet waar schijnlijk de afmeting van de fijnste gridcel ook groter zijn dan 25 m om ervoor te zorgen dat er niet te veel objecten in de overloopbak komen, bijvoorbeeld 100 m (en 1,6 km op niveau 4). SLC pseudo-code De algoritmen worden in pseudo-code gegeven. De code ringsdefinities van de Field-gridcellen zijn reeds gegeven in fig. 5. In de pseudo-code worden de niveaus genummerd van 0 (fijnste raster) tot 7 (grofste raster). Het grofste Field- tree raster heeft geen (additionele) verplaatsing, de fijnere niveaus krijgen een steeds grotere verplaatsing, zoals is te zien in fig. 5 bij de kolom oorsprong domein (x) in m. In fig. 6 worden enige constanten, die gebruikt worden in de pseude-code, geïnitialiseerd. Merk op dat ORIGX[NR- LEVELS-1] wordt geïnitialiseerd zonder additionele ver plaatsing en dat de overige niveaus een additionele ver plaatsing krijgen beginnend met ORIGX[NRLEVELS-2] tot het fijnste niveau ORIGX[0]. De functie Compute_SLC (bbox) berekent de SLC van de bboxvtm een bepaald object (fig. 7). Eerst wordt het fijnste raster bepaald, waarin het object nog zou kunnen passen (regels 1 en 2). Vervolgens worden het werkelijke rasterni- veau en de SLC-waarde berekend in regel 3, door te testen of de hoekpunten linksonder en rechtsboven van de bbox gelijke SLC-waarden hebben. De SLC-waarde van deze punten wordt berekend met de functie Compute_SLC_ Point (level, x, y), zoals in fig. 8 is afgebeeld. 1. x (short)trunc((x-ORIGX[level])/SIZE[level]); y (short)trunc((y-ORIGY[leveI])/SIZE[IeveI]); 2. bitwise interleave xy -> SLC; 3. add level bitpattern (bitwise OF) -> SLC SLC BITS[level]; 247

Digitale Tijdschriftenarchief Stichting De Hollandse Cirkel en Geo Informatie Nederland

(NGT) Geodesia | 1996 | | pagina 9