hyväksymispäivä arvosana arvostelija Relaatiotietokannat ja paikkatieto Sebastian Johansson Helsinki 7. huhtikuuta 2003 Relaatiotietokannat nyt -seminaariesitelmä HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
i Relaatiotietokannat ja paikkatieto Sebastian Johansson Relaatiotietokannat nyt -seminaariesitelmä Tietojenkäsittelytieteen laitos Helsingin yliopisto 7. huhtikuuta 2003, 11 sivua Tässä seminaariraportissa käsittelen tietokantoihin tallennettua paikkatietoa, ja sitä miten SQL-kyselykielen eri standardit ja laajennukset sopeutuvat paikkatiedon käsittelyyn. Ennen kaikkea tutkin SQL/MM-standardin kolmatta osaa Spatial ja sen ominaisuuksia. Aiheluokat(Computing Reviews 1998): H.2.3, H.2.4, H.2.8 Avainsanat: Paikkatieto, SQL/MM, SQL3, ADT/UDT
Sisältö ii 1 Johdanto 1 2 Paikkatieto 2 3 Paikkatieto ja kyselykielet 3 4 SQL/MM 5 5 Yhteenveto 9 Lähteet 9
1 Johdanto 1 Paikkatietojärjestelmät, Geographical/Spatial Information Systems (GIS), ovat järjestelmiä joilla käsitellään paikkatietoa. Paikkatiedolla taas tarkoitetaan jossakin tilassa sijaitsevaa kohdetta kuvaavaa sijainti- ja ominaisuustietoa. Ensimmäiset paikkatietojärjestelmät luotiin jo 1950- ja 1960-luvulla [MaC97]. Tällöin vielä käytettiin tiedostojärjestelmiä paikkatiedon tallentamiseen. Myöhemmin ruvettiin hyödyntämään tietokantoja ja niiden tarjoamia mahdollisuuksia. Nykyään käytetäänkin sekä relaatio-, objekti-relaatio- että objektitietokantoja tiedon tallennukseen ja käsittelyyn. Tietokantojen kyselykielien (SQL) myötä paikkatiedon käsittely on helpottunut, mutta koska minkäänlaista standardia ei tähän asti ole ollut olemassa, on jouduttu turvautumaan joko omatekoisiin kyselykieliin tai on jouduttu tekemään laajennuksia jo olemassa oleviin kieliin, esim. Spatial SQL [Ege94]. Ongelmana on myös ollut se että tavallisen SQL:n omat tietotyypit eivät sovellu paikkatiedon kuvaamiseen eikä paikkatiedon tarvitsemia operaatioita ole toteutettu [Rav]. SQL3- standardi on tuonut hieman helpotusta oliopiirteillään, mutta minkäänlaista paikkatiedon hallintaa siinäkään ei ole. Yksi standardi on jo kuitenkin saatu aikaiseksi, eli ISO/IEC 13249 ts. SQL/MM-paketti [ISO1,ISO2,ISO3], jonka kolmas osa käsittelee paikkatietoa ja yleisesti perustuu SQL3-standardin abstrakteihin datatyyppeihin. SQL/MM:n ohessa sekä ISO TC 211 että OpenGIS R Consortium ovat kehittelemässä omia standardejaan. Tässä raportissa keskityn esittelemään SQLkyselykieltä, sen muutamaa eri standardia ja laajennusta, eri toten SQL/MM:ää, paikkatiedon käsittelyn kannalta. Kappaleessa 2 kerron lyhyesti paikkatiedosta, mitä se on ja mitä kaikkea siihen liittyy. Kolmannessa kappaleessa käsittelen hieman SQL3-standardia sekä paria muuta SQL-laajennusta. Neljännessä kappaleessa esittelen SQL/MM-standardia ja viidennessä kappaleessa on yhteenveto.
2 Paikkatieto 2 Paikkatiedolla tarkoitetaan tietoa jostakin ilmiöstä jossakin paikassa tai tilassa, ts. jonkin ilmiön tai kohteen tilan sijainti- tai ominaisuustietoa. Tieto voi vaihdella aina erilaisista mittaustuloksista (lämpötila, kosteusarvo) itse kohteen fyysiseen / geograafiseen sijaintiin. Useimmiten paikkatiedolla kuitenkin tarkoitetaan juuri maantieteellistä sijantitietoa ja eri sijaintien keskinäisiä suhteita, ja tämän esitelmän fokus onkin juuri tässä osassa. Jonkin kohteen sijainti voidaan ilmoittaa yksinkertaisimmillaan pelkästään kertomalla sen osoite, mutta tietojenkäsittelyn kannalta tämä ei ole kovin kiinnostavaa (tai järkevää?) vaan käytetään koordinaatteja, geometrisiä yksilötyyppejä ja topologisia suhteita sijainnin tietona. Eräs esimerkki tyypillisestä paikkatiedosta on tiekartasto, josta vaikka on otettu valokuva ja joka sitten on digitalisoitu sopivaan muotoon, jota on helppo analysoida. Usein paikkatietoon liitetään mukaan myös jonkinlaista historia- tai aikatietoa, eli tietoa muutoksista ja ajankohdasta johon paikkatieto liittyy. Tässä esitelmässä sivuutan kuitenkin myös nämä aiheet. Lisätietoa historia- ja aikatiedosta löytyy muutamasta raportin lähteistä, esim. [Lee02] ja [Cro01]. Kun puhutaan paikkatiedosta on tärkeää tietää muutama oleellinen termi ja käsite. Tiedon käsittelyyn tarvittavia ns. paikkatietotyyppejä on (ainakin) kolme, POINT, LINE ja REGION, AREA tai POLYGON (Kuva 1). Tärkeimpiä operaatioita paikkatietotyypeille ovat ns. sijaintisuhteet, joita ovat topologiset sijanintisuhteet, eli vierekkäisyys, sisäisyys ja erillisyys; suuntasuhteet, alapuolella ja pohjoisessa jne., sekä metriset etäisyyssuhteet, esim. distance (Kuva 2). Näitä tietotyyppejä ja operaatioita käyttäen voidaankin laskea esimerkiksi kuinka pitkä matka on kaupungista toiseen, mitä naapureita jollakin kiinteistöllä on tai vaikkapa sijaitseeko jollakin metsäalueella lampi jne.
3 Kuva 1: Paikkatiedon perustyyppejä 3 Paikkatieto ja kyselykielet Muutaman vuoden vanha SQL3-standardi on kaikista uudistuksistaan huolimatta jättänyt monen eri sovellustyypin suoran tuen pois. Tähän joukkoon kuuluu paikkatieto. Vaikka suoraa tukea ei olekaan ja vaikka SQL3:n omat yksinkertaiset tietotyyppit ja operaatiot eivät sovellu paikkatiedon käsittelyyn, niin uuteen standardiin kuuluvat käyttäjän määrittelemät tyypit auttavat sillä tavalla että käyttäjä voi itse luoda uusia tyyppejä (ja operaatioita/metodeita) tarvittaessa. Alla on yksinkertainen esimerkki siitä miten luoda pistetyyppi ja sille jokin funktio. CREATE TYPE Point AS (X Number, Y Number, Function Distance(:u Point, :v Point)
4 Kuva 2: Paikkatiedon operaatioita Returns Number ); Kappaleessa 4 esiteltävä SQL/MM-standardi on luotu juuri ed. esimerkin mukaisesti ja hyödyntää näin SQL3-standardia. Koska SQL ei itsessään tue paikkatiedon käsittelyä on monta erilaista kyselykieltä ja laajennusta ilmestynyt vuosien varrella, esim. Spatial SQL, SQL/SDA, GEO- QUEL, SQUEL ja GEOBASE. Spatial SQL, on kaksiosainen pieni laajennus SQL-kieleen. Se koostuu kyselykielestä, jolla kuvataan iste informaation haku, ja esityskielestä, GPL, jolla kuvataan miten kyselyn tulos esitetään graafisessa muodossa [Ege94]. SELECT building.geometry FROM building
5 WHERE address= 26 Grove Street ; SQL/SDA taas on kyselykieli, jolle löytyy webbipohjainen käyttöliittymä ja soveltuu ominaisuuksiltaan hyvin juuri internetin välityksellä tehtävään paikkatietokäsittelyyn [Lin01]. SDA mukailee SQL3-standardia, ja kuten kaikissa SQL-kieleen pohjautuvissa kyselykielissä syntaksi ei juuri eroa muista. Alla esimerkki SQL/SDAsyntaksista: SELECT lu.id, sl.id, ILocation, areaval FROM ( SELECT *, OVERLAP( lu.location, sl.location) AS overlapval, INTERSECTION(lu.Location, sl.location) AS ILocation, AREA(iLocation) AS areaval FROM Landuse AS lu, soil AS sl) WHERE lu.type= BRUSHLAND AND sl.type= A AND overlapval=true AND areaval>700 AND areaval <900; Yhteistä kaikille laajennuksille (ja kielille) on siis hyvin samanlainen syntaksi, joten suuri määrä samantyyppisiä mutta erinimisä kieliä onkin ollut turhaa, ja jonkinlainen standardi on osoittautunut tarpeelliseksi. Kielet ovatkin eronneet toisistaan lähinnä erilaisten metodien lukumäärässä. 4 SQL/MM SQL/MM, eli SQL Multimedia and Application Packages, on ISO-standardi, joka perustuu SQL3-standardiin ja siinä määriteltyihin käyttäjän määrittelemiin tietotyyppeihin (UDT tai ADT) [MeE01]. SQL/MM on moniosainen standardi, josta paikkatietoa käsittelee kolmas osa nimeltä Spatial (ISO/IEC 13429-3).
6 SQL/MM Spatial määrittelee tietotyyppinsä ja metodinsa, joilla tarjotaan sovelluksille mahdollisuus paikkatiedon käsittelyyn, SQL3:n UDT:n mukaisesti. Tällä hetkellä Spatial tukee 0-, 1-, ja 2-ulotteista dataa, mutta tulevaisuudessa se tulee ehkä tukemaan n-ulotteisuutta, missä n>2. Spatialissa ei kuitenkaan ole pakko tallentaa paikkatietoa UDT:n mukaisesti olioina, vaan se voidaan myös tallentaa binäärisessä muodossa (BLOB). Spatial määrittelee useita tyyppihierarkioita. Tässä raportissa keskityn yhteen näistä, jonka ylimpänä tyyppinä on ST_Geometry (Kuva 3). Kyseisestä tyypistä ei voi luoda ilmentymiä (tällaisia typpejä löytyy Spatialista noin puolen tusinaa), mutta sillä on tusinan verran alityyppejä, joista luodaan ilmentymiä, kuten esim. ST_Point, ST_Curve ja ST_MultiPolygon. Kuva 3: SQL/MM Spatial, Geometry-hierarkia Alla on esiteltynä ST_Geometry-tyyppi ja muutama sen metodi, sekä ST_Polygon -tyyppi ja sen konstruktori.
7 CREATE TYPE ST_Geometry AS ( ST_PrivateDimension SMALLINT DEFAULT -1, ST_PrivateCoordinateDimension SMALLINT DEFAULT 2 ) NOT INSTANTIABLE NOT FINAL METHOD ST_Dimension() RETURNS SMALLINT LANGUAGE SQL DETERMINISTIC CONTAINS SQL RETURNS NULL ON NULL INPUT, METHOD ST_Boundary() METHOD ST_Intersection (ageometry ST_Geometry)... ) CREATE TYPE ST_Polygon UNDER ST_CurvePolygon INSTANTIABLE NOT FINAL... CONSTRUCTOR METHOD ST_Polygon (alinestring ST_LineString)
8 RETURNS ST_Polygon SELF AS RESULT LANGAUGE SQL DETERMINISTIC CONTAINS SQL RETURNS NULL ON NULL INPUT... Seuravaaksi hyvin yksinkertainen esimerkki Spatialin tyyppien käytöstä, jossa käytetään hyväksi ed. esiteltyjä tyyppejä. Luodaan taulu CITY, jossa sarakkeina kaupungin nimi, populaatio ja sijainti. Viedään tauluun yksi kaupunki jonka sijantina on polygoni, joka koostuu vuorostaan viivoista, jotka taas on määritelty pisteiden avulla. Lopuksi voidaan tehdä kysely, esim. Mikä on Helsingin pintaala? CREATE TABLE CITY ( NAME VARCHAR(30), POPULATION INTEGER, LOCATION ST_GEOMETRY ) INSERT INTO CITY VALUES( HELSINKI,500000,NEW ST_Polygon (NEW ST_LineString( ARRAY [NEW ST_Point(x1,y1), NEW ST_Point(x2,y2), NEW ST_Point(x3,y3), NEW ST_Point(x4,y4)] )))
9 SELECT LOCATION.ST_AREA() FROM CITY WHERE NAME= HELSINKI ; Edellisessä SELECT-lausessa käytetyn AREA-metodin on ST_Polygon-tyyppi perinyt sen ylityypiltä ST_Surface. 5 Yhteenveto Paikkatiedon käsittelyyn on vuosien ajan ilmestynyt monta uutta kieltä ja vanhoihin kieliin perustuvia laajennuksia. Tämä moninaisuus on tuonut tarpeen jonkinlaiselle standardille paikkatiedon suhteen, ennen kaikkea kyselykielistä vakiintuneimmalle, SQL-kielelle. Muutama standardi onkin kehitteillä ja ainakin yksi on jo olemassa, SQL/MM. Suurin osa tietokantavalmistajista näyttäisikin tukevan SQL/MM Spatial-standardia, joko suoraan tai optionaalisten laajennuspakkausten kautta. Näihin kuuluu Oracle Locator/Spatial, DB2 Spatial, Postgres, MySQL ja Informix R DataBlade Spatial. DB2-Spatial tukee myös OpenGis R Consortiumin standardia [Ope99]. Lähteet Cro01 Crowther, Paul, Hartnett, Jacky, Handling Spatial Objects in a GIS Database - Relational v Object Oriented Approaches, Proc. of 6th int. conf on Geocomputation, Univ. of Queensland, Brisbane, Australia, 24-26 Sept. 2001, http://www.geocomputation.org/ 2001/papers/crowther.pdf [28.03.2003] Ege94 Egenhofer, Max, Spatial SQL: A Query and Presentation Lan-
10 guage, IEEE Transactions on Knowledge and Data Engineering 6 (1): 86-95, 1994, http://www.spatial.maine.edu/~max/ SSQL.pdf.[29.03.2003] ISO1 ISO/IEC 13249-3, Final Committee Draft, ftp:// sqlstandards.org/sc32/wg4/progression_documents/ FCD/2FCD1R1-03-spatial-2002-13.pdf. [29.03.2003] ISO2 ISO/IEC 13249-3, Final Committee Draft, ftp:// sqlstandards.org/sc32/wg4/progression_documents/ FCD/2FCD-03-spatial-2002-03-pdf. [29.03.2003] ISO3 ISO/IEC 13249-1, Final Committee Draft, ftp:// sqlstandards.org/sc32/wg4/progression_documents/ FCD/2FCD1-01-framework-2001-12.pdf. [29.03.2003] Lee02 Lee, Jong-Yun, Integrating Spatial and Temporal Relationships Operators into SQL3 for Historical Data Management, ETRI Journal Volume 24 Number 3, June 2002, http://etrij.etri.re.kr/ etrij/pdfdata/24-03-07.pdf. [08.03.2003] Lin01 Lin, Hui, Huang, Bo, SQL/SDA: A Query Language for Supporting Spatial Data Analysis and Its Web-Based Implementation, IEEE Transactions on Knowledge and Data Engineering 13 (4): 671-682, Jul./Aug. 2001, http://dlib.computer.org/tk/books/ tk2001/pdf/k0671.pdf, [28.03.2003] MaC97 Mark, David M. et al., The GIS History Project, Summary Paper UCGIS Summer Assembly, Bar Harbor, Maine, USA, june 1997, http://www.geog.buffalo.edu/ncgia/gishist/bar_ harbor.html, [29.03.2003]
11 MeE01 Melton, Jim, Eisenberg, Andrew, SQL Multimedia Application Packages (SQL/MM), ACM SIGMOD Record, Volume 30, Number 4, December 2001. Ope99 OpenGis R Simple Features Specification for SQL, Rev 1.1, http:// www.opengis.org/techno/specs/99-049.pdf. [29.03.2003] Rav Ravada, Siva, Spatial database services for location-aware applications, http://www.gisdevelopment.net/technology/lbs/ techlbs004.htm. [29.03.2003]