See https://pdal.io/ for more info
pdal / pdal Goto Github PK
View Code? Open in Web Editor NEWPDAL is Point Data Abstraction Library. GDAL for point cloud data.
Home Page: https://pdal.io
License: Other
PDAL is Point Data Abstraction Library. GDAL for point cloud data.
Home Page: https://pdal.io
License: Other
See https://pdal.io/ for more info
Hobu suggested it might be nice to make an abstract base class for PointBuffer, so we can derive versions with different kinds of backing stores.
We might need to be careful about inner loop performance effect on the getField() calls, though?
Need to establish how initialize works. OK to set some things between ctor and initialize()? If so, which things? Should you be able to change things during pipeline execution? After?
We need a mechanism that writes the output to a set of tiles, e.g. by number of points or spatial extent or something.
This might be a class that sort of wraps a given Writer driver.
Needs to be added to pc2pc as well.
The FauxReader? has the ability to support fields other than x,y,z,t. Need to finish making this work.
Need to make pcview...
We have a few build configurations now. You can build with or without at least these:
We need to document the formal list of what we support.
Need to support a bounds crop operation in pc2pc.
From a simple oci.reader -> filters.reproject -> las.writer pipeline, the resulting lasfile's header does not have its header srs set (though the points are reprojected). See https://gist.github.com/1171038 for the read.xml and lasinfo.xml.
mpg has a whole bunch of lines marked "BUG".
Many of these are simple casting issues that aren't yet resolved.
All the BUG lines need to be addressed.
StatsFilter right now only handles x,y,z. It should be modified to collect the stats on whatever fields are in its schema.
The Notes files have fallen out of date and need to be updated to reflect the post-sprint architecture and decisions.
Need to provide ability on cmd line to accept multiple files as input. (pipeline xml works for this, but is not very convenient for quick things)
Provide docs for cmd line apps.
The exception hierarchy needs to be cleaned up and/or documented more clearly. For example:
is invalid_point_data still used?
what is invalid_expression?
what do I throw when doing parameters checks (e.g. checks for null arguments)?
One day, I wrote this:
double z = data.getField<boost::int32_t>(pointIndex, indexZ);
where of course I really meant this:
double z = data.getField<double>(pointIndex, indexZ);
Note the wrong template type. The problem here is that there's no way to typecheck the return type T is the type we want.
Hobu suggests decltype might help ( http://en.wikipedia.org/wiki/Decltype).
mpg alternatively suggests changing the function from this:
T getField(std::size_t ptIdx, boost::int32_t fieldIdx)
to this:
void getField(std::size_t ptIdx, boost::int32_t fieldIdx, T& ret)
Neither suggestion is very palatable, though.
If interrupted (or failed), pc2pc and pcpipeline should both clean up any output files.
Current, if LasWriter is unable to create its output file (e.g. the file is in a directory that doesn't exist), pcpipeline will exit with a non-descriptive std::std_exception.
I've attached a patch containing a test that illustrates the problem.
I think the problem is in FileUtils::createFile(), but I was spinning my wheels trying to figure out how to check if a file_sink iostream could write.
The frobnitz module needs auto-frobbling enabled.
libLAS supported (I think) the ability to update an existing file -- such as to modify the extents.
How does an in-place-update sort of workflow fit into the libPC model?
StageFactory needs to support the FauxReader and FauxWriter, for testing scenarios.
Need to add an E57 driver, probably just using the simple API.
We need to have a means of doing spatial indexing, and we need to exercise our (as yet unused) ability to put a spatial bounds on the PointBuffer? being requested.
We need a filter/writer/something that creates an octtree. How similar to the Chipper is that?
When reading data with 'drivers.oci.reader', 'drivers.las.writer' does not write the time value. hobu thinks this is:
probably because of drivers.las.writer doing its init without a time pointformat
The MrSID/MG4 format support has been started, but not completed.
We currently have no code in place which demonstrates the unknown-number-of-points feature.
The FauxReader? should offer the ability to have a point count of 0 (zero) and have the point count type set to Unknown.
It would be nice if, eventually, the MosaicFilter? was designed so as to be scalable, e.g. to be able to attach a viewer to 1000 tiles.
This will require some magic code to do things like make the mosaic filter instantiate only the readers needed, so as to minimize memory footprint and open file handles.
Need to make unit tests for Oracle driver that can run by default.
Need to bring over the ASCII/text driver support from libLAS.
Need to extend Application framework to put errors to stderr, output to stdout or to a specified file, logging to stderr(?), etc.
Need to provide support for -to_srs, -a_srs
Looks interesting. Not sure how to install it though...
Any chance some rudimentary install notes could be put together somewhere?
We need to have a driver for the BAG (Bathymetry Attributed Grid) file format.
Readers often produce fields one doesn't want or care about, so It Would Be Nice to have a filter that removes them for you. But you often don't know the name of the field you want to remove -- maybe you only know you want to preserve a few known fields.
So how about a filter that takes a list of strings in its ctor to give instructions as to how to do this. Consider the following syntax:
=name - means "preserve" field 'name', if present
-name - means "remove" field 'name', if present
-* - means "remove" any fields not previously mentioned
=* - means "preserve" any fields not previously mentioned
(I added the '=*' operator for completeness; it is always the "implicit" last operator in the sequence. Note that a '+' operator doesn't make sense: can't specify the datatype, description, etc.)
This would be very easily to implement in the initialize() routine, using a simple mark/sweep pass over the fields
given by the previous stage.
Example: "remove everything but the X,Y,Z fields"
=x, =y, =z, -*
We need to warn in our Notes that the function "operator==" isn't swig-friendly.
For classes likely to be swig'd, an equals() function should be provided (which forwards to oper==, or vice versa).
The public headers need to be documented, doxygen-style.
The following fails:
pc2pc -i test/data/simple.las -o foo.laz
pcinfo -a foo.laz
I think something is wrong such that PDAL can't read in the .laz files it generates.
Need good write-up on how to do builds (like on the liblas site).
We need to support back to Boost 1.41 because my client demands it :)
Boost 1.41 gets us all the way back to RHEL 6.0/CentOS 6.0 and Ubuntu Natty Narwhal without users having to build their own Boost. This is a Good Thing, because building Boost is an unyielding bitch of a job.
[reported 4 months ago, may be OBE by now]
Several tests are currently commented out because mpg and hobu get slightly different answers, because (presumably) different variants of GDAL et al return slightly different WKTs.
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/LasWriterTest.cpp:164: error in "test_different_formats": check filesSame failed
/Users/hobu/hg/libpc/test/unit/SpatialReferenceTest.cpp:218: error in "test_vertical_datum_notcompound": check vlrs_compound[2].getLength() == 21 failed
/Users/hobu/hg/libpc/test/unit/SpatialReferenceTest.cpp:222: error in "test_vertical_datum_notcompound": check vlrs_horizonly[2].getLength() == 7 failed
Add ability to use the decimation filter with pc2pc.
All the major classes should have dump routines, both of the "operator<<" type (nonmember function) and of the dump() type (member function).
CMake needs to have the ability to build both the C# and the Python bindings, perhaps under HAVE_SWIG_CSHARP or some such.
The Signaller class is complete and tested, but not actually being used within the Stage framework yet. Need to make that happen.
The Application framework has the ability to report wall clock running time (--timer).
It would be nice to also report CPU time, peak mem usage, etc.
All the strings in the library should be moved into one common file -- not so much for future I18N work as for the ability to spell-check them all, vet them for consistency of phrasing, etc.
CMake doesn't support C# files directly, but something can be manually kludged to compile the .cs files into their DLL.
It has been suggested that it might be nice to have a logging system of some sort -- enabled, perhaps, with -v on the CL apps.
pcinfo dumps only JSON right now -- should add support for XML too.
The Stage::createIterator() function returns an Iterator*, which the caller is responsible for deleting.
The caller (read: mpg) is likely to forget to do the deletion, leading to a memleak.
We should probably return a shared_ptr, and let boost do the mem mgmt for us.
(Note: I think this is the only place in libPC where we do this sort of thing.)
Need to provide some example pipeline xml files in the docs.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.