LOPoCS is a point cloud server written in
Python, allowing to load Point Cloud from a PostgreSQL database thanks to the pgpointcloud
extension.
The current version of LOPoCS provides a way to load Point Cloud from PostgreSQL to the following viewers:
- Cesium thanks to the 3DTiles format
- Potree viewer : viewer with LAZ compressed data.
Note that LOPoCS is currently the only 3DTiles server able to stream data from pgpointcloud. This is possible thanks to the python module py3dtiles.
Developments are still going on to improve state-of-the-art algorithms and performances.
Example using 3Dtiles/Cesium with data from GrandLyon
Contents
- Command line tool to load data into PostgreSQL
- Swagger API
- Stream patches stored in PostgreSQL
- Greyhound protocol support
- 3DTiles standard support (partial)
- Produce ready to use examples with Potree and Cesium
- python >= 3.4
- gdal development headers (libgdal-dev)
- pip (python3-pip)
- virtualenv (python3-virtualenv)
- pgpointcloud with lazperf enabled
- Morton Postgres extension
- PDAL (used by the LOPoCS loader)
Note
The LOPoCS loader uses PDAL's "mortonorder" filter in "reverse" mode. The "reverse" mode was introduced in PDAL version 1.7.1, so make sure you use this version or higher.
$ git clone https://github.com/Oslandia/lopocs
$ cd lopocs
$ virtualenv -p /usr/bin/python3 venv
$ source venv/bin/activate
(venv)$ pip install 'numpy==1.14.3'
(venv)$ pip install -e .
You will find an example of a configuration file for lopocs in conf/lopocs.sample.yml
You have to copy it to conf/lopocs.yml
and fill with your values, lopocs will load it
if this file exists.
Another alternative is to set up the LOPOCS_SETTINGS
environment variable to locate your configuration file.
$ createdb lopocs
$ psql -d lopocs -c 'create extension postgis'
$ psql -d lopocs -c 'create extension pointcloud'
$ psql -d lopocs -c 'create extension pointcloud_postgis'
$ psql -d lopocs -c 'create extension morton'
You can invoke lopocs in your virtualenv to show help and list available subcommands
$ cd lopocs
$ source venv/bin/activate
(venv)$ lopocs
(venv)$ lopocs check
Pdal ... 1.4.0
Pdal plugin pgpointcloud ... ok
PostgreSQL ... 9.6.3
PostGIS extension ... 2.3.1
PgPointcloud extension ... 1.1.0
PgPointcloud-PostGIS extension ... 1.0
(venv)$ mkdir demos
(venv)$ lopocs demo --work-dir demos/ --sample airport --cesium
(venv)$ lopocs serve
Copy/Paste the link at the end of the log in your browser and you will be able to see this:
Each viewer has specific expectations and communication protocol. So, the API is built to meet these specific needs.
Currently, 2 kinds of formats are supported:
- 3DTiles
- Greyhound format (LAZ data with a footer indicating the number of points)
LOPoCS is able to stream data up to 2 viewers:
- Cesium with the 3DTiles format
- Potree viewer with the Greyhound format
LOPoCS provides its RESTful API through a Swagger UI by default on http://localhost:5000
(venv)$ pip install .[dev]
(venv)$ py.test
LGPL>2: LICENSE.