HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Paikkatiedon hallinta ja analyysi 2. Diskreettiä geometriaa Antti Leino <antti.leino@cs.helsinki.fi> 17. maaliskuuta 2005 Tietojenkäsittelytieteen laitos
Sisältö Simpleksiset kompleksit Maailmat Egenhofer Frank Jackson 1989: A Topological Data Model for Spatial Databases Güting Schneider 1993: Realms: A Foundation for Spatial Data Types in Database Systems
Diskreettiä geometriaa Perusongelma: avaruus on jatkuva-arvoinen, mutta tietokone-esityksen laskentatarkkuus äärellinen Tästä seuraa mielenkiintoisia ilmiöitä Skaalaus voi muuttaa topologiaa Viivojen leikkauspiste ei välttämättä ole viivalla Muunnos ja sen käänteismuunnos peräkkäin voivat tuottaa eri olion kuin mistä lähdettiin Päällekkäisoperaatio (overlay) tuottaa usein häiriöitä (gap, sliver) Kaksi lähestymistapaa: simpleksiset kompleksit ja maailmat
Kuvaustavan vaatimuksia Yleispätevyys Sulkeumaominaisuudet unionin, leikkauksen ja erotuksen suhteen Edellytyksenä tietokantaoperaatioille Formaali määriteltävyys Äärellinen resoluutio Ristiriidattomuus Vierekkäisillä alueilla on yhteinen raja Toteuttamiskelpoisuus Voitava käyttää tietokannan rakentamisessa
Simpleksit N-simpleksi (simplex): minimaalinen n-ulotteinen olio 0-simpleksi 1-simpleksi 2-simpleksi (piste) (jana) (kolmio) Kukin n-simpleksi koostuu n+1 riippumattomasta (n-1)-simpleksistä Jana kahdesta pisteestä, kolmio kolmesta janasta jne. Kolmion muodostavat janat ovat riippumattomia, jos mitkään niistä eivät ole samansuuntaisia eikä mikään niistä 0-pituinen
Simpleksiset kompleksit simpleksinen kompleksi (simplicial complex): äärellinen joukko simpleksejä Kahden kompleksiin kuuluvan simpleksin leikkaus on joko tyhjä tai kummankin osana oleva simpleksi 1-kompleksi 2-kompleksi Ei 1-kompleksi Ei 2-kompleksi
Reunat Simpleksin s n reuna (boundary) s n : ne (n-1)-simpleksit, jotka muodostavat s n :n Simpleksin s n piiri (co-boundary) 1 γs n : ne (n+1)-simpleksit, joiden osana s n on Simpleksisille komplekseille vastaavasti c n = s n c n s n γc n = s n c n γs n 1 Tälle varmaan on parempikin suomennos, mutten löytänyt mitään vakiintunutta.
Täydellisyysaksioomat Simpleksinen rakenne esittää koko kuvattavaa avaruutta. Niinpä kahden n-simpleksin leikkaus on joko tyhjä tai kumpaankin kuuluva (n-1)-simpleksi päällekkäisyyttä ei ole, vaan kukin avaruuden kohta on kuvattu vain kerran Jokainen n-simpleksi on (n+1)-simpleksin osa 2-ulotteisessa tapauksessa siis jokainen piste on janan päätepiste ja jokainen jana kolmion sivu
Pisteen lisäys Olemassaolevalle viivalle Muualle
Viivan lisäys Rekursiivinen operaatio Lisätään viivan päätepisteet (jos eivät ole jo) Etsitään pienin 2-kompleksi, jonka sisällä lähtöpiste on Lisätään piste tämän kompleksin ja lisättävän viivan leikkauspisteeseen Lisätään viiva tämän pisteen ja päätepisteen välille 2-ulotteisen kohteen lisäys samoin rekursiivisesti
Maailmat Vaihtoehtoinen tapa geometrian esittämiseen: maailma (realm) Pohjana hila, jonka resoluutio on äärellinen Koko tarkasteltavan geometrian tyhjentävä kuvaus
Maailman määritelmä Äärellinen joukko hilaan sijoitettuja pisteitä ja janoja, jossa Kukin piste ja janan päätepiste on hilapiste Kukin janan päätepiste on myös maailman piste Maailman piste voi olla janalla vain päätepisteenä Kaksi janaa ei voi leikata toisiaan tai mennä päällekäin, paitsi päätepisteissään
Diskreetti hila Laskennallisesti näppärä Esitettävissä kokonaislukuina Resoluutio käyttötarkoituksen mukaan Hyödyllinen Takaa geometrisen ristiriidattomuuden Hyvät sulkeumaominaisuudet Suojaa geometrista tarkastelua laskentatarkkuuden rajallisuudelta Bonus: maailma-tietorakennetta voi käyttää tietokannan indeksinä
Olioiden muuntaminen maailmaan Perusongelma: viivojen leikkauspisteet eivät osu hilapisteisiin Esitetään leikkauspiste hilapisteenä? Mutta: Leikkauspiste ei ole kummallakaan janalla Leikkauspiste on janojen alhaalta rajoittamalla alueella Leikkauspiste on sinisen janan väärällä puolella
Janasta murtoviivaksi Muutetaankin janat murtoviivoiksi, jotka kulkevat leikkauspisteen kautta Mutta: jana saattaa vaeltaa mielivaltaisen kauas oikealta paikaltaan
Janan kuori Määritellään janalle s kuori (envelope) E(s): ne hilapisteet, jotka ovat lähinnä janaa sen ylä- tai alapuolella tai itse janalla Jana voidaan piirtää uudelleen, mutta vain kuorensa sisällä Jana ei voi siirtyä (hila)pisteen toiselle puolelle Sen sijaan se voi siirtyä kulkemana läheisen pisteen kautta
Paikkatietotyyppien toteuttaminen Paikkatietotyypit voidaan toteuttaa maailma-approksimaation avulla Neljä kerrosta 1. Hila ja sen geometriset primitiivit 2. Hilaan määritelty maailma 3. Maailmaperustaiset rakenteet 4. Näiden avulla määritellyt paikkatietotyypit
Geometriset primitiivit Äärellinen diskreetti avaruus, sen pisteet ja janat sekä niitä koskevat yksinkertaiset suhteet ja operaatiot N-avaruus: N N, missä N = {0,1,..., n 1} N N-piste: pari (x, y) N N N-jana: kaksi N-pistettä (p, q) (ja niiden välinen viiva) Kaikkien N-pisteiden joukko P N Kaikkien N-janojen joukko S N
N-janojen väliset suhteet Samat Leikkaavat Yhdensuuntaiset Päällekkäin (equal) (intersect) (parallel) (overlap) Linjassa Kohtaavat Koskettavat Erilliset (aligned) (meet) (touch) (disjoint)
N-avaruuden primitiivejä Kaksi pistettä voivat olla samat Piste voi olla janalla (on), janan sisällä (in) tai janan ulkopuolella (out): ensimmäisessä tapauksessa piste on joko sisä- tai päätepiste, toisessa tapauksessa nimenomaan sisäpiste Kahden janan leikkaus tuottaa tuloksenaan janojen leikkauskohtaa lähinnä olevan N-pisteen
Maailma N-avaruudessa N-avaruuden muodostamaan hilaan voi määritellä N-maailma (N-realm, realm over N): R-pisteiden (R-point) ja R-janojen (R-segment) muodostama joukko R = P S, missä Käytössä on vain hilapisteitä ja niiden välisiä janoja, P P N,S S N Janojen päätepisteet ovat maailman pisteitä, (p, q) S : p P q P Maailman pisteinä ei ole janojen sisäpisteitä, p P s S : (p in s) Janat koskevat toisiaan korkeintaan päätepisteissään, s, t S : (s = t) (s intersect t) (s overlap t) (s touch t)
Maailman operaatiot Määriteltävä paikkatieto-olioiden käsittelyyn tarvittavat operaatiot N-pisteen ja N-janan lisäys R-pisteen ja R-janan poisto Muistettava paikkatieto-olioiden ja maailman kohteiden välinen riippuvuus Kullakin maailman oliolla tunniste (realm object identier, ROID) Kullakin paikkatietokanta-alkion sijaintitiedolla samoin tunniste (spatial component identier, SCID)
Topologian säilyttäminen Topologian säilyvyydestä huolehditaan kuori-käsitteen avulla Lisäksi hyvin lähekkäisiä kohteita koskeva eheysrajoite Janan s aito kuori (proper envelope): Ē(s) = {p E(s) p ei ole s:n päätepiste} Minkään R-janan aidossa kuoressa ei saa olla R-pisteitä Jana voidaan piirtää uudelleen kulkemaan kuoripisteidensä kautta aidossa kuoressa olevan pisteen on tarkoitus olla janalla Pisteen lisäys aitoon kuoreen aiheuttaa janan uudelleenpiirtämisen
Janan uudelleenpiirtäminen Määritellään kuoren pisteet, joiden kautta murtoviiva kulkisi Kiinnitetään ne janaan lyhyillä suunnatuilla janoilla, koukuilla (hook) Koukku p, p liittyy janojen s ja t leikkaukseen ja vaikuttaa kummankin uudelleenpiirtämiseen Koukku q, q puolestaan liittyy pisteen q lisäämiseen Koukku q, q leikkaa myös janan u ja synnyttää uuden koukun tästä leikkauspisteestä pisteeseen q
Pisteen lisäys maailmaan if q R : p = q then S env {s S p Ē(s)}; if S env = then R R {p}; sci ds(p) ; else foreach s S env do Kiinnitä s:ään koukku p s, p (missä p s on p:tä lähin s:n piste); foreach koukutettu jana s do Piirrä s p:n kautta kulkevaksi murtoviivaksi; Poista s;
Janan lisäys maailmaan Tarkista, että s:n päätepisteet kuuluvat R:ään; if s R then P env P Ē(s); S i nt {t S (t s) (t ja s leikkaavat)}; if (P env = ) S i nt = then S S {s}; sci ds(s) ; else foreach p P env do Kiinnitä koukku s:stä p:hen; foreach t S i nt do Kiinnitä koukku s:n ja t:n leikkauspisteestä lähimpään kuoren pisteeseen; foreach koukutettu jana t do Piirrä t koukun päätepisteen kautta kulkevaksi murtoviivaksi; Poista t;
Maailmaperustaiset rakenteet Nyt siis voidaan esittää 0- ja 1-ulotteisia olioita. Vielä on määriteltävä 2-ulotteiset. R-sykli (R-cycle) on R-janojen joukko S(c) = {s 1,..., s n }, jossa i {1,..., n} : s i meet s (i+1) mod n Muut janat eivät kohtaa N-piste on syklillä, jos se on jollakin sen janalla: p on c s S(c) : p on s Loput kaksi suhdetta (sisällä / ulkona) eivät johdettavissa vastaavista janan ja pisteen suhteista
Onko piste syklin sisällä? Ensiksi tarkistetaan, ettei p ole syklillä c Vedetään apujana pisteestä p = (x, y) suoraan ylös niin pitkälle kuin hilaa riittää: s p = ((x, y),(x, n 1)) Lasketaan ne c:n osajanat, joiden oikeanpuoleinen mutta ei vasemmanpuoleinen päätepiste on janalla s p tai jotka leikkaavat janan Jos tällaisia osajanoja on pariton määrä, p in c Jos taas näitä on parillinen määrä, p out c
R-syklin osat R-sykli jakaa hilapisteet kolmeen osajoukkoon Syklin sisäpuolella olevat pisteet P i n (c) Syklillä olevat pisteet P on (c) Syklin ulkopuolella olevat pisteet P out (c) Lisäksi voidaan ajatella syklin pisteet P(c) = P i n (c) P on (c) Syklien väliset suhteet voidaan määritellä näiden joukkojen sekä syklin janojen muodostaman joukon S(c) avulla
R-syklien sisäkkäisyys Syklien c 1 (musta) ja c 2 (sininen) välinen suhteet c 2 on sisustaltaan c 1 :n sisällä (area-inside, 13): P(c 2 ) P(C 1 ) c 2 on reunaa myöten c 1 :n sisällä (edge-inside, 23): (c 2 area-inside c 1 ) (S(c 1 ) S(c 2 ) = ) c 2 on kärkipisteitä myöten c 1 :n sisällä (vertex-inside, 3): (c 2 edge-inside c 1 ) (P on (c 1 ) P on (c 2 ) = )
R-syklien erillisyys Syklit c 1 (musta) ja c 2 (punainen) voivat olla c 1 ja c 2 ovat sisustoiltaan erillisiä (area-disjoint, 46): (P i n (c 1 ) P(c 2 ) = ) (P(c 1 ) P i n (c 2 ) = ) c 1 ja c 2 ovat reunoja myöten erillisiä (edge-disjoint, 56): (c 1 area-disjoint c 2 ) (S(c 1 ) S(c 2 ) = ) c 1 ja c 2 ovat kärkipisteitä myöten erillisiä (vertex-disjoint, 56): (c 1 edge-disjoint c 2 ) (P on (c 1 ) P on (c 2 ) = ) eli yksinkertaisemmin P(c 1 ) P(c 2 ) =
Muita sisäkkäisyyssuhteita R-jana voi olla R-syklin sisällä sisustaltaann (13) reunaa myöten (23) kärkipisteitä myöten (3) R-piste voi olla R-syklin sisällä sisustaltaan (12) kärkipisteitä myöten (2)
Reiälliset alueet R-sykli ei vielä riitä aluekoheiden esittämiseen: siinä ei ole reikiä R-tahko (R-face): pari f = (c,h), missä c on R-sykli, H = {h 1,..., h n } joukko R-syklejä ja 1. i {1,..., n} : h i edge-inside c 2. i, j {1,..., n}, i j : h i edge-disjoint h j 3. d C(S(f )) : (s = c) (s H)
R-tahkon yksikäsitteisyys R-tahkon vaatimusten kohta?? tarkoittaa, että tahkoon kuuluvista janoista ei voi muodostaa muita syklejä kuin tahkon tai sen reikien reunaviivat Tämä takaa esityksen yksikäsitteisyyden Niinpä kuva on tulkittava kahdeksi reunojaan myöten erilliseksi tahkoksi
R-tahkojen topologiset suhteet R-syklejä koskevat topologiset suhteet ovat yleistettävissä R-tahkoille Perusajatus: kohde on R-tahkon sisällä, jos se on tahkon ulkoreunaa kuvaavan syklin sisällä muttei reiässä Eri sisäkkäisyys- ja erillisyysasteiden avulla määriteltävissä myös sivuaminen (adjacent): kohteet ovat sisustoiltaan erillisiä, mutta niillä on vähintään yksi yhteinen jana kohtaaminen (meet): kohteet ovat reunoja myöten erillisiä, mutta niillä on vähintään yksi yhteinen kärkipiste
R-yksiköt R-yksikkö (R-unit) on minimaalisen kokoinen R-tahko (sen sisällä ei ole muita R-tahkoja) g F(R) : g area-inside f g = f Tahkoon kuuluvien yksiköiden joukko uni t s(f) = {u U(R) f F : u area-inside f } ja yksiköiden muodostama tahko(joukko) f aces(u) = u u U
Yksikkö- ja tahkoesityksen yhtäpitävyys Voidaan osoittaa, että F F(R) : f aces(uni t s(f)) = F Maailmaan kuvattu alue voidaan siis osoittaa joukkona R-yksiköitä joukkona R-tahkoja, jotka ovat parittain sisustoiltaan erillisiä
Paikkatietokohteiden esittäminen R-lohko (R-block): R-janoista muodostuva yhtenäinen aliverkko Kohteiden esittämiseen kaksi vaihtoehtoa 1. Rakenteeton esitystapa Pistekohde R-pisteiden joukkona Viivakohde R-janojen joukkona Aluekohde R-yksiköiden joukkona 2. Rakenteinen esitystapa Pistekohde R-pisteden joukkona Viivakohde parittain erillisten R-lohkojen joukkona Aluekohde parittain reunoja myöten erillisten R-tahkojen joukkona