GithubHelp home page GithubHelp logo

potree / potreeconverter Goto Github PK

View Code? Open in Web Editor NEW
636.0 636.0 409.0 32.24 MB

Create multi res point cloud to use with potree

Home Page: http://potree.org

License: BSD 2-Clause "Simplified" License

CMake 0.09% C++ 8.94% JavaScript 82.39% HTML 0.28% C 7.95% Makefile 0.01% CSS 0.24% PHP 0.01% Starlark 0.01% Shell 0.05% M4 0.01% Lua 0.01% Python 0.04%

potreeconverter's Introduction

About

Getting Started

Install on your PC

Install node.js

Install dependencies, as specified in package.json, and create a build in ./build/potree.

npm install

Run on your PC

Use the npm start command to

  • create ./build/potree
  • watch for changes to the source code and automatically create a new build on change
  • start a web server at localhost:1234.

Go to http://localhost:1234/examples/ to test the examples.

Deploy to a server

  • Simply upload the Potree folderm with all your point clouds, the build directory, and your html files to a web server.
  • It is not required to install node.js on your webserver. All you need is to host your files online.

Convert Point Clouds to Potree Format

Download PotreeConverter and run it like this:

./PotreeConverter.exe C:/pointclouds/data.las -o C:/pointclouds/data_converted

Copy the converted directory into <potreeDirectory>/pointclouds/data_converted. Then, duplicate and rename one of the examples and modify the path in the html file to your own point cloud.

Downloads

Examples

Basic ViewerCA13 (18 billion Points)Retz (Potree + Cesium)ClassificationsVarious FeaturesToolbar
More Examples
Load ProjectMatcapVirtual RealityHeidentorLionLion LAS
Lion LAZEPTEPT BinaryEPT zstandardClipping VolumeOriented Images
Elevation ProfileMeasurementsMeshesMultiple Point CloudsCamera AnimationFeatures (CA13)
AnnotationsHierarchical AnnotationsAnimation PathShapefilesCesium CA13Geopackage
Cesium SorvilierCustom Sidebar SectionEmbedded IframeGradient Colors

VR

HeidentorEclepensMorro BayLionDechen Cave

Showcase

MatterhornRetzLake TahoeSorvilierGraveChowilla
More
ChillerCoolerDechen CaveRuinsEclepensHeidentor
BuildingLDHILion HeadOverpassPielachpompei
SantoriniSkateparkSubsea Eq.Subsea Man.Westend PalaisWhitby

Funding

Potree is funded by a combination of research projects, companies and institutions.

Research projects who's funding contributes to Potree:

Project Name Funding Agency
LargeClouds2BIM FFG
Harvest4D EU 7th Framework Program 323567
GCD Doctoral College TU Wien
Superhumans FWF

We would like to thank our sponsors for their financial contributions that keep this project up and running!

Diamond
€ 15,000+
         
Gold
€ 10,000+
Silver
€ 5,000+
 
Bronze
€ 1,000+
                Data-viewer        
     

Credits

  • The multi-res-octree algorithms used by this viewer were developed at the Vienna University of Technology by Michael Wimmer and Claus Scheiblauer as part of the Scanopy Project.
  • Three.js, the WebGL 3D rendering library on which potree is built.
  • plas.io point cloud viewer. LAS and LAZ support have been taken from the laslaz.js implementation of plas.io. Thanks to Uday Verma and Howard Butler for this!
  • Harvest4D Potree currently runs as Master Thesis under the Harvest4D Project
  • Christian Boucheny (EDL developer) and Daniel Girardeau-Montaut (CloudCompare). The EDL shader was adapted from the CloudCompare source code!
  • Martin Isenburg, Georepublic, Veesus, Sigeom Sa, SITN, LBI ArchPro, Pix4D as well as all the contributers to potree and PotreeConverter and many more for their support.

Bibtex

@article{SCHUETZ-2020-MPC,
	title =      "Fast Out-of-Core Octree Generation for Massive Point Clouds",
	author =     "Markus Schütz and Stefan Ohrhallinger and Michael Wimmer",
	year =       "2020",
	month =      nov,
	journal =    "Computer Graphics Forum",
	volume =     "39",
	number =     "7",
	doi =        "10.1111/cgf.14134",
	pages =      "13",
	publisher =  "John Wiley & Sons, Inc.",
	pages =      "1--13",
	keywords =   "point clouds, point-based rendering, level of detail",
}

potreeconverter's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

potreeconverter's Issues

Problems using --scale 0.0000001

Hi! I was converting a LAS cloud using the parameter --scale 0.0000001. The resulting LAS had always the same values (about 241) as X and Y coordinates, obtaining a pointcloud composed by a straight line of points directend along the Z axis.
The Z coordinates were unaffected.
Using --scale 0.000001 (10 times larger) works OK.

I tried to debug PotreeConverter, discovering that the following code (LASPointWriter.cpp:9 and following)

void LASPointWriter::write(const Point &point){
    liblas::Point lp(header);

    lp.SetX(point.x);
    lp.SetY(point.y);
    lp.SetZ(point.z);

sets 0x00000040 as X and Y coordinates (point.x, point.y and point.z are correct), while the SetZ invocation works correctly.

It sounds strange, because the code of the three setters are identical (see https://github.com/libLAS/libLAS/blob/master/src/point.cpp).

Not that we aclutally need such precision (10^-7 m, a tenth of a micron), but just for sake showing a warning if the scale is too small would be nice.

Incremental conversion

Currently, if you want to generate more levels, you'll have to start the conversion from the beginning.
It should be possible to add more levels after the first run, as long as the temp folder is still there.

Bug in PlyPointReader.h

PlyPointReader has bug in Visual Studio 2012

"int pointByteSize" is not initialized before using.

Regex error during runtime

== params ==
source: $HOME/Pictures/ET/et.0.ply
outdir: $HOME/Pictures/ET/et.0.ply_converted
spacing: 1
levels: 3
format: xyzrgb
range: 255

creating ply reader
ERROR: regex_error

gcc c++11 uses experimental regex

I've created a version that uses the boost::regex library to help fix it for anyone having issues
Do you want me to submit a pull request to merge the branches ?

system: Ubuntu 14.04 64Bit
Boost:1.54
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2

Multiple input files

Would be nice to be able to specify multiple input files for the PotreeConverter.

Better default scale

Currently, scale is 0.01 which gives cm precision. For high detail point clouds, this is not enough.
Scale should be either taken from the input if availaible (#70 ) or if no scale is given, a meaningfull scale should be calculated from the bounding box. (large bounding box -> higher scale, smaller bounding box -> lower scale)

Question: Converting LAS file vertically stacks all points

Hello! I'm having an issue where, whenever I try to use PotreeConverter with a .LAS file, which I'm generating using Agisoft Photoscan, I get the following:
screen shot 2015-01-20 at 3 29 17 pm

I've tried different variations on scale, spacing, etc., but they still all stack in a single vertical line. Any help would be greatly appreciated. I can also provide a link to the .LAS file I'm working with if that helps. I know this is a .LAS file, as I have been able to view it other applications, including plas.io for example.

Thank you!

Compilation problem

I'm having problem with compilation of PotreeConverter:

Anzes-MacBook-Pro:build anze$ make
Scanning dependencies of target PotreeConverter
[ 12%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/BinPointReader.cpp.o
[ 25%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/GridCell.cpp.o
[ 37%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/LASPointReader.cpp.o
[ 50%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o
In file included from /Users/anze/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:19:
/Users/anze/Downloads/PotreeConverter-master/PotreeConverter/include/PotreeException.h:13:7: error: exception specification of overriding function is more lax than base version
class PotreeException: public exception{
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/exception:94:13: note: overridden virtual function is here
virtual exception() _NOEXCEPT;
^
/Users/anze/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:74:48: error: a space is required between consecutive right angle brackets (use '> >')
("source", po::valuestd::vectorstd::string(), "Source file. Can be LAS, PLY or XYZ");
^

> >
/Users/anze/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:89:76: error: a space is required between consecutive right angle brackets (use '> >')
std::vectorstd::string files = vm["source"].asstd::vectorstd::string();
^~
> >
/Users/anze/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:117:2: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
auto start = high_resolution_clock::now();
^
/Users/anze/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:127:2: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
auto end = high_resolution_clock::now();
^
2 warnings and 3 errors generated.
make[2]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o] Error 1
make[1]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/all] Error 2
make: *** [all] Error 2
Anzes-MacBook-Pro:build anze$

Better output to stdout

I think that the textual output should be more concise and automatically readable, for example to allow it to be feeded to a graphing software like gnuplot to make some performance charts.

Build issue on Ubuntu 12.04 x64

I encountered the following error when building on Ubuntu 12.04 x64.

Scanning dependencies of target PotreeConverter
[  8%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/BINPointReader.cpp.o
[ 16%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/GridCell.cpp.o
[ 25%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/LASPointReader.cpp.o
[ 33%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/LASPointWriter.cpp.o
[ 41%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o
In file included from /srv/tools/PotreeConverter/PotreeConverter/include/PotreeConverter.h:9:0,
                 from /srv/tools/PotreeConverter/PotreeConverter/src/main.cpp:17:
/srv/tools/PotreeConverter/PotreeConverter/include/CloudJS.hpp:85:2: error: declaration of 'std::string CloudJS::string()' [-fpermissive]
/usr/include/c++/4.6/bits/stringfwd.h:65:33: error: changes meaning of 'string' from 'typedef struct std::basic_string std::string' [-fpermissive]
make[2]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o] Error 1
make[1]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/all] Error 2
make: *** [all] Error 2

does potreeconvertor work with different projection?

Hello,
I have data in different projection (Lambert93, WGS84, etc), i want to use potreeconvertor to generate octree, my question is : does potreeconvertor support data in different projection such as Lambert93 and WGS 84?
Many thanks,
qd,

Add parameter keys to command line arguments

Instead of

PotreeConverter.exe <source> <target> <density> <recursions>

it should look like this:

PotreeConverter.exe [options] <source>

Possible options:

  • -o output directory
  • -d density,
  • -r recursions,
  • -f input format, e.g. xyzrgb
  • -range range of rgb or intensity, e.h. 255 or 65536

Improve octree partitioning

Some ideas:

  • Don't use the bounding box (BB). BIN, PLY and XYZ files don't store the BB and require an additional pass just to calculate the BB. Using the spacing should be enough to create a sparse point grid.
  • Do more inside RAM. At the moment, each node streams points from the disk right back to the disk. This means, that the majority of points is read and written to disk multiple times. Keep nodes in memory as long as there is enough RAM. For example, the point cloud data could be sorted in batches of 2gb each. Before the result is stored on the disk and the next batch is loaded.
  • However, since ancestor nodes must remain in memory or loaded back into memory when a point is processed, this approach may or may not work with unsorted point data. If points are close to each other, fewer ancestor nodes must be loaded. To avoid this, points could be sorted into bins before. For example, in the first pass, all points could be sorted into a 16x16x16 grid and in the next pass, each cell is sorted into the octree.

Convert merged LAS data

Trying to convert a merged LAS file (see lasmerge) results in a single data/r file after PotreeConverter finishes.
Converting each LAS file independently works as expected.

Multi-core support

It may decrease the processing time if multi-core processors would be supported.

High memory usage with unordered point clouds

If consecutive points are all over the place instead of close together, PotreeConverter needs a lot of memory because it has to keep all nodes in memory.
As a workaround, it is possible to split the point cloud in tiles (with lastile, for example) and convert all the tiles instead. In one case this brought memory usage down from >15Gb to 1Gb.

PotreeConverter should be able to handle such unordered datasets by itself, for example by reading a chunk of points, sorting the chunk and then do the conversion.

Option for verbose and quiet log

It would be nice, if log output could be set to "quiet" for no log output or "verbose" for detailed log, with some reasonable default log volume.

Make the converter compress the data files

Web servers (Apache server at least) can be configured to serve compressed versions of static resources instead of the precise resource being requested. Given that usually the browsers add the

Accept-Encoding: gzip,deflate

header, we can gzip datafiles and correctly configure the web server to receive the gzipped datafiles and have the browser to decompress them for us.
This is an example of configuration for Apache that redirects requests for .las and .bin files to their compressed counterpart:

<FilesMatch "\.(bin|las)\.gz$">
    ForceType application/octet-stream
    AddEncoding gzip .gz
</FilesMatch>
RewriteEngine on
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -f
RewriteRule ^(.*)\.(bin|las)$ $1.$2.gz [L]

The browser receives the data file with a

Content-Encoding: gzip

header and decompresses it for us.
See http://freebsd.hypermart.net/compressed-html.html

Compilation error on Ubuntu 14.04

Hello, I follow the instructions you have detailed on the readme file to compile the converter on Ubuntu. But when I execute the make comand I receive the following error:

CloudJS.hpp:85:2: error: declaration of ‘std::string CloudJS::string()’ [-fpermissive]

I'm missing something?

Compilation error

Hello, I would like to package PotreeConverter for openSUSE on our build system.
I'm trying first to build it locally I got strange compilation error.

cmake VERBOSE=1 ../
-- Searching for LibLAS + library
-- Found libLAS version: 1.06.000
-- Boost version: 1.53.0
-- Found the following Boost libraries:
-- system
-- thread
-- filesystem
-- program_options
-- Boost_INCLUDE_DIRS: /usr/include
-- Boost_LIBRARY_DIRS: /usr/lib64
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bruno/workspace/PotreeConverter/_build

make VERBOSE=1 -j1
/usr/bin/cmake -H/home/bruno/workspace/PotreeConverter -B/home/bruno/workspace/PotreeConverter/_build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/bruno/workspace/PotreeConverter/_build/CMakeFiles /home/bruno/workspace/PotreeConverter/_build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory /home/bruno/workspace/PotreeConverter/_build' make -f PotreeConverter/CMakeFiles/PotreeConverter.dir/build.make PotreeConverter/CMakeFiles/PotreeConverter.dir/depend make[2]: Entering directory/home/bruno/workspace/PotreeConverter/_build'
cd /home/bruno/workspace/PotreeConverter/_build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/bruno/workspace/PotreeConverter /home/bruno/workspace/PotreeConverter/PotreeConverter /home/bruno/workspace/PotreeConverter/_build /home/bruno/workspace/PotreeConverter/_build/PotreeConverter /home/bruno/workspace/PotreeConverter/_build/PotreeConverter/CMakeFiles/PotreeConverter.dir/DependInfo.cmake --color=
Dependee "/home/bruno/workspace/PotreeConverter/_build/PotreeConverter/CMakeFiles/PotreeConverter.dir/DependInfo.cmake" is newer than depender "/home/bruno/workspace/PotreeConverter/_build/PotreeConverter/CMakeFiles/PotreeConverter.dir/depend.internal".
Dependee "/home/bruno/workspace/PotreeConverter/_build/PotreeConverter/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/bruno/workspace/PotreeConverter/_build/PotreeConverter/CMakeFiles/PotreeConverter.dir/depend.internal".
Scanning dependencies of target PotreeConverter
make[2]: Leaving directory /home/bruno/workspace/PotreeConverter/_build' make -f PotreeConverter/CMakeFiles/PotreeConverter.dir/build.make PotreeConverter/CMakeFiles/PotreeConverter.dir/build make[2]: Entering directory/home/bruno/workspace/PotreeConverter/_build'
/usr/bin/cmake -E cmake_progress_report /home/bruno/workspace/PotreeConverter/_build/CMakeFiles 1
[ 12%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/GridCell.cpp.o
cd /home/bruno/workspace/PotreeConverter/_build/PotreeConverter && /usr/bin/c++ -std=c++0x -I/home/bruno/workspace/PotreeConverter/PotreeConverter/include -o CMakeFiles/PotreeConverter.dir/src/GridCell.cpp.o -c /home/bruno/workspace/PotreeConverter/PotreeConverter/src/GridCell.cpp
/usr/bin/cmake -E cmake_progress_report /home/bruno/workspace/PotreeConverter/_build/CMakeFiles 2
[ 25%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/XYZPointReader.cpp.o
cd /home/bruno/workspace/PotreeConverter/_build/PotreeConverter && /usr/bin/c++ -std=c++0x -I/home/bruno/workspace/PotreeConverter/PotreeConverter/include -o CMakeFiles/PotreeConverter.dir/src/XYZPointReader.cpp.o -c /home/bruno/workspace/PotreeConverter/PotreeConverter/src/XYZPointReader.cpp
/usr/bin/cmake -E cmake_progress_report /home/bruno/workspace/PotreeConverter/_build/CMakeFiles 3
[ 37%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/BinPointReader.cpp.o
cd /home/bruno/workspace/PotreeConverter/_build/PotreeConverter && /usr/bin/c++ -std=c++0x -I/home/bruno/workspace/PotreeConverter/PotreeConverter/include -o CMakeFiles/PotreeConverter.dir/src/BinPointReader.cpp.o -c /home/bruno/workspace/PotreeConverter/PotreeConverter/src/BinPointReader.cpp
/usr/bin/cmake -E cmake_progress_report /home/bruno/workspace/PotreeConverter/_build/CMakeFiles 4
[ 50%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/SparseGrid.cpp.o
cd /home/bruno/workspace/PotreeConverter/_build/PotreeConverter && /usr/bin/c++ -std=c++0x -I/home/bruno/workspace/PotreeConverter/PotreeConverter/include -o CMakeFiles/PotreeConverter.dir/src/SparseGrid.cpp.o -c /home/bruno/workspace/PotreeConverter/PotreeConverter/src/SparseGrid.cpp
/usr/bin/cmake -E cmake_progress_report /home/bruno/workspace/PotreeConverter/_build/CMakeFiles 5
[ 62%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/LASPointReader.cpp.o
cd /home/bruno/workspace/PotreeConverter/_build/PotreeConverter && /usr/bin/c++ -std=c++0x -I/home/bruno/workspace/PotreeConverter/PotreeConverter/include -o CMakeFiles/PotreeConverter.dir/src/LASPointReader.cpp.o -c /home/bruno/workspace/PotreeConverter/PotreeConverter/src/LASPointReader.cpp
/usr/bin/cmake -E cmake_progress_report /home/bruno/workspace/PotreeConverter/_build/CMakeFiles 6
[ 75%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o
cd /home/bruno/workspace/PotreeConverter/_build/PotreeConverter && /usr/bin/c++ -std=c++0x -I/home/bruno/workspace/PotreeConverter/PotreeConverter/include -o CMakeFiles/PotreeConverter.dir/src/main.cpp.o -c /home/bruno/workspace/PotreeConverter/PotreeConverter/src/main.cpp
In file included from /usr/include/boost/range/iterator_range_core.hpp:29:0,
from /usr/include/boost/lexical_cast.hpp:169,
from /usr/include/boost/program_options/value_semantic.hpp:14,
from /usr/include/boost/program_options/options_description.hpp:13,
from /usr/include/boost/program_options.hpp:15,
from /home/bruno/workspace/PotreeConverter/PotreeConverter/src/main.cpp:21:
/usr/include/boost/range/algorithm/equal.hpp: In instantiation of ‘bool boost::range::equal(const SinglePassRange1&, const SinglePassRange2&) [with SinglePassRange1 = boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; SinglePassRange2 = boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string > >]’:
/usr/include/boost/range/iterator_range_core.hpp:434:39: required from ‘bool boost::operator==(const boost::iterator_range&, const boost::iterator_range&) [with Iterator1T = __gnu_cxx::__normal_iterator<char*, std::basic_string >; Iterator2T = __gnu_cxx::__normal_iterator<char*, std::basic_string >]’
/usr/include/boost/algorithm/string/find_iterator.hpp:331:32: required from ‘bool boost::algorithm::split_iterator::equal(const boost::algorithm::split_iterator&) const [with IteratorT = __gnu_cxx::normal_iterator<char*, std::basic_string >]’
/usr/include/boost/iterator/iterator_facade.hpp:532:29: required from ‘static bool boost::iterator_core_access::equal(const Facade1&, const Facade2&, mpl
::true
) [with Facade1 = boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; Facade2 = boost::algorithm::split_iterator<gnu_cxx::normal_iterator<char*, std::basic_string > >; mpl::true = mpl::bool]’
/usr/include/boost/iterator/iterator_facade.hpp:832:3: required from ‘typename boost::detail::enable_if_interoperable<Derived1, Derived2, typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type>::type boost::operator==(const boost::iterator_facade<Derived1, V1, TC1, Reference1, Difference1>&, const boost::iterator_facade<Derived2, V2, TC2, Reference2, Difference2>&) [with Derived1 = boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; V1 = const boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; TC1 = boost::forward_traversal_tag; Reference1 = const boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string > >&; Difference1 = long int; Derived2 = boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; V2 = const boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; TC2 = boost::forward_traversal_tag; Reference2 = const boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string > >&; Difference2 = long int; typename boost::detail::enable_if_interoperable<Derived1, Derived2, typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type>::type = bool]’
/usr/include/boost/iterator/iterator_adaptor.hpp:317:29: required from ‘bool boost::iterator_adaptor<Derived, Base, Value, Traversal, Reference, Difference>::equal(const boost::iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D>&) const [with OtherDerived = boost::transform_iteratorboost::algorithm::detail::copy_iterator_rangeF<std::basic_string<char, __gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::use_default, boost::use_default>; OtherIterator = boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; V = std::basic_string; C = boost::use_default; R = std::basic_string; D = boost::use_default; Derived = boost::transform_iteratorboost::algorithm::detail::copy_iterator_rangeF<std::basic_string<char, __gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::use_default, boost::use_default>; Base = boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >; Value = std::basic_string; Traversal = boost::use_default; Reference = std::basic_string; Difference = boost::use_default]’
/usr/include/boost/iterator/iterator_facade.hpp:532:29: [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/c++/4.8/bits/stl_vector.h:1186:19: required from ‘void std::vector<_Tp, _Alloc>::_M_range_initialize(_InputIterator, _InputIterator, std::input_iterator_tag) [with _InputIterator = boost::transform_iteratorboost::algorithm::detail::copy_iterator_rangeF<std::basic_string<char, __gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::use_default, boost::use_default>; _Tp = std::basic_string; _Alloc = std::allocatorstd::basic_string]’
/usr/include/c++/4.8/bits/stl_vector.h:1177:56: required from ‘void std::vector<_Tp, _Alloc>::_M_initialize_dispatch(_InputIterator, _InputIterator, std::__false_type) [with _InputIterator = boost::transform_iteratorboost::algorithm::detail::copy_iterator_rangeF<std::basic_string<char, __gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::use_default, boost::use_default>; _Tp = std::basic_string; _Alloc = std::allocatorstd::basic_string]’
/usr/include/c++/4.8/bits/stl_vector.h:395:65: required from ‘std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = boost::transform_iteratorboost::algorithm::detail::copy_iterator_rangeF<std::basic_string<char, __gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::algorithm::split_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string > >, boost::use_default, boost::use_default>; = void; _Tp = std::basic_string; _Alloc = std::allocatorstd::basic_string; std::vector<_Tp, _Alloc>::allocator_type = std::allocatorstd::basic_string]’
/usr/include/boost/algorithm/string/iter_find.hpp:178:49: required from ‘SequenceSequenceT& boost::algorithm::iter_split(SequenceSequenceT&, RangeT&, FinderT) [with SequenceSequenceT = std::vectorstd::basic_string; RangeT = std::basic_string; FinderT = boost::algorithm::detail::token_finderFboost::algorithm::detail::is_any_ofF]’
/usr/include/boost/algorithm/string/split.hpp:149:69: required from ‘SequenceSequenceT& boost::algorithm::split(SequenceSequenceT&, RangeT&, PredicateT, boost::algorithm::token_compress_mode_type) [with SequenceSequenceT = std::vectorstd::basic_string; RangeT = std::basic_string; PredicateT = boost::algorithm::detail::is_any_ofF]’
/home/bruno/workspace/PotreeConverter/PotreeConverter/include/XYZPointReader.h:63:40: required from here
/usr/include/boost/range/algorithm/equal.hpp:178:9: internal compiler error: Segmentation fault
}
^
Please submit a full bug report,
with preprocessed source if appropriate.
See http://bugs.opensuse.org/ for instructions.
make[2]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o] Error 1
make[2]: Leaving directory /home/bruno/workspace/PotreeConverter/_build' make[1]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/all] Error 2 make[1]: Leaving directory/home/bruno/workspace/PotreeConverter/_build'
make: *** [all] Error 2

cmake is 2.8.11.2 and boost is 1.53.0
Thanks for any tips or ideas

compilation error : no-return-in-nonvoid-function PotreeWriter

During packaging I'm seeing errors due to checker

[ 45s] I: Program returns random data in a function
[ 45s] E: potreeconverter no-return-in-nonvoid-function /home/abuild/rpmbuild/BUILD/potreeconverter-0+git.1414144465.c30e7c3/PotreeConverter/src/PotreeWriter.cpp:92, 148

[ 45s] I: Program returns random data in a function
[ 45s] E: potreeconverter no-return-in-nonvoid-function /home/abuild/rpmbuild/BUILD/potreeconverter-0+git.1414144465.c30e7c3/PotreeConverter/src/PotreeWriter.cpp:92, 148

Can't build on Fedora

Hey, I'm not able to build PotreeConvertor under Linux (ie. Fedora 20):

Scanning dependencies of target PotreeConverter
[ 8%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o
In file included from ~/PotreeConverter-master/PotreeConverter/include/PotreeConverter.h:9:0,
from /data/home/alucas/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:17:
~/PotreeConverter-master/PotreeConverter/include/CloudJS.hpp:85:2: error: declaration of ‘std::string CloudJS::string()’ [-fpermissive]
}
^
In file included from /usr/include/c++/4.8.3/string:39:0,
from /usr/include/c++/4.8.3/stdexcept:39,
from /usr/include/c++/4.8.3/array:38,
from /usr/include/c++/4.8.3/tuple:39,
from /usr/include/c++/4.8.3/bits/stl_map.h:63,
from /usr/include/c++/4.8.3/map:61,
from /data/home/alucas/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:4:
/usr/include/c++/4.8.3/bits/stringfwd.h:62:30: error: changes meaning of ‘string’ from ‘typedef class std::basic_string std::string’ [-fpermissive]
typedef basic_string string;
^
make[2]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o] Error 1
make[1]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/all] Error 2
make: *** [all] Error 2

I tried to build outside PotreeConvertor directory, same issue.

Any idea?

randomized choice instead of first pick

If two scans overlap and the overlapping parts have different coloring, then the choice of points is biased towards the scan that is stored first. The second scan will suddenly pop up at a higher level.

Martin Isenburg suggested to randomize the choice of points to give other scans a similar chance to be picked, even at root level.

how to update octree?

Hi all,

How can i update octree when i have new data? i have data from different city, i run potreeConvertor on one city data and i want to update it with other city data. Please tell me how can i do it.

I tried to modify the convertor as following:

  • give to potreeConvertor a bbox of all city (of country)
  • delete this lines of codes in PotreeWriter:
    fs::remove_all(path + "/data");
    fs::remove_all(path + "/temp");
    fs::create_directories(path + "/data");
    fs::create_directories(path + "/temp");

but i'm not sure that potreeConvertor can update new data to older potree.

many thanks,

PTS files support

It would be nice to read PTS files. By now, I need to convert them to LAS, and than import them with PotreeConverter.

Error while building on Fedora 20

I have issues in building PotreeConvertor on my F20:

[ 8%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o
In file included from /data/home/alucas/Downloads/PotreeConverter-master/PotreeConverter/include/PotreeConverter.h:9:0,
from /data/home/alucas/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:17:
/data/home/alucas/Downloads/PotreeConverter-master/PotreeConverter/include/CloudJS.hpp:85:2: error: declaration of ‘std::string CloudJS::string()’ [-fpermissive]
}
^
In file included from /usr/include/c++/4.8.3/string:39:0,
from /usr/include/c++/4.8.3/stdexcept:39,
from /usr/include/c++/4.8.3/array:38,
from /usr/include/c++/4.8.3/tuple:39,
from /usr/include/c++/4.8.3/bits/stl_map.h:63,
from /usr/include/c++/4.8.3/map:61,
from /data/home/alucas/Downloads/PotreeConverter-master/PotreeConverter/src/main.cpp:4:
/usr/include/c++/4.8.3/bits/stringfwd.h:62:30: error: changes meaning of ‘string’ from ‘typedef class std::basic_string std::string’ [-fpermissive]
typedef basic_string string;
^
make[2]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/src/main.cpp.o] Error 1
make[1]: *** [PotreeConverter/CMakeFiles/PotreeConverter.dir/all] Error 2
make: *** [all] Error 2

Any idea on what I should/could do to fix that?

PS. No error during cmake.

Sub-directory schema

Storing all data in a single directory might be at least inconvenient for large point clouds.
Having a standardized sub-directory schema could solve this issue.

Standardization may also help to:

  • Incrementally update/process levels
  • Append additional data
  • Have a smaller cloud.js file

For tile map services there exist already directory schema for quad-trees, which prevent to have too many files in a single directory.

process is terminated at 83m points

Hi,

I tried to run the program on 600M points and it has alway finised at 83M points, i think it's memory problem, process is just killed in ubuntu terminal without any message. My pc : ubuntu 12, 8GRam, 8 cores.

do you have any idea how to run the program on large scale point clouds?

many thanks,
qd,

Problems with high coordinate numbers

I'm trying to convert a surface point cloud from some mapping data. My LAS file is in the UTM mapping projection, which means my coordinate values are up around 510000, 5460000 in X,Y. This is very common for airborne lidar data. It appears as though the PotreeConverter has problems with Y values up in the 5,000,000 range and increases the distance between points. So, although I am specifying a spacing of 0.05 meters, the Y direction seems to be getting more like 1 meter spacing while the X spacing looks good. It would be great if there was an option to "shift" the source values during conversion. So I could, say, take 510000 off of X values and 5460000 off of Y values, leaving my final model centered around 0,0.

Data displaying in alternating rows

I am converting a .las file to binary. The .las file is around 9 million points. I have tried many different configurations, but every time I view the file in Potree viewer there are bands of missing points in horizontal lines.It looks like 3 or 4 rows of points are not displaying. I've tried changing various settings in the viewer, and it appears that is has something to do with the conversion. What can I try?

Thanks,
Derrick

las converter dll fatal error

When I run the following command in Windows 7 64-bit cmd:
PotreeConverter.exe C:/testdata.las -s 0.5 -l 4 -o C:/potree_converted

I receive the following PotreeConverter.exe System Error:
"The program can't start because MSVCP110.dll is missing from your computer. Try reinstalling the program to fix this problem."

Nothing happens so I am unable to convert my las file to potree format... Kind regards!

CMake Error : libLAS

Hello

In cmake installing on Mac, errors were occurred as shown below.
LibLAS was already installed.
Let me know how to solve it.

apple-no-iMac:build apple$ cmake ..
-- The C compiler identification is Clang 4.2.0
-- The CXX compiler identification is Clang 4.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Searching for LibLAS + library
-- Could NOT find libLAS (missing: LIBLAS_LIBRARY LIBLAS_INCLUDE_DIR)
-- Boost version: 1.52.0
-- Found the following Boost libraries:
-- system
-- thread
-- filesystem
-- program_options
-- regex
-- Boost_INCLUDE_DIRS: /opt/local/include
-- Boost_LIBRARY_DIRS: /opt/local/lib
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
LIBLAS_INCLUDE_DIR
used as include directory in directory /Users/apple/PotreeConverter-master/PotreeConverter
LIBLAS_LIBRARY
linked by target "PotreeConverter" in directory /Users/apple/PotreeConverter-master/PotreeConverter

-- Configuring incomplete, errors occurred!

Segmentation Fault in Ubuntu

Getting a segmentation fault when trying to run the program , seems to happen immediately

Output:
Segmentation fault (core dumped)

Hardware
Ubuntu 14.04 LTS 64 bit
CMake 2.8

Bus error: 10

Trying the converter on one of the resources included with potree on Mac OSX 10.9 produces result:
"Bus error: 10" and no outputs.
How I am calling the program:
./PotreeConverter_exe lion_takanawa.ply -o test_output/

And I am not sure if this helps, but these are the warnings I get during compilation:
~/Code/PotreeConverter/PotreeConverter/src/PotreeConverter.cpp:118:3: warning: delete called on
'PointReader' that is abstract but has non-virtual destructor [-Wdelete-non-virtual-dtor]
delete reader;
^
~/Code/PotreeConverter/PotreeConverter/src/PotreeConverter.cpp:170:3: warning: delete called on
'PointReader' that is abstract but has non-virtual destructor [-Wdelete-non-virtual-dtor]
delete reader;
^
2 warnings generated.
[ 75%] Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/PotreeWriter.cpp.o
~/Code/PotreeConverter/PotreeConverter/src/PotreeWriter.cpp:69:2: warning: delete called on 'PointReader'
that is abstract but has non-virtual destructor [-Wdelete-non-virtual-dtor]
delete reader;
^
~/Code/PotreeConverter/PotreeConverter/src/PotreeWriter.cpp:92:1: warning: control may reach end of non-void
function [-Wreturn-type]
}
^
~/Code/PotreeConverter/PotreeConverter/src/PotreeWriter.cpp:148:1: warning: control may reach end of
non-void function [-Wreturn-type]
}
^
~/Code/PotreeConverter/PotreeConverter/src/PotreeWriter.cpp:168:4: warning: delete called on 'PointReader'
that is abstract but has non-virtual destructor [-Wdelete-non-virtual-dtor]
delete reader;
^
~/Code/PotreeConverter/PotreeConverter/src/PotreeWriter.cpp:176:3: warning: delete called on 'PointWriter'
that is abstract but has non-virtual destructor [-Wdelete-non-virtual-dtor]
delete writer;
^
5 warnings generated.

Use integers for coordinates

Right now, coordinates with large values will fail with the BINARY output format, as happened here: #74 (comment)

Coordinates should be stored in a way similar to the las format which has a fixed precision/scale.

Build Issue on Mac OSX

I am getting an error while trying to build on Mac OSX 10.9:

Building CXX object PotreeConverter/CMakeFiles/PotreeConverter.dir/src/PotreeConverter.cpp.o
In file included from ~/Code/PotreeConverter/PotreeConverter/src/PotreeConverter.cpp:13:
~/Code/PotreeConverter/PotreeConverter/include/PlyPointReader.h:235:18: error: non-const lvalue reference to type 'Vector3<[...]>' cannot bind to a temporary of type 'Vector3<[...]>
aabb->update(p.position());

Read scale from input

Currently, scale is always 0.01. With #69, the user could specify a different scale.
What's still missing is that the scale is read from input files by default.

Performance drop with *.bin files larger than 3gb

  • 2.7gb bin file: Root node is processed at >8mb/s
  • 3.0gb bin file: Root node is processed at <0.5mb/s

No idea why a slight difference in file size crashes the performance like that, yet.

This bug also affects ply and xyz files since they're beeing converted to bin first.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.