Skapa ett index och ett verktyg som automatiskt läser in lagret när du klickar på indexrutan. Låter det som en bra idé? Då skall du hänga med här, för det är exakt vad jag tänker gå igenom.
Jag har beskrivit stora delar av processen tidigare, så nu blir det lite mera komprimerat och bara delvis uppdaterat.
Jag använder Lantmäteriets öppna höjddata, men principen fungerar för alla typer av rasterdata, så länge alla data ligger i en och samma katalog.
Först skall indexlagret skapas. Detta görs enklast i terminalen med ett enda kommando från katalogen där filerna ligger (finns även som verktyg i QGIS ”Tile Index”).
Detta lager läser jag in i QGIS tillsammans med Lantmäteriets WMTS tjänst.
Kommandot tidigare som skapade indexlagret skapar även ett attribut med filnamnen för alla rasterfiler. Detta kan användas som en ”action” i QGIS av typen Python, som vid ett klick på en indexruta kör fyra rader pythonkod.
from qgis.utils import iface layerpath = os.path.dirname( unicode( qgis.utils.iface.activeLayer().dataProvider().dataSourceUri() ) ) rasterurl = layerpath + "/[%location%]" iface.addRasterLayer(rasterurl, "[%location%]" )
Sedan kan man (1) markera indexlagret, (2) aktivera verktyget och (3) klicka på en ruta.
Detta kommer automatiskt att läsa in lagret i kartan.
För att det skall fungera så måste man ha indexlagret valt, och när man lägger till ett lager så kommer det att bli det nya aktiva lagret. Det kanske går att undvika med någon inställning, men som det ser ut nu så kan man inte omedelbart klicka på en ny ruta, utan att först markera indexlagret igen.
Stilen för lagret, inklusive skriptet, kan lagras som standardstil i det geopackage som skapades för indexlagret. Så länge man distribuerar indexpaketet med alla filer så kan vem som helst med QGIS läsa in indexet och öppna filerna med verktyget. Det spelar ingen roll vilken sökväg man sparar alla filerna på, vilket gör det lämpligt för distribution tillsammans med rasterfilerna.
[Edit]
Efter lite förslag och egna funderingar är pythonskriptet nu något bättre, och passar något fler…
from qgis.utils import iface layerpath = os.path.dirname( unicode( qgis.utils.iface.activeLayer().dataProvider().dataSourceUri() ) ) indexlayer = iface.activeLayer() rasterurl = os.path.join(layerpath, "[%location%]") iface.addRasterLayer(rasterurl, "[%location%]") iface.setActiveLayer(indexlayer)
”setActiveLayer” gör att det går att klicka på flera rutor efter varandra, utan att först markera indexlagret igen. Det sker automatiskt i skriptet. Dessutom så är skapandet av sökvägen till rasterfilen oberoende av operativsystem. Det bör nu bli rätt oavsett om man använder Windows, Mac eller Linux.