Using B4X to develop a mobile app to display LiDAR maps


Active Member
Licensed User
I started off programming in the 1990s with the 68000 assembly language on the Commodore AMIGA. Some of you might remember the demo scene back then. The hardware was fixed and there was quite some competition between coders to get the most out of the Motorola 68000 microprocessor, clocked at 7 MHz.

Later, I decided against a career in game development and studied mechanical engineering. I got my PhD and co-founded a company specialising in vibrations in machine tools. Those vibrations produce a bad surface quality on the machined parts which is sometimes hard to see and there was a strong need for interactive 3D visualizations. My past experience on the AMIGA came in handy and I started to develop 3D software in Microsoft Visual Studio and VB.NET. I much prefer the Basic syntax over C#, mainly because without all the brackets I can see more of the code. Plus, both languages compile against the same intermediate language and produce the same result.

In 2017, I started to develop a 3D software called planlauf/TERRAIN to visualize digital elevation models created from LiDAR scans. LiDAR makes structures visible that are otherwise difficult to see under trees and bushes. An airplane scans the earth's surface with laser beams. Some of the laser beams penetrate the canopy in wooded areas and reach the ground. Trees and houses can then numerically be removed, resulting in a digital terrain model. The software is used by many archaeologists and even some TV companies, producing high quality content for TV channels such as National Geographic.


planlauf/TERRAIN was specifically designed for fieldwork and works well on inexpensive Windows tablets. After Microsoft lost its interest in supporting tablet manufacturers, the availability and quality of Windows tablets declined around 2018/2019 and I decided that I needed a mobile app for both Android and iOS to accompany the Windows software.

I did some research on how to develop mobile apps, looked into the standard options (Xamarin, Android Studio, Xcode and many more) and got really frustrated by how complicated everything was. I was close to dropping the app idea when I discovered B4X. It sounded really good but - given my experience with the other options - I was very sceptical but decided to give it one more try. After a couple of hours with B4A the smile on my face was back and I had my first simple ‘Hello World’ app running. I immediately purchased B4A and B4I with the hosted builder option.

After a couple of weeks, the first version of the planlauf/TERRAIN mobile app for Android was ready. It was able to display 2D LiDAR maps as well as tracks and pins and use the device´s GPS to show the current location or record a track in the background. During the development I had a couple of questions but much to my surprise, all of my questions had already been asked and answered in the forum.

Porting the Android app to iOS was very easy and I had to adjust the platform specific things only. The major difference was the drawing of the map tiles, though. On Android, simple canvas drawing performs best. On iOS, I use imageviews to display the map tiles.

Apart from the intuitive programming language, B4X has another huge advantage: every step along the quite confusing app publishing process is explained. With B4X, I don’t have to care about the ever changing requirements of Google or Apple. Anywhere Software track the changes and solutions are available when the time comes.

Over the last 1.5 years, the app has constantly evolved. You can now purchase readily processed LiDAR maps for some regions in Europe which generates revenue and brings customers for the Windows software. The latest big feature is the option to display 3D maps. It’s based on Three.js running in a webview and works really well. Again, the forum helped me, even with issues in the JavaScript part. Developing with B4X is really easy and fun and I’m looking very much forward to adding more features and creating new apps.

Thank you, Erel!