Lek med Landsat8 og Landsat-util

Landsat er NASA og USGS sitt program for å observere jorden fra rommet via satellitter. Det har vært mange satellitter i årenes løp, og sist ut er nr 8. Den er stappfull av høyteknologiske sensorer som blant annet inkluderer 3 lyssensorer – som tilfeldigvis utgjør de tre båndene: rødt, grønt og blått, som jo utgjør “vanlige” bilder. Det som er aller kulest med Landsat-programmet, og NASA + USGS som sådan, er at all data er fritt tilgjengelig for nedlasting og bruk! Men, utfordringen er at det er enorme mengder med data, og det er ikke helt strømlinjeformet å få tak i de riktige filene – spesielt med riktig hastighet. Her har Amazon, Google og DevelopmentSeed tatt tak i tingene og gjort Landsat8-data veldig lett tilgjengelig via enkle og raske grensesnitt.

landsat_b4

Neste problem er at “bildene” fra Landsat kommer som mange enkeltfiler – en fil per bånd. Åpner man en av disse filene så er det kun et gråtonebilde per bånd. For å få et mer brukbart visuelt bilde må vi slå sammen de aktuelle båndene. De fleste sensorene på Landsat8 tilsvarer omtrentlig 30m oppløsning, men det er også et ekstra bånd som har høyere oppløsning på rundt 15 meter. Teknikken, Pansharpening, utnytter dette ekstra båndet og gjør den totale oppløsningen bedre.

landsat_close_nosnow

Alt dette er rimelig komplisert. Derfor har DevelopmentSeed gjort det enkelt for oss! De har laget et OpenSource-verktøy som heter Landsat-util, som fikser biffen. Med dette kan du søke opp riktige datafiler fra Amazon/Google sine lager, laste de ned og prosessere de. Du kan til og med velge hvilke bånd du skal bruke.

landsat_veryclose

Så, dette måtte jeg jo prøve meg frem på. Etter å ha satt opp en vagrant-box på Mac’en (script finner du i linken under), lastet ned et datasett og satt igang prosesseringen – så slo det meg at dette tok tid! Til slutt knakk hele Mac’en sammen. Her var det for lite minne. Løsningen ble å sparke igang en kraftpakke hos DigitalOcean med 16 gb minne. Da gikk alt raskere. Oppsettet var knirkefritt og etter et par minutter hadde jeg et par flunkende ferske satellittbilder, både sommer og vinterbilde over samme område! Rimelig stilig! Og det er bare ved å bruk 3 av sensorene! Tenk så mye stilige anvendelser det er med alle de andre båndene!

landsat_veryclose_nosnow

Prøv det ut selv med scriptene og kom gjerne med forbedringstips!

(ps. totalregningen for kraftpakken hos DigitalOcean kom på under $1 for mye morro)

Dynamiske vector tiles fra PostGIS

Vector tiles er virkelig i vinden – med Mapbox i førersetet. De har spesifisert en rimelig solid standard for representasjon av vector tiles som lar seg overføre ekstremt effektivt som “protobufs” til nettleseren eller appen som kan tegne opp vektorgrafikken. Potensialet for interaksjon, skreddersydd kartografi, offlinemuligheter og blandede datakilder er endeløst. Men, problemet er at løsninger som Mapbox krever at man preprosesserer datakildene sine og lager vector tiles av de. På en måte helt likt som med vanlige kartfliser (tilecache). Det er jo litt tungvint. Men det finnes andre som også lager programvare for å lage vector tiles, Spatialdev er en av de, og de utvikler for tiden “PGRestAPI” (aka “Chubbs SpatialServer”) – som er ganske i startgropen. Serveren kan koble seg til en PostGIS-server og servere vector tiles dynamisk basert på tabeller og spørringer! I tillegg kan den også tilgjengeliggjøre PostGIS enklere for nettlesere og kartapper som Leaflet og lignende. adminflate_leaflet_halfload

Nysgjerrigheten lot seg ikke stagge, så jeg måtte prøve å sette opp et system på dette koblet mot norske data. Etter litt krangling med oppsett her og der fikk jeg opp en vagrant-box med PGRestAPI som serverte dynamiske vector tiles direkte som en tjeneste! Dette kan puttes inn i Leaflet med en plugin, eller direkte i andre biblioteker som MapboxGL på web eller i apper. Det fungerer med store og små datasett – som kommunegrenser og landsdekkende høydekurver fra N50.

hoydekurver_vector

Og så til det virkelig stilige: dynamisk filtrering og vector tiling! (nerdete nok nå snart?)

.. for det er nemlig veldig enkelt: Bare hekte på “where”-spørringen på url’en til tjenesten så har du en dynamisk postgis-spørring som serveres som vector tiles direkte. For eksempel:

http://localhost:30001/services/postgis/vector_n50_adminflate/geometri/vector-tiles/{z}/{x}/{y}.pbf?fields=komm,navn&where=komm%3d1601

som gir kun Trondheim kommune og hekter på datafelt klare for labels og styling. URL’en og spørringen kan jo selvfølgelig endres on-the-fly i klienten og vise resultatene direkte. Rimelig stilig!

adminflate_leaflet_where_query

Det er selvfølgelig litt særegenheter og rariteter med PGRestAPI, men konseptet fungerer og fremtiden ligger åpen. Dette kommer vi til å se mer av!

Rånotater, kode og oppsett finner du her:

https://gist.github.com/alexanno/3fcfd72983515c8f1646