Så, du sitter på en stor mängds punktmolnsdata som du vill att användarna på nätverket eller Internet skall kunna använda på ett enkelt och smidigt sätt utan speciell utbildning eller tillgång till speciella verktyg. Hur gör du då?
Självklart så vill du inte ”låsa in” dina data i en leverantörs egna datastruktur eller tjänst som omöjliggör att data kan användas till något annat, så ett krav är att det är öppna format som används.
Låt oss säga att du har punktmolnsdata i LAZ format och det är kanske terabyte med data totalt sett. Är det ens möjligt att lösa detta?
Ja men självklart är det möjligt! Det är inte ens speciellt svårt att komma igång.
Det jag kommer att visa här är en lösning med ”tajlade” LAZ filer med octree-uppdelning av punktmolnen för att göra det mer hanterbart i nätverk. På sikt kan möjligen ”cloud optimized laz” bli en lösning, men tills vidare så väljer jag Entwine Point Tile eller EPT som format. EPT kan hantera flera olika punkmolnsformat inklusive *.laz och lagringen sker helt förlustfritt så att alla ingångsdata går att återskapa i valfritt format om man vill det. Dessutom så är stödet för PDAL väl integrerat och exempelvis QGIS kan direkt läsa även detta format även om data är lagrat på en server någonstans via en url.
Du kan själv testa detta genom att lägga till ett punktmoln från Internet i detta format. Prova exempelvis HELA Danmark.
I Data Source Manager så finns ”Point Cloud” och där kan man lägga till ett punktmoln från en url. Ange helt enkelt adressen https://na-c.entwine.io/dk/ept.json och använd detta som källa för ett punktmoln. Observera att detta är ”rå-data” och du behöver stilsätta det på ett lämpligt sätt för att det skall fungera i QGIS.
Det fina med Entwine eller EPT är att det är QGIS standardformat och när du öppnar ett punktmoln i exempelvis LAZ format så genereras strukturen för EPT automatiskt i en katalog med samma namn som LAZ-filen. I den katalogen finns en ept.json fil, som innehåller allt som behöves för att QGIS skall veta hur octree strukturen med punktmolnsfiler skall hanteras.
Samma struktur kan också läsas av andra program. Exempelvis Potree som är en webbvisare som alltså visar punktmoln i en webbläsare. Vill du exempelvis titta på hela Danmark som punktmoln i Potree så kan du det via länken https://potree.entwine.io/data/denmark.html.
Potree med EPT data kan lagras i en enkel katalogstruktur och sedan presenteras som ”tjänst” med en webbserver. Det går att hantera detta på en egen server, eller via en molntjänst. Men här så testar jag med en python server.
Det som först krävs är att servern har Node.JS installerat (https://nodejs.org/en/). Om ditt system kör Linux så är troligen NodeJS redan installerat, testa med node -v i en terminal (eller i WSL på Windows). NodeJS är i princip ett tillägg för en server som gör det möjligt att köra JavaScript på servern direkt i stället för i klientens webbläsare (runtime environment). Hämta eller ”klona” sedan GitHub biblioteket med källkoden för Potree (hämta zip).
git clone https://github.com/potree/potree.git
Därefter hämtas och byggs nödvändiga bibliotek med några ytterligare kommandon.
npm install
npm start
Ovanstående kommandon körs från den klonade/hämtade potree katalogen, och skapar framför allt en ”build” katalog med de senaste biblioteken för just Potree. Dessutom så ingår ett antal andra nödvändiga JS bibliotek i ”libs”, samt kataloger med exempel och några mindre punktmoln som kan användas ”off-line”.
För att testa det skapade så startar man en webbserver direkt i samma potree-katalog som övriga kommandon kördes, med kommandot:
python3 -m http.server 1234
Sedan pekar man webbläsaren på http://localhost:1234 och klickar på katalogen ”examples”. Här finns många olika exempel, men det som ligger närmast det jag vill åstadkomma är ”ept.html”.
Så, för att använda mina egna punktmoln och visa dessa i Potree på det här viset, så börjar jag med att öppna ett punktmoln i QGIS.
Detta genererar en katalog som i sin tur består av två kataloger och en ”ept.json” fil. Dessa tre flyttar jag till en ny katalog (som jag döper till ”kloster”) i Potree katalogens mapp ”pointclouds”.
I katalogen ”examples” så kopierar jag filen ”ept.html” och döper om den nya filen till ”kloster.html”. Denna öppnar jag sedan i valfri texteditor.
Det enda som egentligen behöver ändras i html-filen är katalognamnet som finns runt rad 56 i filen.
Sedan är det bara att köra en ”refresh” på webbsidan och klicka på ”kloster.html” för att visa det nya punktmolnet i Potree.
För att ”deployera” servern så är det i princip bara katalogerna ”build” och ”libs” som behövs. Resten sköts via html-filer som exemplet ovan, som i sin tur pekar på de resurser som finns i dessa kataloger och de data som skall visas. Vill man undvika eventuella sökvägsproblem så behåller man även katalogerna ”examples” och ”pointclouds” för att lagra htmlfiler och punktmoln, men det är helt valfritt. Så länge html-filen pekar på rätt resursfiler och rätt ept.json, så bör det dock fungera fint.
Nästa steg blir att skapa en ”startsida” som kan guida användaren vidare till rätt punktmoln, men det är i stort bara en länk, så det går att bygga vilken typ av sida man vill för detta. Vill du fortsätta med NodeJS så går det att bygga startsidan med detta ramverk också, annars fungerar allt från PHP eller en statisk HTML sida om man tycker att det räcker.
Man kan sedan såklart också anpassa själva visningssidan med fler funktioner, eller om man vill ta bort något. Använd övriga exempel som genererats (prova sidan ”page.html”) för att titta på vad som går att göra, men det går också att utveckla egna funktioner för gränssnittet om man nu skulle vilja det. Kanske en flytande logo i ett hörn, eller en anpassad bakgrund.
De punktmoln som nu finns lagrat i EPT går som sagt att återskapa som sammanhängande LAZ med verktyg från Entwine. Det är oftast bara ett kommando som behövs, men mer om detta går att läsa på https://entwine.io/.
Ja just det…
Eftersom du nu har en webb-url till din ept.json fil så kan du självklart öppna denna direkt i QGIS precis som Danmarksmolnet från tidigare.
En sak till…
Om du skulle behöva exempelvis höjddata i form av ett raster så kan du använda PDAL för att direkt konvertera data från en EPT-källa till TIF.
pdal translate http://localhost:1234/pointclouds/kloster/ept.json kloster_dem.tif --writers.gdal.resolution=0.05
Kommandot ovan skapar en rasterfil (5cm upplösning) med flera band baserat på statistik för punkterna i varje pixel (som standard värdet för Z). Exempelvis ett värde för min, max, medel etc, som kan användas för att skapa höjddata.
2 svar på ”Visualisera 3D – Punktmoln”