Potree är min favoritvisare för punktmoln. Den är enkel att använda och dessutom ruggigt snabb även för mycket stora punktmoln. Inga installationer är heller nödvändiga på klienterna, vilket gör det väldigt lämpligt i ett nätverk eller på Internet.
Potree bygger på webbteknik och det finns ingen ”editor” för att skapa sidorna för olika data, men med lite planering och förtänksamhet så kommer man inte att behöva skriva en enda rad med kod för att kunna lägga till och ta bort punktmoln lite godtyckligt. Mindre anpassningar, som att lägga till länkar och information kan däremot behövas, men inte heller detta behöver vara särskilt komplicerat.
Potree fungerar med vilken webbserver som helst, men jag väljer att använda Apache då detta innebär att jag kan göra en del anpassningar av hur kataloger visas och ser ut på ett mera dynamiskt och snyggt sätt med hjälp av .htaccess filer.
Jag har valt att göra min installation på en Synology NAS där det enda kravet är att installera just Apache och Node.JS. Dessutom så behövs Synology Web Station för att skapa en ”Vitrual Host” eller så kan man använda default sidan.
På NAS:en skapas det en ”web” katalog för standardwebbsidan med en enkel startsida. Denna raderar jag snärtigt och lägger in en egen mycket enkel startsida som bara har en länk till just punktmolnen.
I katalogen ”web” så skapar jag en katalog ”potree” som den här länken pekar på. Denna katalog kommer inte att innehålla någon html-fil, utan i stället så kommer en .htaccess fil att användas för att kontrollera hur katalogvisningen skall hanteras. Normalt så är katalogvisning avstängd i Apache, men med rätt inställningar så kan det tillåtas i den katalog (med underkataloger) där .htaccess filen ligger.
I web-katalogen så skapar jag en katalog för varje punktmolnsprojekt, eller grupp av punktmoln. Dessa återkommer jag till senare. Dessutom finns här en katalog för ”mallar” där jag sparar de potree html-filer jag vill kunna använda tillsammans med punktmolnen. Även dessa återkommer jag till.
I katalogen ”resources” finns alla Potree filer i ”build” katalogen. I ”icons” finns mina anpassade ikoner och i ”libs” alla externa bibliotek som Potree använder. De två Potree katalogerna ingår i paketet med Potree filer. Dessutom så finns här två html-filer som tillsammans med några css-filer reglerar framför allt katalogvisningens utseende.
Filen .htaccess läses av Apache servern och innehåller information som servern använder för att anpassa flera saker för innehåll i just den aktuella katalogen (samt underkataloger).
Options +Indexes +FollowSymLinks IndexIgnore *.* resources mallar IndexOptions IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=* SuppressHTMLPreamble IconHeight=30 IconWidth=50 IconsAreLinks IndexOrderDefault Descending Date HeaderName /potree/resources/header.html ReadmeName /potree/resources/footer.html RewriteBase / RewriteOptions InheritDown AddIcon /potree/resources/icons/cloudfolder.png ^^DIRECTORY^^
”Options” lägger i det här fallet till katalogvisning (index) samt möjlighet att följa symboliska länkar. ”IndexIgnore” anger att vanliga filer med namn och filtillägg, samt katalogerna ”resources” och ”mallar” skall undantas från katalogvisningen. ”IndexOptions” hantera varje katalogs utseende (läs mer i dokumentationen för Apache). ”IconsAreLinks” anger att det går att klicka även på ikonerna och ”IndexOrderDefault” ställer in vilken sortering som skall användas som standard.
”HeaderName” och ”ReadmeName” är relativa sökvägar (från webbrooten) till de header.html och footer.html filer som nämdes tidigare. I dessa finns rubriker och informativ text som jag vill skall visas på katalogsidorna. Här hanteras även stil med färger och liknande med css.
”RewriteBase” anger att webbroot skall vara relativ grund i stället för den aktuella katalogen, och ”RewriteOptions InheritDown” behövs för att inställningarna även skall gälla för underkataloger. På så sätt behöver jag inte en .htaccess fil i varje katalog där jag vill använda katalogvisning och ändringar och uppdateringar behöver bara göras på ett ställe.
”AddIcon” byter ut standardikonen för kataloger till en bild som jag skapat själv.
Stilen som beskrivs i .htaccess filen tillsammans med header.html, footer.html samt css-filer kommer att visa kataloger på sidorna enligt principen i bilden ovan. Du kan själv anpassa html och css så att det passar för din tillämpning. Katalogvisningen är ett ”<pre></pre>” block och filerna reglerar innehåll före och efter detta.
För varje punktmoln så skapas en projektkatalog med ett namn som är representativt för innehållet. Det går inte att använda specialtecken samt åäö då Potree inte tycker om det. Det går däremot att samla flera projektkataloger i en ”grupp-katalog” om det gör hanteringen enklare. Detta är bara möjligt om potree-mallarna som används anpassas till de relativa sökvägarna med den webbrot som angavs i .htaccess.
I grunden så använder jag kod från de mallar som levereras med Potree, men alla länkar görs om så att de pekar på filer i min katalogstruktur relativt web-roten. Då spelar det ingen roll hur långt ner i en kataloghierarki ett projekt finns, sökvägen till resurserna är alltid samma relativt roten.
var TitleText = "<button onclick=copyText(\"LAZ\")>LAZ</button> <button onclick=copyText(\"DEM\")>DEM</button> <button onclick=copyText(\"EPT\")>EPT-url</button> <button onclick=copyText(\"META\")>Metadata</button>";
Jag lägger även till en knapprad i sidans överkant, som bland annat länkar till en metadatafil och kopierar texter för ept-sökvägar och pdal-kommandon.
<script>
function copyText(type) {
var command = "";
if (type=="LAZ") {
command = "pdal translate " + window.location.href + "ept.json " + window.location.pathname.split("/").filter(n => n).pop() + ".laz";
} else if (type=="DEM") {
command = "pdal translate " + window.location.href + "ept.json " + window.location.pathname.split("/").filter(n => n).pop() + "_DEM.tif --writers.gdal.resolution=0.1";
} else if (type=="EPT") {
command = window.location.href + "ept.json";
} else if (type=="META") {
command = "Öppnar sida med metadata.";
window.location.href = "metadata.html";
}
navigator.clipboard.writeText(command);
alert("Kopierat till urklipp:\n\n" + command);
}
</script>
Alla mallar jag använder heter index.html och kan helt enkelt kopieras in i respektive projektmall och därmed upphäva visning med .htaccess. Mallen metadata.html kopieras också in i projektkatalogen och denna är så ”ren” som det går med hjälptexter som gör den enkel att redigera för ovana användare, så att relevant innehåll kan presenteras för varje punktmoln.
Det går att lägga till länkar till ytterligare resurser i projektkatalogen om man tycker det är lämpligt, och det är enklare att göra det i en separat fil än att gå in och göra ändringar i potree-filen.
Oavsett hur man sedan skapar sina punktmoln så blir processen sedan att:
- Öppna punktmolnet i QGIS 3.22 (senare versioner fungerar inte)
- Kopiera innehållet i den genererade ept-katalogen (ept-kataloger och ept-filer)
- Kopiera index.html från mallkatalogen till projektkatalogen
- Kopiera och redigera metadata.html filen
- Lägg till valfria resursfiler som projektrapporter, bilder, etc till projektkatalogen
Inga ytterligare inställningar behöver göras. Sidan och katalogvisningen anpassar sig till innehållet och det blir förhållandevis enkelt att navigera och öppna olika punktmoln i visaren.
Ett ”klick” på exempelvis ”EPT-url” knappen gör att länken till punktmolnet kopieras till datorns urklippshanterare (kräver https://).
Sedan är det bara att öppna QGIS och klistra in sökvägen när ett nytt punktmoln läggs till.
Knapparna för ”DEM” och ”LAZ” kopierar PDAL-kommandon till urklipp och dessa kan sedan klistras in i ett terminalfönster (exempelvis powershell) förutsatt att kommandot finns installerat på datorn.
Vill du använda mina filer så finns de på GitHub (länk) men var noga med att gå igenom koden och gör de justeringar som du behöver göra för dina anpassningar.