# LiDAR point cloud projects?

**URL:** <https://discourse.julialang.org/t/lidar-point-cloud-projects/22087>\
**Category:** Data\
**Created:** [March 20, 2019, 2:58am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087 "2019-03-20T02:58:47Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![Crghilardi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/crghilardi/32/3738_2.png) [@Crghilardi](https://discourse.julialang.org/u/Crghilardi)\
**Post date:** [March 20, 2019, 2:58am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/1 "2019-03-20T02:58:48Z")

</div>

I wanted to start a discussion to find others that are using Julia for LiDAR point cloud analysis and what the current state of packages is.

To summarize my findings so far:  
[LasIO](https://github.com/visr/LasIO.jl) and [LazIO](https://github.com/evetion/LazIO.jl) seem to be the most current reader libraries since [LibLAS](https://github.com/visr/LibLAS.jl) was deprecated. I have tried LasIO and it worked without any issues

I found [this port](https://github.com/seung-lab/Watershed.jl) of a watershed algorithm.  
Other than that, I have not come across any other existing projects.

Anyone working with point clouds in Julia?

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [March 20, 2019, 5:35am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/2 "2019-03-20T05:35:57Z")

</div>

I used to work on this kind of stuff a lot. For visualizing `laz`, I wrote “displaz” and the julia binding [GitHub - c42f/Displaz.jl: Julia bindings for the displaz lidar viewer](https://github.com/c42f/Displaz.jl) which might be helpful if you want to visualize large point clouds. (The design goal was to gracefully handle point clouds up to the size of available RAM.) The project is a little abandoned now that I’ve moved on to other things, but I did release a julia 1.0 compatible version.

[GitHub - KristofferC/NearestNeighbors.jl: High performance nearest neighbor data structures and algorithms for Julia.](https://github.com/KristofferC/NearestNeighbors.jl) is invaluable for spatial search.

There’s also several basic but useful geometric utilities at [Fugro Roames · GitHub](https://github.com/FugroRoames) which I was peripherally involved in for example [https://github.com/FugroRoames/Rotations.jl](https://github.com/FugroRoames/Rotations.jl) and [GitHub - JuliaGeometry/CoordinateTransformations.jl: A fresh approach to coordinate transformations...](https://github.com/FugroRoames/CoordinateTransformations.jl), and beginnings of a julia-native geodesy library at [GitHub - JuliaGeo/Geodesy.jl: Work with points defined in various coordinate systems.](https://github.com/JuliaGeo/Geodesy.jl)

JuliaGeo has a bunch of cool stuff including various wrappers for highly respected open source geo libraries, etc.

All this is just my personal (and somewhat out of date) perspective. I’m sure there’s plenty of great tools I’ve left out.

---

<div class="post-metadata">

**Author:** ![chakravala](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chakravala/32/6832_2.png) [@chakravala](https://discourse.julialang.org/u/chakravala)\
**Post date:** [March 20, 2019, 7:10am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/3 "2019-03-20T07:10:50Z")

</div>

My package [Grassmann.jl](https://github.com/chakravala/Grassmann.jl) is intended to serve as a unified mathematical foundation for various geometric algebras and rotational algebras, although it is still a work in progress.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 20, 2019, 2:10pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/4 "2019-03-20T14:10:52Z")

</div>

Not that I work with LIDAR but there was a time were I played a bit with it and wrote this [LASZIP.jl](https://github.com/joa-quim/Laszip.jl) package that never got registered.

---

<div class="post-metadata">

**Author:** ![visr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/visr/32/17204_2.png) [@visr](https://discourse.julialang.org/u/visr)\
**Post date:** [March 20, 2019, 4:10pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/5 "2019-03-20T16:10:38Z")

</div>

Perhaps two more links that could be of interest: [RoamesGeometry.jl](https://github.com/FugroRoames/RoamesGeometry.jl) and [PointCloudRasterizers.jl](https://github.com/Deltares/PointCloudRasterizers.jl) (latter still very early).

So in short, yes, people are working with point clouds in Julia 🙂

It’s not surprising that when searching for LiDAR packages you mainly find packages for point cloud specific file formats like LAS. Most other tools, like the ones Chris mentioned, are very useful, but not neccesarily made with LiDAR in mind. It is a nice example of how composable julia packages are.

Nevertheless it’s good to have a list of packages that are useful for working with point clouds. If you mention specifically what you want to do with point clouds, perhaps we can give more specific tips.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 20, 2019, 4:20pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/6 "2019-03-20T16:20:19Z")

</div>

And there will be a time where I’ll want to process/display _swath bathymetry_ data in Julia wrapping the [MB-system](https://www.mbari.org/products/research-software/mb-system/) tool package.

---

<div class="post-metadata">

**Author:** ![Crghilardi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/crghilardi/32/3738_2.png) [@Crghilardi](https://discourse.julialang.org/u/Crghilardi)\
**Post date:** [March 21, 2019, 12:46am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/7 "2019-03-21T00:46:03Z")

</div>

Wow, thanks for all the replies! I have seen some of the JuliaGeo Projects before but not the other ones. After some more thought, I would imagine [Images](https://github.com/JuliaImages/Images.jl) might be useful in some context, although not sure if the raster libraries already have some connection there?

For context, I work in forestry and the gold standard is typically the [lidR package](https://github.com/Jean-Romain/lidR).

Functionality wise, I was looking to see if there is existing functionality that I could load a .las file and generate first/ last returns to make digital elevation models and canopy height models as a proof of concept.

A second, much more philosophical question I have is what do/should custom types look like for this type of work? I don’t know enough to really imagine what the JuMP/DiffEq of LiDAR analysis would look like.

`?<:Voxel<:PointCloud<:?`

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [March 21, 2019, 5:56am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/8 "2019-03-21T05:56:27Z")

</div>

I’m not aware of a sofware suite like `lidR` which has pre-baked tools for lidar analysis in julia.

As Martijn mentioned, julia libraries tend to be extremely composable though so it’s relatively easy to build your own once you know which libraries to look for. For example, you can use `LasIO` to extract points as efficient short position vectors (for example, encoded as `StaticArrays.SVector{3,Float64}`), along with some other per point data like return number. You can then encode all that into an efficient tabular data structure like `TypedTables.Table` with a spatial index built on `AcceleratedArrays` and `NearestNeighbours` (in principle… this is the kind of composability we were working toward, though it wasn’t fully realized in my time working on this kind of data). On the other hand, if you don’t want the spatial index or want a different kind (eg, a grid index), no problems; just leave it out or change it.

In a tabular structure (think data.frame like thing if you know the R tools), filtering points for last or first return is extremely natural and exactly the thing you do all the time for statistical tabular data. Julia’s type system makes this kind of abstraction practical to use for huge numbers of points like in a point cloud.

In terms of constructing terrain, you’ve got tools like [https://github.com/JuliaGeometry/VoronoiDelaunay.jl](https://github.com/JuliaGeometry/VoronoiDelaunay.jl) to draw on for Delaunay triangulation of arbitrary point sets. However, selecting points for a correct ground layer is a difficult problem in general and I’m not aware of any julia tools for this. For forestry applications there’s generally not giant voids in the ground layer (at least in contrast to urban areas) so I think you would probably get away with simple heuristics for selecting ground points based on a 2D neighbourhood of the point of interest, provided the canopy isn’t too dense.

[Edit:] Having said all that, there’s certainly room for a bunch of pre-configured lidar processing pipeline tools in the julia ecosystem. I’m just not aware of any right now. Primarily such a library would simply compose the best of the libraries mentioned above with a few lidar-specific algorithms to provide processing pipelines which work out of the box.

---

<div class="post-metadata">

**Author:** ![hacklint](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hacklint/32/25568_2.png) [@hacklint](https://discourse.julialang.org/u/hacklint)\
**Post date:** [October 28, 2020, 7:06am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/9 "2020-10-28T07:06:55Z")

</div>

Hi,  
I’m interested in visualizing point clouds and wonder if there are better alternatives than JuliaPCL? That looks capable, but no commits after march 2017 makes me a bit hesitant to go for that if it is abandoned. Any thoughts or alternatives?  
Primary use case is sanity check / initial analysis / registration check of clouds.

---

<div class="post-metadata">

**Author:** ![visr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/visr/32/17204_2.png) [@visr](https://discourse.julialang.org/u/visr)\
**Post date:** [October 28, 2020, 7:48am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/10 "2020-10-28T07:48:51Z")

</div>

Have you tried out Displaz, which Chris linked [above](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/2)? It’s also not in active development, but it is fast and a pleasure to work with.

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [November 5, 2020, 8:17am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/11 "2020-11-05T08:17:43Z")

</div>

Yeah displaz is fairly dormant but I’m glad to hear it hasn’t bit rotted too badly yet!

My original use cases were exactly for sanity checking/quick browsing/registration QC so it’ll probably fit your use case quite well @hacklint.

BTW I do still accept PRs for those repos and do small fixes, I just don’t have time (or honestly, a good reason) to do any heavy development on them. One thing which would be cool would be a displaz\_jll build… I should try that out sometime 🙂

---

<div class="post-metadata">

**Author:** ![hacklint](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hacklint/32/25568_2.png) [@hacklint](https://discourse.julialang.org/u/hacklint)\
**Post date:** [November 5, 2020, 8:51am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/12 "2020-11-05T08:51:17Z")

</div>

I have now tried it out (after @visr pointed it out, should have seen that myself 😉  
I had some minor bumps (Qt and dynamic linking paths) before I got it built and runnable,  
but now it’s happily displaying 14M points in a cloud  
So nice job there @chris!  
Next steps are likely to be figuring out getting some colour coding on points and possibly  
adding polygons to the point cloud(s) - if anyone has a good example in that way I’d be interested.

---

<div class="post-metadata">

**Author:** ![sdanisch](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sdanisch/32/1406_2.png) [@sdanisch](https://discourse.julialang.org/u/sdanisch)\
**Post date:** [November 5, 2020, 12:33pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/13 "2020-11-05T12:33:04Z")

</div>

Makie should have no problems with point clouds of 14 mio points! Polygons are also easy to add 😉

---

<div class="post-metadata">

**Author:** ![shun-sudo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/shun-sudo/32/20331_2.png) [@shun-sudo](https://discourse.julialang.org/u/shun-sudo)\
**Post date:** [December 16, 2020, 11:29pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/14 "2020-12-16T23:29:51Z")

</div>

Very interesting discussion, I am new to Julia and LiDAR data. However, I need to classify a cloud of points in a given area, the classification I believe is something simple, being it: classify trees, rivers, relief, pasture area, erosion and “grotto”. Finally, generate the DEM, DSM and DTM. Does anyone know what packages and tools I can use? I use Linux and most of the software I’ve seen is compatible with Windows. Can anyone help me?

---

<div class="post-metadata">

**Author:** ![dehann](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dehann/32/2003_2.png) [@dehann](https://discourse.julialang.org/u/dehann)\
**Post date:** [August 26, 2022, 10:16pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/15 "2022-08-26T22:16:46Z")

</div>

Hi, just a heads up, over by [Caesar.\_PCL](https://github.com/JuliaRobotics/Caesar.jl) we started consolidating and working with `PointCloud`s. These types are consistent with Point Cloud Library for better interop. We expect to be working with Lidar and point clouds for the foreseeable future. Please post there or reach out for more information.

---

<div class="post-metadata">

**Author:** ![Crghilardi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/crghilardi/32/3738_2.png) [@Crghilardi](https://discourse.julialang.org/u/Crghilardi)\
**Post date:** [August 26, 2022, 11:17pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/16 "2022-08-26T23:17:57Z")

</div>

Happy to see this bubble up every once in a while. Just to add onto this, here is some related stuff that I worked on since originally opening this thread.

I wrote [LASArrays](https://discourse.julialang.org/t/ann-lasarrays-jl/57679) package as athought experiment for a slightly different interface for loading .las files.

I added a added a bunch of recipes to Yggdrasil so some common libraries are available as JLL files  
[PDAL](https://github.com/JuliaPackaging/Yggdrasil/tree/master/P/PDAL)  
[PCL](https://github.com/JuliaPackaging/Yggdrasil/tree/master/P/PCL)  
[Entwine](https://github.com/JuliaPackaging/Yggdrasil/tree/master/E/Entwine)  
[cilantro](https://github.com/JuliaPackaging/Yggdrasil/tree/master/C/cilantro)  
maybe a few more I am forgetting?

---

<div class="post-metadata">

**Author:** ![alex-s-gardner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alex-s-gardner/32/30210_2.png) [@alex-s-gardner](https://discourse.julialang.org/u/alex-s-gardner)\
**Post date:** [August 26, 2022, 11:30pm UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/17 "2022-08-26T23:30:25Z")

</div>

The **[SpaceLiDAR.jl](https://github.com/evetion/SpaceLiDAR.jl)** package is great for working with satellite laser altimetery (i.e. LiDAR) [ICESat, ICESat-2 and GEDI]

---

<div class="post-metadata">

**Author:** ![ga72kud](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ga72kud/32/32180_2.png) [@ga72kud](https://discourse.julialang.org/u/ga72kud)\
**Post date:** [October 4, 2022, 8:18am UTC](https://discourse.julialang.org/t/lidar-point-cloud-projects/22087/18 "2022-10-04T08:18:30Z")

</div>

I use the RobotOS.jl package subscribing on ROS Lidar data. Reading and visualizing data is working. Is there lidar processing algorithmen in julia segmentation learning
