HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Paikkatiedon käsittely 2. Relaatiomallin paikkatietolaajennokset Antti Leino antti.leino@cs.helsinki.fi 18.1.2007 Tietojenkäsittelytieteen laitos
Sisällys Relaatiotietokanta Tietokannan suunnittelun abstraktiotasot Relaatioalgebra Paikkatieto relaatiotietokannassa OpenGIS-määritykset paikkatietokannalle Kurssin esimerkkitietokanta
Paikkatietokannan suunnittelu Tietokannoissa yleensä kolme abstraktiotasoa Käsitetaso Rakennetaso Talletustaso Paikkatieto ei tee poikkeusta Tällä kurssilla pääpaino rakennetasolla, mutta muutkin tulevat esiin
Käsitetaso Tietokannan käyttäjän näkökulma Tavoitteena määrittää tietokannan sisältö Mitä tietoja kantaan tulee? Miten ne liittyvät toisiinsa? Millä tarkastelutasolla ne on kuvattava? Kuvaus riippumaton käytettävästä tietokantatekniikasta Sijaintitieto usein karkeistettava valtiot alueita, kaupungit pisteitä? kaupungit alueita, talot pisteitä?
Rakennetaso Tietokannan ohjelmoijan näkökulma Tavoitteena määrittää tietokannan muoto Millaisina rakenteina tieto talletetaan? Millaisia suhteita näiden rakenteiden välillä on? Nykyisin käytössä tyypillisesti relaatiomalli Perusmuodossa ei paikkatietokohteita, mutta lisättävissä Tänään käsitellään tätä
Tallennustaso Tietokannanhallintajärjestelmän ohjelmoijan näkökulma Tavoitteena määrittää, miten tietokanta talletetaan massamuistiin tehokkaasti tiedon sijoittelu levylle hakurakenteet puskurit tilanvaraus Tällä kurssilla sivutaan joitakin aiheita
Relaatiotietokanta Tieto esitetään relaatioina Helpointa ajatella taulukkona ja yleensä puhutaan taulusta (table) Sarakkeiden eli attribuuttien arvojoukot D 1,...,D n Relaatio Osajoukko ristitulosta D 1... D n Joukko monikkoja eli rivejä (tuple) (d 1,...,d n ) Kyselyt esitettävissä relaatioalgebran avulla
Relaatioalgebra Formaali tapa kuvata tietokantaoperaatioita Ei sellaisenaan käytössä tietokannoissa Kyselykielet, mm. SQL, melko lähellä Hyödyllinen teoriatausta tietokannan suunnitteluun tietokannanhallintajärjestelmiin Viisi perusoperaatiota, lisää johdettavissa
Joukko-opin operaatiot Yhdiste R S = {t (t R) (t S)} Ne monikot, jotka kuuluvat relaatioon R tai S Erotus R S = {t (t R) (t S)} Ne monikot, jotka kuuluvat relaatioon R mutteivät relaatioon S Ristitulo R S = {t u (t R) (u S)} Monikot, jotka voidaan muodostaa yhdistämällä yksi kummankin lähtörelaation monikoista
Relaatioalgebran omat operaatiot Projektio Valinta π A1,...,A n (R) = {(a 1,...,a n ) t R : i1,...,n : a i = t.a i } Tuottaa uuden relaation, jossa on vain valitut sarakkeet σ ehto (R) = {t t R ehto on voimassa} Valitsee relaatiosta halutut monikot Nämä riittävät
Yleensä myös Edellä esitetyt hiukan hankalakäyttöisiä Niiden avulla voi määritellä lisää Leikkaus R S = R (R S) = S (S R) Monikot, jotka esiintyvät kummassakin relaatiossa Liitos R ehto S = σ ehto (R S) Monikot, jotka on koottu ehdon täyttävistä lähtörelaatioiden monikoista
Liitosoperaatiot Liitosoperaatioita on erilaisia: Yleinen liitos Kuten edellä: yhdistetään ehdon täyttävät monikot Ulkoliitos Mukana myös sellaiset monikot, joille ei löydy paria toisesta lähtörelaatiosta Luonnollinen liitos Yhdistetään toisiinsa ne monikot, joissa yhteisten sarakkeiden arvot ovat samat
Entäpä paikkatieto? Ei sinänsä edellytä suuria muutoksia relaatioalgebraan Paikkatieto on otettava huomioon operaatioissa Joukko-opin operaatiot paikkakohteille Paikkafunktiot valintaehdoissa
OpenGIS Ohjelmistovalmistajien yhteenliittymä Tavoitteena järjestelmien yhteensopivuus Siispä standardointi Oliopohjainen tietomalli Sovellettavissa eri ohjelmointikielille Tällä kurssilla SQL Geometriatiedossa neljä alaluokkaa 0 2-ulotteiset yksittäiset kohteet Usean kohteen kokoelmat
Paikkatieto-oliot OpenGIS Simple Features Specification for SQL 0 2-ulotteisia kohteita 2-u avaruudessa Kaikki ilmentymät topologisesti suljettuja (eli reuna kuuluu mukaan)
Paikkaoperaatioita Pelkät olioluokat eivät riitä Operaatioita ja funktioita määritelty metodeina Valtaosa metodeista yhteisiä kaikille luokille ts. määritelty luokalle Geometry Jonkin verran myös kullekin luokalle omia metodeja
Muutamia perusmetodeja Yhteisiä koko Geometry-luokalle Dimension: kohteen ulottuvuus GeometryType: tarkka luokka, jonka ilmentymä kohde on Envelope: kohteen minimisuorakulmio
Lisää perusmetodeja IsEmpty: onko kohde tyhjä? IsSimple: onko kohde yksinkertainen? Boundary: kohteen reuna monikulmion reunaviiva ei viivan päätepisteet; suljetulla viivalla tyhjä pisteellä tyhjä
Topologiset suhteet Equals: samat Disjoint: erilliset Intersects: eivät erilliset
Lisää topologisia suhteita Touches: sivuavat Crosses: risteävät Overlaps: leikkaavat Within, Contains: sisältää Relate: jokin muu sisustojen, reunojen ja ulkopuolien perusteella määriteltävissä oleva suhde
Geometriaa Distance: lyhin kohteiden välinen etäisyys Buffer: annetun levyinen alue kohteen ympärillä ConvexHull: kohteen konveksi verho pienin kupera monikulmio, joka sisältää kohteen
Lisää paikkaoperaatioita Intersection: kahden kohteen leikkaus Union: kahden kohteen yhdiste Difference: kahden kohteen erotus SymDifference: pisteet, jotka kuuluvat vain jompaankumpaan kohteeseen
Luokkakohtaisia metodeja Edellä luetellut yhteisiä kaikille Kullakin luokalla myös omia metodeja Pistekohteet kovin yksinkertaisia Viivakohteilla jo enemmän Aluekohteilla samoin
Pistekohteet Vain kaksi omaa metodia X: pisteen x-koordinaatti Y: pisteen y-koordinaatti
Viivakohteet Length: viivan pituus StartPoint, EndPoint: päätepisteet IsClosed: onko viiva suljettu? IsRing: onko viiva sekä yksinkertainen että suljettu? NumPoints: murtoviivan osajanojen päätepisteiden lukumäärä PointN: murtoviivan n:s piste
Aluekohteet Area: pinta-ala Centroid: keskipiste (ei välttämättä kohteen piste!) PointOnSurface: piste, joka kuuluu kohteeseen ExteriorRing: kohteen ulkoreuna NumInteriorRing: sisäreunojen, siis reikien, lukumäärä InteriorRingN: kohteen n:s sisäreuna
Esimerkkitietokanta Välillä jotain vähän konkreettisempaa Kurssia varten on PostgreSQL-tietokanta PostGIS-laajennos: OpenGIS-määritysten mukaiset paikkatietotyypit ja -operaatiot
Esimerkkitietokanta Palvelimella db.cs.helsinki.fi: /usr/local/pgsql-7.4/bin/psql -p 12155 -U kurssi kunnat01 Password: Welcome to psql 7.4.7, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit kunnat01=> Suomen kuntajako Tilastotietoja kunnista
Kuntataulu kunnat01: Suomen kunnat v. 2001 kuntakoodi numeerinen kuntakoodi nimi kunnan nimi laani lääni, johon kunta kuuluu maakunta maakunta, johon kunta kuuluu miehet kunnassa asuvien miesten lukumäärä naiset kunnassa asuvien naisten lukumäärä yht kunnan väkiluku ulkom_miehet kunnassa asuvat ulkomaalaiset miehet ulkom_naiset kunnassa asuvat ulkomaalaiset naiset ulkom_yht kunnassa asuvat ulkomaalaiset (so. muut kuin Suomen kansalaiset) muutos00 väkiluvun muutos vuodesta 2000 wkb_geometry sijaintitieto
Lisää tauluja autoilu kunta kunnan nimi ajokm Ajokilometrit yleisillä teillä v. 1996 autoja Henkilöautoja v. 1997 tiet Yleisiä teitä v. 1996 (km) elintaso kunta kunnan nimi tulot_hlo Keskitulot / henkilö 1996 (mk) tulot_talous Keskitulot / talous 1996 (mk) asunnot Asuntojen keskikoko 1998 (m 2 ) asuintila Asuintilaa / henkilö 1998 (m 2 ) sosiaali Sosiaali- ja terveystoimen kustannukset (mk/asukas)
Edelleen lisää tauluja koulutus kunta kunnan nimi tutkinnot Korkeakoulututkinnon suorittaneita 20 vuotta täyttäneistä 1998 (%) opiskelijat Opiskelijatalouksia (%) vaalit96: vuoden 1996 kunnallisvaalit, % valtuustopaikoista kunta kunnan nimi keskusta Keskusta kokoomus Kokoomus sdp Sosiaalidemokraatit sfp Ruotsalainen kansanpuolue vasemmistoliitto Vasemmistoliitto vihreat Vihreät
Vielä pari lisää vakiluku kunta kunnan nimi v70 vuonna 1970 v99 vuonna 1999 v10 ennuste 2010 (1998) vaesto kunta kunnan nimi alle15 alle 15-vuotiaiden osuus väestöstä yli65 yli 65-vuotiaiden osuus taajamassa taajamassa asuva osuus väestöstä kunnassa_toissa kunnassa työskentelevä työväestö asukkaat_toissa kunnassa asuva työllinen työväestö
Ja vielä pari lisää pintaala kunta kunnan nimi pintaala kunnan pinta-ala vesiosuus vesistön osuus pinta-alasta peltoala peltoala linnut y 10 10 km ruudun keskipisteen pohjoiskoordinaatti x ruudun keskipisteen itäkoordinaatti maaosuus maan osuus ruudun pinta-alasta ( ) rannikko 1 = rannikkoa, 0 = sisämaata silkkiuikku silkkiuikun pesimävarmuus, 0 3 hernekerttu hernekertun pesimävarmuus, 0 3
Se siitä Kokeilemaan!