Package: pyoints
PyointsPyointsis a python package to conveniently process and analyze point
cloud data, voxels and raster images. It is intended to be used to support
the development of advanced algorithms for geo-data processing.General conceptThe key idea ofPyointsis to provide unified data structures to handle
points, voxels and rasters in the same manner. It is assumed that the
data can be interpreted as a two or three dimensional point cloud. Thus we have
a collection of geo-objects, here calledGeoRecords, which are characterized
by two or three dimensional coordinatescoords, a spatial referenceprojand a transformation matrixt. The spatial reference and transformation
matrix are required to define the global location of the geo-objects. Next to
the origin, the transformation matrix also stores the scale and rotation of the
local coordinate system.The unified data structures simplify the joint use of point clouds, voxels
and rasters significantly, while keeping their natural characteristics. To
ease the processing and analysis, each point, voxel or raster cell are stored
in the commonly used numpy record array according to its natural structure. For
example, a three dimensional point cloud represents a set of points, each
characterized by a coordinate and none to many additional attributes. So the
points are stored in a one dimensional record array. Conversely raster
images are stored in a two dimensional record array, which allows for the
commonly used index access of raster cells. Still, each cell is characterized
by a coordinate and none to many additional attributes. Three dimensional
voxels are accordingly represented by three dimensional record arrays.Since all objects of a voxel or raster are also interpreted as a point cloud,
spatial neighborhood queries, like nearest neighbors or distance search, can
be performed with unified functions. Thus, each extension ofGeoRecordsprovides a spatial indexIndexKDto conveniently perform efficient
neighborhood queries. The classIndexKDis a wrapper of different spatial
indices, to handlek-dimensional spatial queries of different kinds. The
spatial indices are always only initialized on demand for performance reasons,
but cached for future queries. For example, an instancegeoRecordsofGeoRecordsrepresenting three dimensional points allows to create a three
dimensional spatial index by callinggeoRecords.indexKD(). If you are not
interested in the third dimension, you can callgeoRecords.indexKD(2)to
perform two dimensional spatial queries.If you just want to handle coordinates without additional attributes, the classCoordsmight interest you. This class also provides theIndexKDfeature,
but waives to use of a projection and transformation matrix.When is Pyoints suitable for me?Based on the general concept ofPyointspresented above, a bunch of
algorithms, functions and filters have been implemented, to process geo-data
with low programming efforts.Of course, one might wonder whether Python is adequate to analyze point cloud
data since other languages languages are much more efficient. This is obviously
true, but in the experience of the author, Python is very useful to implement
and test new algorithms very quickly. Algorithms for point cloud analysis and
processing often rely on spatial neighborhood queries. SincePyointstakes advantage of very efficient Python libraries, which are basically
wrappers for binaries written in more efficient languages, the performance
loss is limited. Additionally,Pyointstakes care of selecting and caching
appropiate spatial indices for you, so you can focus on the core of your
algorithm idea.So, if you have an algorithm idea and you want to implement it quickly and play
around with different settings,Pyointsis made for you. After finding an
approiate algorithm it can be implemented in a more efficient language
if you like. ThusPyointsis particulary designed for scientists and
developers of new geo-spatial algorithms.InstallationConda InstallationConda installation is recommended. To installPyointswith [Conda]
(https://conda.io/docs/user-guide/getting-started.html) run:conda install -c leampy pyointsCurrently Linux (64 bit) and Windows (64 bit) are supported.Conda BuildIf your system is not supported yet, you might build and install it using theconda reciepe.Buildconda build /path/to/pyoints/condaIf wished, you can specify the variants, like:conda build /path/to/pyoints/conda --variants={python: [3.6], target_platform: ['osx-64']}InstallationCreate a virtual environmentmyenvand add the newly buildPyointspackage.conda create -n myenv /path/to/builded/package/pyoints-*-py*_*.tar.bz2 --use-localThe correct package path can be found withconda build . --output.Finally install the package:conda activate myenv
conda install pyointsTestsTest the package by running the provided doctests:python /path/to/pyoints/tests/test_pyoints.pyDocumentationYou can find the documentation atdocs. Here you can find
docstrings with examples for each module and some comprehensive examples. You
can also take a look at the source files directly.LicenseCopyright (c) 2018, Sebastian Lamprecht, Trier University,lamprecht@uni-trier.dePyointsis free software made available under the GNU General Public
License v3 or later (GPLv3+). SeeLICENSEfor details.CitingPlease citePyointsas:Sebastian Lamprecht (2018): "Pyoints: A Python package for point cloud, voxel
and raster processing.", URLhttps://github.com/laempy/pyoints,
[Online; accessed date].@Misc{,
  author = {Sebastian Lamprecht},
  organization = {Trier University}
  title = {{Pyoints}: A Python package for point cloud, voxel and raster processing.},
  year = {2018--},
  url = "https://github.com/laempy/pyoints",
  note = {[Online; accessed <today>]}
}ContributingAny conribution to thepyointsproject is welcome. SeeCONTRIBUTINGfor details.AcknowledgementsFundingThis work was supported by thePANTHEONproject which is funded by the European Community Horizon 2020 programme
under grant agreement 774571.Python DepencenciesThis software dynamically binds the following Python packages (distributed via
pip). Many thanks to the authors for providing such great open source software.cylinder_fittingXingjie PanPyPIhomepage3-Clause BSD licensedillMike McKernsPyPIhomepage3-Clause BSD licensepygdalFrank WarmerdamPyPIhomepage2-Clause BSD licenselaspyGrant Brown and Howard ButlerPyPIhomepage2-Clause BSD licensenetworkxNetworkX DevelopersPyPIhomepage3-Clause BSD licensenumpyTravis E. Oliphant et al.PyPIhomepage3-Clause BSD licenseopencv-pythonOlli-Pekka HeinisuoPyPIhomepageMIT licensepandasThe PyData Development TeamPyPIhomepage3-Clause BSD licenseplyfileDarsh RanjanPyPIhomepageGPL v3.0 (or later)pyprojJeff WhitakerPyPIhomepageOSI approved licensescikit-learnAndreas MuellerPyPIhomepage3-Clause BSD licensescipySciPy DevelopersPyPIhomepage3-Clause BSD licensertreeHoward ButlerPyPIhomepageLGPL v2.1 (or later)External Depencencies``Pyoints` binds following external libraries as required by some of the pip
packages.GDALFrank WarmerdamhomepageX11/MIT licenseLiblasHoward Butler, Mateusz Loskot et. al.homepageX11/MIT licenselibspatialindexMarios HadjieleftheriouhomepageMIT license