KANSALLINEN MAASTOTIETOKANTA KMTK-3D/su Yksittäisen kohteen rikastaminen pistepilvigeometrialla
18.12.2018 1 1. Yleistä Selvityksessä selvitettiin PgPointCloud-laajennoksen soveltuvuutta yksittäisten kohteiden pistepilvien tallennuksessa ja verrattiin sitä tiedostoina tallennettaviin pistepilviin. Pohdittiin myös, miten lähdettäisiin sovittamaan yksittäisten kohteiden pistepilvien tietorakenteita KMTK-koontikannan tietomalleihin. Tiedontuottajat voisivat tuoda pistepilviä KMTK:aan Tallennuspalvelun kautta muiden aineistojen tapaan. Pistepilvien tallennuksessa olisi aina kyse KMTK-kohteiden rikastamisesta pistepilvigeometrialla, eikä pistepilvi voisi olla kohteen ainoa geometria. Tietomallissa pistepilvigeometriat olisivat oma entiteettinsä, joka linkittyy pääkohteeseen viiteavaimella. Tämä vastaa nykyistäkin geometrioiden käsittelyä. Yksittäisten kohteiden tapauksessa kohdetta kuvaavat pistepilvet linkittyisivät pääkohteeseen. Pistepilvi voidaan tallentaa joko tietokantaan PostgreSQL:n PgPointCloud-laajennoksen avulla tai viittauksena pistepilvitiedoston sijaintiin levyllä. 2. Käyttötarina KMTK-aineistojen loppukäyttäjänä voin noutaa kohteita Kansallisesta maastotietokannasta. Valmiiden 3D-vektoreiden ohella, voin valita ladattavaksi kohdetta kuvaavan pistepilviaineiston, joka sisältää pisteitä vain valitsemastani kohteesta. Pistepilven avulla voin esimerkiksi tarkastella 3D-vektoroidun kohteen oikeellisuutta ja tarvittaessa vektoroimaan kohteen itse. 3. PgPointCloud PgPointcloud on PostgreSQL:n pistepilvilaajennos, joka mahdollistaa pistepilvigeometrioiden tallentamisen yksittäisinä pisteinä tai pistejoukkoina. Yksittäisinä pisteinä tallennettaessa tietokantaan tulisi valtava määrä rivejä, mutta pistejoukkoina tallennettaessa määrä saadaan kompaktoitua miljardeista riveistä muutamaan miljoonaan riviin, mikä on indeksoinnin ja tallennustilan käytön kannalta toimivampaa. Oheisessa linkissä on esitelty PostgreSQL:n käyttöä pistepilviaineiston tapauksessa: http://s3.cleverelephant.ca/foss4gna2013-pointcloud.pdf 3.1. Tietomalli Suunnittelussa lähdettiin sovittamaan pistepilvikohteita KMTK-rakennusten tietomalliin. Alustavasti tarkoituksena oli muodostaa pistepilvigeometrioille oma taulunsa, johon viitattaisiin RakennuksenOsakohteista, kuten on jo tehty 3D-geometrioiden tapauksessa. Tässä tapauksessa viittauksilla ei ole suurempaa käytännön merkitystä, koska MTK-rakennuksilla on aina yksi osa.
18.12.2018 2 3.2. Tallennusasetukset Tietokantaan tallennettavien pisteiden tietosisältöä voidaan muokata eräänlaisella skeematiedostolla, johon viitataan jokaisesta pistepilvikohteesta. Skeema pätee yhden rivin geometriaan, eli PcPatchtyypissä tapauksissa, skeema pätee pistejoukkoon ja PcPoint-tyypissä tapauksissa yksittäiseen pisteeseen. Skeema on melko vapaasti muokattavissa, mutta sen olisi tarkoitus sisältää vain sellaiset tiedot, mitä kantaan on tarkoitus tallentaa jokaisesta pisteestä. Minimissään skeeman olisi hyvä sisältää x-, y-, z-
18.12.2018 3 koordinaattitiedot sekä intensiteetti. Skeema insertoidaan PgPointCloudin omaan skeemamäärittelytauluun, jonka indeksiin viitataan kohteissa. Ohessa esimerkki yksinkertaisesta pisteskeemasta: <?xml version="1.0" encoding="utf-8"?> <pc:pointcloudschema xmlns:pc="http://pointcloud.org/schemas/pc/1.1" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <pc:position>1</pc:position> <pc:size>4</pc:size> X coordinate as a long integer. You must use the scale and offset information of the header to determine the double value. <pc:name>x</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> <pc:position>2</pc:position> <pc:size>4</pc:size> Y coordinate as a long integer. You must use the scale and offset information of the header to determine the double value. <pc:name>y</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> <pc:position>3</pc:position> <pc:size>4</pc:size> Z coordinate as a long integer. You must use the scale and offset information of the header to determine the double value. <pc:name>z</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> <pc:position>4</pc:position> <pc:size>2</pc:size> The intensity value is the integer representation of the pulse return magnitude. This value is optional and system specific. However, it should always be included if available. <pc:name>intensity</pc:name> <pc:interpretation>uint16_t</pc:interpretation> <pc:scale>1</pc:scale> </pc:pointcloudschema>
18.12.2018 4 3.3. Patchin koko Yhteen patchiin pystyy käytännössä tallentamaan miten monta pistettä tahansa, mutta optimaalisin toteutus saadaan käyttämällä noin 400-600 pisteen patcheja. Tällöin PostgreSQL:n page pysyy alle 8 kb:n kokoisena. Vakio page size on juuri 8 kb. Patchin koko sovitettaisiin aina siten, että se varmasti mahtuu tietokantaan määritettyyn pageen. Tällöin yhtä kohdetta kuvaavaa pistepilveä kohden voisi olla useita patcheja, mikä olisi käytännössä aina tilanne tarkempien pistepilvien tapauksessa, mitä yksittäisten kohteiden pistepilvet tyypillisesti olisivat. 4. Pistepilvien tallennus tiedostona Pistepilvi voidaan tallentaa levylle tiedostona, jonka sijaintiin voidaan viitata tietokannan objekteista. Tallennusprosessissa tuotava tiedosto vietäisiin pakatussa muodossa tiedostopalvelimen levylle. Prosessissa tarkistettaisiin onko tiedosto pakattu. Jos tiedostoa ei ole pakattu, pakataan se ennen tiedostopalvelimen levylle vientiä. Tietomallissa geometriakentän tilalle tulisi tekstikenttä, jossa on levyllä olevan tiedoston sijainti URLmuodossa. 5. Käyttötapaukset Jokaisessa käyttötapauksessa käyttäjä toisi las/laz-tiedoston tuontikäyttöliittymästä, jossa annettaisiin myös viittaus KMTK-kohteeseen joko tunnisteena tai osoittamalla kohde kartalta. Kartalta valittaessa käyttäjälle ehdotettaisiin tuotavan pistepilvikohteen bounding boxia leikkaavia KMTK-kohteita Case Pistepilven tallennus tietokantaan yksittäisinä pisteinä Käsittelyprosessi Jaetaan pistepilvi yksittäisiin pisteisiin. Insertoidaan jokaista pistettä kohden rivi, johon merkitään viittaus KMTK-kohteeseen. Pistepilven tallennus tietokantaan pistejoukkoina Pistepilven tallennus tiedostona ja viittauksen lisäys kohteeseen tietokannassa Jaetaan pistepilvi 400-600 pisteen kuutioihin. Jako tapahtuisi arvioimalla sopiva kuutiokoko pistepilven kokonaispistemäärän ja - tilavuuden perusteella. Muodostetaan insertointilauseet jokaiselle kuutiolle erikseen, joille annetaan viittaus KMTK-kohteeseen. Viedään pakattu pistepilvitiedosto tietovarastoon. Pakkaamaton tiedosto pakataan. Insertoidaan kohteelle viittaus, jossa on tiedoston URL tai nimi.
18.12.2018 5 6. Johtopäätökset Yksittäisten kohteiden pistepilvien tallentamisesta tietokantaan ei saada käyttäjän kannalta juuri mitään lisäarvoa, koska kohteet halutaan noutaa kokonaisina. Tietokantaan tallennus olisi perusteltua, jos niistä haluttaisiin noutaa pienempiä paloja. Tämä voisi tulla kyseeseen laajempien alueiden, kuten ilmapistepilven yhteydessä. Yksityiskohtaiset pistepilvet vaativat kuitenkin paljon tallennustilaa, mikä tulisi ottaa huomioon tuotantokelpoisen sovellusympäristön toteutuksessa. Selvityksen perusteella yksittäisten kohteiden pistepilvigeometrioiden tallentaminen tiedostoina on mahdollista ja ehdotetulla tavalla melko yksinkertaista. Pilottitoteutus voitaisiin lisätä nykyisiin KMTK:n tietomalleihin ja tallennuksen tekninen toteutus Tallennuspalvelun kautta toimivaksi. Soveltuvia kohdeluokkia voisivat olla sillat tai muut yksilöitävissä olevat rakenteet, joiden tarkkoja toteumapistepilviä tyypillisesti mitataan esimerkiksi maa- tai UAV-laserkeilaimen avulla.