MapBuffet - Avoimen datan noutopöytä

Huvittaisikohan ketään kokeilla, voisiko tällainen idea toimia?

Laitoin ladattavaksi Spatialite-tietokannan ja sitä käyttävän QGis-projektitiedoston. Jos laittaa molemmat tiedostot mihin tahansa yhteiseen hakemistoon, niin QGis:in pitäisi näyttää koko projekti kaikkine karttatasoineen, kunhan vain avaa projektitiedoston. QGis-version 1.8 pitäisi riittää, vaikka projekti onkin tehty dev-versiolla 1.9.0

http://latuviitta.org/documents/Helsinki-atlas.sqlite
http://latuviitta.org/documents/Helsinki-atlas.qgs

Kokeilussa demoillaan useita asioita:

  • Rasterit ja vektorit kaikki samassa Spatialite-tietokannassa
  • Helppoa asennettavuutta: lataa, käynnistä ja käytä
  • Eri lähteistä peräisin olevien aineistojen helppoa ja läpinäkyvää yhteiskäyttöä
    (OSM, MML, HRI, latuviitta.org)
  • Monikielisyystuki; MML:n taustakarttatasoille voidaan piirtää tienimet OSM:sta tai maastotietokannasta, suomeksi, ruotsiksi tai vaikka kaksikielisesti
  • Pari muuta, vielä toteuttamatonta ideaa.

Tässä vaiheessa kiinnostaisi tietää, käynnistyyko kartta QGis-projektitiedostosta kohtuullisessa ajassa ja tulevatko kaikki tasot näkyviin. Jossain vaiheessa minulle kävi niin, että rasteritasot näkyivät vasta, kun avasi jokaisen tason ominaisuudet-ikkunan ja sulki sen. Mitään muutoksia ei tarvinnut tehdä, mutta joka tason asetuksissa oli vierailtava. Käynnistysnopeutta parantavia muutoksia on jo tehtykin GDAL:iin, mutta ne eivät ole vielä mukana edes QGis:in kehitysversiossa.

Toinen projektitiedosto, jossa on esimerkin vuoksi luokiteltu maastotietokannan tiet tieluokan mukaan
http://latuviitta.org/documents/Helsinki-atlas2.qgs

Kuulostaa kyllä hyödylliseltä. Kokeilin itse nopeasti lataamalla tiedostot ja avaamalla QGIS:in projekti-tiedoston. Rasterit (n=6) eivät latautuneet ollenkaan, vaan näytölle ilmeistyi seuraava virheilmoitus:

http://i.imgur.com/NbBkR.png

Polygoni- (kaupunginosat + karttalehdet) ja pistepiirteet (parkkilippuautomaatit) avautuivat ja piirtyivät oikein. Viivapiirteet (vägnamn + mtk_tienimet + osm_tienimet + osm_tiet + mtk_tiet) avautuivat, mutta eivät piirry ruudulle. Nopea ominaisuuksien säätäminen ei auttanut, mutta testailin vain hyvin nopeasti.

Testasin seuraavalla kokoonpanolla:

OS: openSUSE 12.2 x86_64
QGIS version: 1.8.0-Lisboa
Compiled against Qt: 4.8.1
Compiled against GDAL/OGR: 1.9.1
GEOS Versio: 3.3.5
SpatiaLite Version: 2.4.0

Kiitos, hyvältä idealta vaikuttaa. Ubuntu 12.04:ssa QGIS 1.8.0-Lisboa:lla suhteellisen heikkotehoisella läppärillä näkyivät ensin vain karttalehtien neliöt ja ne MML:n tunnukset. Kesti varsin kauan zoomailla sisään, mutta sitten alkoivat tiet näkyä, ja liikkuminen ja zoomailu tapahtuu kohtuuvauhdilla. Rasterikarttaa ei näy, vaikka kävin avaamassa ja sulkemassa “karttalehdet”-tason ja sen alla olevien Ominaisuudet. Virheilmoituksia ei tule.

Kiitoksia testauksesta.

Teillä ja tienimillä on mittakaavarajoitus 1:50000, joten ne saattavat näkyä, jos lähennät näkymää.

Rasterlite-tasoilla ei näytä toimivan sama tapa kuin Spatialite-vektoreilla osoittaa suhteellisia polkuja, eli että datatiedostoja etsitään suhteessa siihen hakemistoon, jossa QGis-projektitiedosto on. Kokeile muokata projektitiedostosta näitä rivejä

 <datasource>RASTERLITE:./Helsinki-atlas.sqlite,table=t0005</datasource>

joko poistamalla ./ tai jos sekään ei toimi, laittamalla RASTERLITE:n perään oman systeemisi absoluuttinen polku sqlite-tiedostolle.

 <datasource>RASTERLITE:Helsinki-atlas.sqlite,table=t0005</datasource>

Toivottavasti absoluuttista polkua ei tarvita, kun tästä pitäisi tulla helppo asentaa.

Spatialite 2.4.0 tuntuu pahalta koska Spatialitellä on surkea yhteensopivuus taaksepäin. Helsinki-atlas on tehty versiolla 3.0. Ainakin on varmaa, että piakkoin julkaistavalla 4.0-versiolla tehdyt tietokannat eivät tule toimimaan edes 3.0-version Spatialite-binääreillä. Onneksi samalla kertaa julkaistaa apuohjelmat koko tietokannan muuntamiseksi versiosta toiseen.

Harmi. Säädin taustakarttatasot valmiiksi projektitiedostoon niin, että ne syttyvät ja sammuvat järkevissä mittakaavarajoissa eikä koskaan piirretä kuin yhden mittakaavatason rasterit.
Kokeile pystytkö lisäämään rasterit käsin Lisää rasteritaso -toiminnolla Rasterlite-ajurilla. Jos Helsinki-atlas.sqlite:n avaaminen tuo näkyviin listan kaikista rasteritasoista, niin ne voi lisätä vaikka kaikki kerralla kartalle.

QGIS 1.8:lla Windows 7 64-bit ympäristössä tulee sama virheilmoitus kuin edellä on esitetty, mutta rasteritasot pystyy lisäämään käsin .sqlite tiedostosta.

Minulla on spatialite-versio (libspatialite3) 3.0.0~beta20110817-3 ja librasterlite 1.1~svn11-1build2

Kun QGIS käynnistyy, kaikissa tasoissa näkyvät pienen hetken ruksit, mutta sitten ruksit katoavat muista paitsi ,table=* -tasoista.

Ei auta rasteritasoihin ./:n poisto eikä absoluuttisen polun käyttö, vektoritasot taas toimivat sekä ./ -alun kanssa että ilman.

Minullakin onnistuu rasteritasojen lisääminen käsin.

Kun käsin lisäämisen jälkeen katsoin projektin asetuksia (alla), päätin kokeilla tuon mallin mukaan ./ -alkuliitteen poistamisen lisäksi .sqlite -liitteen poistamista projektitiedostosta. Kun tein niin, sain saman virheilmoituksen kuin muistikas ja jlehtoma.

    <legend updateDrawingOrder="false">
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="RASTERLITE:Helsinki-atlas,table=t0160" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="RASTERLITE_Helsinki_atlas_table_t016020120911111810658" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="RASTERLITE:Helsinki-atlas,table=t0080" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="RASTERLITE_Helsinki_atlas_table_t008020120911111810602" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="RASTERLITE:Helsinki-atlas,table=t0040" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="RASTERLITE_Helsinki_atlas_table_t004020120911111810518" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="RASTERLITE:Helsinki-atlas,table=t0020" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="RASTERLITE_Helsinki_atlas_table_t002020120911111810434" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="RASTERLITE:Helsinki-atlas,table=t0010" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="RASTERLITE_Helsinki_atlas_table_t001020120911111810164" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="RASTERLITE:Helsinki-atlas,table=t0005" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="RASTERLITE_Helsinki_atlas_table_t000520120911111808918" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="true" checked="Qt::Unchecked" name="kaupunginosat" showFeatureCount="0">
            <filegroup open="true" hidden="false">
                <legendlayerfile isInOverview="0" layerid="kaupunginosat20120909175449059" visible="0"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="true" checked="Qt::Unchecked" name="parkkilippuautomaatit" showFeatureCount="0">
            <filegroup open="true" hidden="false">
                <legendlayerfile isInOverview="0" layerid="parkkilippuautomaatit20120907212733993" visible="0"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Unchecked" name="vägnamn" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="mtk_tiet20120907233720473" visible="0"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="mtk_tienimet" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="mtk_tiet20120907213333293" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name="osm_tienimet" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="osm_tiet20120907213333685" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="true" checked="Qt::Checked" name="osm_tiet" showFeatureCount="0">
            <filegroup open="true" hidden="false">
                <legendlayerfile isInOverview="0" layerid="osm_tiet20120907212733102" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="true" checked="Qt::Checked" name="mtk_tiet" showFeatureCount="0">
            <filegroup open="true" hidden="false">
                <legendlayerfile isInOverview="0" layerid="mtk_tiet20120907212732154" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="true" checked="Qt::Checked" name="karttalehdet" showFeatureCount="0">
            <filegroup open="true" hidden="false">
                <legendlayerfile isInOverview="0" layerid="karttalehdet20120907212731960" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name=",table=t0160" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="_table_t016020120909162052670" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name=",table=t0080" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="_table_t008020120909162052125" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name=",table=t0040" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="_table_t004020120907205516014" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name=",table=t0020" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="_table_t002020120907205515341" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name=",table=t0010" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="_table_t001020120907205514284" visible="1"/>
            </filegroup>
        </legendlayer>
        <legendlayer drawingOrder="-1" open="false" checked="Qt::Checked" name=",table=t0005" showFeatureCount="0">
            <filegroup open="false" hidden="false">
                <legendlayerfile isInOverview="0" layerid="_table_t000520120907205510262" visible="1"/>
            </filegroup>
        </legendlayer>
    </legend>

Nuo on selitteen määrittelyjä, datasourcet ovat alempana projektitiedostossa.
Jos tallentaa toiselle nimelle sellaisen projektin, johon on saanut rasterit näkymään ja vertailee tiedostoja, niin löytää ehkä paikan jota pitäisi säätää. Minä kirjoitin tästä jo QGIs-postituslistalle mutta en saanut ketään kiinnostumaan ongelmasta.

Kevyesti kommentoitu Windows-komentojono, joka luo tuon Helsinki-atlas -tietokannan automaattisesti. Kommenteista pitäisi suurin piirtein selvitä mitä tapahtuu, miksi, ja mistä kohdasta pitää räätälöidä, jotta saa tietokannan luoduksi eri paikasta ja itselle mieleisistä kartta-aineistoista. Jos vaikka metsätaloussuunnitelman teko kiinnostaa, niin kannattaa ottaa peruskartat ja ilmakuvat ja jättää parkkilippuautomaatit pois.
http://latuviitta.org/documents/tee_helsinki-atlas.txt

Kellotustulos oli tasan kymmenen minuuttia tehokkaalla kannettavalla. Vanhalla ja heikolla kannettavalla taisi mennä 40 minuuttia.

Vaikuttaa siltä, että ihan helposti .qgs tiedoston muuttaminen ei onnistu, siis siten, että muutamaa riviä muuttamalla saisi QGIS 1.8 rasteritason piirtämään. Vaikuttaa siltä, että jos tallettaa tason määrittelyn ja vertaa tuossa tiedostossasi olevaan vastaavan tason määrittelyyn, eroja on paljon, mm. siinä, että käytät -tagia kun taas QGIS:n tuottamassa on -tagi ja huomattavasti pidempi määrittely.

En minä sitä projektitiedostoa ole itse tehnyt, erot johtuvat ilmeisesti sitten tästä:

Tuota voisi muokata siten, että kuntanimet, joista (joiden alueelta) aineisto tuotetaan, annettaisiin parametrina tai syötetiedostona. Jollain pythonilla gdal/ogr -kirjastoa hyödyntäen ehkä onnistuisi? Eikös aineistossa joku kunta- tms. jako ollut mukana?

Rasteri toimii minulla kun muuttaa rasterrenderer -määrittelyt rasterproperties -määrittelyiksi, kopioitu käsin lisättyjen tasojen projektitiedostosta.


--- Helsinki-atlas.qgs	2012-09-10 23:32:32.000000000 +0300
+++ Helsinki-atlas-muokattu.qgs	2012-09-11 12:22:14.714786738 +0300
@@ -117,9 +117,42 @@
             <transparencyLevelInt>255</transparencyLevelInt>
             <customproperties/>
             <provider>gdal</provider>
-            <rasterrenderer opacity="1" alphaBand="-1" blueBand="3" greenBand="2" type="multibandcolor" invertColor="0" redBand="1">
-                <rasterTransparency/>
-            </rasterrenderer>
+            <rasterproperties>
+                <mDrawingStyle>MultiBandColor</mDrawingStyle>
+                <mColorShadingAlgorithm>UndefinedShader</mColorShadingAlgorithm>
+                <mInvertColor boolean="false"/>
+                <mRedBandName>Band 1</mRedBandName>
+                <mGreenBandName>Band 2</mGreenBandName>
+                <mBlueBandName>Band 3</mBlueBandName>
+                <mGrayBandName>Not Set</mGrayBandName>
+                <mStandardDeviations>0</mStandardDeviations>
+                <mUserDefinedRGBMinimumMaximum boolean="false"/>
+                <mRGBMinimumMaximumEstimated boolean="true"/>
+                <mUserDefinedGrayMinimumMaximum boolean="false"/>
+                <mGrayMinimumMaximumEstimated boolean="true"/>
+                <mContrastEnhancementAlgorithm>NoEnhancement</mContrastEnhancementAlgorithm>
+                <contrastEnhancementMinMaxValues>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                </contrastEnhancementMinMaxValues>
+                <mNoDataValue mValidNoDataValue="true">-32768.000000</mNoDataValue>
+                <singleValuePixelList>
+                    <pixelListEntry pixelValue="-32768.000000" percentTransparent="100"/>
+                </singleValuePixelList>
+                <threeValuePixelList>
+                    <pixelListEntry red="-32768.000000" blue="-32768.000000" green="-32768.000000" percentTransparent="100"/>
+                </threeValuePixelList>
+            </rasterproperties>
             <rasterresampler maxOversampling="2"/>
         </maplayer>
         <maplayer minimumScale="2600" maximumScale="6600" type="raster" hasScaleBasedVisibilityFlag="1">
@@ -143,9 +176,42 @@
             <transparencyLevelInt>255</transparencyLevelInt>
             <customproperties/>
             <provider>gdal</provider>
-            <rasterrenderer opacity="1" alphaBand="-1" blueBand="3" greenBand="2" type="multibandcolor" invertColor="0" redBand="1">
-                <rasterTransparency/>
-            </rasterrenderer>
+            <rasterproperties>
+                <mDrawingStyle>MultiBandColor</mDrawingStyle>
+                <mColorShadingAlgorithm>UndefinedShader</mColorShadingAlgorithm>
+                <mInvertColor boolean="false"/>
+                <mRedBandName>Band 1</mRedBandName>
+                <mGreenBandName>Band 2</mGreenBandName>
+                <mBlueBandName>Band 3</mBlueBandName>
+                <mGrayBandName>Not Set</mGrayBandName>
+                <mStandardDeviations>0</mStandardDeviations>
+                <mUserDefinedRGBMinimumMaximum boolean="false"/>
+                <mRGBMinimumMaximumEstimated boolean="true"/>
+                <mUserDefinedGrayMinimumMaximum boolean="false"/>
+                <mGrayMinimumMaximumEstimated boolean="true"/>
+                <mContrastEnhancementAlgorithm>NoEnhancement</mContrastEnhancementAlgorithm>
+                <contrastEnhancementMinMaxValues>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                </contrastEnhancementMinMaxValues>
+                <mNoDataValue mValidNoDataValue="true">-32768.000000</mNoDataValue>
+                <singleValuePixelList>
+                    <pixelListEntry pixelValue="-32768.000000" percentTransparent="100"/>
+                </singleValuePixelList>
+                <threeValuePixelList>
+                    <pixelListEntry red="-32768.000000" blue="-32768.000000" green="-32768.000000" percentTransparent="100"/>
+                </threeValuePixelList>
+            </rasterproperties>
             <rasterresampler maxOversampling="2"/>
         </maplayer>
         <maplayer minimumScale="6600" maximumScale="13000" type="raster" hasScaleBasedVisibilityFlag="1">
@@ -169,9 +235,42 @@
             <transparencyLevelInt>255</transparencyLevelInt>
             <customproperties/>
             <provider>gdal</provider>
-            <rasterrenderer opacity="1" alphaBand="0" blueBand="3" greenBand="2" type="multibandcolor" invertColor="0" redBand="1">
-                <rasterTransparency/>
-            </rasterrenderer>
+            <rasterproperties>
+                <mDrawingStyle>MultiBandColor</mDrawingStyle>
+                <mColorShadingAlgorithm>UndefinedShader</mColorShadingAlgorithm>
+                <mInvertColor boolean="false"/>
+                <mRedBandName>Band 1</mRedBandName>
+                <mGreenBandName>Band 2</mGreenBandName>
+                <mBlueBandName>Band 3</mBlueBandName>
+                <mGrayBandName>Not Set</mGrayBandName>
+                <mStandardDeviations>0</mStandardDeviations>
+                <mUserDefinedRGBMinimumMaximum boolean="false"/>
+                <mRGBMinimumMaximumEstimated boolean="true"/>
+                <mUserDefinedGrayMinimumMaximum boolean="false"/>
+                <mGrayMinimumMaximumEstimated boolean="true"/>
+                <mContrastEnhancementAlgorithm>NoEnhancement</mContrastEnhancementAlgorithm>
+                <contrastEnhancementMinMaxValues>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                </contrastEnhancementMinMaxValues>
+                <mNoDataValue mValidNoDataValue="true">-32768.000000</mNoDataValue>
+                <singleValuePixelList>
+                    <pixelListEntry pixelValue="-32768.000000" percentTransparent="100"/>
+                </singleValuePixelList>
+                <threeValuePixelList>
+                    <pixelListEntry red="-32768.000000" blue="-32768.000000" green="-32768.000000" percentTransparent="100"/>
+                </threeValuePixelList>
+            </rasterproperties>
             <rasterresampler maxOversampling="2"/>
         </maplayer>
         <maplayer minimumScale="13000" maximumScale="30000" type="raster" hasScaleBasedVisibilityFlag="1">
@@ -195,9 +294,42 @@
             <transparencyLevelInt>255</transparencyLevelInt>
             <customproperties/>
             <provider>gdal</provider>
-            <rasterrenderer opacity="1" alphaBand="-1" blueBand="3" greenBand="2" type="multibandcolor" invertColor="0" redBand="1">
-                <rasterTransparency/>
-            </rasterrenderer>
+            <rasterproperties>
+                <mDrawingStyle>MultiBandColor</mDrawingStyle>
+                <mColorShadingAlgorithm>UndefinedShader</mColorShadingAlgorithm>
+                <mInvertColor boolean="false"/>
+                <mRedBandName>Band 1</mRedBandName>
+                <mGreenBandName>Band 2</mGreenBandName>
+                <mBlueBandName>Band 3</mBlueBandName>
+                <mGrayBandName>Not Set</mGrayBandName>
+                <mStandardDeviations>0</mStandardDeviations>
+                <mUserDefinedRGBMinimumMaximum boolean="false"/>
+                <mRGBMinimumMaximumEstimated boolean="true"/>
+                <mUserDefinedGrayMinimumMaximum boolean="false"/>
+                <mGrayMinimumMaximumEstimated boolean="true"/>
+                <mContrastEnhancementAlgorithm>NoEnhancement</mContrastEnhancementAlgorithm>
+                <contrastEnhancementMinMaxValues>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                </contrastEnhancementMinMaxValues>
+                <mNoDataValue mValidNoDataValue="true">-32768.000000</mNoDataValue>
+                <singleValuePixelList>
+                    <pixelListEntry pixelValue="-32768.000000" percentTransparent="100"/>
+                </singleValuePixelList>
+                <threeValuePixelList>
+                    <pixelListEntry red="-32768.000000" blue="-32768.000000" green="-32768.000000" percentTransparent="100"/>
+                </threeValuePixelList>
+            </rasterproperties>
             <rasterresampler maxOversampling="2"/>
         </maplayer>
         <maplayer minimumScale="30000" maximumScale="100000" type="raster" hasScaleBasedVisibilityFlag="1">
@@ -221,9 +353,42 @@
             <transparencyLevelInt>255</transparencyLevelInt>
             <customproperties/>
             <provider>gdal</provider>
-            <rasterrenderer opacity="1" alphaBand="0" blueBand="3" greenBand="2" type="multibandcolor" invertColor="0" redBand="1">
-                <rasterTransparency/>
-            </rasterrenderer>
+            <rasterproperties>
+                <mDrawingStyle>MultiBandColor</mDrawingStyle>
+                <mColorShadingAlgorithm>UndefinedShader</mColorShadingAlgorithm>
+                <mInvertColor boolean="false"/>
+                <mRedBandName>Band 1</mRedBandName>
+                <mGreenBandName>Band 2</mGreenBandName>
+                <mBlueBandName>Band 3</mBlueBandName>
+                <mGrayBandName>Not Set</mGrayBandName>
+                <mStandardDeviations>0</mStandardDeviations>
+                <mUserDefinedRGBMinimumMaximum boolean="false"/>
+                <mRGBMinimumMaximumEstimated boolean="true"/>
+                <mUserDefinedGrayMinimumMaximum boolean="false"/>
+                <mGrayMinimumMaximumEstimated boolean="true"/>
+                <mContrastEnhancementAlgorithm>NoEnhancement</mContrastEnhancementAlgorithm>
+                <contrastEnhancementMinMaxValues>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                </contrastEnhancementMinMaxValues>
+                <mNoDataValue mValidNoDataValue="true">-32768.000000</mNoDataValue>
+                <singleValuePixelList>
+                    <pixelListEntry pixelValue="-32768.000000" percentTransparent="100"/>
+                </singleValuePixelList>
+                <threeValuePixelList>
+                    <pixelListEntry red="-32768.000000" blue="-32768.000000" green="-32768.000000" percentTransparent="100"/>
+                </threeValuePixelList>
+            </rasterproperties>
             <rasterresampler maxOversampling="2"/>
         </maplayer>
         <maplayer minimumScale="100000" maximumScale="1e+08" type="raster" hasScaleBasedVisibilityFlag="1">
@@ -247,9 +412,42 @@
             <transparencyLevelInt>255</transparencyLevelInt>
             <customproperties/>
             <provider>gdal</provider>
-            <rasterrenderer opacity="1" alphaBand="0" blueBand="3" greenBand="2" type="multibandcolor" invertColor="0" redBand="1">
-                <rasterTransparency/>
-            </rasterrenderer>
+            <rasterproperties>
+                <mDrawingStyle>MultiBandColor</mDrawingStyle>
+                <mColorShadingAlgorithm>UndefinedShader</mColorShadingAlgorithm>
+                <mInvertColor boolean="false"/>
+                <mRedBandName>Band 1</mRedBandName>
+                <mGreenBandName>Band 2</mGreenBandName>
+                <mBlueBandName>Band 3</mBlueBandName>
+                <mGrayBandName>Not Set</mGrayBandName>
+                <mStandardDeviations>0</mStandardDeviations>
+                <mUserDefinedRGBMinimumMaximum boolean="false"/>
+                <mRGBMinimumMaximumEstimated boolean="true"/>
+                <mUserDefinedGrayMinimumMaximum boolean="false"/>
+                <mGrayMinimumMaximumEstimated boolean="true"/>
+                <mContrastEnhancementAlgorithm>NoEnhancement</mContrastEnhancementAlgorithm>
+                <contrastEnhancementMinMaxValues>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                    <minMaxEntry>
+                        <min>0</min>
+                        <max>255</max>
+                    </minMaxEntry>
+                </contrastEnhancementMinMaxValues>
+                <mNoDataValue mValidNoDataValue="true">-32768.000000</mNoDataValue>
+                <singleValuePixelList>
+                    <pixelListEntry pixelValue="-32768.000000" percentTransparent="100"/>
+                </singleValuePixelList>
+                <threeValuePixelList>
+                    <pixelListEntry red="-32768.000000" blue="-32768.000000" green="-32768.000000" percentTransparent="100"/>
+                </threeValuePixelList>
+            </rasterproperties>
             <rasterresampler maxOversampling="2"/>
         </maplayer>
         <maplayer minimumScale="0" maximumScale="1e+08" minLabelScale="0" maxLabelScale="1e+08" geometry="Polygon" type="vector" hasScaleBasedVisibilityFlag="0" scaleBasedLabelVisibilityFlag="0">

Onhan tuohon eväitä olemassa. Kuntajako löytyy WFS-palvelusta, ja esimerkiksi Tampereen ulottuvuudet löytyy näin

ogrinfo -ro -al wfs:http://hip.latuviitta.org/cgi-bin/tinyows municipalities -where kunta_ni1=‘Tampere’
INFO: Open of wfs:http://hip.latuviitta.org/cgi-bin/tinyows' using driver WFS’ successful.

Layer name: lv:municipalities
Geometry: Multi Polygon
Feature Count: 1
Extent: (316189.750000, 6814338.000000) - (347619.843750, 6859997.000000)
Layer SRS WKT:
PROJCS[“ETRS89 / TM35FIN(E,N)”,

Oikeasti toimivan systeemin tekemiseen tarvittaisiin koodaria, mutta ei siinä mitään valtavan suuria juttuja pitäisi tarvita. Ääkköselliset kuntanimet eivät mene helposti läpi, ja tuotantokelpoisen systeemin pitäisi tehdä kyselyt POST-menetelmällä. Jos siis haluaa hyödyntää WFS:ää, voihan homman tehdä muutenkin, jos räätälöimään lähtee. Esimerkiksi tallentamalla kuntien BBOX:it valmiiksi jonnekin helppoon paikkaan.

Tein toisen projektitiedoston, joka toivottavasti toimii lähes sellaisenaan QGIS 1.8 versiolla. 1.8 tosin näyttää vaativan absoluuttiset polut Rasterlite-tietolähteille, eli nämä rivit pitää etsiä ja kirjoittaa oma polku “D:/data/” -polun tilalle.

RASTERLITE:D:/data/Helsinki-atlas.sqlite,table=t0005

QGIS 1.9 ilmeisesti osaa käyttää suhteellisiakin polkuja.

http://latuviitta.org/documents/Helsinki-atlas_QGIS_1.8.qgs

Ei ainakaan minulla 1.8 vaatinut absoluuttisia polkuja tuolla diffillä minkä lähetin, käyttöjärjestelmänä Ubuntu 12.04.

Toimii kunhan muutan absoluuttiset polut suhteellisiksi.


--- Helsinki-atlas_QGIS_1.8.qgs 2012-09-11 13:10:07.000000000 +0300
+++ Helsinki-atlas_QGIS_1.8-muokattu.qgs        2012-09-11 13:26:33.349920674 +0300
@@ -98,7 +98,7 @@
     <projectlayers layercount="14">
         <maplayer minimumScale="0" maximumScale="2600" type="raster" hasScaleBasedVisibilityFlag="1">
             <id>_table_t000520120907205510262</id>
-            <datasource>RASTERLITE:D:/data/Helsinki-atlas.sqlite,table=t0005</datasource>
+            <datasource>RASTERLITE:Helsinki-atlas.sqlite,table=t0005</datasource>
             <title></title>
             <abstract></abstract>
             <layername>,table=t0005</layername>
@@ -157,7 +157,7 @@
         </maplayer>
         <maplayer minimumScale="2600" maximumScale="6600" type="raster" hasScaleBasedVisibilityFlag="1">
             <id>_table_t001020120907205514284</id>
-            <datasource>RASTERLITE:D:/data/Helsinki-atlas.sqlite,table=t0010</datasource>
+            <datasource>RASTERLITE:Helsinki-atlas.sqlite,table=t0010</datasource>
             <title></title>
             <abstract></abstract>
             <layername>,table=t0010</layername>
@@ -216,7 +216,7 @@
         </maplayer>
         <maplayer minimumScale="6600" maximumScale="13000" type="raster" hasScaleBasedVisibilityFlag="1">
             <id>_table_t002020120907205515341</id>
-            <datasource>RASTERLITE:D:/data/Helsinki-atlas.sqlite,table=t0020</datasource>
+            <datasource>RASTERLITE:Helsinki-atlas.sqlite,table=t0020</datasource>
             <title></title>
             <abstract></abstract>
             <layername>,table=t0020</layername>
@@ -275,7 +275,7 @@
         </maplayer>
         <maplayer minimumScale="13000" maximumScale="30000" type="raster" hasScaleBasedVisibilityFlag="1">
             <id>_table_t004020120907205516014</id>
-            <datasource>RASTERLITE:D:/data/Helsinki-atlas.sqlite,table=t0040</datasource>
+            <datasource>RASTERLITE:Helsinki-atlas.sqlite,table=t0040</datasource>
             <title></title>
             <abstract></abstract>
             <layername>,table=t0040</layername>
@@ -334,7 +334,7 @@
         </maplayer>
         <maplayer minimumScale="30000" maximumScale="100000" type="raster" hasScaleBasedVisibilityFlag="1">
             <id>_table_t008020120909162052125</id>
-            <datasource>RASTERLITE:D:/data/Helsinki-atlas.sqlite,table=t0080</datasource>
+            <datasource>RASTERLITE:Helsinki-atlas.sqlite,table=t0080</datasource>
             <title></title>
             <abstract></abstract>
             <layername>,table=t0080</layername>
@@ -393,7 +393,7 @@
         </maplayer>
         <maplayer minimumScale="100000" maximumScale="1e+08" type="raster" hasScaleBasedVisibilityFlag="1">
             <id>_table_t016020120909162052670</id>
-            <datasource>RASTERLITE:D:/data/Helsinki-atlas.sqlite,table=t0160</datasource>
+            <datasource>RASTERLITE:Helsinki-atlas.sqlite,table=t0160</datasource>
             <title></title>
             <abstract></abstract>
             <layername>,table=t0160</layername>

Ok, korjasin tuon QGIS 1.8 -version käyttämään muotoa RASTERLITE:./Helsinki-atlas.sqlite
Windowsilla esiintyy jännä ilmiö, projektitiedosto toimii kun käynnistää QGIS 1.8:n tuplaklikkaamalla projektitiedostoa, mutta jos starttaa ohjelman ensin ja sittten avaa projektitiedoston, niin suhteelliset polut eivät toimi.

Minun piti itse asiassa laittaa OSM-tauluun nopeusrajoitukset ja pinnoitetyyppi mukaan osoittamaan sitä, kuinka MML:n karttaa voidaan rikastuttaa OSM:in laajemmilla ominaisuustiedoilla lisäämällä OSM-vektorit projektiin uudestaan nopeusrajoitusten tai pinnoitteen mukaan luokiteltuna. Tarkoitus on myös herättää ajatuksia, että olisivatkohan nettikartat kuitenkin vähän tylsiä, kun vertaa niitä paikallisesti käytettävien vektoreiden tarjoamaan yksilöllisyyteen ja räätälöitävyyteen.

Vaihdan uuden tietokannan tarjolle illalla ja lisään siihen myös uuden taulun johon laitan tekijänoikeuslinkit.

QGIS muuten tukee myös GPS:ää oikein hyvin. Ei tarvitse muuta kuin laittaa GPS-vastaanotin kiinni USB-liittimeen ja kertoa sitten mistä sarjaportista löytyy signaali. Voisi kuvitella että Linux- tai Windows-tabletista ja QGIS:stä voisi kehittyä jotain käyttökelpoista off-line-käyttöön.