Eftersom jag använder Potree för att visa mina punktmoln så har jag länge försökt ha QGIS 3.22 installerat på en dator. Detta var den sista versionen som automatiskt byggde om punktmoln till Entwine med laz version 1.2 i format 3. Något nyare kan Potree inte hantera.
Då jag kör Linux så har det varit en hel del strul med detta för att peka ut ”rätt” källa att installera från, utan att uppdatera till en nyare version. Samtidigt så vill jag kunna använda de senaste versionerna av QGIS för andra ändamål. På Windows så kan jag helt enkelt ha dubbla installationer av vilka versioner som helst, så i dessa fall är det inget direkt problem. Men ärligt talat, vem vill ha en fullständig installation av QGIS som bara skall användas för att konvertera punktmoln?
Programmet som sköter konverteringen i bakgrunden är ”untwine” skapat av HobuInc. Koden finns på GitHub och där kan man även söka bland buggrapporter och annat. Här kunde jag hitta en ändring som gjordes för att lösa ett annat problem och även om jag inte kan C++ speciellt bra så är jag läskunnig.
Här ”löser man” något som heter issue-75 med att hårdkoda att untwine alltid skriver laz version 1.4, vilket alltså resulterat i att versioner av untwine efter detta inte fungerar för Potree.
Det går också att se att ändringen som gjorts är i filen bu/Processor.cpp. Om jag öppnar den filen så hittar jag ganska snart en funktion som har med skrivning till Entwine format att göra.
Lite längre ner så hittar jag två rader som antagligen är det som ställer till problemet.
Att ändra koden så att det står en 2:a i stället för en 4:a är enkelt. Men att ändra dataformat till tillåtna 0-5 är lite svårare att göra ”korrekt” (nämnde jag att jag inte är speciellt duktig på C++). Så jag byter helt enkelt ut variabeln m_b.pointFormatId mot en 3:a och har därmed hårdkodat untwine att skapa ept-filer med laz version 1.2 i format 3.
Men hur skall jag nu använda detta?
Ja vill man göra det i Windows så måste man skapa sig en utvecklingsmiljö med VisualStudio med mera. Man behöver säkert CMake och lite annat också. På min Linux dator som redan har en del beroenden installerade så behövs inte mycket, och i en WSL2 terminal i Windows så kan man antagligen göra på lite motsvarande sätt, så länge man kan lösa beroenden som uppkommer förr eller senare.
För det första så säkerställs att utvecklingsverktyg med pdal finns tillgängligt med kommandot (Ubuntu):
sudo apt install build-essential cmake pdal libpdal-dev
På Fedora körs i stället:
sudo dnf groupinstall "Development Tools" "Development Libraries" cmake gcc-c++ PDAL-devel
Därefter klonas untwine från github med:
git clone https://github.com/hobuinc/untwine.git
Navigera till untwine katalogen och gör ändringarna ovan i en texteditor:
cd untwine
nano bu/Processor.cpp
Spara ändringarna i nano med ctrl+o och avsluta med ctrl+x. Därefter skapas en build katalog och sedan provar man att bygga programmet.
mkdir build
cd build
cmake ..
make
Om inga felmeddelanden visas så går det att prova att köra exempelvis:
./untwine --help
./untwine --version
Tecknen ”./” före untwine kommandot anger att kommandot skall köras från den katalog man befinner sig i. Det kan ju hända att man har untwine installerat i systemet, som kan ha en annan version… Så länge man anger att det är just denna version av untwine man kör så kommer sedan det vanliga kommandot att konvertera till Entwine-format som Potree kan läsa. Vill du installera untwine i exempelvis WSL2 så kan du använda kommandot ”sudo make install”. Då kan du använda kommandot utan att ange sökvägen.
./untwine -i /sökväg/till/punktmolnsfil.laz -o /sökväg/till/ept_katalog
Jag tycker nog att det varit en elegantare lösning om jag kunnat ange version och format med ett kommandotillägg, men jag kan som sagt inte C++ speciellt bra, så detta duger för mitt behov.
Något som slår mig är hur förhållandevis enkelt detta trots allt var att lösa. Tänk nu om untwine inte var öppen källkod… Hur många samtal till ett stort företag i Kalifornien hade jag behövt uthärda innan jag gav upp? Och om nu någon som kan C++ gör ändringar i en egen klon av untwine för att lägga till just ett komandotilläg för att sätta version och format, så kanske en ”pull request” kan slås samman med koden och funktionen blir därmed tillgänglig i alla (nya) versioner av QGIS.