Tag Archive | TIles

Raster Tiles i QGIS

Många webbkartor använder så kallade raster tiles med en katalogstruktur där filerna lagras i en ”zoom” katalog och sedan i en ”kolumn” katalog. Filerna är sedan döpta i radnummer-ordning ( http://URL/{z}/{x}/{y}.png ).

I QGIS så finns det plugin som löser att använda denna typ av kartor i bakgrunden, exempelvis OpenLayers plugin. Från och med QGIS 2.18 så är det dock inte säkert att det behövs några plugin…

Läs mer…

Tiles tar plats! JPG vs PNG

I veckan som gått har jag genererat en hel del tiles till ett projekt och kan konstatera att tiles tar mycket plats.

Tiles är ju i förväg renderade ”kartor” för alla tänkta zoom nivåer. Det är altså inte en karta som visas i olika skala, utan en genererad bild för varje nivå man vill visa, vilket gör att alla bilder lagras flera gånger. Lite som när man väljer att bygga pyramider för rasterdata.

Högsta upplösningen för ett område tar kanske 16 MB. Pyramider i ytterligare fyra nivåer lägger teoretiskt till 8 + 4 + 2 + 1 MB data, så slutresultatet blir 31 MB. I princip en fördubbling.

I många geoservrar så görs denna extra rendering ”on-the-fly” och lagras i en cache på servern för att snabba upp visningen nästa gång. Moderna datorer har dessutom beräkningskapacitet för att användaren inte skall uppleva renderingen som direkt gränssättande.

Har man ingen geoserver, så har man däremot inte så mycket val och då blir tiles ett enkelt alternativ för exempelvis en Leaflet eller OpenLayers karta.

Jag har använt PNG för mina tiles, men de stora datamängderna har fått mig att fundera på vad man kan tjäna på att använda JPG i stället. Detta inlägg blir ett litet experiment för att försöka klargöra skillnaderna i några specifika fall, så häng med!

Läs mer…

Anpassa Leafletkartan i QTiles plug-in

Igår så jobbade jag med att skapa tiles med insticksprogrammet QTiles till QGIS. I detta så går det att skapa en enkel Leaflet karta baserat på dessa.

Denna karta kan man sedan bygga vidare på och jag nämnde att jag skulle kunna spara denna till senare tillfälle och bara kopiera in mina tiles till underkatalogen, göra några enkla ändringar, så var det klart.

Nu trodde jag att jag hittat ett bättre sätt! Läs mer…

MapTiler

MapTiler är ett GUI för GDAL2Tiles eller kort och gott ett program som gör så kallade Tiles, men kräver GDAL 1.6 för att fungera.

MapTiler är öppen källkod och går att hämta på http://maptiler.org, men det finns en betalversion på http://maptiler.com som bland annat drar nytta av flera processorkärnor om man betalar för det. Jag använder den öppna Betan från maptiler.org.

Det finns versioner för Windows och OS X men jag använder som vanligt Linux.

Installationen görs enklast i terminalen med följande kommandon:

wget http://maptiler.googlecode.com/files/maptiler_1.0.beta2_all.deb
sudo dpkg -i maptiler_1.0.beta2_all.deb

För att testa så tar jag ett enkelt QGIS projekt och sparar skärmbilden som TIFF. Det sparas även en TFW-fil så detta är en komplett rasterkarta och duger för tester.

I MapTiler så väljer jag Google Maps som mall, pekar ut min rasterfil och sedan så måste jag även definiera vilken projektion data är lagrat i.

Skärmbild från 2013-12-13 11:15:15

Jag valde att exportera kartan med Google Mercator (EPSG:900913) för att vara på den säkra sidan, men det skall fungera med vilken projektion som helst.

Zoomnivåerna genereras automatiskt men dessa går att ändra om så önskas, tänk bara på att ju fler och ”högre” nivåer, desto fler tiles och mer data. Jag kör på förvalen för resten av stegen och avslutar med att rendera kartan.

Den katalog som blev resultatet innehåller nu alla tiles i korrekt katalogstruktur, men även html-filer för tester och en viktig xml fil för mitt nästa steg.

Hela katalogen komprimeras till ett zip-arkiv och laddas upp till min DropBox, där jag har en katalog som jag delar med min iGIS app i telefonen (AppStore).

I iGIS är det nu bara att lägga till zip-arkivet som nytt lager och lägga till detta ”imagery” lager till valfritt projekt.

iPhone_iGIS_Import

Att tänka på när man importerar är att välja rätt projektion och teckenkod. Normalt är detta Google Mercator (EPSG:900913) och UTF-8, men det går att öppna den skapade xml-filen och kontrollera för säkerhetens skull. Det är denna xml-fil som iGIS läser vid importen, så om den inte finns med så fungerar det inte.

Min enkelt tillverkade rasterbild finns nu tillgänglig på samma sätt som vektorlager och kan tändas och släckas utan problem. Det som däremot var ett problem för mig var att göra samma sak med iGIS HD för iPad. Det ville inte alls. Programmet kraschar varje gång jag försöker importera. Programmet registrerar krascher och skickar rapporter via ”Flurry”, så alla mina krascher kanske gör att det kommer en uppdatering så småningom. Det är ett minnesproblem i appen och om man stänger ner alla andra appar och startar om iPaden så kan det fungera, men så skall det inte behöva vara. Just nu kan jag heller inte hitta hur jag raderar inlästa rasterlager, någon som vet?

Nu är det dags för små paket

Nej det är inte Jul riktigt än, utan det är ”Tiles” jag tänker på.

Tiles är rasterbilder i ett fördefinierat rutmönster som renderas mot tänkta skalnivåer (zoom) och skall göra det snabbare att visa kartor via nätet.

Exempelvis så används Tiles av både Google, Open Street Map och många av de andra stora aktörerna i sina tjänster. Även exempelvis GeoServer kan generera tiles via GeoWebCache.

Tiles kan ha lite olika konfiguration men det vanligaste är OSGeo specifikationen TMS (Tile Map Service).

Dessa Tiles får ett eget koordinatsystem (se bilden ovan) som räknas från ett ursprung, ofta i det nedre vänstra hörnet, och därefter åt höger och uppåt.

Beroende på zoomnivå så blir det olika många Tiles och för globala serier så är nivå 0 en Tile som täcker hela jorden och nivå 18 en Tile med sidan 152 meter (ca). Det normala är 18 nivåer, men det går att skapa ännu mera detaljerade Tiles om man önskar.

Varje Tile är normalt 256×256 pixlar stor även om det finns varianter, vilket gör att pixelstorleken i nivå 18 är ca en halv meter. För en del bildkällor så räcker kanske detta inte, men för de flesta situationer så är det tillräckligt.

För varje zoomnivå så skapas ett rutmönster av Tiles i det aktuella området. Dessa lagras i en katalog döpt efter zoomnivån, så om det är nivå 10 så heter katalogen ”10”.

Första nivån av underkataloger är döpta efter vilken kolumn i ordningen (utifrån ursprunget, se bild ovan) rutorna befinner sig i och sedan är själva filerna döpta efter vilken rad de är placerade på enligt samma system.

Skärmbild från 2013-12-13 12:28:50

Om det är ett litet område med Tiles så blir det få filer, medan ett större område i höga zoomnivåer genererar desto fler. Hela jorden i nivå 18 blir exempelvis 68 719 476 736 rutor!

Som framgår av bilden så är det png-filer som används, men om man vill få ner storleken så går det att använda jpg också. Då får man dock inte någon transparens, vilket kan generera svarta fält i kanten av området.

Det finns formler för att räkna ut hur stora alla Tiles blir och vad de skall heta med mera, men det tänkte jag inte gå in på här. Är du intresserad så finns det massor att läsa om på http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames, där det även finns kodexempel om man vill bygga in funktionen i något skript eller program.

Nästa vecka är det Jul, men det blir några inlägg i alla fall. Det första handlar om hur man kan använda Tiles för att föra över rasterkartor till en iPhone eller iPad…

Ja, och om några timmar kommer min julklapp till er.