Hexer is a LGPL C++ library that provides some classes for generating hexbin density surfaces and multipolygon boundaries for large point sets. I use the code for generating boundary polygons of large LiDAR collections, but it is useful in other contexts.
Hexer also offers support for creating boundaries and density surfaces using Uber's H3 geospatial indexing library. By specifying --grid h3, points can be summarized inside of H3's existing global hexagon grid. H3 resolution can be specified with -r, or Hexer can calculate an appropriate cell size based on the input. H3 processing currently only supports .LAS and .LAZ files with WGS84 (EPSG:4326) CRS.
Hexer supports two operations at this time, density and boundary. You use hexer through the curse command:
[howardbutler@ardere hexer (master)]$ ./bin/curse --help
--------------------------------------------------------------------
curse (hexer 1.4.0 at revision e2d559 with GDAL 3.9.1)
--------------------------------------------------------------------
command [boundary]
Command to run on points ('boundary' or 'density')
input
Input point set to curse
output, o []
Specify an OGR-compatible output filename to write boundary. stdout used if none specified.
edge [0]
Edge distance of hexagon (hexgrid only)
count [0]
Number of points that must be in polygon for it to be positive space
resolution, r [-1]
H3 grid resolution: 0 (coarsest) - 15 (finest)
grid [hexgrid]
Grid type ('hexgrid' or 'h3'): proprietary HexGrid hexagons, or H3 indexed grid
For more information, see the full documentation for hexer at:
http://github.com/hobu/hexer
$ curse density mylasfile.las --output myhexagons.shp --grid h3
$ curse boundary mylasfile.las --output myboundary.shp --grid h3 -r 12
$ curse boundary mypointfile.shp --output myboundary.shp
$ curse density mylasfile.las --output myhexagons.shp --edge 100