Geneerisen paikkatietov¨alityspalvelimen kehitt¨aminen Diplomity¨o Turun yliopisto Informaatioteknologian laitos Ohjelmistotekniikka Tammikuu 2012 Tapio Aali Ohjaajat: Jukka Teuhola Sami Hyrynsalmi TURUN YLIOPISTO Informaatioteknologian laitos TAPIO A ALI: Geneerisen paikkatietov¨alityspalvelimen kehitt¨aminen Diplomity¨o, 57 s. Ohjelmistotekniikka Tammikuu 2012 Paikkatieto on tietoa kohteista tai ilmi¨oist¨a, joiden sijainti Maan suhteen tunnetaan. Yksitt¨ainen paikkatietoelementti sis¨alt¨aa¨ tietoa sijainnista ja siihen liittyv¨ast¨a ominaisuudesta. Useasta toisiinsa jollain tavalla liittyv¨ast¨a paikkatietoelementist¨a koottua kokonaisuutta kutsutaan paikkatietoaineistoksi. Erilaisia paikkatietoaineistoja on nyky¨aa¨ n saatavilla Internetist¨a suunnaton m¨aa¨ r¨a lukuisissa eri formaateissa. Ty¨okalut aineistojen hyv¨aksik¨aytt¨oo¨ n on k¨ayt¨ann¨oss¨a t¨aytynyt aina toteuttaa sovellus- ja aineistokohtaisesti, sill¨a niiden soveltamiseen ei ole ollut yhten¨aist¨a ratkaisua. Soveltamista olisi mahdollista yksinkertaistaa ja helpottaa kehitt¨am¨all¨a erityinen geneerinen paikkatietov¨alityspalvelin, joka toimisi sovittimena aineistojen ja sovelluksen v¨alill¨a. Toisin sanoen palvelinta voitaisiin k¨aytt¨aa¨ geneerisen¨a paikkatietokerroksena sovelluksissa. T¨ass¨a tutkielmassa selvitet¨aa¨ n, millainen t¨allainen palvelin voisi olla. Palvelimen suunnittelu aloitetaan luomalla siit¨a muutamaa kiinte¨aa¨ aineistoa k¨aytt¨av¨a prototyyppi, josta tehtyjen havaintojen pohjalta aloitetaan geneerisen palvelimen suunnittelu. Palvelimesta p¨aa¨ dyt¨aa¨ n kehitt¨am¨aa¨ n ty¨okalu, jonka avulla erityyppisi¨a paikkatietoaineistoja voidaan k¨asitell¨a yhdenmukaisen rajapinnan kautta. Siihen kehitet¨aa¨ n modulaarinen arkkitehtuuri, jonka avulla aineistoja ja niist¨a haettuja tuloksia voidaan k¨asitell¨a mahdollisimman vapaasti. Geneerinen paikkatietov¨alityspalvelin toteutetaan t¨ass¨a ty¨oss¨a siten, ett¨a se tukee kahta eri aineistotyyppi¨a: WFS:¨aa¨ ja WMS:n metatietoja. T¨am¨an lis¨aksi palvelimeen toteutetaan joukko operaatioita, joiden avulla aineistoja voidaan k¨asitell¨a halutuilla tavoilla. Ty¨on lopuksi tarkastellaan valmiin palvelimen k¨aytt¨okelpoisuutta. Sen havaitaan toteuttavan sille asetetut vaatimukset ja t¨aten olevan k¨aytt¨okelpoinen tietyin rajoituksin, joista suurimmat seuraavat palvelimen perusideasta. K¨ayt¨ann¨oss¨a geneerinen l¨ahestymistapa aiheuttaa v¨akisinkin omia rajoituksiaan aineistojen k¨asittelyyn, vaikka se samaan aikaan laajentaa ja yksinkertaistaa niiden k¨aytt¨oa¨ luomalla yhdenmukaisen rajapinnan kaikkiin eri aineistoihin. Asiasanat: Paikkatieto, paikkatietoaineisto, geneerisyys, WFS, WMS UNIVERSITY OF TURKU Department of Information Technology TAPIO A ALI: Developing a Generic Geographic Information Proxy Server Master of Science in Technology Thesis, 57 p. Software Engineering January 2012 Geographic information is information about objects or phenomena that are associated with a location relative to the surface of the Earth. A geographic information element contains data about a location and properties related to it. A collection of geographic information elements that relate in some way is called a geographic information dataset. A vast number of geographic information datasets are available in several different formats in the Internet. Since there has not been a uniform solution for the utilization of the datasets, the tools for their usage must always have been implemented separately for every application. The utilization of the datasets could be made simpler and easier by developing a generic geographic information proxy server that could be used as an adapter between the datasets and the application. In other words, the server would be a generic geographic information layer for the application. In this thesis, we examine how this kind of server would function. The development of the server is started by creating a prototype that utilizes two datasets selected upfront. From the operation of the prototype, we observe that the server should be a tool whereby different types of datasets can be operated via a uniform interface. We decide that it will be based on a modular architecture that enables us to process datasets and results fetched from them as freely as possible. In this study, the generic geographic information server is implemented with a support for two different dataset types: WFS and WMS metadata. Several different operations for processing of the datasets are also implemented into the server. Finally, the usefulness of the proxy is analyzed. We observe that it fulfills the requirements that we gave it and thus it is useful. However, the generic approach inevitably causes some limitations to the usage of the datasets while it simplifies and expands their utilization by creating a uniform interface to all different datasets. Keywords: Geographic information, geographic information dataset, genericity, WFS, WMS Sis¨alt¨o Ty¨oss¨a k¨aytetyt lyhenteet ii 1 Johdanto 1 2 Taustaa Museon informaatioportaalista 5 2.1 Rakennusinventoinnin perusk¨asitteet . . . . . . . . . . . . . . . . . . . . 5 2.2 Ohjelmiston kehitys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 K¨aytetyt teknologiat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4 Alustan tekninen toteutus . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5 Rakennusinventoinnin tietokantarakenne . . . . . . . . . . . . . . . . . . 18 3 4 Paikkatietov¨alityspalvelimen suunnittelu 22 3.1 Geneerisyys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2 Palvelimen kehityksen tavoitteet . . . . . . . . . . . . . . . . . . . . . . 24 3.3 Prototyypin suunnittelu . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4 Prototyypin toteutus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5 Kohti geneerisyytt¨a – prototyypin analyysi . . . . . . . . . . . . . . . . . 30 3.6 Tietokanta- ja luokkarakenteen suunnittelua . . . . . . . . . . . . . . . . 32 Paikkatietov¨alityspalvelimen toteutus 35 4.1 J¨arjestelm¨an arkkitehtuuri ja variaatiopisteet . . . . . . . . . . . . . . . . 36 4.2 Tietokantarakenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5 6 4.3 Luokkarakenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.4 Aineistoluokkien toteutus . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.5 Toiminnallisuuksien toteutus . . . . . . . . . . . . . . . . . . . . . . . . 42 4.6 Palvelimen toiminta ja sen k¨aytt¨o . . . . . . . . . . . . . . . . . . . . . . 44 Tulokset ja niiden analyysi 47 5.1 Geneerisyyden toteutuminen . . . . . . . . . . . . . . . . . . . . . . . . 47 5.2 Kehitystavoitteissa onnistuminen . . . . . . . . . . . . . . . . . . . . . . 48 5.3 Toteutuksen ongelmakohtia ja kehityskohteita . . . . . . . . . . . . . . . 49 Yhteenveto L¨ahteet 51 54 Ty¨oss¨a k¨aytetyt lyhenteet EPSG, European Petroleum Survey Group European Petroleum Survey Group oli j¨arjest¨o, joka alkoi yll¨apit¨aa¨ geodeettisten parametrien tietokantaa. Tietokantaan koottiin tiedot eri koordinaattij¨arjestelmist¨a, ja sen avulla koordinaatteja pystyt¨aa¨ n muuntamaan j¨arjestelm¨ast¨a toiseen. Nyky¨aa¨ n tietokantaa yll¨apit¨aa¨ International Association of Oil & Gas Producers Geomatics Committee, johon EPSG yhdistettiin vuonna 2005 [1]. Lyhenne EPSG on kuitenkin edelleen k¨ayt¨oss¨a koordinaattij¨arjestelmille annettavissa tunnisteissa, joita kutsutaan EPSG-koodeiksi. Esimerkiksi GPS-j¨arjestelm¨ass¨a k¨ayt¨oss¨a olevan WGS84-koordinaattij¨arjestelm¨an EPSG-koodi on EPSG:4326 [2]. EUREF-FIN, European Reference Frame Finland EUREF-FIN-koordinaatisto on EU:n suositteleman ETRS89 (European Terrestrial Reference System 1989) -koordinaattij¨arjestelm¨an suomalainen toteutus. ETRS89:ss¨a koordinaatit on lukittu Euraasian mannerlaattaan, joten ne eiv¨at muutu mannerlaattojen liikkuessa. J¨arjestelm¨an koordinaattien yksikk¨o on metri, ja sen EPSG-koodi on 3067. [3] GIS, Geographical Information Systems (Paikkatietoj¨arjestelm¨a) Paikkatietoj¨arjestelm¨a on j¨arjestelm¨a paikkatiedon tuottamiseen, hallintaan, analysointiin tai esitt¨amiseen. Paikkatietoj¨arjestelm¨aa¨ n voi kuulua laitteita, ohjelmistoja, aineistoja ja ihmisi¨a. GML, Geography Markup Language GML:n on OGC:n kehitt¨am¨a paikkatiedon v¨alitt¨amiseen tarkoitettu XML:¨aa¨ n perustuva kieli. GML mahdollistaa esimerkiksi geometrioiden sek¨a erilaisten paikkatietoelementtien ja havaintojen v¨alitt¨amisen yhdenmukaisesti. [4] INSPIRE, Infrastructure for Spatial Information in Europe INSPIRE-direktiivin tavoitteena on luoda Eurooppaan yhten¨ainen paikkatietoinfrastruktuuri, jossa kansalliset paikkatietoaineistot ja -palvelut yhdistyv¨at. [5] JHS, julkishallinnon suositus JHS-j¨arjestelm¨a koostuu suosituksista, jotka koskevat valtion- ja kunnallishallinnon tietohallintoa. Esimerkiksi JHS 158 Paikkatiedon metatiedot m¨aa¨ ritt¨aa¨ , miten paikkatietoon liittyv¨a metatieto tulisi esitt¨aa¨ Suomen julkisessa hallinnossa. [6] JSON, JavaScript Object Notation JSON on kevyt yleisk¨aytt¨oinen formaatti datan esitt¨amiselle. Se on ihmisille helposti luettavaa, ja sen k¨asittely tietokoneella on esimerkiksi XML:¨aa¨ nopeampaa ja yksinkertaisempaa. JSON perustuu JavaScript-kieleen ja sen ytimen¨a on kaksi rakennetta: j¨arjestetty lista ja avain-arvo-kokoelma. [7] OGC, The Open Geospatial Consortium OGC on vuonna 1994 perustettu kansainv¨alinen vapaaehtoisuusperustainen standardisointij¨arjest¨o, joka kehitt¨aa¨ standardeja muun muassa paikkatietosis¨all¨oille ja palveluille. [8] PHP, PHP: Hypertext Preprocessor PHP on alun perin yksinkertaisena skriptikielen¨a kehitetty dynaamisten WWW-sivujen generointiin tarkoitettu palvelinp¨aa¨ n ohjelmointikieli. Viidennen version my¨ot¨a siihen on tullut my¨os laaja tuki oliopohjaiselle ohjelmoinnille. [9] T¨ass¨a tutkielmassa k¨aytet¨aa¨ n ohjelmointikielen¨a PHP:t¨a. SHP, Esri Shapefile SHP on Esrin yll¨apit¨am¨a digitaalinen vektoripohjainen tiedostoformaatti paikkatiedon ja siihen liittyv¨an metatiedon tallentamiseen. [10] WFS, Web Feature Service OpenGIS Web Feature Service on OGC:n kehitt¨am¨a rajapinta paikkatietoelementtien v¨alitt¨amiseen alustariippumattomasti. WFS:ss¨a k¨aytet¨aa¨ n GML-kielt¨a. [11] WMS, Web Map Service WMS on OGC:n kehitt¨am¨a rajapinta karttakuvien ja niihin liittyv¨an metatiedon tarjoamiseen Internetin yli. [12] Luku 1 Johdanto Paikkatiedolla tarkoitetaan tietoa kohteista tai ilmi¨oist¨a, joiden sijainti Maan suhteen tunnetaan [13]. Paikkatieto voi olla joko inhimillist¨a tai mittaustietoa. Niinp¨a esimerkiksi sek¨a ”Myn¨am¨aen lukio sijaitsee EUREF-FIN-koordinaattij¨arjestelm¨ass¨a pisteess¨a 226 576, 6 737 422” ett¨a ”Myn¨am¨aen lukio sijaitsee Myn¨am¨aen kirkon vieress¨a” ovat molemmat paikkatietoa. Yksitt¨ainen paikkatietoelementti sis¨alt¨aa¨ v¨ahint¨aa¨ n ainakin tiedon sijainnista ja siihen liittyv¨ast¨a ominaisuudesta. Elementeist¨a koostuvaa kokonaisuutta kutsutaan paikkatietoaineistoksi. Yksitt¨aisen aineiston elementit liittyv¨at yleens¨a toisiinsa esimerkiksi siten, ett¨a ne sijaitsevat samalla maantieteellisell¨a alueella tai niit¨a yhdist¨aa¨ jokin ominaisuustieto. Paikkatietoaineistoihin liittyy yleens¨a metatietoa, joka kuvailee aineiston sis¨alt¨oa¨ tai kertoo siihen liittyvi¨a lis¨atietoja. Tietokonepohjaisten paikkatietoj¨arjestelmien yleistytty¨a my¨os paikkatietoaineistoilla tarkoitetaan yleens¨a digitaalisessa muodossa olevaa tietoaineistoa. Internetiss¨a on nyky¨aa¨ n saatavilla suunnaton m¨aa¨ r¨a erilaisia paikkatietoaineistoja. Niiden toteutusta on pyrkinyt yhdenmukaistamaan vuodesta 1994 toiminut The Open Geospatial Consortium, joka on kehitt¨anyt erilaisia standardeja protokollia ja malleja paikkatietoaineistojen esitt¨amiseen [8]. Aineistojen rakenteen yhdenmukaisuutta on puolestaan edist¨anyt Euroopan Unionin vuonna 2007 k¨aytt¨oo¨ nottama INSPIRE-direktiivi, jonka tavoitteena on yhdenmukaistaa EU:n j¨asenvaltioiden paikkatietoinfrastruktuureja. INSPIRE LUKU 1. JOHDANTO 2 m¨aa¨ ritt¨aa¨ muun muassa, miten paikkatietoaineistojen metatiedot tulisi esitt¨aa¨ ja miten aineistoihin liittyv¨at palvelut tulisi toteuttaa. [5] Standardien ja direktiivien my¨ot¨a aineistot ovat nyky¨aa¨ n p¨aa¨ osin saavutettavissa yhten¨aisill¨a menetelmill¨a. Kuitenkaan niiden soveltamiseen ei ole ollut yhten¨aist¨a ratkaisua, vaan k¨ayt¨ann¨oss¨a ty¨okalut paikkatietoaineistojen hyv¨aksik¨aytt¨oo¨ n eri sovelluksissa on t¨aytynyt aina toteuttaa erikseen aineistokohtaisesti. Aineistojen hyv¨aksik¨aytt¨oa¨ olisi mahdollista helpottaa kehitt¨am¨all¨a erityinen paikkatietov¨alityspalvelin, joka toimisi sovittimena aineistojen ja sovelluksen v¨alill¨a. Palvelimeen olisi tallennettu aineistojen parametreja, ja se osaisi sijaintitiedon avulla hakea tietoa n¨aist¨a aineistoista. Saadut tulokset palvelin osaisi esitt¨aa¨ loogisina tietokokonaisuuksina, joita pystytt¨aisiin k¨asittelem¨aa¨ n yhdenmukaisen rajapinnan kautta. T¨all¨oin aineistoista voitaisiin helposti tuottaa juuri halutun kaltaisessa formaatissa olevia kokonaisuuksia halutussa koordinaattij¨arjestelm¨ass¨a, eik¨a asiakkaan v¨altt¨am¨att¨a tarvitsisi tiet¨aa¨ tarkasti, mist¨a tai mink¨a tyyppisist¨a aineistoista tietoja tarkkaan ottaen haetaan. Palvelin toimisi siis k¨ayt¨ann¨oss¨a asiakassovelluksen geneerisen¨a paikkatietokerroksena. Paikkatietov¨alityspalvelimen toiminnan ideaa esitell¨aa¨ n kuvassa 1.1. T¨ass¨a tutkielmassa selvitet¨aa¨ n, miten t¨allainen paikkatietov¨alityspalvelin kannattaa toteuttaa. Yksi keskeinen kysymys palvelimen kehityksess¨a on luonnollisesti tietojen oikeellisuus, eli miten valitaan oikeat aineistot ja miten eri l¨ahteist¨a saatuja tuloksia yhdistell¨aa¨ n j¨arkeviksi kokonaisuuksiksi. Keskeisin kysymys liittyy kuitenkin geneerisyyteen: miten kannattaa toteuttaa rajapinta, jonka kautta erityyppiset aineistot saadaan esitetty¨a yhdenmukaisesti. Lis¨aksi palvelin halutaan pit¨aa¨ mahdollisimman helposti laajennettavana, sill¨a niin uusien aineistotyyppien kuin my¨os uusien aineistoja k¨asittelevien operaatioiden lis¨aa¨ minen halutaan pit¨aa¨ yksinkertaisena. Esimerkkin¨a palvelimen k¨ayt¨ost¨a k¨aytet¨aa¨ n t¨ass¨a ty¨oss¨a Museon informaatioportaalia (MIP), joka toimii samalla sek¨a generis¨oinnin l¨aht¨okohtana ett¨a t¨arkeimp¨an¨a sovelluskohteena. MIP on Varsinais-Suomen maakuntamuseolle kehitett¨av¨a selainpohjainen LUKU 1. JOHDANTO 3 Asiakas - koordinaatit - koordinaattijärjestelmä - muita parametreja - tulosten formaatti - tulosten koordinaattijärjestelmä tulokset loogisina kokonaisuuksina halutussa formaatissa ja koordinaatijärjestelmässä Paikkatietovälityspalvelin - aineistoille sovitetut koordinaatit - muut aineistokohtaiset parametrit tulokset Eri lähteissä sijaitsevat paikkatietoaineistot Kuva 1.1: Paikkatietov¨alityspalvelimen toimintaidea. inventointisovellus. Sen toteutuksesta vastaa Varsinais-Suomen liiton alaisuudessa toimiva Lounaispaikka, jonka p¨aa¨ tuote on lounaispaikka.fi-osoitteessa toimiva varsinaissuomalaisille ja satakuntalaisille viranomaistahoille tarkoitettu karttapalvelu. MIP:n kehitys aloitettiin Opetus- ja kulttuuriministeri¨o tuella 2010, ja sen tuotantok¨aytt¨o aloitettiin syksyll¨a 2011. Sivustosta on tarkoitus kehitt¨aa¨ kattava ty¨okalu kaikenlaisen kulttuuriymp¨arist¨oihin liittyv¨an inventointitiedon tallentamiseen ja esitt¨amiseen; ensimm¨aisess¨a vaiheessa siihen on kehitetty ty¨okaluja rakennusinventoinnin tarpeisiin [14]. T¨am¨an tutkielman toisessa luvussa k¨ayd¨aa¨ n l¨api projektiin liittyv¨aa¨ taustatietoa. Luvussa esitell¨aa¨ n rakennusinventointia ja sen perusk¨asitteit¨a, Museon informaatioportaalia ja sen ominaisuuksia sek¨a sivuston teknist¨a toteutusta. Kolmannessa luvussa k¨asitell¨aa¨ n paikkatietov¨alityspalvelimen suunnitteluprosessia. Luvussa k¨ayd¨aa¨ n l¨api palvelimelle asetetut tavoitteet ja niist¨a seuraavat vaatimukset. Aluksi eritell¨aa¨ n vaatimuksia ja analysoidaan niit¨a, jonka j¨alkeen suunnitellaan ja toteutetaan palvelimen prototyyppi MIP:n vaatimuksista tehdyst¨a k¨aytt¨otapauksesta. Seuraavaksi luo- LUKU 1. JOHDANTO 4 daan yleistys palvelimen toimintaperiaatteista prototyypist¨a tehtyjen havaintojen pohjalta. Lopuksi luvussa suunnitellaan palvelimen tietokanta- ja luokkarakennetta. Nelj¨anness¨a luvussa k¨ayd¨aa¨ n l¨api palvelimen toteutusta. Aluksi luvussa k¨ayd¨aa¨ n l¨api palvelimen tietokanta- ja luokkarakenteet. Lopuksi tutustutaan tarkemmin eri ominaisuuksien, kuten protokollien, toteutuksiin. Viides luku on yhteenveto. Siin¨a tarkastellaan, auttaako palvelin ongelmaan, jonka takia sit¨a alettiin kehitt¨aa¨ , vai luoko se uusia ongelmia. Lis¨aksi luvussa tutkitaan, t¨aytt¨aa¨ k¨o palvelin sille asetetut vaatimukset, ja miten sit¨a voisi parantaa. Paikkatietov¨alityspalvelin on lisensoitu Creative Commons Nime¨a 3.0 Muokkaamaton -lisenssill¨a1 , ja se on saatavilla osoitteesta https://github.com/tjkaal/ GIProxy. 1 Creative Commons Attribution 3.0 Unported Licence (http://creativecommons.org/ licenses/by/3.0/) Luku 2 Taustaa Museon informaatioportaalista Museon informaatioportaalin suunnittelu aloitettiin vuonna 2008. T¨all¨oin tehtiin suunnitelma hankkeesta, jonka tavoitteena oli luoda kulttuuriymp¨arist¨otietokanta, joka olisi suoraan yhteydess¨a paikkatietoon, yleisiin rakennettua kulttuuriymp¨arist¨oa¨ koskeviin perusrekistereihin, ja johon voisi liitt¨aa¨ suoraan my¨os valokuvat ja muut liitetiedostot. Tavoitteena oli luoda sovellus, jonka avulla voitaisiin koota Turun maakuntamuseon hajallaan olevat kulttuuriymp¨arist¨oihin liittyv¨at tiedot samaan paikkaan. [15] Hankkeelle saatiin rahoitus Opetus- ja kulttuuriministeri¨olt¨a vuoden 2009 lopulla, ja se k¨aynnistettiin vuoden 2010 aikana. Projektia kehitt¨am¨aa¨ n valittiin Lounaispaikka Turun kaupungin ja Lounaispaikan muiden partnerien v¨alisen yhteisty¨osopimuksen perusteella [16, 17]. Ensimm¨aisess¨a vaiheessa sovellukseen p¨aa¨ tettiin kehitt¨aa¨ ty¨okalut rakennusinventoinnin tarpeisiin. 2.1 Rakennusinventoinnin perusk¨asitteet Rakennusinventoinnissa on tarkoituksena ker¨at¨a tietoja rakennuksista, kiinteist¨oist¨a ja erilaisista aluekokonaisuuksista. Tyypillisesti tallennetaan tietoja esimerkiksi rakennusten rakennus- ja ymp¨arist¨otyypeist¨a, rakennustavoista, rakennusten ulkoasusta ja niiden s¨ailyneisyydest¨a. Inventoitaessa rakennuksille ja niiden kiinteist¨oille annetaan my¨os arvo- LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 6 tuksia, jotka ohjaavat aluesuunnittelijoita rakennuskannan ja maiseman suojelussa. [18] Lis¨aksi eri inventointikohteille tehd¨aa¨ n kulttuurihistoriallista arvottamista, jonka tarkoituksena on m¨aa¨ ritt¨aa¨ alueen, kiinteist¨on tai rakennuksen kulttuurihistoriallinen arvo ja merkitys [19]. Rakennusinventoinnissa keskeisin inventoitava kohde on kiinteist¨o. Kiinteist¨onmuodostamislain mukaan kiinteist¨oll¨a tarkoitetaan maanmuodostuksen yksikk¨oa¨ , joka merkit¨aa¨ n kiinteist¨orekisteriin kiinteist¨on¨a [20]. T¨allaisia yksik¨oit¨a ovat tilat, tontit, yleiset alueet, valtion mets¨amaat, suojelualueet, lunastusyksik¨ot, yleisiin tarpeisiin erotetut alueet, erilaiset vesij¨at¨ot1 sek¨a yleiset vesialueet [21]. Jokaisella kiinteist¨oll¨a on neliosainen 14-numeroinen kiinteist¨otunnus, joka koostuu kolminumeroisesta kuntanumerosta, kolminumeroisesta kyl¨an tai kaupunginosan numerosta sek¨a nelinumeroisista ryhm¨a- ja yksikk¨onumeroista [23]. Tyypillinen rakennusinventoinnissa inventoitava kiinteist¨o on tila tai tontti. Jokaisesta inventoidusta kiinteist¨ost¨a pyrit¨aa¨ n tallentamaan sen osoite, nimi, p¨aa¨ rakennuksen sijainti, tietoja sen historiasta ja ymp¨arist¨ost¨a sek¨a rakennusten m¨aa¨ r¨ast¨a. Kiinteist¨oo¨ n voidaan my¨os merkit¨a sen kulttuurihistorialliset arvot ja antaa arvotus tarpeen mukaan. Lis¨aksi kiinteist¨on erilaiset kaava- ja muut suojelumerkinn¨at pyrit¨aa¨ n kirjaamaan sen tietoihin. Kiinteist¨ost¨a ja sen rakennuksista otetaan my¨os kuvia, jotka arkistoidaan muiden inventointitietojen mukana. Jokaiseen inventoituun kiinteist¨oo¨ n kuuluu yksi tai useampi rakennus tai rakennelma. Jokaisella rakennuksella tai rakennelmalla on rakennustunnus, joka koostuu kiinteist¨otunnuksesta ja kolminumeroisesta juoksevasta rakennusnumerosta [23]. Rakennuksen inventointitietoihin pyrit¨aa¨ n kirjaamaan esimerkiksi sen sijainti kartalla, rakennustyyppi (kuten kioski, leikkim¨okki tai talonpoikaistalo), suunnittelijat ja rakentajat, rakennusvuodet ja rakennusmateriaalit. Lis¨aksi kirjataan tarvittaessa yl¨os tietoja rakennuksen kulttuurihistoriallisesta merkitt¨avyydest¨a, suojelusta sek¨a kuvaus sis¨atiloista ja erityispiirteist¨a. 1 Vesij¨att¨o on entist¨a vesialuetta, joka on pysyv¨asti muuttunut maa-alueeksi vedenpinnan laskun, liettymisen, umpeen kasvamisen tai maanpinnan kohoamisen seurauksena. [22] LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 7 Rakennuksella tai rakennelmalla on siis aina kiinteist¨o, johon se kuuluu. Vastaavasti inventoitu kiinteist¨o kuuluu aina kyl¨aa¨ n tai kaupunginosaan, joka puolestaan kuuluu kuntaan. Kunnilla on inventoinneissa merkityst¨a pelk¨ast¨aa¨ n tilastollisina kohteina, joten niist¨a tallennetaan vain kuntanumerot sek¨a nimet. Kylist¨a sen sijaan tehd¨aa¨ n alueinventointeja. Alueinventoinneissa koostetaan yhdest¨a tai useammasta kyl¨ast¨a koostuva alue, jolle annetaan nimi, kuvaus sen historiasta, maisemasta ja nykytilasta. Lis¨aksi alueen sijainti voidaan tarpeen mukaan antaa joko pisteen¨a tai karttaan piirrett¨av¨an¨a alueena. Alueiden sis¨all¨a voi sijaita kulttuurihistoriallisesti merkitt¨av¨aksi luettavia arvoalueita, joilla on nimi ja aluetyyppi sek¨a sijainti pisteen¨a tai alue. Lis¨aksi niille voidaan kiinteist¨ojen tapaan antaa erilaisia kulttuurihistoriallisia arvoja sek¨a m¨aa¨ ritt¨aa¨ arvotus ja suojelutiedot. Yhteen kokonaisuuteen kuuluvat inventoinnit kootaan inventointiprojektin alle. Inventointiprojektilla on sen sis¨alt¨oa¨ kuvaava nimi, tarkempi kuvaus, inventointiaika, toimeksiantaja ja tyyppi sek¨a inventoijat. Tyypillinen inventointiprojekti tehd¨aa¨ n jollain rajauksella jonkin tietyn kunnan alueella. Esimerkiksi Turun Maakuntamuseon Varakum B -projektissa tehtiin vuonna 2007 Entisen Mietoisten alueen t¨aydennysinventointi, jossa inventoitiin ennen vuotta 1940 rakennettuja nykyisin Myn¨am¨akeen kuuluvan Mietoisten kunnan rakennuksia. 2.2 Ohjelmiston kehitys Kes¨akuussa 2010 Pyry Liukas aloitti Museon informaatioportaalin kehityksen Lounaispaikassa. Aluksi h¨an tutustui vuonna 1998 k¨aytt¨oo¨ notettuun Microsoft Access 97 -pohjaiseen InveTMM-sovellukseen ja sen tietokantarakenteeseen. Ohjelmistosta ker¨atyn tiedon ja k¨aytt¨ajien haastattelun perusteella h¨an aloitti MIP:n suunnittelun. Alusta asti uuden sovelluksen p¨aa¨ tavoitteet olivat selkeit¨a. Yksi olennainen ominaisuus ohjelmistossa tulisi olemaan joustavuus, sill¨a InveTMM-ohjelmisto oli yli kymmenen vuoden k¨ayt¨on aikana osoittautunut kankeaksi ja rajoittuneeksi. MIP:sta haluttiin kehitt¨aa¨ LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 8 helposti muokattava ja moniin k¨aytt¨otarkoituksiin soveltuva. Lis¨aksi MIP:iin haluttiin luoda j¨arjestelm¨a, jossa voitaisiin inventoitaessa syntynyt tekstidata ja siihen liittyv¨at paikkatieto, kuvat ja liitetiedostot tallentaa yhteen paikkaan ja esitt¨aa¨ yhdess¨a helposti ymm¨arrett¨av¨ass¨a n¨akym¨ass¨a: teksti selke¨asti jaoteltuna, paikkatieto karttaikkunassa sek¨a kuvat ja liitetiedostot selailtavina. Paperiset tulosteet olivat ainoa tapa jakaa tietoa ulkopuolisille tahoille InveTMM:st¨a. T¨ah¨an haluttiin parannusta, joten MIP:sta p¨aa¨ tettiin kehitt¨aa¨ WWW-pohjainen ohjelmisto, johon tulisi mahdollisuus luoda erilaisia k¨aytt¨aj¨atasoja, joille voitaisiin asettaa erilaisia rajoituksia niin tietojen n¨akyvyyteen kuin my¨os ohjelmiston k¨aytt¨ooikeuksiin. Tietojen arkistointia ja laadukkaita tulosteita varten MIP:iin haluttiin my¨os mahdollisuus PDFtiedostojen luomiseen. Sivuston toteutus aloitettiin Lounaispaikassa vuoden 2010 loppupuolella. Ensimm¨aisin¨a kuukausina Pyry Liukas, Tapio Aali ja Heikki Ylitalo kehittiv¨at yhteisty¨oss¨a sivustoa. Vuoden 2011 helmikuusta sivuston suunnittelusta ja toteutuksesta on vastannut Tapio Aali yksin¨aa¨ n Pyry Liukkaan satunnaisella avustuksella. Ensimm¨aiseksi k¨asiteltiin vanhat tietokannat. Vanhoista inventoinneista digitoitu Inventoinnit ennen 1998, InveTMM-ohjelmistolla luotu Inventoinnit 1998–2010, matkaraporttitietokanta Matkaraportit, Turussa tehtyj¨a rakennusinventointeja sis¨alt¨av¨a Turku MySQL sek¨a porrashuoneinventointeja sis¨alt¨av¨a Porrashuone yhdistettiin yhteen PostgreSQL-tietokantaan omiksi skeemoikseen. Tammikuussa 2011 kehitettiin geneerinen ty¨okalu, jolla vanhoja tietokantoja p¨aa¨ si selailemaan ja tarvittaessa muokkaamaan suoraan MIP:n omasta k¨aytt¨oliittym¨ast¨a. Ty¨okaluun kehitettiin my¨os yksinkertainen hakukone, jolla voitiin etsi¨a halutun ilmauksen sis¨alt¨avi¨a rivej¨a. Lopuksi hakukoneeseen lis¨attiin mahdollisuus rajata haku tiettyihin skeemoihin tai tauluihin. Tammi-helmikuussa 2011 otettiin k¨aytt¨oo¨ n erillinen kuvapalvelin, johon rakennettiin j¨arjestelm¨a kuvien automaattiseen koon muuttamiseen ja uusien kuvien lis¨aa¨ miseen. Samalla kehitettiin MIP:n sivustomoottoriin j¨arjestelm¨a, jossa palvelimen kuvatiedostot LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 9 voitiin liitt¨aa¨ mihin tahansa tietokannan riviin. My¨ohemmin samaa j¨arjestelm¨aa¨ laajennettiin siten, ett¨a kuvien lis¨aksi sen kautta pystyttiin jakamaan my¨os erilaisia liitetiedostoja. Seuraavaksi kehitettiin ty¨okalu, joka tutki l¨api Turun maakuntamuseon rakennusinventointien kuva-arkiston. Kuvien metatiedoista etsittiin kiinteist¨o- ja rakennustunnuksia, joita verrattiin Inventoinnit 1998–2010 -skeeman tietoihin. T¨asm¨anneet kuvat indeksoitiin palvelimelle kuvausp¨aiv¨am¨aa¨ r¨an mukaan ja linkitettiin vastaavaan riviin. Viimeisen¨a ty¨ovaiheena ennen uuden tietokantaskeeman k¨aytt¨oo¨ nottoa kehitettiin prototyyppi MIP:n hyvin keskeisest¨a ominaisuudesta, kiinteist¨oselaimesta (kuva 2.1), joka vastaa inventoijien aikaisemmin paperille tekem¨aa¨ inventointikorttia. Ty¨okalun tavoitteena oli tutkia, miten yksitt¨aisen kiinteist¨on tiedot, siihen liitetyt kuvat ja paikkatieto sek¨a sen rakennukset saadaan esitetty¨a selke¨asti yhdess¨a n¨akym¨ass¨a. K¨ayt¨ann¨oss¨a ty¨okalua varten piti kehitt¨aa¨ erikseen vain geneerinen kuvapaneeli, joka kykeni hakemaan tiettyyn tietokannan riviin linkitetyt kuvat ja yksinkertainen karttaikkuna, joka piirsi pohjakartan p¨aa¨ lle kiinteist¨on karttakohteet pistein¨a. Kiinteist¨on tiedot ja listaus sen rakennuksista saatiin suoraan aiemmin kehitetyst¨a tietokantaselaimesta. Kuva 2.1: Kiinteist¨oselaimen prototyyppi. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 10 Helmikuussa 2011 aloitettiin uuden inventointity¨okalun, Rakennusinventoinnit 2011, tekninen toteutus. Ensimm¨aiseksi tietokantaskeema viimeisteltiin k¨aytt¨oo¨ nottoa varten. Ty¨ovaiheesta teki erityisen se, ett¨a tietokannan suunnitelmaa oli k¨aytetty portaalin kehityksen esittelyss¨a ohjausryhmiss¨a, joten se oli tehty mahdollisimman helposti luettavaksi. Niinp¨a ensimm¨aiseksi tietokantaskeema t¨aytyi muuntaa paremmin tekniseen k¨aytt¨oo¨ n soveltuvaksi. Lis¨aksi entiteettien attribuutit piti tarkistaa ennen uuden tietokannan k¨aytt¨oo¨ nottoa. Viimeistelyprosessia esitell¨aa¨ n kuvassa 2.2. Alkuperäinen kunta kuntanumero Character varying(3) nimi Varchar Lopullinen kunta id Serial kuntanumero Character varying(3) nimi Varchar NN (PK) NN kunnissa_on_kylänosia kylänosa kuntanumero Character varying(3) kylänumero Integer nimi Varchar postinumero Numeric(5,0) maisema Text Text historia nykytila Text lisätiedot Text Text lähteet kunnissa_on_kyliä NN (PFK) NN (PK) NN NN id kunta_id kylänumero nimi kiinteistö Varchar Character varying(3) Integer Integer Varchar Varchar Varchar Varchar Varchar Varchar geometry Varchar kylä Serial Integer Varchar Varchar NN (PK) NN (FK) NN NN kylissä_on_kiinteistöjä kylänosissa_on_kiinteistöjä kiinteistötunnus kuntanumero kylänumero kiinteistönumero nimi katuosoite postinumero paikkakunta aluetyyppi historiallinen_tilatyyppi kiinteistön_sijainti arvotus NN (PK) NN NN NN (PK) NN (FK) NN (FK) NN NN NN NN (AK2) (AK3) kiinteistö id Serial NN (PK) kylä_id Integer NN (FK) kiinteistötunnus Varchar nimi Varchar osoite Varchar postinumero Varchar paikkakunta Varchar aluetyyppi Varchar arvotus Varchar historiallinen_tilatyyppi Varchar lisätiedot Text asutushistoria Text lähiympäristö Text pihapiiri Text omistajatiedot Text perustelut_yhteenveto Text lähteet Text kiinteistön_sijainti geometry Kuva 2.2: Esimerkki viimeistelyst¨a, jota uudelle tietokannalle tehtiin ennen sen k¨aytt¨oo¨ nottoa kuntien, kylien ja kiinteist¨ojen osalta. Vaikka kunta- ja kyl¨anumerot sek¨a kiinteist¨otunnukset ovat selke¨asti yksil¨ollisi¨a tunnisteita, ne voivat kuitenkin muuttua esimerkiksi kuntaliitoksissa, joten kohteet tarvitsevat erillisen identifioivan sarjanumeron. Alkuper¨aisess¨a versiossa esiintyv¨a termi kyl¨anosa on vanhasta ohjelmistosta periytyv¨a virheellinen k¨asite. Tietokannan k¨aytt¨oo¨ noton j¨alkeen aloitettiin tietojen sy¨ott¨amisess¨a k¨aytett¨avien lomakkeiden kehitys. T¨ass¨a ty¨ovaiheessa muunnettiin siis periaatteessa tietokannasta kahdeksan eri entiteetti¨a lomakkeiksi, joita k¨aytet¨aa¨ n rakennusinventoinnissa ker¨att¨avien tietojen tallentamiseen. Erilliset lomakkeet tarvittiin inventointiprojekteille, kunnille ja niiden kylille LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 11 tai kaupunginosille, kiinteist¨oille ja niiden rakennuksille sek¨a inventoiduille alueille ja niiden alla oleville arvoalueille. Sy¨ott¨olomakkeiden j¨alkeen kehitettiin viel¨a ty¨okalut kaikkien kohteiden selailuun, muokkaamiseen ja poistoon. T¨all¨oin saatiin my¨os valmiiksi uusi kiinteist¨oselain (kuva 2.3), jossa oli kiinnitetty erityist¨a huomiota tekstidatan j¨asentelyyn ja selke¨aa¨ n esitykseen. Samalla my¨os muille kohdetyypeille tehtiin vastaava n¨akym¨a. Kuva 2.3: Uusi kiinteist¨oselain. Huhtikuussa 2011 inventointiskeema saatiin lopulliseen muotoonsa. T¨all¨oin voitiin aloittaa vanhojen inventointien muunto uuteen j¨arjestelm¨aa¨ n. T¨at¨a operaatiota varten kehitettiin erillinen skripti, joka haki rivej¨a vanhoista tietokannoista ja sovitti uuteen sopivaksi. Kes¨all¨a 2010 aloitettiin sovelluksen testik¨aytt¨o, kun rakennusinventoijat alkoivat sy¨ott¨aa¨ tietoja uusista kohteista MIP:iin. Tuotantok¨aytt¨oo¨ n sivusto otettiin syksyll¨a 2011. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 2.3 12 K¨aytetyt teknologiat Museon informaatioportaali perustuu kokonaisuudessaan avoimen l¨ahdekoodin teknologioihin. Kaikissa sivuston palvelimissa on k¨aytt¨oj¨arjestelm¨an¨a Ubuntu Server, httppalvelimena k¨aytet¨aa¨ n lighttpd-ohjelmistoa. Tietokantapalvelinohjelmistona k¨aytet¨aa¨ n PostgreSQL:¨aa¨ , jota on laajennettu paikkatietoaineistojen k¨asittely¨a helpottavalla PostGISlis¨aosalla. Sivuston pohjana on alun perin Lounaispaikkaa varten kehitetty LouGISohjelmisto, josta Museon informaatioportaalia varten karsittiin ominaisuudet, joita MIP:ssa ei tarvita. T¨am¨an j¨alkeen alustaa on jatkokehitetty MIP:ia varten omassa projektissaan. Palvelintoteutus on tehty kokonaisuudessaan PHP-kielell¨a. Toteutuksen ytimen muodostaa PHP:t¨a laajentavan PEAR-kirjaston DB DataObject-paketti. Dataolioiden ideana on generoida tietokannan tauluista luokkia, joiden kanssa voidaan suorittaa kaikenlaisia tietokantaoperaatioita oliopohjaisesti. Yksinkertaiset operaatiot onnistuvat ilman SQLkomentojen kirjoittamista; esimerkiksi, jos halutaan etsi¨a skeeman rakennusinventointi taulusta kiinteist¨ o rivi, jonka id on 3245 ja vaihtaa sen postinumeroksi 20810, operaatio onnistuu muutamalla funktiokutsulla ja olion ominaisuuksia muuttamalla: 1 2 3 4 5 6 $Kiinteist¨ o = new Rakennusinventointi_2011_kiinteisto(); $Kiinteist¨ o->id = 3245; $Kiinteist¨ o->find(); $Kiinteist¨ o->fetch(); $Kiinteist¨ o->postinumero = 20810; $Kiinteist¨ o->update(); My¨os suorien SQL-komentojen ajaminen dataolioiden kautta onnistuu. Alla olevassa esimerkiss¨a haetaan kaikki j¨arjestelm¨an kyl¨at siten, ett¨a kyl¨an nimen j¨alkeen tulee kyl¨anumero suluissa. 1 2 3 4 5 $query = "SELECT kyl¨ a.nimi || ’ (’ || kyl¨ a.kyl¨ anumero || ’)’ AS nimi FROM rakennusinventointi_2011.kyl¨ a AS kyl¨ a ORDER BY kyl¨ a.nimi"; $Kyl¨ a = new Rakennusinventointi_2011_kyla(); $Kyl¨ a->query($query); Tyypillisesti dataoliot generoidaan etuk¨ateen omiksi tiedostoikseen, mink¨a j¨alkeen niihin voidaan kirjoittaa taulukohtaisia funktioita. Perinn¨an ansiosta dataolioita pystyy laajentamaan helposti. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 13 Sivuston k¨aytt¨oliittym¨a on toteutettu Ext JS:ll¨a, joka on JavaScript-kirjasto interaktiivisten www-ohjelmistojen luomiseen. Ext JS:n ideana on luoda HTML-elementeist¨a, kuten lomakkeen tekstikent¨ast¨a tai napista, erilaisia komponentteja, joita voidaan yhdistell¨a halutulla tavalla erityisiin s¨aili¨otyyppisiin komponentteihin. Valmiina s¨aili¨okomponentteina Ext JS tarjoaa esimerkiksi paneelin ja ikkunan. [24] MIP:n karttaikkunan k¨aytt¨oliittym¨ass¨a k¨aytet¨aa¨ n OpenLayers-nimist¨a JavaScript-kirjastoa. Sen luoma karttan¨akym¨a kapseloidaan Ext JS -yhteensopivaksi komponentiksi GeoExt-kirjaston avulla. Museon informaatioportaalilla ei t¨all¨a hetkell¨a ole omaa karttapalvelinta. Sivuston kartat tulevat Lounaispaikan Mapserver-ohjelmistoa k¨aytt¨av¨alt¨a karttapalvelimelta. 2.4 Alustan tekninen toteutus Museon informaatioportaalin pohjalla olevan LouGIS-moottorin tietokantarakenne esitell¨aa¨ n kuvissa 2.4, 2.5 ja 2.6. Kuvaan 2.4 on koottu tietokantarakenteesta taulut, jotka liittyv¨at k¨aytt¨ajiin, ryhmiin, sessioihin tai k¨aytt¨ooikeuksiin. Sen keskeisin taulu on k¨aytt¨aj¨atietoja sis¨alt¨av¨a user. K¨aytt¨aj¨an kirjautuessa sis¨aa¨ n sivustolle k¨aynnistet¨aa¨ n sessio, jonka tiedot tallentuvat user session-tauluun. K¨aytt¨aj¨aryhm¨at ovat taulussa group. Teknisesti olisi mahdollista, ett¨a k¨aytt¨aj¨a voisi kuulua useampaan ryhm¨aa¨ n (group users) tai ryhm¨a toisiin ryhmiin (group subgroup). K¨ayt¨ann¨oss¨a kuitenkin MIP:ssa on t¨all¨a hetkell¨a rajattu selkeyden vuoksi k¨aytt¨aj¨asysteemi siten, ett¨a k¨aytt¨aj¨a kuuluu tasan yhteen ryhm¨aa¨ n. My¨osk¨aa¨ n ryhmill¨a ei voi olla aliryhmi¨a. MIP:n k¨aytt¨ooikeusj¨arjestelm¨a perustuu ryhmille annettaviin oikeuksiin. Taulu action sis¨alt¨aa¨ erilaisia toimintoja, joihin ryhmill¨a voi olla oikeuksia. Taulussa action group ovat eri ryhm¨at, joihin toiminto voi kuulua. N¨am¨a yhdistet¨aa¨ n taulussa group privilege, johon tallennetaan ryhm¨an, toiminnon ja toimintoryhm¨an tunnisteet. Siihen voidaan tallentaa my¨os oikeuden tarkempi kohde, jos oikeus halutaan rajata LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 14 users_start_sessions user id Serial enabled Boolean firstname Varchar lastname Varchar default_email Varchar password Varchar nickname Varchar phone Varchar mobile Varchar www Varchar image Varchar street1 Varchar street2 Varchar zip Varchar city Varchar session_id user_id lifetime created updated ended ip hostname user_agent session_data NN (PK) (AK1) NN NN NN NN NN user_session Serial Integer Timestamp with time zone Timestamp with time zone Timestamp with time zone Timestamp with time zone Varchar Varchar Varchar Text a_user_belongs_to_groups group_users group_id Integer NN (PFK) user_id Integer NN (PFK) Boolean NN admin action_group identifier Varchar NN (PK) title Varchar description Text groups_have_users users_create_groups id founder_id accepted accepted_by public confirm_join system name description NN (PK) NN (PFK) admins_accept_groups group Serial Integer Timestamp with time zone Integer Boolean Boolean Boolean Varchar Text NN (PK) (AK1) NN (FK) privileges_are_in_action_groups group_privilege id Serial NN group_id Integer NN action Varchar NN action_group Varchar NN target Varchar own_only Boolean (FK) NN NN NN groups_have_privileges groups_are_parents groups_are_childs group_subgroup parent_id Integer NN (PFK) child_id Integer NN (PFK) (PK) (FK) (FK) (FK) privileges_are_for_actions action identifier Varchar NN (PK) title Varchar description Text Kuva 2.4: MIP:n tietokantarakenne k¨aytt¨ajille, ryhmille, sessioille ja k¨aytt¨ooikeuksille. koskemaan esimerkiksi vain jotain tietty¨a entiteetti¨a. Lis¨aksi taulu sis¨alt¨aa¨ totuusarvoisen attribuutin own only, jolla voidaan m¨aa¨ ritt¨aa¨ oikeus koskemaan vain k¨aytt¨aj¨an itse luomia kohteita. T¨all¨a systeemill¨a voitaisiin esimerkiksi luoda jonkin ryhm¨an k¨aytt¨ajille oikeus poistaa itse luomiaan inventointiprojekteja. T¨all¨oin tauluun group privilege lis¨att¨aisiin kyseisen ryhm¨an tunniste, toiminnon tunniste muokkaa, toimintoryhm¨a inventoinnit sek¨a kohde inventointiprojekti. K¨aytt¨ooikeuksien lis¨aksi j¨arjestelm¨all¨a voidaan luoda my¨os rajoituksia k¨aytt¨aj¨aryhmille. Esimerkiksi inventoijien t¨aytyy valita aktiivinen inventointiprojekti ennen kuin he voivat tallentaa uusia inventointeja, joten heill¨a on aktiivisena toiminto pakota valinta kohteella inventointiprojekti. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 15 K¨aytt¨ooikeusj¨arjestelm¨a on toteutettu user-tauluun perustuvassa luokassa Lougis user. Siin¨a on kaksi funktiota, staattinen ja dynaaminen, joita k¨aytet¨aa¨ n sen mukaan, halutaanko tiet¨aa¨ vain sis¨aa¨ n kirjautuneen k¨aytt¨aj¨an oikeus johonkin toimintoon vai k¨aytt¨aa¨ erillist¨a luokasta luotua oliota. Esimerkiksi funktiokutsu Lougis user::isAllowed("delete", "entities") palauttaa totuusarvon sen mukaan, onko nykyisell¨a k¨aytt¨aj¨all¨a oikeus poistaa rivej¨a tietokannasta. Vastaava kutsu teht¨aisiin dynaamisesti Lougis user-tyyppiselle oliolle funktiolla hasPrivilege(). Kuvaan 2.5 on koottu LouGIS-alustaan MIP:ia varten lis¨attyjen ominaisuuksien tietokantarakenne. Niihin kuuluvat lomakemuisti, muutoshistoria sek¨a liitetiedosto- ja kuvalinkitysj¨arjestelm¨at. Kaikkia n¨ait¨akin yhdist¨aa¨ k¨aytt¨aj¨atietoja sis¨alt¨av¨a user-taulu. id user_id date form_type name data form_memory Serial Integer Timestamp with time zone Varchar Varchar Text NN (PK) NN (FK) NN modification_history_data history_id Integer NN (PFK) attribute Varchar value Text a_user_saves_forms id enabled firstname lastname default_email password nickname phone mobile www image street1 street2 zip city user Serial Boolean Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar user_adds_an_attachment id user_id ref_schema ref_table ref_primary_keys ref_row_ids filename path original_filename title description date_added mip_attachment Serial Integer Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar Text Timestamp with time zone NN (PK) NN (FK) NN (PK) (AK1) NN NN NN NN NN a_modification_history_entry_may_have_data id user_id ref_table ref_keys ref_values ref_action source modification_time comments modification_history Serial Integer Varchar Varchar Varchar Varchar Varchar Timestamp with time zone Text NN (PK) (FK) NN NN NN NN a_user_makes_modifications user_adds_a_photo id user_id ref_schema ref_table ref_primary_keys ref_row_ids filename path original_filename title description date_shot date_added mip_photo Serial Integer Varchar Varchar Varchar Varchar Varchar Varchar Varchar Varchar Text Timestamp with time zone Timestamp with time zone NN (PK) NN (FK) Kuva 2.5: MIP:n tietokantarakenne lomakemuistille, muutoshistorialle sek¨a kuville ja liitetiedostoille. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 16 Sivusto sis¨alt¨aa¨ t¨aysin geneerisen toiminnallisuuden, jonka avulla mik¨a tahansa keskener¨ainen lomake voidaan tallentaa ja my¨ohemmin palauttaa. Lomakemuistia k¨aytett¨aess¨a k¨aytt¨aj¨alt¨a kysyt¨aa¨ n lomakkeelle my¨ohemp¨aa¨ tunnistusta helpottava nimi (kuten ”Kiinteist¨o 006-425-0008-0008”), jonka j¨alkeen palvelimelle l¨ahetet¨aa¨ n nimen lis¨aksi lomakkeen ennalta m¨aa¨ r¨atty tyyppi (esim. ”Kiinteist¨o”) ja lomakkeen sis¨alt¨o JSON-koodattuna assosiatiivisena taulukkona. Tiedot palvelin tallentaa form memory-tauluun yhdess¨a tallennuksen tehneen k¨aytt¨aj¨an tunnisteen ja p¨aiv¨am¨aa¨ r¨an kanssa. Toinen geneerinen toiminto on tauluihin modification history ja modification history data perustuva muutoshistoria. Normaalisti muutoshistoria toimii siten, ett¨a ennen muutoksen tekoa luodaan modification historytauluun rivi, johon tallennetaan muutoksen tehneen k¨aytt¨aj¨an tunniste, kohdetaulu, taulun avainsarakkeiden nimet ja niiden arvot sek¨a tehty toiminto (p¨aivitys vai alkuper¨ainen lis¨ays). T¨am¨an j¨alkeen luodaan tauluun modification history data jokaiselle muuttuneelle arvolle rivi, johon tulee sarakkeen nimi ja uusi arvo. Kun vanhoja tietokantoja muunnettiin uuteen j¨arjestelm¨aa¨ n, muutoshistoriaan lis¨attiin viel¨a mahdollisuus merkit¨a muutoksen l¨ahde selv¨akielisen¨a tekstin¨a ja kommentit tapahtumalle. Lis¨aksi lis¨attiin uusi toiminto, muunto. N¨ain muutoshistoriaan pystyttiin tallentamaan esimerkiksi tieto siit¨a, ett¨a kiinteist¨o tunnisteella 37249 on tuotu 11.5.2011 tietokannasta Inventoinnit ennen 1998 ja ett¨a alkuper¨aisen inventoinnin on tehnyt K. K. elokuussa 1996. L¨ahdett¨a voidaan k¨aytt¨aa¨ my¨os kertomaan selv¨akielisen¨a muutoksen tekij¨an nimi, jos h¨anell¨a ei ole tunnuksia j¨arjestelm¨aa¨ n. T¨am¨a oli tilanne, kun tietokannan Inventoinnit 1998–2010 inventointeja tuotiin uuteen j¨arjestelm¨aa¨ n. Kyseisess¨a tietokannassa on jokaisessa inventoinnissa tieto siit¨a, kuka on kohteen tietoja viimeksi muokannut ja koska. P¨aiv¨am¨aa¨ r¨at voitiin muuntaa suoraan uuden j¨arjestelm¨an vastaavaan kentt¨aa¨ n, mutta useimmilla henkil¨oill¨a ei luonnollisesti ollut tunnuksia uuteen j¨arjestelm¨aa¨ n. Niinp¨a heid¨at merkittiin muutoksen l¨ahteiksi. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 17 MIP:n kuva- ja liitetiedostoj¨arjestelmien ideana on se, ett¨a mihin tahansa tietokannan riviin voidaan liitt¨aa¨ miten monta kuvaa tai liitetiedostoa tahansa. Liitetiedostojen tiedot tallennetaan mip attachment-tauluun. Jokaisesta tiedostosta tallennetaan muutoksen tehneen k¨aytt¨aj¨an tunniste, kohdeskeema ja -taulu, avaimet sis¨alt¨avien sarakkeiden nimet ja niiden arvot, tiedoston nykyinen nimi ja sen polku kuvapalvelimella sek¨a alkuper¨ainen tiedostonimi ja lis¨aysp¨aiv¨a. Lis¨aksi tallennetaan tiedoston otsikko ja kuvaus, jos k¨aytt¨aj¨a on sellaiset tiedostoa lis¨atess¨aa¨ n antanut. Kuvien tiedot sis¨alt¨av¨a mip photo-taulu on muuten samanlainen, mutta siihen tallennetaan lis¨aksi kuvan kuvausp¨aiv¨am¨aa¨ r¨a. Kuvien ja liitetiedostojen k¨ayt¨on helpottamiseksi MIP:n dataolioita on laajennettu geneerisill¨a funktioilla getAttachments() ja getImages(). Niiden avulla jokaiseen dataolioon linkitetyt kuvat ja liitetiedostot pystyt¨aa¨ n hakemaan automaattisesti. Portaali tukee monikielisyytt¨a tietokantapohjaisella j¨arjestelm¨all¨a, jonka taulurakennetta esitell¨aa¨ n kuvassa 2.6. J¨arjestelm¨ass¨a tallennetaan kaikki k¨aa¨ nnett¨av¨at tekstit ja niiden kielet ui translate key-tauluun. Vastaavasti tekstien k¨aa¨ nn¨okset tallennetaan ui translate text-tauluun. Siihen voidaan merkit¨a my¨os k¨aa¨ nn¨oksen tekij¨a source-kohtaan. Tauluun language tallennetaan sivustolla k¨ayt¨oss¨a olevat kielet. language id Varchar NN (PK) (AK1) name Varchar NN order_id Integer a_translation_key_is_in_a_language ui_translate_key id Serial NN (PK) site_id Varchar NN (FK) lang_id Varchar NN (FK) text Varchar keys_have_translations a_translation_has_a_language ui_translate_text id Serial NN (PK) key_id Integer NN (FK) translation_lang Varchar NN (FK) translation_text Text source Varchar a_translation_belongs_to_a_site cms_site id Varchar NN (PK) name Varchar url Varchar Kuva 2.6: MIP:n tietokantarakenne kieli- ja k¨aa¨ nn¨ostuelle. LouGIS-alustan CMS- ja moniportaalituen takia sivustolla on j¨aa¨ nteen¨a my¨os cms site-taulu, jota MIP:ss¨a ei k¨aytet¨a. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 2.5 18 Rakennusinventoinnin tietokantarakenne Museon informaatioportaaliin kehitetty uusi rakennusinventointiskeema esitell¨aa¨ n kuvissa 2.7, 2.8 ja 2.9. Kuvaan 2.7 on koottu kuntien, kylien, kiinteist¨ojen ja rakennusten taulut. Kunta ja kyl¨a m¨aa¨ ritt¨av¨at kiinteist¨on sijainnin siten, ett¨a kiinteist¨o kuuluu aina johonkin kyl¨aa¨ n, joka kuuluu johonkin kuntaan. Koska kuntia ja kyli¨a ei sin¨ans¨a inventoida, niist¨a tallennetaan vain kunta- tai kyl¨anumero ja nimi. Kiinteist¨ost¨a sen sijaan pyrit¨aa¨ n tallentamaan kyl¨an ja kiinteist¨otunnuksen lis¨aksi paljon muitakin tietoja, kuten sen sijainti pisteen¨a ja sen omistajatiedot sek¨a kuvailevia tekstej¨a esimerkiksi sen asutushistoriasta, l¨ahiymp¨arist¨ost¨a ja sen pihapiirist¨a. kunta id Serial kuntanumero Character varying(3) nimi Varchar NN (PK) NN NN kunnissa_on_kyliä id kunta_id kylänumero nimi kylä Serial Integer Varchar Varchar NN (PK) NN (FK) NN NN kylissä_on_kiinteistöjä kiinteistöillä_on_rakennuksia kiinteistö id Serial NN (PK) kylä_id Integer NN (FK) kiinteistötunnus Varchar nimi Varchar osoite Varchar postinumero Varchar paikkakunta Varchar aluetyyppi Varchar arvotus Varchar historiallinen_tilatyyppi Varchar lisätiedot Text asutushistoria Text lähiympäristö Text pihapiiri Text omistajatiedot Text perustelut_yhteenveto Text lähteet Text kiinteistön_sijainti geometry rakennus_rakentaja id Serial NN (PK) rakennus_id Integer NN (FK) rakentajan_nimi Varchar rakentajan_ammatti_arvo Bigint rakentajan_tyyppi Varchar rakentajan_laji Varchar lisätiedot Text rakennuksilla_on_rakentajia rakennus id Serial NN (PK) kiinteistö_id Integer (FK) rakennusnumero Varchar rakennustunnus Varchar rakennustyyppi Varchar kerroslukumäärä Varchar rakennusvuosi Varchar muutosvuodet Varchar alkuperäinen_käyttö Varchar nykykäyttö Varchar perustus Varchar runko Varchar vuoraus Varchar ulkoväri Varchar katto Varchar kate Varchar kunto Varchar erityispiirteet Text rakennushistoria Text sisätilakuvaus Text muut_tiedot Text rakennuksen_sijainti geometry Kuva 2.7: MIP:n rakennusinventointien tietokantarakenne kunnalle, kyl¨alle, kiinteist¨olle ja rakennukselle. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 19 Kiinteist¨oll¨a on yksi tai useampia rakennuksia, joista jokaisesta pyrit¨aa¨ n tallentamaan juoksevan rakennusnumeron lis¨aksi sen teknisi¨a tietoja, kuten rakennusvuodet, perustuksen materiaali ja sen kunto. Lis¨aksi voidaan tallentaa kuvailevat tekstit rakennuksen erityispiirteist¨a, rakennushistoriasta ja sen sis¨atilasta. Tiedot rakennusten rakentajista ja suunnittelijoista tallennetaan rakennus rakentaja-tauluun. Kuvaan 2.8 on koottu inventointiprojektiin ja alueeseen liittyv¨at taulut. Inventointiprojekti on kokonaisuus, jonka m¨aa¨ r¨aa¨ mill¨a m¨aa¨ reill¨a rakennusinventointia tehd¨aa¨ n. Siihen kuuluu kokonaisuutta kuvaava nimi ja pidempi kuvaus. Inventointiaika voitaisiin periaatteessa jakaa kahdeksi p¨aiv¨am¨aa¨ r¨a-tyyppiseksi kent¨aksi: inventoinnin alku ja inventoinnin loppu. Kuitenkaan k¨ayt¨ann¨oss¨a n¨ain ei toimita, koska kyseiseen kentt¨aa¨ n kirjataan usein ep¨am¨aa¨ r¨aisi¨a aikav¨alej¨a, kuten ”Kes¨a 2001”. inventointiprojekti id Serial NN (PK) nimi Varchar NN kuvaus Text inventointiaika Varchar toimeksiantaja Varchar tyyppi Varchar inventointiprojektit_liittyvät_alueisiin alue_inventointiprojekti alue_id Integer NN (PFK) inventointiprojekti_id Integer NN (PFK) kiinteistö_inventointiprojekti inventointiprojekti_id Integer kiinteistö_id Integer inventoija Varchar kenttäpäivä Timestamp with time zone NN (PFK) NN (PFK) inventointiprojektit_liittyvät_kiinteistöihin inventointiprojekti_inventoija id Integer NN (PK) inventointiprojekti_id Integer NN (PFK) inventoija_id Integer inventoija_nimi Varchar NN inventoija_arvo Varchar inventointiprojekteilla_on_inventoijia alue_kylä alue_id Integer NN (PFK) alueita_inventoidaan_inventointiprojekteissa kylä_id Integer NN (PFK) alue id Serial NN (PK) nimi Varchar alueet_sisältävät_kyliä maisema Text arvoalue historia Text id Serial NN (PK) nykytila Text alue_id Integer NN (FK) lisätiedot Text nimi Varchar (AK1) lähteet Text aluetyyppi Varchar NN keskipiste geometry arvotus Varchar aluerajaus geometry kuvaus Text keskipiste geometry alueet_sisältävät_arvoalueita aluerajaus geometry Kuva 2.8: MIP:n rakennusinventointien tietokantarakenne inventointiprojektille, alueelle ja arvoalueelle. LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 20 Tyypillisess¨a inventointiprojektissa yksi henkil¨o on tehnyt kaikki kyseisen projektin inventoinnit. Kuitenkin on my¨os inventointiprojekteja, joiden inventointeja on tehnyt useampi henkil¨o. Niinp¨a tiedot yhden projektin inventoijista ker¨at¨aa¨ n erilliseen inventointiprojekti inventoija-tauluun. Koska kaikilla inventoijilla ei ole tunnuksia MIP:iin, inventoijista ei voida kirjata vain heid¨an tunnistettaan, vaan inventoijan nimi tallennetaan aina erikseen. Inventointiprojektit liittyv¨at suoraan kiinteist¨oihin (kiinteist¨ o inventointiprojekti) ja alueisiin (alue inventointiprojekti). Molempien kohdalla tarvitaan k¨ayt¨ann¨oss¨a monesta moneen -relaatiota, koska yht¨a aluetta tai kiinteist¨oa¨ voidaan inventoida monessa inventointiprojektissa, ja vastaavasti yhdess¨a inventointiprojektissa voidaan inventoida monia alueita tai kiinteist¨oj¨a. Kiinteist¨on kohdalla voidaan lis¨aksi kirjata, kuka kyseisen kiinteist¨on on inventoinut ja min¨a p¨aiv¨an¨a. Rakennusinventoinnissa alue on yhden tai useamman kyl¨an (alue kyl¨ a) alueella sijaitseva kokonaisuus, joka on jostain syyst¨a inventoinnin kannalta kiinnostava. Alueesta pyrit¨aa¨ n tallentamaan tekstimuotoisten perustietojen lis¨aksi sen kattama ala (aluerajaus) pistejoukkona, jossa ensimm¨ainen ja viimeinen piste ovat samoja. Jos alan tallennus ei ole jostain syyst¨a mahdollista, voidaan alueesta tallentaa vain sen keskipiste. Aluerajaus ja keskipiste tallennetaan molemmat PostGIS:n erityist¨a geometrioiden tallennukseen tarkoitettua tietotyyppi¨a geometry k¨aytt¨aen. Jokaisen alueen alla voi olla yksi tai useampia arvoalueita. Ne ovat yhdest¨a alueesta rajattuja pienempi¨a kokonaisuuksia, joilla on vaikkapa kulttuurihistoriallista merkityst¨a. Alueen tapaan arvoalueen aluerajaus tai keskipiste voidaan tallentaa geometriana. Kiinteist¨oille, rakennuksille ja arvoalueille voidaan antaa my¨os erilaisia kulttuurihistoriallisia arvoja ja suojelumerkint¨oj¨a. Niiss¨a tarvittavaa taulurakennetta esitell¨aa¨ n kiinteist¨ojen ja arvoalueiden osalta kuvassa 2.9. MIP:ssa erilaisia kulttuurihistoriallisia arvoja on yhteens¨a 15, ja ne on koottu tauluun kulttuurihistoriallinen arvo. Kun kohteelle annetaan erilaisia arvoja, niille voidaan my¨os antaa kuvaus tai perustelu, miksi LUKU 2. TAUSTAA MUSEON INFORMAATIOPORTAALISTA 21 kyseinen arvo kyseiselle kohteelle on annettu. Suojelumerkinn¨oiss¨a on k¨ayt¨oss¨a vastaava j¨arjestelm¨a, jossa tosin perustelun sijaan merkinn¨an kohteen valinnan j¨alkeen kerrotaan, mik¨a merkint¨a kohteessa on ja lis¨aksi annetaan selite kyseiselle merkinn¨alle. Esimerkiksi rakennuksella voi olla asemakaavassa merkint¨a SR, jonka selitteen¨a on ”s¨ailytett¨av¨a rakennus”. kulttuurihistoriallinen_arvo kulttuurihistoriallinen_arvo Varchar NN (PK) selite Varchar NN järjestysnumero Integer ryhmä Varchar arvoalueiden_kulttuurihistoriallisilla_arvoilla_on_nimi arvoalue_kulttuurihistoriallinen_arvo arvoalue_id Integer NN (PFK) kulttuurihistoriallinen_arvo Varchar NN (PFK) kuvaus Text arvoalueilla_on_kulttuurihistoriallisia_arvoja id alue_id nimi aluetyyppi arvotus kuvaus keskipiste aluerajaus arvoalue Serial NN (PK) Integer NN (FK) Varchar (AK1) Varchar NN Varchar Text geometry geometry kiinteistöjen_kulttuurihistoriallisilla_arvoilla_on_nimi kiinteistö_kulttuurihistoriallinen_arvo kiinteistö_id Integer NN (PFK) kulttuurihistoriallinen_arvo Varchar NN (PFK) kuvaus Text kiinteistöillä_on_kulttuurihistoriallisia_arvoja kiinteistö id Serial NN (PK) kylä_id Integer NN (FK) kiinteistötunnus Varchar nimi Varchar osoite Varchar postinumero Varchar paikkakunta Varchar aluetyyppi Varchar arvotus Varchar historiallinen_tilatyyppi Varchar lisätiedot Text asutushistoria Text lähiympäristö Text pihapiiri Text omistajatiedot Text perustelut_yhteenveto Text lähteet Text kiinteistön_sijainti geometry arvoalueilla_on_suojelumerkintöjä kiinteistöillä_on_suojelumerkintöjä arvoalue_suojelumerkintä arvoalue_id Integer NN (PFK) kohde Varchar NN (PFK) merkintä Varchar merkinnän_selite Text arvoalueen_suojelumerkinnällä_on_kohde kiinteistö_suojelumerkintä kiinteistö_id Integer NN (PFK) kohde Varchar NN (PFK) merkintä Varchar merkinnän_selite Text kiinteistön_suojelumerkinnällä_on_kohde suojelumerkintä_kohde kohde Varchar NN (PK) nimi Varchar NN kuvaus Text seqnum Integer Kuva 2.9: MIP:n rakennusinventointien arvoalueiden ja kiinteist¨ojen kulttuurihistoriallisten arvojen ja suojelumerkint¨ojen tietokantarakenne. Vastaava rakenne on k¨ayt¨oss¨a my¨os rakennuksilla. Luku 3 Paikkatietov¨alityspalvelimen suunnittelu T¨ass¨a ty¨oss¨a on siis tavoitteena kehitt¨aa¨ geneerinen paikkatietov¨alityspalvelin, joka helpottaisi paikkatietoaineistojen hallintaa ja k¨asittely¨a projektien sis¨all¨a tarjoamalla yleisk¨aytt¨oisen rajapinnan eri aineistojen soveltamiseen. Tarkoituksena olisi se, ett¨a luotava j¨arjestelm¨a osaisi yhdistell¨a eri l¨ahteist¨a saatavia paikkatietoaineistoja sek¨a tarjota asiakkaalle j¨arkev¨aa¨ tietoa halutusta kohteesta halutussa formaatissa ja koordinaattij¨arjestelm¨ass¨a ilman, ett¨a asiakkaan tarvitsee suoraan tiet¨aa¨ , mist¨a aineistoista tietoa haetaan. Keskeinen kysymys j¨arjestelm¨an kehityksess¨a on luonnollisesti tietojen oikeellisuus. K¨ayt¨ann¨oss¨a ongelmana ei siis ole vain se, miten valitaan oikeat l¨ahteet hakea tietoa, sill¨a lis¨aongelma muodostuu tulosten yhdistelyst¨a. Toinen keskeinen kehityskysymys liittyy geneerisyyteen ja sen yll¨apit¨amiseen. Geneerisyytt¨a ja sen roolia t¨ass¨a ty¨oss¨a kehitett¨av¨ass¨a paikkatietov¨alityspalvelimessa k¨asitell¨aa¨ n tarkemmin seuraavassa kohdassa. Sen j¨alkeen aloitetaan paikkatietov¨alityspalvelimen suunnitteluprosessin esittely analysoimalla palvelimelle asetettuja vaatimuksia ja tavoitteita. Samalla k¨ayd¨aa¨ n l¨api my¨os Museon informaatioportaalin asettamat erityisvaatimukset, ja esitet¨aa¨ n niiden pohjalta kaksi k¨aytt¨otapausta palvelimelle, joista toisen ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 23 pohjalta suunnitellaan ja toteutetaan palvelimen prototyyppi. Lopuksi prototyypin toteutus puretaan vaiheisiin ja analysoidaan, jonka j¨alkeen tehtyjen havaintojen pohjalta aloitetaan varsinaisen paikkatietov¨alityspalvelimen tietokanta- ja luokkarakenteen suunnittelu. 3.1 Geneerisyys Geneerinen ohjelmointi perustuu periaatteeseen, jonka mukaan ohjelmisto voidaan jakaa komponenteiksi, jotka pyrkiv¨at tekem¨aa¨ n mahdollisimman v¨ah¨an oletuksia muista komponenteista, jolloin niiden yhdistely onnistuu mahdollisimman joustavasti [25]. Geneerisyys sin¨ans¨a on termin¨a jossain m¨aa¨ rin vaikeasti m¨aa¨ ritelt¨av¨a, koska moni m¨aa¨ ritys riippuu k¨ayt¨oss¨a olevasta ohjelmointikielest¨a. Usein l¨ahdet¨aa¨ n liikkeelle esimerkiksi C++:n templaattij¨arjestelm¨an kaltaisesta tietorakenteiden parametrisoinnista tyypeill¨a [26], mik¨a ei oikein sovi t¨ah¨an projektiin, koska palvelin tullaan toteuttamaan luonteeltaan dynaamisella PHP-kielell¨a [27]. Er¨as yleisesti hyv¨aksytty m¨aa¨ ritelm¨a geneeriselle ohjelmoinnille on niin sanottu Musser-Stepanovin m¨aa¨ ritelm¨a. Sen mukaan geneerisen ohjelmoinnin ideana on aloittaa k¨ayt¨ann¨ollisest¨a ja k¨aytt¨okelpoisesta algoritmista, jota aletaan abstrahoida. Tavoitteena on l¨oyt¨aa¨ algoritmien ja tietorakenteiden konsepti, niiden abstrakti m¨aa¨ ritelm¨a. K¨ayt¨oss¨a olevien algoritmien tulisi olla t¨aysin riippumattomia datasta, jota ne k¨asittelev¨at. [28] T¨ast¨a n¨ak¨okulmasta palvelimesta voidaan kehitt¨aa¨ ensin prototyyppi, joka tuottaa etuk¨ateen p¨aa¨ tetyist¨a aineistoista aina samantyyppist¨a sis¨alt¨oa¨ . Sen pohjalta voidaan alkaa etsi¨a yleisemp¨aa¨ versiota, ty¨okalua, jossa erilaisia paikkatietoaineistoja p¨aa¨ sisi k¨asittelem¨aa¨ n yhten¨aisen rajapinnan kautta. Rajapinnan pit¨aisi olla sellainen, ett¨a uusien, hyvinkin erilaisten aineistotyyppien lis¨aa¨ minen j¨arjestelm¨aa¨ n onnistuu mahdollisimman yksinkertaisesti ja vapaasti. Aineistoille teht¨avien operaatioiden osalta geneerisyys tarkoittaa sit¨a, ett¨a yksitt¨aisen aineiston tyypin tai operaatioiden keskin¨aisen suoritusj¨arjestyksen ei pit¨aisi vaikuttaa ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 24 palvelimen toimintaan. N¨ain eri operaatioita suorittavat luokat voisivat toimia vapaahkosti v¨alitt¨am¨att¨a toisistaan. T¨all¨oin luokkia m¨aa¨ ritt¨av¨ast¨a rajapinnasta tulee v¨akisinkin hyvin yksinkertainen. J¨arjestelm¨an arkkitehtuurin kannalta geneerisyydell¨a pyrit¨aa¨ n siihen, ett¨a se on helposti yll¨apidett¨av¨a ja laajennettava sek¨a siihen, ett¨a sen komponentit ovat uudelleenk¨aytett¨avi¨a [29]. K¨ayt¨ann¨oss¨a t¨allaisen tietoa v¨alitt¨av¨an ja k¨asittelev¨an palvelimen tapauksessa geneerisyyden merkitys korostuu siis ennen muuta siin¨a, ett¨a datan k¨asittelyst¨a vastaavien luokkien pit¨aa¨ olla helposti muokattavia, ja niit¨a t¨aytyy pysty¨a ongelmitta korvaamaan toisilla. Toisin sanoen tiedon k¨asittelyprosessista pit¨aa¨ tehd¨a sellainen, ett¨a sen eri vaiheiden muuttaminen onnistuu yksinkertaisesti. 3.2 Palvelimen kehityksen tavoitteet Paikkatietov¨alityspalvelimen tavoitteena on tarjota ohjelmistoille geneerinen paikkatietosovelluskerros, jonka avulla voitaisiin esimerkiksi yhdist¨aa¨ paikallisia entiteettej¨a kolmannen osapuolen paikkatietoaineistoihin ilman, ett¨a k¨aytt¨aj¨an t¨aytyy t¨asm¨alleen tiet¨aa¨ , mist¨a paikkatietoaineistoista tietoa haetaan. K¨ayt¨ann¨oss¨a t¨am¨a tarkoittaa sit¨a, ett¨a palvelin kykenee sille annetun sijainti- ja siihen liittyv¨an metatiedon perusteella valitsemaan tuntemistaan aineistoista kyseiseen tapaukseen soveltuvat, ja osaa hakea niist¨a tietoa. MIP:ss¨a ensisijainen k¨aytt¨okohde palvelimelle olisi uusien kohteiden lis¨aa¨ misen helpottaminen. Esimerkiksi kiinteist¨ojen ja rakennusten muokkauksessa k¨aytett¨aviin lomakkeisiin on toivottu toimintoa, jonka avulla k¨aytt¨aj¨a voisi hakea Maanmittauslaitoksen rajapintapalveluista tietoa kohteesta klikkaamalla sit¨a kartalta. Palvelimelle teht¨aisiin esimerkiksi kysely ”Kerro mit¨a pystyt tarjoamaan tietokannan entiteetille kiinteist¨o pisteess¨a 226576, 6737422 (EPSG:3067) JSON-formaatissa”, mink¨a j¨alkeen palvelin osaisi tuntemistaan aineistoista hakea kiinteist¨otietoja, yhdist¨aa¨ niit¨a j¨arkeviksi kokonaisuuksiksi, ja lopulta palauttaa lopputuloksen k¨aytt¨aj¨alle JSON-enkoodattuna assosiatiivisena taulukkona. ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 25 Toinen MIP:iin toivottu toiminnallisuus on palvelusta saatavien tietojen n¨aytt¨aminen k¨aytt¨aj¨alle sellaisenaan. T¨allaiselle ominaisuudelle olisi k¨aytt¨oa¨ esimerkiksi uusien rakennusten lis¨ayksess¨a, sill¨a vaikka Maanmittauslaitoksen tarjoamat rakennustiedot ovat erinomainen l¨ahde rakennustietojen sy¨ott¨amiseen, ne ovat usein ep¨at¨asm¨allisi¨a ja jossain m¨aa¨ rin ep¨aluotettavia. Niinp¨a lomakkeen kentti¨a ei voida automaattisesti t¨aytt¨aa¨ , vaan palvelun tarjoamat tiedot pit¨aisi tarjota k¨aytt¨aj¨alle helposti luettavassa formaatissa. N¨aiden vaatimusten perusteella palvelimelle voidaan tehd¨a kaksi k¨aytt¨otapausta. Ensimm¨ainen kattaa palvelimen l¨oyt¨amien tietojen n¨aytt¨amisen k¨aytt¨aj¨alle sellaisenaan. K¨aytt¨otapaus 1: Palauta HTML-taulukkona rakennuksiin liittyvi¨a tietoja annetusta pisteest¨a. 1. Haetaan rakennustietoja sis¨alt¨av¨at aineistot. 2. Muunnetaan annettu piste aineiston asetuksiin m¨aa¨ ritetyn kokoiseksi neli¨on muotoiseksi aluerajaukseksi. 3. Haetaan tuloksia aineistoista aluerajauksilla. 4. Ker¨at¨aa¨ n tulokset yhteen ja muutetaan ne yhdenmukaiseen formaattiin. 5. K¨asitell¨aa¨ n tuloksista luettavampia. 6. Palautetaan tulokset k¨aytt¨aj¨alle HTML:n taulukkona. K¨ayt¨ann¨oss¨a ongelmia voi tuottaa viides kohta, jossa palveluista saatava mahdollisesti monitasoinen data pit¨aa¨ jotenkin ”litist¨aa¨ ” mahdollisimman selke¨aksi, avain-arvo-pareista koostuvaksi, mielell¨aa¨ n yksiulotteiseksi taulukoksi. Toinen toiminnallisuuskuvaus on ensimm¨aist¨a jonkin verran monimutkaisempi, koska siin¨a yhdistell¨aa¨ n eri l¨ahteist¨a saatavia tuloksia. Kuvaus kattaa lomakkeiden automaattisen t¨aydent¨amisen. K¨aytt¨otapaus 2: Palauta JSON-koodattuna taulukkona annettuun pisteeseen liittyvi¨a tietoja Museon informaatioportaalin kiinteist¨olomakkeelle sovitettuna. 1. Haetaan aineistot, jotka tarjoavat kiinteist¨otietoja. 2. Muunnetaan annettu piste aineiston asetuksiin m¨aa¨ ritetyn kokoiseksi neli¨on muotoiseksi aluerajaukseksi. ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 26 3. Haetaan tuloksia aineistoista aluerajauksilla. 4. Muunnetaan aineistoista saatavat tiedot j¨arjestelm¨an sis¨aiseen formaattiin. 5. Yhdistet¨aa¨ n eri aineistoista kiinteist¨okohtaisia kokonaisuuksia. 6. Haetaan yhdistellyist¨a tuloksista kent¨at, joille l¨oytyy vastaava kohta kiinteist¨olomakkeesta, nimet¨aa¨ n ja j¨alkik¨asitell¨aa¨ n kukin kentt¨a lomakkeen vaatimusten mukaisesti. 7. Palautetaan tulokset JSON-koodattuna. Ensimm¨aisen kuvauksen tapaan tulosten j¨alkik¨asittely muodostanee ongelmia t¨ass¨akin kohtaa. Kuitenkin suurempi kysymys liittyy tulosten yhdistelyyn. Palvelimen toteutuksessa ei riit¨a viel¨a se, ett¨a se osaa saamiensa parametrien perusteella valita oikeat aineistot, vaan lis¨aksi siihen t¨aytyy kehitt¨aa¨ logiikka, jonka avulla se osaa muodostaa eri l¨ahteist¨a saaduista tuloksista j¨arkevi¨a kokonaisuuksia. Yksinkertaisesti t¨am¨a onnistuisi tallentamalla palvelimelle aineistojen parametrien lis¨aksi tieto siit¨a, mist¨a kentist¨a eri l¨ahteiden tuloksia voi liitt¨aa¨ toisiinsa. 3.3 Prototyypin suunnittelu Paikkatietov¨alityspalvelimesta teht¨av¨aksi prototyypiksi valittiin kohdan 3.1 toiminnallisuuskuvauksen 2 mukainen Museon informaatioportaaliin toivottu toiminto kiinteist¨olomakkeen automaattisesta t¨aydent¨amisest¨a. Prototyypin avulla oli tavoitteena tutkia muutaman aineiston avulla, miten saatuja tuloksia t¨aytyy k¨asitell¨a, jotta niist¨a saadaan halutun kaltaisia. Prototyypin ty¨ost¨aminen aloitettiin tutustumalla Maanmittauslaitoksen viranomaisk¨aytt¨oo¨ n tarjoamiin rajapintapalveluihin [30]. Niist¨a kiinnostaviksi osoittautuivat tietoa kiinteist¨ojen rajoista, nimist¨a ja kiinteist¨otunnuksista tarjoava Kiinteist¨otietojen kyselypalvelu ja erilaisia rakennustietoja sis¨alt¨av¨a Rakennustietojen kyselypalvelu. Kiinteist¨otietojen kyselypalvelun avulla selvitett¨aisiin, mit¨a kiinteist¨oa¨ k¨aytt¨aj¨a on tarkoittanut karttaa klikatessaan, jonka j¨alkeen Rakennustietojen kyselypalvelusta haettaisiin kyseisen kiinteist¨on ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 27 p¨aa¨ rakennuksen tiedoista kiinteist¨olle postinumero, osoite ja omistajatiedot sek¨a kiinteist¨on sijainti1 . Maanmittauslaitos tarjoaa niin kiinteist¨ojen kuin rakennustenkin kattamat alat monikulmioina. T¨aten tietoja haettaessa voidaan olla melko varmoja siit¨a, ett¨a k¨aytt¨aj¨a on klikannut kartalta oikeaa kiinteist¨oa¨ , joten pisteest¨a luotava karttarajaus voidaan asettaa melko pieneksi. Sen sijaan rakennustietoja haettaessa halutaan l¨oyt¨aa¨ juurikin oikean kiinteist¨on p¨aa¨ rakennus, joten aluerajaus t¨aytyy asettaa huomattavasti suuremmaksi. Molemmat palvelut implementoivat OGC:n OpenGIS Web Feature Service (WFS) -protokollan version 1.1.0. WFS:n ideana on tarjota paikkatietoaineistoja GML-muodossa. Kyselyt WFS-palveluihin tehd¨aa¨ n HTTP-protokollaa k¨aytt¨aen joko URL-parametreina tai XML-muotoisina kyselyin¨a. Eri kyselytyyppeihin kuuluvat palvelun ominaisuustietokysely GetCapabilities, kohdetyyppien XML-skeemakuvauksen tarjoava DescribeFeatureType sek¨a varsinaisia paikkatietoelementtej¨a parametrien perusteella tarjoava GetFeature. [11] Periaatteessa GetFeature-kyselyss¨a tarvittavat parametrit olisi mahdollista muodostaa ajon aikana muiden kyselyiden avulla, mutta viiveen minimoimiseksi prototyyppiin kannattanee tallentaa suurin osa parametreista suoraan. Kiinteist¨otietojen kyselypalveluun teht¨avien WFS-kyselyjen parametreja k¨ayd¨aa¨ n l¨api taulukossa 3.1. Parametreista ainoastaan kyselyn koordinaattirajaus, BBOX, on pakko m¨aa¨ ritt¨aa¨ ajon aikana, koska se t¨aytyy muodostaa k¨aytt¨aj¨alt¨a tulevasta pisteest¨a. Muut parametrit voidaan asettaa kiinte¨asti. 3.4 Prototyypin toteutus Prototyypin toteutus p¨aa¨ tettiin pit¨aa¨ mahdollisimman yksinkertaisena ja suoraviivaisena, eik¨a siit¨a ollut tavoitteena kehitt¨aa¨ sin¨ans¨a geneerist¨a. Geneerisyys oli kuitenkin toteutusratkaisuja teht¨aess¨a keskeisess¨a osassa, sill¨a prototyypiss¨a teht¨av¨at ratkaisut haluttiin kui1 Rakennusinventoinnissa kiinteist¨on sijainniksi m¨aa¨ ritet¨aa¨ n sen p¨aa¨ rakennuksen sijainti. ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 28 Taulukko 3.1: Kiinteist¨otietojen kyselypalveluun teht¨avien WFS-kyselyjen parametreja selityksineen. Kyselyt tehd¨aa¨ n lis¨aa¨ m¨all¨a palvelun WFS-osoitteen j¨alkeen parametreja muodossa ?parametri1=arvo1¶metri2=arvo2 jne. Rakennustietojen kyselypalveluun teht¨avien kyselyjen parametrit ja niiden arvot ovat suurimmalta osalta samat, ainoastaan parametreilla NAMESPACE ja TYPENAME k¨aytet¨aa¨ n eri arvoja. Parametri Arvo SERVICE WFS K¨aytetty protokolla VERSION 1.1.0 Protokollan versio REQUEST GetFeature Kyselyn tyyppi NAMESPACE xmlns(ktjkiiwfs=http://xml.nls.fi/ktjkiiwfs/2010/02) Kyselyn XML-nimiavaruus TYPENAME ktjkiiwfs:RekisteriyksikonTietoja Kohdetyypin nimi, eli mit¨a tietoja palvelulta halutaan PROPERTYNAME ktjkiiwfs:kiinteistotunnus,ktjkiiwfs:nimi Tiedot, jotka palvelulta halutaan BBOX esim. 240678,6710891.5,240682,6710895.5,EPSG:3067 Koordinaattirajaus laatikkona muodossa xMax,yMax,xMin,yMin,koordinaattij¨arjestelm¨a SRSNAME EPSG:3067 Tuloksilta haluttu koordinaattij¨arjestelm¨a MAXFEATURES esim. 3 Suurin sallittu tulosten m¨aa¨ r¨a RESULTTYPE results Tulosten tyyppi. Vaihtoehtoisella arvolla ”hits” palauttaisi tulosten m¨aa¨ r¨an tenkin pit¨aa¨ sellaisina, ett¨a ne olisi mahdollista yleist¨aa¨ geneerisemmiksi. Yhden aineiston sis¨alt¨oo¨ n tai rakenteeseen perustuvia ratkaisuja piti siis v¨altt¨aa¨ . Toteutuksen idea on sin¨ans¨a yksinkertainen: haetaan kiinteist¨o- ja rakennustietoja sopivalla aluerajauksella, jonka j¨alkeen k¨ayd¨aa¨ n l¨api tuloksena saadut kiinteist¨ot, joihin yhdistet¨aa¨ n rakennusten joukosta mahdollisesti l¨oydettyjen p¨aa¨ rakennusten tiedot. Tuloksista haetaan sopivat kent¨at, jotka sovitetaan kiinteist¨olomakkeen vastaaviin. Sovelluksen toimintalogiikkaa esitell¨aa¨ n kuvassa 3.1. Prototyypin suoritus alkaa, kun siihen sy¨otet¨aa¨ n pisteen x- ja y-koordinaatit EUREFFIN-koordinaatistossa. Koordinaattien pohjalta muodostetaan 25 m2 kokoinen neli¨onmuotoinen karttarajaus, jonka keskikohta annettu piste on. Yhdess¨a t¨am¨an karttarajauksen ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 29 1 2 Käyttöliittymä x- ja y-koordinaatit kiinteistöjen tiedot rakennustiedoilla laajennettuna ja lomakkeelle sovitettuna assosiatiivisena taulukkona Paikkatietovälityspalvelimen prototyyppi aluerajaus 25 m2, keskipisteenä (x,y) alueella olevien kiinteistöjen nimet ja kiinteistötunnukset Kiinteistötietojen kyselypalvelu (WFS) aluerajaus 250 m2, keskipisteenä (x,y) alueella olevien rakennusten tiedot Rakennustietojen kyselypalvelu (WFS) Kuva 3.1: Paikkatietov¨alityspalvelimen prototyypin toimintalogiikka. ja prototyyppiin kiinte¨asti tallennettujen parametrien kanssa muodostetaan URL, jonka avulla tehd¨aa¨ n WFS-kysely Kiinteist¨otietojen kyselypalveluun. Kyselyn tuloksena saatu tekstimuotoinen XML-data muunnetaan PHP:n SimpleXML-olioksi. Sama operaatio toistetaan Rakennustietojen kyselypalvelun kanssa, tosin k¨ayt¨oss¨a olevan karttarajauksen koko kymmenkertaistetaan 250 neli¨ometriin. Suuri kokoero selittyy osittain sill¨a, ett¨a kiinteist¨on ala on yleens¨a huomattavasti rakennuksen alaa suurempi, joten pisteen voidaan melko varmasti olettaa olevan oikean kiinteist¨on alueella. Suurin syy erilaisiin karttarajauksiin tulee kuitenkin siit¨a, miten prototyyppi k¨asittelee palveluista saamiaan tuloksia. WFS-kyselyjen valmistuttua aloitetaan Kiinteist¨otietojen kyselypalvelujen tulosten l¨apik¨aynti. Yksi kerrallaan kunkin kiinteist¨on tiedot haetaan tulosjoukosta ja muunnetaan ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 30 PHP:n assosiatiiviseksi taulukoksi. T¨am¨an j¨alkeen tietoja koetetaan t¨aydent¨aa¨ etsim¨all¨a kiinteist¨on p¨aa¨ rakennusta rakennushaun tuloksista. K¨ayt¨ann¨oss¨a prototyyppi etsii siis rakennuksista XML:n XPath-haulla sellaista, jonka rakennusnumero on 001, ja jonka kiinteist¨otunnus t¨asm¨aa¨ k¨asittelyss¨a olevan kiinteist¨on kanssa. Jos oikea rakennus l¨oytyy, sen tiedot muunnetaan assosiatiiviseksi taulukoksi, joka yhdistet¨aa¨ n kiinteist¨otietoihin. Koska eri palvelut k¨aytt¨av¨at eri XML-nimiavaruuksia, mahdolliset samannimiset kent¨at eiv¨at tuota ongelmatilanteita. Lopputuloksena saadusta kiinteist¨on ja mahdollisesti sen p¨aa¨ rakennuksen tiedot sis¨alt¨av¨ast¨a taulukosta k¨asitell¨aa¨ n Museon informaatioportaalin kiinteist¨olomakkeelle sopiva. Kiinteist¨otiedoista haettavia kentti¨a ovat kiinteist¨otunnus ja kiinteist¨on nimi; rakennustiedoista otetaan postinumero, l¨ahiosoite, omistajatiedot ja kiinteist¨on sijainti. Osa kentist¨a k¨asitell¨aa¨ n MIP:n k¨ayt¨ant¨ojen mukaisiksi, esimerkiksi kiinteist¨otunnukseen lis¨at¨aa¨ n v¨aliviivat ja suuraakkosilla kirjoitettu kiinteist¨on nimi muunnetaan ensimm¨aist¨a kirjainta lukuun ottamatta pienell¨a kirjoitetuksi. Lopulliseen muotoonsa k¨asitellyt tiedot ker¨at¨aa¨ n tulostaulukkoon. Kun kaikki kiinteist¨ot on saatu k¨asitelty¨a, tulostaulukko palautetaan asiakkaalle JSON-koodattuna. 3.5 Kohti geneerisyytt¨a – prototyypin analyysi Edellisiss¨a kohdissa kehitetty prototyyppi ei siis sin¨ans¨a ole mill¨aa¨ n tasolla geneerinen ty¨okalu, vaan ennemminkin yksinkertainen skripti, joka kykenee suorittamaan yksinkertaisen ennalta m¨aa¨ ritetyn operaation ennalta m¨aa¨ ritetyille aineistoille. Kuitenkin prototyyppi havainnollistaa palvelimen toimintaa ja toisaalta tarjoaa selke¨an testitapauksen. Varsinaisen paikkatietov¨alityspalvelimen pit¨aisi kyet¨a tuottamaan t¨asm¨alleen samanlaisia aineistoja geneeristen ty¨okalujen avulla. Prototyypist¨a havainnollistaa, millaisia vaiheita palvelimen toiminnassa voisi olla. Toiminnan kulku voidaan jakaa nelj¨aa¨ n vaiheeseen: 1. Valitaan ja alustetaan aineistot. ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 31 2. Tehd¨aa¨ n haut aineistoihin, ja muunnetaan saadut tulokset j¨arjestelm¨an sis¨aiseen formaattiin ja tuloksilta haluttuun koordinaattij¨arjestelm¨aa¨ n. 3. Lajitellaan ja yhdistet¨aa¨ n saadut tulokset ja tuotetaan uusi, yhten¨ainen tulosjoukko. 4. J¨alkik¨asitell¨aa¨ n tulokset ja palautetaan ne asiakkaan haluamassa formaatissa. Ensimm¨aist¨a vaihetta varten palvelimeen tarvitaan j¨arjestelm¨a, jonka avulla se osaa valita sopivat aineistot k¨aytt¨aj¨an antamien tietojen perusteella. Aineistojen valinnan j¨alkeen palvelimen t¨aytyy kyet¨a luomaan kunkin aineiston tyyppi¨a vastaavat oliot ja alustamaan ne oikeilla parametreilla. Se, mit¨a koordinaattien muuntamisen kaltaisia operaatioita parametreille t¨aytyy tehd¨a, jotta varsinainen aineistojen haku onnistuu, on selke¨asti aineistotyypin mukaisen luokan teht¨avi¨a. My¨os toiseen vaiheeseen kuuluva hakujen tekeminen on aineistotyypin mukainen teht¨av¨a. Sen sijaan j¨arjestelm¨an sis¨aisesti k¨aytt¨am¨a formaatti on kaikkia aineistoluokkia koskeva kysymys. Prototyypiss¨a k¨aytetty PHP:n assosiatiivinen taulukko osoittautui hankalaksi, koska sill¨a ei voi luontevasti esitt¨aa¨ XML:n tietokokonaisuuksia, joissa yhdell¨a elementill¨a on monta samannimist¨a lapsielementti¨a. Koska XML vaikuttaa olevan yleisin k¨ayt¨oss¨a oleva formaatti, t¨ass¨akin palvelimessa kannattanee k¨aytt¨aa¨ sis¨aisen¨a formaattina XML:¨aa¨ . T¨all¨oin pystyt¨aisiin tarvittaessa esimerkiksi palauttamaan tiedot alkuper¨aiseen formaattiin ja vaikkapa tallentamaan levylle siten, ett¨a tietoa ei varmasti h¨avi¨a miss¨aa¨ n kohtaa. XML:n k¨aytt¨amisest¨a olisi hy¨oty¨a my¨os kolmannessa vaiheessa. Aineistoja lajiteltaessa niihin mahdollisesti teht¨av¨at haut voitaisiin tehd¨a XML:n XPath-kielen avulla. Samoin aineistojen v¨aliset linkit voitaisiin tallentaa tavalla, joka ainakin l¨aheisesti muistuttaisi XML:n XPath-kielt¨a. Tulosten j¨alkik¨asittely tulee v¨akisinkin olemaan palvelimen v¨ahiten geneerinen osio, sill¨a tyypillisesti j¨alkik¨asittelij¨alt¨a haluttu toiminnallisuus riippuu t¨aysin l¨ahdeaineistosta ja halutusta lopputuloksesta. J¨alkik¨asittelij¨oist¨a pit¨anee koostaa staattinen luokka, johon tulee kokoelma kentt¨akohtaisia ty¨okaluja, joita kutsutaan tarpeen mukaan, kun aineisto muunnetaan asiakkaan vaatimalle rakenteelle. J¨alkik¨asittelyn asetuksia varten tarvitaan oma tietokantataulu. ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 3.6 32 Tietokanta- ja luokkarakenteen suunnittelua Geneeriseen paikkatietov¨alityspalvelimeen pit¨aa¨ voida tallentaa erilaisten aineistojen parametreja siten, ett¨a se osaa luoda niihin merkityn tyypin perusteella oikeanlaisen luokan hoitamaan aineiston k¨asittely¨a. Koska erityyppisill¨a aineistoilla voi olla t¨aysin erilaisia parametreja, niille annettavat asetukset t¨aytyy tallentaa omaan tietokantatauluunsa. T¨all¨oin varsinaiseen aineistot sis¨alt¨av¨aa¨ n tauluun tulisi vain aineiston yksil¨oiv¨a tunniste sek¨a sen nimi ja tyyppi. N¨aiden lis¨aksi tarvitaan mekanismi, jonka avulla palvelin osaa valita oikeat aineistot k¨aytt¨aj¨an antamien tietojen perusteella. Yksinkertaisin tapa t¨ah¨an on luoda omaksi taulukseen asiasanalista, jossa erilaiset hakusanat linkitet¨aa¨ n aineistoihin. Aineistojen valinnan j¨alkeen palvelimen pit¨aa¨ luoda niiden tyypin mukaiset oliot. Olioiden luonti onnistuu Tehdas-nimist¨a (Factory) suunnittelumallia hy¨odynt¨am¨all¨a. Mallin ideana on luoda erityinen tehdasluokka, joka osaa sille annettujen parametrien perusteella luoda oikeanlaisia olioita [29]. Aineistotehtaaseen voitaisiin eriytt¨aa¨ kaikki logiikka, joka tarvitaan, kun tietokannasta l¨oytyvien tietojen perusteella haluttaisiin luoda aineiston tyyppi¨a vastaava luokka, ja alustaa se sopivilla parametreilla. Aineistojen yhten¨aist¨a esitt¨amist¨a varten palvelimeen tarvitaan rajapinta, jonka erityyppiset aineistot toteuttavat. Selke¨asti jokaiselle erilaiselle aineistotyypille tarvitaan oma, t¨am¨an rajapinnan toteuttava luokka. Lis¨aksi tarvitaan yksi yleinen aineistoluokka, jota palvelin voi k¨aytt¨aa¨ muodostaessaan uusia aineistoja muualta haetuista. Aineistoluokkien toteutus onnistuu Edustaja-nimisen (Proxy) suunnittelumallin avulla. Mallissa on ideana k¨aytt¨aa¨ erityisi¨a edustajaluokkia, jotka hoitavat esimerkiksi verkkoliikenteen k¨asittely¨a l¨apin¨akyv¨asti. Sis¨aisesti edustajaluokat k¨asittelev¨at edustamansa luokan olioita, ja kutsuvat esimerkiksi sen funktioita erilaisissa operaatioissa [31]. Edustajan toimintaideaa ja k¨aytt¨oa¨ t¨ass¨a tapauksessa esitell¨aa¨ n kuvassa 3.2. Palvelimen halutaan toimivan oikein my¨os silloin, kun aineiston l¨ahde ei tue asiakkaan haluamaa koordinaattij¨arjestelm¨aa¨ . K¨ayt¨ann¨oss¨a siis palvelimen pit¨aa¨ kyet¨a tekem¨aa¨ n asiakkaalle l¨apin¨akyv¨asti muunnoksia eri koordinaattij¨arjestelmien v¨alill¨a. Muunnosta ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 33 Asiakas «interface» Aineisto +haeTulokset() Aineisto +haeTulokset() WMSAineisto WFSAineisto -aineisto : Aineisto -aineisto : Aineisto +haeTulokset() +haeTulokset() Kuva 3.2: Periaatekuva edustaja-suunnittelumallin k¨ayt¨ost¨a aineistoluokissa. T¨ass¨a mallissa luokat WMSAineisto ja WFSAineisto ovat edustajia, jotka sis¨aisess¨a toteutuksessaan hakevat tietoa protokollansa vaatimalla tavalla ja alustavat sis¨alt¨am¨ans¨a Aineisto-luokan olion saadulla datalla. Asiakkaan kutsuessa haeTulokset()-funktiota edustajaluokat kutsuvat Aineisto-luokan toteutusta. voidaan tarvita kahdessa kohdassa: palvelimen tehdess¨a kyselyj¨a aineistoihin k¨aytt¨aj¨an antamien koordinaattien perusteella sek¨a tuloksia vastaanotettaessa. N¨aiden molempien muunnosten tekeminen on selke¨asti edustajaluokan teht¨av¨a, sill¨a suunnittelumallin idean mukaisesti kyseisen luokan olio on ainoa j¨arjestelm¨an kohta, joka tiet¨aa¨ mit¨aa¨ n aineiston l¨ahteest¨a. J¨arjestelm¨an sis¨all¨a toimittaessa koordinaatit olisi hyv¨a pit¨aa¨ aina yhdenmukaisessa j¨arjestelm¨ass¨a, jotta ep¨am¨aa¨ r¨aisi¨a tiloja ei voisi synty¨a esimerkiksi eri aineistoja yhdistett¨aess¨a. T¨aten luokan kannattaa tehd¨a muunnos v¨alitt¨om¨asti tulosten vastaanottamisen j¨alkeen. Varsinaisessa koordinaattimuunnoksessa tarvittavat ty¨okalut voidaan erist¨aa¨ omaan luokkaansa, joka k¨aytt¨aa¨ esimerkiksi PostGIS:iin kuuluvia muunnosfunktioita. XML:n k¨aytt¨aminen j¨arjestelm¨an sis¨aisen¨a formaattina tekisi my¨os koordinaattidatan etsimisest¨a tuloksista helppoa, sill¨a koordinaatteja sis¨alt¨av¨at kohdat voitaisiin hakea yksinkertaisilla XPath-hauilla. Vastaavasti aineistojen yhdist¨aminen yhten¨aisen tulosjoukon luomiseksi onnistuisi niin ik¨aa¨ n XPath-hakujen avulla. Kahden aineiston v¨alinen yhteys voitaisiin toteuttaa yksinkertaisesti tallentamalla tietokantaan kahtena XPathina tieto siit¨a, mitk¨a kent¨at aineistoja yhdist¨av¨at. Tulosten j¨alkik¨asittelyss¨a teht¨av¨at operaatiot riippuvat luonnollisesti t¨aysin siit¨a, mihin k¨aytt¨oo¨ n tuloksia halutaan. Koska j¨alkik¨asittelyss¨a teht¨av¨at operaatiot voivat vaihdella hyvinkin paljon, j¨alkik¨asittelij¨amoduulit tulevat olemaan j¨arjestelm¨an n¨ak¨okulmasta yk- ¨ LUKU 3. PAIKKATIETOVALITYSPALVELIMEN SUUNNITTELU 34 sinkertaisia luokkia, jotka ainoana julkisena operaationaan palauttavat vastaanottamansa tulosjoukon k¨asiteltyn¨a. Esimerkiksi MIP:n kiinteist¨olomakkeen automaattisessa t¨aydent¨amisess¨a on tarkkaan ottaen kyse tulosten muuntamisesta rakennusinventointien tietokannan taulun kiinteist¨ o kenttien mukaisiksi. T¨at¨a toimintoa varten tarvitaan oma tietokantataulu, johon tallennetaan tieto siit¨a, mik¨a tulosaineiston kentt¨a vastaa mit¨akin paikallisen tietokannan kohtaa. Kenttien nimien sovittamisen lis¨aksi operaatiota suorittavan j¨alkik¨asittelyluokan t¨aytyy osata k¨asitell¨a my¨os niiden arvoja, sill¨a esimerkiksi kiinteist¨otunnukseen pit¨aa¨ lis¨at¨a v¨aliviivat. N¨am¨a toiminnot voidaan koostaa yhteen luokkaan funktiokokoelmaksi, ja kunkin kent¨an kohdalla kutsuttavan funktion nimi voidaan tallentaa kenttien nimi¨a linkkaavaan tauluun omaksi kent¨akseen. J¨alkik¨asittelyn j¨alkeen palvelimen t¨aytyy viel¨a muuntaa data asiakkaan haluamaan formaattiin ennen sen palauttamista. T¨ass¨a vaiheessa suoritetaan prototyypin XML-olioita PHP:n assosiatiiviseksi taulukoksi muuntavan funktion kaltaisia yksinkertaisia operaatioita, jotka nekin kannattaa erist¨aa¨ omiin luokkiinsa. Kaikkia palvelimen toimintoja yhdist¨aa¨ liukuhihnamainen ajattelu, jossa tietoa etenee dynaamisesti valittavalta moduulilta toiselle. K¨ayt¨ann¨oss¨a eri moduulit voivat toimia itsen¨aisesti v¨alitt¨am¨att¨a siit¨a, mit¨a aikaisemmat aineistojoukon k¨asittelij¨at ovat sille tehneet, joten niiden ei tarvitse olla tietoisia toisistaan. Moduulien ulkopuolisen palvelintoteutuksen teht¨av¨aksi j¨aa¨ siis k¨ayt¨ann¨oss¨a oikeiden moduulien ja niiden asetusten sek¨a suoritusj¨arjestyksen alustus kulloinkin haluttua operaatiota varten. Luku 4 Paikkatietov¨alityspalvelimen toteutus T¨ass¨a ty¨oss¨a kehitett¨av¨alle ty¨okalulle annettiin englanniksi paikkatietov¨alitt¨aj¨aa¨ tarkoittava nimi: Geographic Information Proxy, lyhyemmin GIProxy. Integroinnin helpottamiseksi palvelin p¨aa¨ tettiin toteuttaa samoilla tekniikoilla kuin Museon informaatioportaali. Niinp¨a ohjelmisto on toteutettu kokonaisuudessaan PHP 5.3:lla. Tietokantapalvelimena k¨aytet¨aa¨ n PostgreSQL:¨aa¨ , ja yhteys tietokantaan abstrahoidaan luokiksi PEAR-kirjaston DB DataObject-luokilla. Seuraavissa kohdissa k¨ayd¨aa¨ n l¨api palvelimen toteutusta. Ensin k¨ayd¨aa¨ n l¨api palvelimen arkkitehtuuria ja variaatiopisteit¨a yleisell¨a tasolla. Sitten esitell¨aa¨ n palvelimen k¨aytt¨am¨aa¨ tietokantarakennetta ja sen j¨alkeen luokkien rakennetta yleisesti. Seuraavaksi k¨ayd¨aa¨ n tarkemmin l¨api aineistoluokkien ja erilaisia toiminnallisuuksia kapseloivien moduulien toteutusta. Lopuksi esitell¨aa¨ n palvelimen k¨aytt¨oa¨ ja sen toimintaa k¨ayt¨ann¨oss¨a. Paikkatietov¨alityspalvelin on lisensoitu Creative Commons Nime¨a 3.0 Muokkaamaton -lisenssill¨a1 , ja se on saatavilla osoitteesta https://github.com/tjkaal/ GIProxy. 1 Creative Commons Attribution 3.0 Unported Licence (http://creativecommons.org/ licenses/by/3.0/) ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 4.1 36 J¨arjestelm¨an arkkitehtuuri ja variaatiopisteet J¨arjestelm¨an suunnittelun mallina on k¨aytetty tietovuoarkkitehtuuria (Pipes and Filters), jonka ideana on jakaa suoritettava teht¨av¨a pienempiin kokonaisuuksiin, jotka voidaan ratkoa erikseen. Tietovuoarkkitehtuuri soveltuu hyvin t¨am¨an palvelimen kaltaisiin tietovirran j¨asent¨amiseen ja jalostamiseen tarkoitettuihin j¨arjestelmiin. Mallissa j¨arjestelm¨a koostuu dataa k¨asittelevist¨a toisistaan riippumattomista komponenteista (filters) ja niiden v¨alill¨a tietoa kuljettavista putkista (pipes). Tietoa on tarkoituksena kuljettaa jatkuvana virtana komponenttien l¨api siten, ett¨a seuraava komponentti voi aloittaa datan k¨asittelyn jo ennen kuin edellinen on saanut omaa suoritustaan t¨aysin valmiiksi. Suorituksessa voi olla my¨os useita haaroja, sill¨a yhdelt¨a komponentilta saatu data voidaan ohjata usealle muulle komponentille. [32] Palvelimen toteutus perustuu tietovuoarkkitehtuurin yksinkertaistettuun versioon, liukuhihna-arkkitehtuuriin (pipeline architecture), jossa tietovirta etenee haarautumatta [29]. J¨arjestelm¨ass¨a suodattimia vastaavat operaatiot, joita avoimena olevien aineistojen joukolle tehd¨aa¨ n. Mallin perusajatuksesta poiketen tietoa ei k¨asitell¨a virtana, vaan seuraavan operaation suorittaminen aloitetaan vasta kun edellinen on saatu valmiiksi. T¨aten palvelimessa ei ole my¨osk¨aa¨ n k¨ayt¨oss¨a varsinaisia putkia, vaan tieto kulkee suoraan eri operoijien v¨alill¨a. Palvelimen yleist¨a arkkitehtuuria esitell¨aa¨ n kuvassa 4.1. Palvelimen keskeinen variaatiopiste liittyy moduuleiksi kutsuttuihin luokkiin, jotka vastaavat erilaisten avoimena olevien aineistojen joukolle teht¨avien operaatioiden kapseloinnista. Suoritusvaiheessa yksitt¨aiselle moduulille annetaan parametreina k¨aytt¨aj¨alt¨a tulleet asetukset ja avoimien aineistojen joukko, jonka j¨alkeen moduuli voi periaatteessa tehd¨a mit¨a tahansa operaatioita – j¨arjestelm¨an arkkitehtuuri ei sin¨ans¨a rajoita niiden toteutusta lainkaan. Moduulit voivat esimerkiksi lis¨at¨a uusia aineistoja k¨asitelt¨aviin, hakea tietoa aineistoista, muokata niit¨a ja palauttaa tietoa asiakkaalle erilaisissa formaateissa. Koska moduulit toimivat toisistaan riippumattomasti, yksitt¨aist¨a moduulia on helppo muokata tai se voidaan korvata kokonaan ilman, ett¨a muiden moduulien toiminta h¨airiintyy. ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS Asiakas Moduulien suorituskutsuja, asetuksia 37 Tuloksia halutussa formaatissa GIProxy Moduulit Kapseloivat erilaisia avoimien aineistojen joukolle tehtäviä operaatioita: avaavat aineistoja, tekevät hakuja, käsittelevät tuloksia Parametrikyselyt AineistojenAineistojen käsittelyssä tarvittaviaparametreja parametreja Hakuparametreja, tuloskyselyjä Aineistoluokat Tietokantaluokat Toteuttavat tietokanta-abstraktion oliopohjaisesti Vastaavat erityyppisten aineistojen esittämisestä yhdenmukaisessa formaatissa PostGIS SQL-kyselyt Tuloksia SHP WFS WMS Tulokset PostgreSQL-tietokanta WWW Palvelimen tiedostojärjestelmä Kuva 4.1: Paikkatietov¨alityspalvelimen arkkitehtuurikuvaus. Kuvaan on merkitty potentiaalisina aineistotyyppein¨a my¨os PostGIS ja SHP, joita ei kuitenkaan ole t¨am¨an ty¨on laajuudessa toteutettu palvelimeen. Toisen keskeisen variaatiopisteen muodostavat erilaiset aineistoluokat. Ne on toteutettu Edustaja-suunnittelumallia k¨aytt¨aen siten, ett¨a eri aineistotyyppej¨a edustavat luokat k¨aytt¨av¨at sis¨aisess¨a toteutuksessa hyv¨akseen j¨arjestelm¨an paikallista aineistoa edustavaa luokkaa. Suunnittelumalli yksinkertaistaa uusien aineistotyyppien lis¨aa¨ mist¨a: uutta aineistotyyppi¨a lis¨att¨aess¨a siihen tarvitsee k¨ayt¨ann¨oss¨a toteuttaa vain toiminnallisuudet, jotka hakevat tietoa ja muuntavat sit¨a j¨arjestelm¨an sis¨aiseen formaattiin. Vaikka palvelimen nykyinen toteutus perustuu PostgreSQL-tietokantaan, sit¨a ei sin¨ans¨a ole mitenk¨aa¨ n erityisen vahvasti sidottu mihink¨aa¨ n tiettyyn tietokantaj¨arjestelm¨aa¨ n tai -rakenteeseen. Esimerkiksi aineistoluokat ovat itsess¨aa¨ n t¨aysin tietokantariippumattomia, sill¨a kunkin aineiston parametrien hakemisen ja sit¨a vastaavan luokan alustamisen hoi- ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 38 taa oma tehdasluokkansa, joka nykytoteutuksessaan hakee n¨am¨a tiedot tietokantaluokilta. N¨aihin luokkiin on eristetty kaikki tietokantoihin liittyv¨a toiminnallisuus, joten jos tietokantaan tai tietokantaj¨arjestelm¨aa¨ n halutaan tehd¨a muutoksia, se onnistuu vain n¨ait¨a luokkia muuttamalla. 4.2 Tietokantarakenne Palvelimen tietokantarakennetta esitell¨aa¨ n kuvassa 4.2. Tietokanta muodostuu aineistojen tietoja sis¨alt¨avist¨a tauluista ja eri moduulien tarvitsemista tauluista. dataset_link primary_dataset_id Integer Varchar primary_dataset_xpath secondary_dataset_id Integer secondary_dataset_xpath Varchar NN (PFK) NN NN (PFK) NN the_primary_dataset_links_to_the_second the_secondary_dataset_is_linked_to_the_primary a_dataset_has_settings a_dataset_is_categorized_by_keywords dataset_settings dataset_id Integer NN (PFK) category Varchar NN (PK) name Varchar NN (PK) value Varchar NN id identifier name type dataset Serial NN (PK) Varchar NN (AK1) Varchar NN Varchar NN dataset_keyword dataset_id Integer NN (PFK) keyword Varchar (PK) Integer NN priority the_features_of_a_dataset_are_wrapped dataset_feature_wrap dataset_id Integer NN feature_xpath Varchar NN target_identier Varchar NN target_feature Varchar NN post_processor Varchar (PFK) (PK) (PK) (PK) Kuva 4.2: Paikkatietov¨alityspalvelimen tietokantarakenne. Taulun dataset settings attribuutissa value k¨aytet¨aa¨ n yksiulotteista taulukkoa. Tietokannan keskeisin taulu on aineistojen yleiset tiedot sis¨alt¨av¨a dataset. Jokaisesta aineistosta tallennetaan sen selv¨akielinen nimi ja tyyppi, jota k¨aytet¨aa¨ n esimerkiksi edustajaluokkaa valittaessa. Lis¨aksi aineistoista tallennetaan j¨arjestelm¨an teknisess¨a toteutuksessa k¨aytett¨av¨a juokseva sarjanumero id sek¨a lyhyt selv¨akielinen uniikki tunniste identifier, jota voidaan k¨aytt¨aa¨ esimerkiksi silloin, kun aineistoja halutaan valita suoraan tai vaikkapa lokitiedostoissa. ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 39 Aineistokohtaiset asetukset tallennetaan dataset settings-tauluun. Jokaisella aineiston asetuksella on nimi ja mahdollisesti monta eri arvoa. Kohtaa category k¨aytet¨aa¨ n asetusten luokitteluun niiden k¨aytt¨okohteen mukaan. T¨aten esimerkiksi WFS-tyyppisiss¨a aineistoissa asetukset on jaettu luokkiin wfs ja system sen mukaan, tarvitaanko niit¨a WFS-kyselyiss¨a vai ovatko ne aineiston yleisi¨a asetuksia. Muita tietokannan tauluja k¨aytet¨aa¨ n moduulikohtaisten toiminnallisuuksien toteutuksessa. Taulu dataset keyword sis¨alt¨aa¨ aineistoja haettaessa k¨aytett¨av¨at asiasanat ja niiden prioriteetit. Asiasanojen prioriteetin asettaminen on t¨arke¨aa¨ ; esimerkiksi MIP:ssa kiinteist¨otietoja etsitt¨aess¨a halutaan l¨oyt¨aa¨ ensin Kiinteist¨otietojen kyselypalvelu ja vasta sen j¨alkeen Rakennustietojen kyselypalvelu, kun taas rakennustietoja etsitt¨aess¨a tilanne on p¨ainvastainen. J¨arjestyksell¨a on v¨ali¨a muun muassa aineistoja yhdistett¨aess¨a, sill¨a kahden aineiston keskin¨ainen j¨arjestys m¨aa¨ r¨aa¨ niiden ensi- ja toissijaisuuden. Aineistojen v¨aliset yhteydet tallennetaan dataset link-tauluun XPath-hakuina. Taulua dataset feature wrap k¨aytet¨aa¨ n, kun aineistot halutaan sovittaa halutunlaisiksi. Tauluun tallennetaan XPath-hakuna aineiston kentt¨a, kohteen tunniste (kuten kiinteist¨olomake), kohteen ominaisuuden nimi. Lis¨aksi tallennettaan mahdollisesti j¨alkik¨asittelyss¨a k¨aytett¨av¨an funktion nimi. Palvelimen nykytoteutuksessa t¨am¨a viittaa j¨alkik¨asittelyst¨a vastaavan luokan staattiseen funktioon, joka saa parametrinaan kent¨an sis¨all¨on, jonka se muuntaa kohteelle sopivaksi. 4.3 Luokkarakenne Paikkatietov¨alityspalvelimen ytimen muodostaa GIProxy-niminen luokka, jonka hallinnoi avoimena olevien aineistojen joukkoa ja vastaa muiden palvelimeen kuuluvien luokkien operoinnista. Erilaiset toiminnallisuudet on eristetty moduuleiksi kutsuttuihin, nimiavaruudessa GIProxy\module sijaitseviin luokkiin, erityyppisten aineistojen luokat sijaitsevat GIProxy\dataset-nimiavaruudessa ja vastaavasti tietokantayhteydest¨a ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 40 vastaavien luokkien nimiavaruus on GIProxy\db. N¨aiden lis¨aksi palvelimeen kuuluu yleisk¨aytt¨oisi¨a luokkia, jotka kuuluvat suoraan GIProxy-nimiavaruuteen. Palvelimen luokkarakennetta esitell¨aa¨ n kuvassa 4.3. J¨arjestelm¨ass¨a on kolme yleisk¨aytt¨oist¨a luokkaa. Luokka Config tarjoaa koko palvelimen laajuudella tarvittavien asetusten hallinnan staattisten funktioiden avulla. Asetusluokan lis¨aksi kahta tehdasta, aineistojen luonnissa k¨aytett¨av¨aa¨ luokkaa DatasetFactory ja moduuleja luovaa luokkaa ModuleFactory pystyy k¨aytt¨am¨aa¨ n mist¨a tahansa. Erilaiset aineistoille teht¨av¨at operaatiot on eristetty omiin rajapinnan ModuleInterface toteuttaviin luokkiinsa, joita kutsutaan moduuleiksi. J¨arjestelm¨an moduulit ovat toisistaan t¨aysin riippumattomia; ne suorittavat operaationsa toisistaan erill¨aa¨ n, eiv¨atk¨a ne voi kutsua toisiaan ajon aikana. Moduulit eiv¨at my¨osk¨aa¨ n mist¨aa¨ n saa tietoa siit¨a, mit¨a operaatioita aineistoille on suoritettu aikaisemmin. 4.4 Aineistoluokkien toteutus Eri aineistoluokat vastaavat erityyppisten aineistojen hakemisesta ja muuntamisesta palvelimen sis¨aiseen formaattiin, joksi valittiin esimerkiksi WFS-protokollan k¨aytt¨am¨a GML. Jokainen aineistoluokka toteuttaa DatasetInterface-nimisen rajapinnan, joka m¨aa¨ ritt¨aa¨ julkiset funktiot, joilla moduulit operoivat aineistoja. Aineistoluokkien toteutuksen ydin on j¨arjestelm¨an sis¨aist¨a aineistoa edustava Dataset, jota k¨aytet¨aa¨ n muista aineistoluokista Edustaja-nimisen suunnittelumallin kautta. K¨ayt¨ann¨oss¨a t¨am¨a tarkoittaa sit¨a, ett¨a Dataset-luokan olio ei itsen¨aisesti pysty hakemaan tuloksia eik¨a yksik¨aa¨ n tietokannasta haettava aineisto voi olla suoraan sen tyyppinen. Sen sijaan tarkoituksena on, ett¨a eri aineistoluokat k¨aytt¨av¨at sis¨aisesti Dataset-luokan oliota. T¨all¨oin aineistotyypin mukaisen luokan t¨aytyy t¨aysin itsen¨aisesti toteuttaa vain rajapinnan fetchResults()-funktio. Lis¨aksi luokan t¨aytyy luonnollisesti osata muuntaa hakemansa tulokset palvelimen sis¨aiseen formaattiin. ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS GIProxy ModuleFactory «interface» module\ModuleInterface +run() -datasets +__construct() +run() 41 +create() module\FetchResultsByCoordinates 1 * module\FindDatasetsByKeyword «interface» dataset\DatasetInterface +__construct() +fetchResults() +getAllResults() +addResults() +getDatasetId() +getSettings() +getSetting() +transformCoordinates() DatasetFactory module\LoadDataset +create() +createByIdentifier() -loadClass() module\MergeDatasets -createMergedDataset() -mergeResults() dataset\Dataset -settings -results dataset\WFS -dataset dataset\WMS module\OutputHTML -dataset #boundingBoxStringFromPoint() -simpleXMLToArray() -flattenArray() -readableArray() -prettyTitle() -utf8_ucfirst() -htmlArray() -outputArray() +doOffset() «uses» «uses» module\OutputJson -simpleXMLToArray() Config module\SetOutputCoordinateSystem -outputCoordinateSystem +get() +set() module\WrapDatasets -wrapDataset() -itemToString() -addHyphensToEstateIdentifier() -prettyName() -parseGMLPoint() -parseRHRAddress() -parseRHROwner() db\Dataset +getSettings() +getType() +getById() +getByIdentifier() db\DatasetSettings +getSettingsByDatasetId() +valueToArray() db\DatasetLink db\DatasetKeyword +getLinksOfDataset() +findDatasetsByKeyword() db\DatasetFeatureWrap +getWrapsOfDataset() +getXPath() Kuva 4.3: Paikkatietov¨alityspalvelimen luokkarakenne. P¨aa¨ luokkaa lukuun ottamatta kaikki luokat kuuluvat GIProxy-nimiavaruuteen. Moduuliluokat k¨asittelev¨at dataset\DatasetInterface-rajapinnasta perittyj¨a olioita, mutta selkeyden vuoksi sit¨a ei ole merkitty t¨ah¨an kuvaan. Kuvaan ei ole my¨osk¨aa¨ n merkitty rajapinnoista toteutettuja funktioita. ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 42 Palvelimeen toteutettiin kaksi varsinaista aineistoluokkaa, WFS ja WMS. Jotta tuloksien hakeminen pelk¨an pisteen avulla onnistuisi, WFS-luokkaan toteutettiin apufunktio, joka muuntaa pisteen neli¨onmuotoiseksi karttarajaukseksi tietokantaan asetetun pinta-alaasetuksen mukaisesti. WMS-protokollasta toteutettiin vain aineistojen metatietoja tarjoava GetFeatureInfo-kysely, sill¨a palvelin k¨asittelee nykytoteutuksessaan vain tekstimuotoista dataa; karttakuvien v¨alityst¨a ei t¨ass¨a ty¨oss¨a k¨asitell¨a. Aineistojen luonnissa palvelin k¨aytt¨aa¨ DatasetFactory-nimist¨a tehdasta, joka osaa luoda sille sy¨otetyn aineiston sarjanumeron tai selv¨akielisen tunnisteen perusteella oikeantyyppisen aineistoluokan. Tehdas vastaa my¨os aineistokohtaisten asetusten hakemisesta. Koordinaattien muunnos tehd¨aa¨ n Dataset-luokassa. Vaikka muunnos saattaa olla h¨avi¨ollinen, se p¨aa¨ tettiin tehd¨a aina tuloksia haettaessa ja ulostulokoordinaattij¨arjestelm¨aa¨ vaihdettaessa. N¨ain v¨altet¨aa¨ n ep¨am¨aa¨ r¨aiset tilat, joita voisi synty¨a esimerkiksi silloin, kun kahta eri j¨arjestelm¨ass¨a olevaa aineistoa koetetaan yhdist¨aa¨ . 4.5 Toiminnallisuuksien toteutus Palvelun kaikki aineistoille teht¨av¨at operaatiot on toteutettu ModuleInterface-rajapinnan toteuttavissa luokissa, joita siis kutsutaan moduuleiksi. Niiden toteutuksessa on tarkoituksena se, ett¨a yksitt¨ainen moduuli tekee aineistoilla yhden yksinkertaisen, nimens¨a mukaisen operaation. K¨ayt¨ann¨oss¨a t¨at¨a varten rajapinta tarjoaa yhden funktion, joka saa parametreinaan asiakkaan moduulille antamat parametrit ja palvelimen k¨asittelyss¨a olevat aineistot. T¨at¨a ty¨ot¨a varten palvelimeen toteutetut moduulit listataan taulukossa 4.1 lyhyiden kuvausten kanssa. Moduuleja suoritetaan siis toisistaan riippumattomasti, eik¨a yksitt¨ainen moduuli tied¨a mit¨a operaatioita aineistoille on aikaisemmin tehty. Luonnollisesti moduulien suoritusj¨arjestys vaikuttaa kuitenkin siihen, mit¨a operaatioita ne pystyv¨at aineistoille tekem¨aa¨ n ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 43 Taulukko 4.1: Palvelimen moduulit ja niiden kuvaukset. Moduuli FetchResultsByCoordinates FindDatasetsByKeyword LoadDataset MergeDatasets OutputHTML OutputJson SetOutputCoordinateSystem WrapDatasets Kuvaus Hakee avoimista aineistoista tietoja koordinaattien perusteella. Etsii aineistoja hakusanan perusteella. Hakee aineiston sen tunnisteen perusteella. Yhdist¨aa¨ aineistoja. Tuottaa avoimista aineistoista HTML:n taulukon. Tuottaa avoimista aineistoista JSON-taulukon. Asettaa palvelimen ulostulokoordinaattij¨arjestelm¨an, muuntaa aikaisemmin haetut tulokset uuteen j¨arjestelm¨aa¨ n. Sovittaa aineistoja halutulle kohteelle. – esimerkiksi kiinteist¨olomakkeelle sovittamisen j¨alkeen aineistoja tuskin pystyy en¨aa¨ yhdistelem¨aa¨ n. Suoritusvaiheessa moduulille annetaan parametreita palvelimen k¨asittelyss¨a olevien aineistojen joukko ja asiakkaalta saadut parametrit. Tyypillinen moduuli k¨ay yksi kerrallaan aineistoja l¨api ja suorittaa nimens¨a mukaisia operaatioita niille. Esimerkiksi SetOutputCoordinateSystem kutsuu yksi kerrallaan jokaisen aineiston transformCoordinates()-funktiota. Muut palvelinta varten toteutetut moduulit voidaan jaotella aineistoja sek¨a tuloksia hakeviin, tuloksia k¨asitteleviin ja tuloksia palauttaviin. Tyypillisesti ensimm¨aisen¨a ajetaan moduuleja, joilla haetaan aineistoja. T¨allaisia moduuleita palvelimessa ovat aineistoja hakusanalla hakeva FindDatasetsByKeyword ja yksitt¨aisen aineiston sen tunnisteen perusteella avaava LoadDataset. Molemmat moduulit lis¨aa¨ v¨at uudet aineistot jo k¨asittelyss¨a olevien aineistojen joukon loppuun. Tulosten hakemista varten palvelimessa on yksi moduuli, FetchResultsByCoordinates, jolle annetaan parametreina pisteen x- ja y-koordinaatit sek¨a koordinaattij¨arjestelm¨a. Moduuli k¨ay yksitellen l¨api kaikki avoimet aineistot, ja kutsuu jokaisen aineistoluokan tietojen hausta vastaavaa funktiota. Jos aineistoista on haettuna tuloksia jo ennest¨aa¨ n, uudet lis¨at¨aa¨ n niiden j¨alkeen. ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 44 Aineistojen ja tulosten k¨asittely¨a varten palvelimeen toteutettiin kolme moduulia. Niist¨a MergeDatasets yhdist¨aa¨ aineistoja palvelimeen etuk¨ateen tallennettujen tietojen perusteella. Yksi kerrallaan moduuli ottaa k¨asittelyyns¨a kunkin aineiston ja tarkistaa, l¨oytyyk¨o siit¨a linkki¨a johonkin muista avoimista aineistoista. Jos yhdistyskohta l¨oytyy, moduuli k¨ay l¨api molempien aineistojen tulokset ja yhdist¨aa¨ niist¨a uuden aineiston. Oletuksena aineistot yhdistet¨aa¨ n siten, ett¨a ensisijaisesta aineistosta otetaan kaikki tulokset, ja toissijaisesta vain ne, jotka t¨asm¨aa¨ v¨at ensisijaisen tietoihin. Lopuksi alkuper¨aiset aineistot poistetaan avoimien aineistojen joukosta ja korvataan yhdistetyll¨a. Jos aineistolle ei l¨oydy paria muista aineistoista, se j¨atet¨aa¨ n tulosjoukkoon sellaisenaan. Toinen tuloksia k¨asittelev¨a moduuli WrapDatasets tuottaa aineistoista asiakkaan haluamalle kohteelle sovitettuja kokonaisuuksia. Se etsii aineistojen tuloksista etuk¨ateen m¨aa¨ ritettyj¨a kentti¨a sek¨a nime¨aa¨ ja j¨alkik¨asittelee niit¨a kohteen vaatimusten mukaisesti luoden n¨ain uusia aineistoja. Tulosten palauttamista varten palvelimessa on kaksi moduulia, joista OutputJson yksinkertaisesti muuntaa XML-datan JSON-taulukoksi. OutputHTML:n toteutus sen sijaan on hieman monimutkaisempi, sill¨a se yritt¨aa¨ muuntaa tuloksia helpommin luettavaan muotoon. K¨ayt¨ann¨oss¨a moduuli k¨ay rekursiivisesti tietorakennetta l¨api tavoitteenaan ”litist¨aa¨ ” moniulotteisia rakenteita yksinkertaiseksi yksiulotteiseksi avain-arvo-taulukoksi, jotta siit¨a voitaisiin helposti luoda HTML:n table-elementti¨a k¨aytt¨av¨a selke¨a taulukko. 4.6 Palvelimen toiminta ja sen k¨aytt¨o Palvelimen toimintaa ohjataan kutsumalla eri moduuleja sen nimikkoluokasta luodun instanssin kautta halutussa j¨arjestyksess¨a halutuilla parametreilla. Esimerkiksi tiedon hakeminen JSON-muodossa Kiinteist¨otietojen kyselypalvelusta pisteest¨a 100, 200 (EPSG:3067). 1 2 3 4 5 $proxy = new GIProxy(); $proxy->run("LoadDataset", array( "identifier" => "mml_kiinteistotiedot" )); $proxy->run("FetchResultsByCoordinates", array( ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 6 7 8 9 10 11 12 45 "type" => "point", "coordinateSystem" => "EPSG:3067", "coordinates" => array(100, 200) )); $proxy->run("OutputJson", array( "writeHeader" => true )); Listauksen suoritus palvelimessa on kuvattuna kuvan 4.4 sekvenssikaaviossa. Kuten kuvasta voidaan havaita, GIProxy-luokan run()-funktio kutsuu ensimm¨aiseksi ModuleFactory-nimist¨a tehdasluokkaa, joka tarvittaessa lataa oikean luokan muistiin ja sen j¨alkeen luo siit¨a olion. Luodun olion tehdas palauttaa p¨aa¨ luokalle. Asiakas new GIProxy run('LoadDataset', settings) ModuleFactory create(moduleName) module\LoadDataset DatasetFactory dataset\WFS new module run(settings, datasets) createByIdentifier(ident) datasets dataset response new module\FetchResults run('FetchResults', settings) create(moduleName) new module run(settings, datasets) fetchResults(settings) datasets response module\OutputJson run('OutputJson', settings) create(moduleName) new module response run(settings, datasets) getAllResults() datasets results Kuva 4.4: Oheisen listauksen sekvenssikaavio. Selkeyden vuoksi kuvaan ei ole merkitty sit¨a, miten DatasetFactory hakee aineistojen tiedot db\Dataset-luokalta. Kuvasta puuttuu my¨os luokka dataset\Dataset, jota dataset\WFS k¨aytt¨aa¨ sis¨aisess¨a toteutuksessaan. Seuraavaksi kutsutaan moduulin run()-funktiota, joka saa parametreikseen asiakkaalta aikaisemmin tulleet asetukset ja palvelimella avoimena olevat aineistot sis¨alt¨av¨an taulukon. Listauksessa ensimm¨aisen¨a suoritettava moduuli LoadDataset siis lis¨aa¨ aineistoja k¨asitelt¨avien joukkoon niiden tunnisteen perusteella. Luokka kutsuu aineistoja ¨ LUKU 4. PAIKKATIETOVALITYSPALVELIMEN TOTEUTUS 46 luovaa DatasetFactory-tehdasluokkaa, joka hakee aineiston tiedot tietokantaluokalta db\Dataset, jonka j¨alkeen se moduulitehtaan tapaan lataa tarvittaessa aineistoluokan muistiin ja luo oikeilla tiedoilla alustetun olion. Luotu olio palautetaan moduulille, joka lis¨aa¨ sen aineistojoukon loppuun. Seuraavaksi ajettava moduuli FetchResultsByCoordinates hakee tuloksia pisteest¨a kutsuen jokaisen avoimen aineiston fetchResults()-funktiota. Saadut tulokset tulostetaan k¨aytt¨aj¨alle viimeisen¨a ajettavalla OutputJson-moduulilla, joka hakee tulokset avoimista aineistoista ja muuntaa ne JSON-taulukoksi. Erilaisia virhetilanteita palvelin k¨asittelee nykytoteutuksessa siten, ett¨a se pyrkii ohittamaan ne. Esimerkiksi, jos yritet¨aa¨ n luoda aineistoa tai moduulia, jota ei ole olemassa, suoritus luonnollisesti keskeytyy silt¨a osin. Muilta osin palvelimen toiminta ei t¨allaisessa tilanteessa kuitenkaan h¨airiinny, vaan seuraavien moduulien suoritusta yritet¨aa¨ n jatkaa normaalisti. Luku 5 Tulokset ja niiden analyysi T¨ass¨a ty¨oss¨a on siis ollut tavoitteena kehitt¨aa¨ paikkatietov¨alityspalvelin, joka tarjoaisi geneeriset ty¨okalut paikkatietoaineistojen hallintaan ja k¨asittelyyn. Keskeisimm¨aksi tutkimuksen kohteeksi valittiin aineistojen toteutus, eli se, miten erityyppiset aineistot pystyt¨aa¨ n esitt¨am¨aa¨ n yhten¨aisen rajapinnan kautta. Lis¨aksi palvelimen haluttiin osaavan yhdist¨aa¨ ja sovittaa aineistoja k¨aytt¨okohteen vaatimusten mukaisesti. T¨ass¨a luvussa tarkastellaan, miten eri tavoitteisiin on p¨aa¨ sty. Ensin pohditaan, miten geneerisyyden tavoittelu on onnistunut palvelimessa. Sen j¨alkeen k¨ayd¨aa¨ n tarkemmin l¨api yksitt¨aisi¨a kehitystavoitteita ja niiss¨a onnistumista. Lopuksi k¨ayd¨aa¨ n l¨api palvelimen toteutuksen ongelmakohtia ja teknisi¨a rajoitteita sek¨a pohditaan, millaisia kehityssuuntia palvelimella voisi olla. Lis¨aksi tarkastellaan rajoituksia, joita palvelimen nykyinen toteutus aineistojen k¨asittelyyn aiheuttaa. 5.1 Geneerisyyden toteutuminen Musserin ja Stepanovin m¨aa¨ ritelm¨ass¨a [28] puhuttiin algoritmien ja tietorakenteiden konseptista, eli niiden abstraktista m¨aa¨ ritelm¨ast¨a. Erilaisia paikkatietoaineistoja yhdist¨av¨aa¨ konseptia, geneerist¨a rajapintaa niiden esitt¨amist¨a varten, l¨ahdettiin etsim¨aa¨ n luomalla yksinkertainen, kahta eri WFS-protokollaan perustuvaa aineistoa k¨aytt¨av¨a prototyyppi. LUKU 5. TULOKSET JA NIIDEN ANALYYSI 48 Prototyyppi osoitti ennen muuta sen, miten aineistoja t¨aytyy pysty¨a k¨asittelem¨aa¨ n, jotta niist¨a saadaan halutun kaltaisia. N¨aiden havaintojen pohjalta kehitettiin rajapinta aineistoille ja lis¨aksi paikallinen aineistoluokka, jota eri aineistotyyppien mukaiset luokat k¨aytt¨av¨at Edustaja-suunnittelumallin avulla sis¨aisess¨a toteutuksessaan. Lis¨aksi prototyypist¨a havaittiin se, ett¨a aineistoille teht¨avi¨a operaatioita yhdist¨aa¨ se, ett¨a ne kaikki vuoroon per¨aa¨ n k¨asittelev¨at palvelimessa auki olevien aineistojen joukkoa. N¨ain saatiin yksinkertainen konsepti palvelimen moduuleille, jotka yksi kerrallaan vastaanottavat kulloinkin avoimena olevan aineistojoukon ja suorittavat sill¨a parametriensa mukaiset operaatiot. Moduulit toimivat toisistaan t¨aysin riippumattomasti, eik¨a niiden toimintaan vaikuta, mit¨a operaatioita aineistojoukolle on aikaisemmin tehty. J¨arjestelm¨ass¨a k¨ayt¨oss¨a oleva sovellettu liukuhihna-arkkitehtuuri tukee hyvin geneerisyytt¨a. Itsen¨aisi¨a moduuleja on helppo muuttaa, niiden j¨arjestyst¨a voidaan vaihtaa vapaasti ja uusien moduulien lis¨aa¨ minen on yksinkertaista. Koska tyypillisesti eri moduulit suorittavat selkeit¨a, pienehk¨oj¨a operaatioita, niiden uudelleenk¨aytt¨o onnistuu helposti osana erilaisia k¨asittelyoperaatioita. 5.2 Kehitystavoitteissa onnistuminen Palvelimella oli kaksi yleist¨a kehitystavoitetta: niin uusien aineistotyyppien kuin moduulienkin lis¨aa¨ minen tahdottiin tehd¨a mahdollisimman yksinkertaiseksi. Lis¨aksi Museon informaatioportaali asetti omia vaatimuksia palvelimelle. Haluttiin, ett¨a palvelin osaisi valita sopivia aineistoja automaattisesti, yhdistell¨a niist¨a loogisia kokonaisuuksia ja lopuksi tuottaa m¨aa¨ ritetylle kohteelle sovitettuja uusia aineistoja oikeassa formaatissa. Uusien aineistotyyppien lis¨aa¨ minen j¨arjestelm¨aa¨ n on yksinkertaista. Edustaja-suunnittelumallin avulla aineistotyyppikohtainen luokka vastaa vain tietojen hausta ja niiden muuntamisesta j¨arjestelm¨an sis¨aiseen formaattiin – esimerkiksi PostGIS-aineistojen tuen lis¨aa¨ misess¨a suurin haaste olisi tietokantahakujen muuntaminen GML-muotoon. LUKU 5. TULOKSET JA NIIDEN ANALYYSI 49 Museon informaatioportaalin erityisvaatimuksia pyrittiin l¨ahestym¨aa¨ n mahdollisimman yksinkertaisesti. Niinp¨a palvelimeen l¨ahdettiin luomaan ty¨okaluja, jotka k¨aytt¨av¨at tietokantaan etuk¨ateen tallennettuja tietoja. Aineistoja voidaan hakea hakusanojen perusteella, yhdist¨aa¨ valmiiksi m¨aa¨ ritetyist¨a kohdista ja sovittaa eri kohteille etuk¨ateen m¨aa¨ ritetyill¨a tavoilla. K¨ayt¨ann¨oss¨a nykytoteutus tarjoaa siis ty¨okaluja, joiden avulla aineistojen yll¨apitoa voidaan yksinkertaistaa. Mink¨aa¨ nlaista automaattista ty¨okalustoa tiedon louhintaan palvelin ei tarjoa. 5.3 Toteutuksen ongelmakohtia ja kehityskohteita Palvelimen toteutuksen suurin potentiaalinen ongelmakohta liittyy suoraan sen perusideaan, sill¨a kaikkien erityyppisten aineistojen esitt¨amisest¨a yhdenmukaisen rajapinnan kautta seuraa luonnollisesti rajoituksia aineistojen soveltamiseen. Koska palvelimessa ei ole mahdollisuutta erotella eri aineistotyyppien tukemia toimintoja, aineistorajapintaan voidaan lis¨at¨a vain sellaisia toiminnallisuuksia, joita kaikki eri aineistotyypit tukevat. Lis¨aksi aineistojen muuntamisessa yhdenmukaiseen formaattiin sis¨altyy aina tiedon muuttumisen tai h¨avi¨amisen riski. Toinen ongelma liittyy moduulien toteutukseen. Koska ne toimivat t¨aysin itsen¨aisesti, eik¨a niiden suoritusta ole rajoitettu oikeastaan mitenk¨aa¨ n, voi synty¨a tilanteita, joissa esimerkiksi v¨aa¨ r¨all¨a suoritusj¨arjestyksell¨a tuloksia h¨avi¨aa¨ tai ne k¨asitell¨aa¨ n k¨aytt¨okelvottomiksi. T¨allaisten tilanteiden est¨amiseksi moduuleille pit¨aisi mahdollisesti kehitt¨aa¨ tarkemmin m¨aa¨ ritelty rakenne, joka selkeytt¨aisi ja rajoittaisi niiden toimintaa. Moduulij¨arjestelm¨an parantaminen onnistuisi esimerkiksi siten, ett¨a palvelimen toteutusta kehitett¨aisiin l¨ahemmin tietovuoarkkitehtuurin mukaiseksi. Esimerkiksi, jos moduulien v¨alinen kommunikaatio hoidettaisiin mallin mukaisilla putkilla, niiden tuottamien tulosten arvottamiseen olisi mahdollista kehitt¨aa¨ erilaisia metriikoita. Samalla palvelimen toimintaa olisi mahdollista tehostaa, sill¨a monessa tapauksessa moduuli voisi l¨ahett¨aa¨ yk- LUKU 5. TULOKSET JA NIIDEN ANALYYSI 50 sitt¨aisi¨a tuloksia seuraavalle k¨asittelij¨alle heti niiden valmistuttua. T¨all¨oin useampi moduuli voisi k¨asitell¨a aineistoja yhtaikaa. Yksi selke¨a kehityskohde palvelimelle olisi WFS-protokollan t¨aydellinen tukeminen siten, ett¨a palvelin kykenisi vastaanottamaan WFS-kyselyj¨a ja tuottamaan oikeanlaisia GML-muotoisia vastauksia niihin. T¨all¨oin sit¨a voisi k¨aytt¨aa¨ vaikkapa v¨aa¨ r¨ass¨a karttaprojektiossa olevien aineistojen muuntamiseen l¨apin¨akyv¨asti. T¨all¨oin olisi my¨os mahdollista luoda vaikkapa virtuaalisia aineistoja, kuten Maanmittauslaitoksen Kiinteist¨o- ja Rakennustietopalveluista suorituksen aikana yhdistettyj¨a kokonaisuuksia. Toinen mahdollinen kehityskohde olisi laajentaa tulosten hakumahdollisuuksia. Nykyisell¨aa¨ n palvelimessa on mahdollista tehd¨a hakua aineistoihin vain koordinaattien perusteella, vaikka esimerkiksi WFS-protokolla tukee my¨os aineistojen ominaisuuksiin perustuvia hakuja. T¨allaisen hakumahdollisuuden lis¨aa¨ misest¨a kuitenkin seuraisi aikaisemmin mainittu geneerisyyteen liittyv¨a ongelma, sill¨a kaikki eri aineistotyypit eiv¨at niit¨a tue – esimerkiksi WMS:n GetFeatureInfo-kysely tehd¨aa¨ n aina pisteen perusteella [12]. Ominaisuuspohjaisen haun avulla palvelinta olisi luonnollisesti mahdollista kehitt¨aa¨ tukemaan my¨os muita kuin paikkatietoaineistoja. T¨all¨oin vaikkapa kalkkihiekkakivest¨a rakennetun rakennuksen tietoja voitaisiin t¨aydent¨aa¨ eri rakennusmateriaaleista tietoa sis¨alt¨av¨all¨a aineistolla. Museon informaatioportaalin erityisominaisuudet luovat my¨os omanlaisensa kehitysmahdollisuuden, miss¨a tutkittaisiin, voisiko palvelinta kehitt¨aa¨ itsen¨aisemmin toimivaksi datan louhijaksi. Palvelin voisi esimerkiksi tutkia aineistoja ja luoda niist¨a hakusanatietokantaa sek¨a etsi¨a niiden v¨alisi¨a yhteyksi¨a automaattisesti. T¨all¨oin tiedon oikeellisuuden takaamisesta tulisi kuitenkin eritt¨ain vaikeaa. Luku 6 Yhteenveto T¨ass¨a tutkielmassa l¨ahdettiin selvitt¨am¨aa¨ n, miten erilaisten paikkatietoaineistojen soveltamista voisi helpottaa ja yhdenmukaistaa. Ratkaisuna alettiin kehitt¨aa¨ erityist¨a ty¨okalua, geneerist¨a paikkatietov¨alityspalvelinta, jota voitaisiin k¨aytt¨aa¨ sovelluksissa yleisk¨aytt¨oisen¨a paikkatietokerroksena. Paikkatietov¨alityspalvelin osaisi hakea tietoa erityyppisist¨a paikkatietoaineistoista, k¨asitell¨a saatuja tuloksia ja palauttaa niit¨a asiakkaalle halutussa formaatissa. Palvelimen generis¨oinnin l¨aht¨okohtana sek¨a t¨arkeimp¨an¨a sovellus- ja t¨aten my¨os esimerkkik¨aytt¨okohteena k¨aytettiin Museon informaatioportaalia, joka on Varsinais-Suomen maakuntamuseon selainpohjainen ty¨okalu rakennusinventointiin. Museon informaatioportaalin taustoja k¨asiteltiin tarkemmin tutkielman toisessa luvussa, jossa esiteltiin rakennusinventoinnin perusk¨asitteit¨a, sivuston kehitysprosessia ja sen teknist¨a toteutusta. Kolmannessa luvussa aloitettiin palvelimen suunnittelu k¨asittelem¨all¨a geneerisyytt¨a ja sen merkityst¨a. Kehityksen l¨aht¨okohdaksi otettiin m¨aa¨ ritelm¨a, jonka mukaan geneerisess¨a ohjelmoinnissa on ideana l¨ahte¨a liikkeelle k¨aytt¨okelpoisesta algoritmista, jota abstrahoimalla yritet¨aa¨ n l¨oyt¨aa¨ algoritmien ja tietorakenteiden konsepti [28]. Niinp¨a palvelimesta p¨aa¨ tettiin kehitt¨aa¨ ensin yksinkertainen prototyyppi, joka tuottaisi etuk¨ateen p¨aa¨ tetyist¨a aineistoista aina samantyyppist¨a sis¨alt¨oa¨ . T¨at¨a prototyyppi¨a analysoimalla voitaisiin sitten etsi¨a varsinaisen palvelimen perusperiaatteet. LUKU 6. YHTEENVETO 52 Ennen prototyypin suunnittelua ja toteuttamista k¨aytiin l¨api varsinaiselle palvelimelle asetettuja kehitystavoitteita. Museon informaatioportaalin kautta palvelimelle tuli erityisvaatimuksia: haluttiin, ett¨a se osaisi valita aineistoja hakusanan perusteella sek¨a yhdistell¨a ja sovittaa saatuja tuloksia asiakkaan haluamalla tavalla. N¨aiden vaatimusten perusteella palvelimelle esitettiin kaksi k¨aytt¨otapausta, joista toisen pohjalta p¨aa¨ tettiin kehitt¨aa¨ palvelimen prototyyppi. Prototyypist¨a kehitettiin suoraviivainen ty¨okalu, joka haki sille sy¨otetyn pisteen perusteella tietoa Maanmittauslaitoksen kahdesta WFS-protokollaan perustuvasta aineistosta, Kiinteist¨o- ja Rakennustietojen kyselypalveluista. N¨aist¨a aineistoista saatuja tuloksia prototyyppi k¨asitteli siten, ett¨a jokaisen Kiinteist¨otietojen kyselypalvelun kautta l¨oydetyn kiinteist¨on tietoja laajennettiin sen p¨aa¨ rakennuksen tiedoilla, jonka j¨alkeen tiedot sovitettiin MIP:n kiinteist¨otietoja sy¨otett¨aess¨a k¨aytetylle lomakkeelle ja palautettiin asiakkaalle JSON-koodattuna. Prototyypist¨a havaittiin, ett¨a erilaiset aineistoille teht¨av¨at operaatiot voidaan esitt¨aa¨ itsen¨aisesti toimivina komponentteina, moduuleina, jotka liukuhihnamaisesti k¨asittelev¨at palvelimessa avoimena olevien aineistojen joukkoa yksi kerrallaan. T¨am¨an lis¨aksi prototyyppi havainnollisti sit¨a, miten eri aineistoja t¨aytyy p¨aa¨ st¨a k¨asittelem¨aa¨ n, jotta niist¨a saadaan halutun kaltaisia. T¨alt¨a pohjalta voitiin aloittaa palvelimen ytimen, aineistoluokkien, toteutuksen suunnittelu. Aineistoluokissa p¨aa¨ dyttiin k¨aytt¨am¨aa¨ n Edustaja-nimist¨a suunnittelumallia, jonka avulla uusien aineistoluokkien lis¨aa¨ minen onnistuu yksinkertaisesti. Seuraavaksi aloitettiin varsinaisen palvelimen toteutus. Palvelimen toiminta p¨aa¨ tettiin perustaa tietovuoarkkitehtuurin yksinkertaistettuun versioon, liukuhihna-arkkitehtuuriin. K¨ayt¨ann¨oss¨a se toimii siten, ett¨a asiakas kutsuu eri moduuleita sen p¨aa¨ luokasta luodun instanssin kautta. Parametreikseen moduulit saavat kulloinkin k¨asittelyss¨a olevien aineistojen joukon ja asiakkaalta saadut asetukset. Moduulien toteutusta ei sin¨ans¨a rajoiteta, mutta tyypillisesti ne k¨asittelev¨at avoimena olevien aineistojen joukkoa jollain tavalla – LUKU 6. YHTEENVETO 53 ne voivat esimerkiksi avata uusia aineistoja, hakea niist¨a tietoa, muokata saatuja tuloksia tai muuntaa tuloksia eri formaatteihin ja palauttaa asiakkaalle. Liukuhihna-arkkitehtuurin ansiosta moduulien lis¨aa¨ minen ja muokkaaminen saatiin pidetty¨a yksinkertaisena. Tutkielman lopuksi pohdittiin, miten hyvin palvelimen toteutuksessa p¨aa¨ stiin tavoitteisiin, millaisia ongelmia toteutuksessa on ja miten palvelinta voisi kehitt¨aa¨ . Geneerisyyden osalta havaittiin, ett¨a palvelimeen onnistuttiin l¨oyt¨am¨aa¨ n yleisk¨aytt¨oinen konsepti sek¨a aineistoille ett¨a niihin kohdistuville operaatioille. Geneerisyydest¨a tosin seuraa my¨os toteutuksen pahimmat ongelmat, sill¨a kaikkien erityyppisten aineistojen esitt¨aminen yhdenmukaisen rajapinnan kautta v¨akisinkin rajoittaa my¨os niiden soveltamista. Moduulien l¨ahes t¨aysin vapaan toiminnan todettiin antavan paitsi paljon mahdollisuuksia palvelimen toimintaan, niin my¨os luovan omia ongelmiaan, sill¨a esimerkiksi v¨aa¨ r¨ass¨a j¨arjestyksess¨a ajettaessa moduulit voivat tuottaa k¨aytt¨okelvottomia tuloksia. Yhten¨a ratkaisuna t¨ah¨an ehdotettiin tietovuoarkkitehtuurin laajempaa noudattamista, miss¨a moduulien v¨alinen kommunikaatio hoidettaisiin erillisill¨a putkilla. T¨all¨oin niiden tuottamia tuloksia voitaisiin esimerkiksi arvottaa erilaisilla metriikoilla. Muiden kehitystavoitteiden osalta palvelimen havaittiin olevan onnistunut, sill¨a se kykenee suoriutumaan sille asetetuista vaatimuksista. Samalla tosin todettiin, ett¨a esimerkiksi aineistojen etsimiseen tai yhdist¨amiseen tarkoitetut moduulit soveltuvat nykytoteutuksella l¨ahinn¨a yll¨apidon helpottamiseen. T¨ast¨a saatiinkin yksi mahdollinen kehityskohde: palvelimesta voitaisiin kehitt¨aa¨ itsen¨aisemmin toimiva tiedon louhija, mik¨a tosin tekisi tiedon oikeellisuuden toteamisesta eritt¨ain vaikeaa. Muina mahdollisina kehityskohteina palvelimelle todettiin WFS-protokollan t¨aydellinen tukeminen ja ominaisuuspohjaisen haun lis¨aa¨ minen. Hakumahdollisuuksien laajentamisen tosin havaittiin aiheuttavan aikaisemmin mainitun geneerisyyteen liittyv¨an ongelman, sill¨a kaikki aineistotyypit eiv¨at tue ominaisuuksien perusteella hakemista. T¨allaista toiminnallisuutta varten palvelimeen tarvittaisiinkin j¨arjestelm¨a, jonka avulla aineistoja voisi luokitella sen mukaan, mit¨a toiminnallisuuksia ne tukevat. L¨ahteet [1] International Association of Oil & Gas Producers Geomatics Committee, OGP Geomatics Committee. http://nsidc.org/data/atlas/epsg_4326.html. Viitattu 29.8.2011. [2] The National Snow and Ice Data Center, EPSG:4326. http://nsidc.org/ data/atlas/epsg_4326.html. Viitattu 29.8.2011. [3] H¨akli, P., Puupponen, J., Koivula, H., Poutanen, M., Suomen geodeettiset koordinaatistot ja niiden v¨aliset muunnokset. Geodeettinen laitos, Masala, 2009. [4] International Organization for Standardization, ISO 19136:2007. Geographic information – Geography Markup Language (GML). http://www.iso.org/iso/ iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber= 32554, 2010. [5] Euroopan komissio, About INSPIRE. http://inspire.jrc.ec.europa.eu/ index.cfm/pageid/48. Viitattu 25.8.2011. [6] Julkisen hallinnon tietohallinnon neuvottelukunta, JHS-suositukset. http://www. jhs-suositukset.fi/. Viitattu 29.8.2011. [7] Crockford, D., Request for Comments: 4627. The application/json Media Type for JavaScript Object Notation (JSON). http://www.ietf.org/rfc/rfc4627.txt, 2006. ¨ LAHTEET 55 [8] The Open Geospatial Consortium, OGC Vision, Mission, & Goals. http://www. opengeospatial.org/ogc/vision. Viitattu 25.8.2011. [9] The PHP Group, PHP Manual: General Information. http://fi2.php.net/ manual/en/faq.general.php. Viitattu 8.9.2011. [10] Esri, ESRI Shapefile Technical Description. ESRI, 1998. [11] Vretanos, P. A. (toim.), Web Feature Service Implementation Specification version 1.1.0. Open Geospatial Consortium Inc, 2005. R Web Map Server Implementation Specification [12] Beaujardiere, J. (toim.), OpenGIS version 1.3.0. Open Geospatial Consortium Inc, 2005. [13] Maanmittauslaitos, Paikkatietotekniikan sanasto. http://www.nls.fi/ ptk/pyk-kasikirja/sanasto/sanasto.htm/#paikkatieto. Viitattu 25.8.2011. [14] Saarento, P., Museoiden inventointiportaalin kehitt¨aminen aloitettu. http://www.turku.fi/Public/default.aspx?contentid= 253271&nodeid=16927. Viitattu 25.8.2011. [15] Saarento, P., Turun maakuntamuseon kulttuuriymp¨arist¨otietokannan kehitt¨aminen: hankesuunnitelma. Turun Maakuntamuseo, 2008. [16] Turun kaupunki/Kulttuurilautakunta, Paikkatietokeskus Lounaispaikan tarjouksen hyv¨aksyminen. P¨oyt¨akirja 19.05.2010 § 106, 2010. [17] Varsinais-Suomen maakuntahallitus, Yhteisty¨osopimuksen allekirjoittaminen Varsinais-Suomen maakuntamuseon kulttuuriymp¨arist¨otietokantapilotin kehitt¨amisest¨a. P¨oyt¨akirja 26.4.2010 § 77, 2010. [18] Turun maakuntamuseo, Rakennusinventointi. http://www05.turku.fi/ museo/Sarakum/rakennus.htm. Viitattu 25.8.2011. ¨ LAHTEET 56 [19] Forsius, J., Arvottamisesta osana rakennetun ymp¨arist¨on kulttuurihistoriallista inventointia. Teoksessa (Elo T., Magga P. (toim.)) Eletty, koettu maisema - n¨ak¨okulmia saamelaiseen kulttuurimaisemaan. Lapin ymp¨arist¨okeskus, Rovaniemi, 2007. [20] Kiinteist¨onmuodostamislaki 12.4.1995/554, 2 § (12.4.1995/554), 1995. [21] Kiinteist¨orekisterilaki 16.5.1985/392, 2 § (12.4.1995/559), 1995. [22] Maanmittauslaitos, Toimitusmenettelyn k¨asikirja. http://www. maanmittauslaitos.fi/toimitusmenettelynkasikirja. Viitattu 2.8.2011. [23] Julkisen hallinnon tietohallinnon neuvottelukunta, JHS 138 Kiinteist¨otunnus, m¨aa¨ r¨aalatunnus ja k¨aytt¨ooikeusyksikk¨otunnus (versio 31.9.2005). http://docs. jhs-suositukset.fi/jhs-suositukset/JHS138/JHS138.pdf, 2005. [24] Sencha, Ext JS 3.4 Cross-Browser Rich Internet Application Framework. http: //www.sencha.com/products/extjs3/. Viitattu 31.8.2011. [25] Dehnert, J. C., Stepanov, A. A., Fundamentals of Generic Programming. International Seminar on Generic Programming, Schloss Dagstuhl, Leibniz, Saksa, 1998. [26] Dos Reis, G., J¨arvi J., What Is Generic Programming?. Object-Oriented Programming, Systems, Languages and Applications -konferenssi, San Diego, Kalifornia, 2005. [27] Bergmann, S., Kniesel, G., GAP: Generic Aspects for PHP. Third European Workshop on Aspects in Software, Universiteit Twente, Enschede, Alankomaat, 2006. [28] Musser, D. R., Stenov, A. A., Generic Programming. First International Joint Conference of ISSAC-99 and AAECC-6, Rooma, Italia, 1988. [29] Koskimies, K., Mikkonen, T., Ohjelmistoarkkitehtuurit. Talentum, Helsinki, 2005. ¨ LAHTEET 57 [30] Maanmittauslaitos, Rajapintapalvelut. http://www.maanmittauslaitos. fi/aineistot-palvelut/rajapintapalvelut. Viitattu 6.9.2011. [31] Martin, R. C., Agile Software Development. Principles, Patterns, and Practices. Prentice Hall, Upper Saddle River, NJ, USA, 2003. [32] Garlan, D., Shaw, M., An Introduction to Software Architecture. Carnegie Mellon University Pittsburgh, PA, USA, 1994.
© Copyright 2024