{ "info": { "author": "Sebastian Lamprecht", "author_email": "lamprecht@uni-trier.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: GIS", "Topic :: Scientific/Engineering :: Information Analysis" ], "description": "# Pyoints\n\n![logo](./figures/logo_pyoints.png)\n\n*Pyoints* is a python package to conveniently process and analyze point\ncloud data, voxels and raster images. It is intended to be used to support\nthe development of advanced algorithms for geo-data processing.\n\n## General concept\n\nThe key idea of *Pyoints* is to provide unified data structures to handle\npoints, voxels and rasters in the same manner. It is assumed that the\ndata can be interpreted as a two or three dimensional point cloud. Thus we have\na collection of geo-objects, here called `GeoRecords`, which are characterized\nby two or three dimensional coordinates `coords`, a spatial reference `proj`\nand a transformation matrix `t`. The spatial reference and transformation\nmatrix are required to define the global location of the geo-objects. Next to\nthe origin, the transformation matrix also stores the scale and rotation of the\nlocal coordinate system.\n\nThe unified data structures simplify the joint use of point clouds, voxels\nand rasters significantly, while keeping their natural characteristics. To\nease the processing and analysis, each point, voxel or raster cell are stored\nin the commonly used numpy record array according to its natural structure. For\nexample, a three dimensional point cloud represents a set of points, each\ncharacterized by a coordinate and none to many additional attributes. So the\npoints are stored in a one dimensional record array. Conversely raster\nimages are stored in a two dimensional record array, which allows for the\ncommonly used index access of raster cells. Still, each cell is characterized\nby a coordinate and none to many additional attributes. Three dimensional\nvoxels are accordingly represented by three dimensional record arrays.\n\nSince all objects of a voxel or raster are also interpreted as a point cloud,\nspatial neighborhood queries, like nearest neighbors or distance search, can\nbe performed with unified functions. Thus, each extension of `GeoRecords`\nprovides a spatial index `IndexKD` to conveniently perform efficient\nneighborhood queries. The class `IndexKD` is a wrapper of different spatial\nindices, to handle *k*-dimensional spatial queries of different kinds. The\nspatial indices are always only initialized on demand for performance reasons, \nbut cached for future queries. For example, an instance `geoRecords` of\n`GeoRecords` representing three dimensional points allows to create a three\ndimensional spatial index by calling `geoRecords.indexKD()`. If you are not\ninterested in the third dimension, you can call `geoRecords.indexKD(2)` to\nperform two dimensional spatial queries.\n\nIf you just want to handle coordinates without additional attributes, the class\n`Coords` might interest you. This class also provides the `IndexKD` feature,\nbut waives to use of a projection and transformation matrix.\n\n\n## When is Pyoints suitable for me?\n\nBased on the general concept of *Pyoints* presented above, a bunch of\nalgorithms, functions and filters have been implemented, to process geo-data\nwith low programming efforts.\n\nOf course, one might wonder whether Python is adequate to analyze point cloud \ndata since other languages languages are much more efficient. This is obviously \ntrue, but in the experience of the author, Python is very useful to implement \nand test new algorithms very quickly. Algorithms for point cloud analysis and\nprocessing often rely on spatial neighborhood queries. Since *Pyoints*\ntakes advantage of very efficient Python libraries, which are basically\nwrappers for binaries written in more efficient languages, the performance\nloss is limited. Additionally, *Pyoints* takes care of selecting and caching\nappropiate spatial indices for you, so you can focus on the core of your \nalgorithm idea.\n\nSo, if you have an algorithm idea and you want to implement it quickly and play\naround with different settings, *Pyoints* is made for you. After finding an\napproiate algorithm it can be implemented in a more efficient language\nif you like. Thus *Pyoints* is particulary designed for scientists and\ndevelopers of new geo-spatial algorithms.\n\n\n# Installation\n\n## Conda Installation\n\nConda installation is recommended. To install *Pyoints* with [Conda]\n(https://conda.io/docs/user-guide/getting-started.html) run:\n\n```\nconda install -c leampy pyoints\n```\n\nCurrently Linux (64 bit) and Windows (64 bit) are supported.\n\n\n## Conda Build\n\nIf your system is not supported yet, you might build and install it using the \n[conda reciepe](conda/meta.yaml).\n\n### Build\n\n```\nconda build /path/to/pyoints/conda \n```\n\nIf wished, you can specify the variants, like:\n\n```\nconda build /path/to/pyoints/conda --variants={python: [3.6], target_platform: ['osx-64']}\n```\n\n### Installation\n\nCreate a virtual environment `myenv` and add the newly build *Pyoints* package.\n\n```\nconda create -n myenv /path/to/builded/package/pyoints-*-py*_*.tar.bz2 --use-local\n```\n\nThe correct package path can be found with `conda build . --output`.\n\nFinally install the package:\n\n```\nconda activate myenv\nconda install pyoints\n```\n\n### Tests\n\nTest the package by running the provided doctests:\n\n```\npython /path/to/pyoints/tests/test_pyoints.py\n```\n\n\n# Documentation\n\nYou can find the documentation at \n[docs](https://laempy.github.io/pyoints/pyoints.html). Here you can find \ndocstrings with examples for each module and some comprehensive examples. You\ncan also take a look at the source files directly.\n\n\n\n# License\n\nCopyright (c) 2018, Sebastian Lamprecht, Trier University,\nlamprecht@uni-trier.de\n\n*Pyoints* is free software made available under the GNU General Public\nLicense v3 or later (GPLv3+). See [LICENSE](LICENSE) for details.\n\n\n\n# Citing\n\nPlease cite `Pyoints` as:\n\nSebastian Lamprecht (2018): \"Pyoints: A Python package for point cloud, voxel\nand raster processing.\", URL https://github.com/laempy/pyoints, \n[Online; accessed date].\n\n```\n@Misc{,\n author = {Sebastian Lamprecht},\n organization = {Trier University}\n title = {{Pyoints}: A Python package for point cloud, voxel and raster processing.},\n year = {2018--},\n url = \"https://github.com/laempy/pyoints\",\n note = {[Online; accessed ]}\n}\n```\n\n\n# Contributing\n\nAny conribution to the *pyoints* project is welcome. See \n[CONTRIBUTING](CONTRIBUTING.md) for details. \n\n\n\n# Acknowledgements\n\n## Funding\n\nThis work was supported by the [PANTHEON](http://www.project-pantheon.eu) \nproject which is funded by the European Community Horizon 2020 programme \nunder grant agreement 774571.\n\n\n## Python Depencencies\n\nThis software dynamically binds the following Python packages (distributed via\npip). Many thanks to the authors for providing such great open source software.\n\n\n### cylinder_fitting\n\nXingjie Pan\n* [PyPI](https://pypi.org/project/cylinder_fitting/)\n* [homepage](https://github.com/xingjiepan/cylinder_fitting)\n* [3-Clause BSD license](https://github.com/xingjiepan/cylinder_fitting/blob/master/license.txt)\n\n\n### dill\n\nMike McKerns\n* [PyPI](https://pypi.org/project/dill/)\n* [homepage](https://github.com/uqfoundation/dill)\n* [3-Clause BSD license](https://github.com/uqfoundation/dill/blob/master/LICENSE)\n\n\n### pygdal\n\nFrank Warmerdam\n* [PyPI](https://pypi.org/project/pygdal/)\n* [homepage](https://github.com/nextgis/pygdal)\n* [2-Clause BSD license](https://github.com/laspy/laspy/blob/master/LICENSE.txt)\n\n\n### laspy\n\nGrant Brown and Howard Butler\n* [PyPI](https://pypi.org/project/laspy/)\n* [homepage](https://github.com/laspy/laspy)\n* [2-Clause BSD license](https://github.com/laspy/laspy/blob/master/LICENSE.txt)\n\n\n### networkx\n\nNetworkX Developers\n* [PyPI](https://pypi.org/project/networkx/)\n* [homepage](http://networkx.github.io/)\n* [3-Clause BSD license](https://github.com/networkx/networkx/blob/master/LICENSE.txt)\n\n\n### numpy\n\nTravis E. Oliphant et al.\n* [PyPI](https://pypi.org/project/numpy/)\n* [homepage](http://www.numpy.org/)\n* [3-Clause BSD license](http://www.numpy.org/license.html#license)\n\n\n### opencv-python\n\nOlli-Pekka Heinisuo\n* [PyPI](https://pypi.org/project/opencv-python/)\n* [homepage](https://github.com/skvark/opencv-python)\n* [MIT license](https://github.com/opencv/opencv/blob/master/LICENSE)\n\n\n### pandas\n\nThe PyData Development Team\n* [PyPI](https://pypi.org/project/pandas/)\n* [homepage](http://pandas.pydata.org/)\n* [3-Clause BSD license](https://github.com/pandas-dev/pandas/blob/master/LICENSE)\n\n\n### plyfile\n\nDarsh Ranjan\n* [PyPI](https://pypi.org/project/plyfile/https://pypi.org/project/plyfile/)\n* [homepage](https://github.com/dranjan/python-plyfile)\n* [GPL v3.0 (or later)](https://github.com/dranjan/python-plyfile/blob/master/COPYING)\n\n\n### pyproj\n\nJeff Whitaker\n* [PyPI](https://pypi.org/project/pyproj/)\n* [homepage](https://github.com/jswhit/pyproj)\n* [OSI approved license](https://github.com/jswhit/pyproj/blob/master/LICENSE)\n\n\n### scikit-learn\n\nAndreas Mueller\n* [PyPI](https://pypi.org/project/scikit-learn/)\n* [homepage](http://scikit-learn.org/stable/)\n* [3-Clause BSD license](https://github.com/scikit-learn/scikit-learn/blob/master/COPYING)\n\n\n### scipy\n\nSciPy Developers\n* [PyPI](https://pypi.org/project/scipy/)\n* [homepage](https://www.scipy.org/)\n* [3-Clause BSD license](https://github.com/scipy/scipy/blob/master/LICENSE.txt)\n\n\n### rtree\n\nHoward Butler\n* [PyPI](https://pypi.org/project/Rtree/)\n* [homepage](http://toblerity.org/rtree/)\n* [LGPL v2.1 (or later)](https://github.com/Toblerity/rtree/blob/master/LICENSE.txt)\n\n\n\n## External Depencencies\n\n``Pyoints` binds following external libraries as required by some of the pip\npackages.\n\n\n### GDAL\n\nFrank Warmerdam\n* [homepage](https://www.gdal.org/)\n* [X11/MIT license](https://trac.osgeo.org/gdal/wiki/FAQGeneral#WhatlicensedoesGDALOGRuse)\n\n\n### Liblas\n\nHoward Butler, Mateusz Loskot et. al.\n* [homepage](https://liblas.org/)\n* [X11/MIT license](https://liblas.org/copyright.html#license)\n\n\n### libspatialindex\n\nMarios Hadjieleftheriou\n* [homepage](https://libspatialindex.github.io/)\n* [MIT license](https://libspatialindex.github.io/)\n\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://laempy.github.io/pyoints/modules.html", "keywords": "", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "pyoints", "package_url": "https://pypi.org/project/pyoints/", "platform": "", "project_url": "https://pypi.org/project/pyoints/", "project_urls": { "Documentation": "https://laempy.github.io/pyoints/modules.html", "GitHub": "https://github.com/laempy/pyoints", "Homepage": "https://laempy.github.io/pyoints/modules.html" }, "release_url": "https://pypi.org/project/pyoints/0.2.0a3/", "requires_dist": [ "numpy (>=1.15)", "laspy", "scipy", "scikit-learn", "dill", "pandas", "opencv-python", "plyfile", "networkx", "cylinder-fitting" ], "requires_python": ">=3.5", "summary": "A Python package for point cloud, voxel and raster processing.", "version": "0.2.0a3" }, "last_serial": 4470225, "releases": { "0.2.0a1": [ { "comment_text": "", "digests": { "md5": "b88209cfd2cf620f92e5b4285b546311", "sha256": "17e3d5f6c72d46c0b9f0f2f552561a8ada4e9d6c523187deabdaaa995fa33015" }, "downloads": -1, "filename": "pyoints-0.2.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "b88209cfd2cf620f92e5b4285b546311", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 6522253, "upload_time": "2018-09-27T13:36:20", "url": "https://files.pythonhosted.org/packages/d7/c5/376e2a4a39f0032efc029b604c619ca52145f666af38e80bb6d5e5eda377/pyoints-0.2.0a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a39570235f0d2de55f4b2f8f5948b55b", "sha256": "e507f5a1dcac405d1e5a9f2894d3f48fccb71ba5dddcf32d88c82ddb707e192c" }, "downloads": -1, "filename": "pyoints-0.2.0a1.tar.gz", "has_sig": false, "md5_digest": "a39570235f0d2de55f4b2f8f5948b55b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6480110, "upload_time": "2018-09-27T13:38:50", "url": "https://files.pythonhosted.org/packages/ff/59/57a0484b05a96e6eeedacd66f9846a598fb5b754bc93b518d1a165917d3a/pyoints-0.2.0a1.tar.gz" } ], "0.2.0a2": [ { "comment_text": "", "digests": { "md5": "9970ba07c2a94d180d692a0da18db1b1", "sha256": "508d6dbac4337b1150704ca17036d92e85481a430a4898e1ff507b539151268c" }, "downloads": -1, "filename": "pyoints-0.2.0a2-py3-none-any.whl", "has_sig": false, "md5_digest": "9970ba07c2a94d180d692a0da18db1b1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 6522253, "upload_time": "2018-09-27T14:25:49", "url": "https://files.pythonhosted.org/packages/0f/1f/756666559486c08ccef02c7d87e46be4bc149a533b62f339318922e65dd7/pyoints-0.2.0a2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cee5b480d138d0bebeba808b813fa078", "sha256": "93b16af0db94b75922b49911b257b63085dd751da5e33be168b4ea5fecf01e68" }, "downloads": -1, "filename": "pyoints-0.2.0a2.tar.gz", "has_sig": false, "md5_digest": "cee5b480d138d0bebeba808b813fa078", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6480126, "upload_time": "2018-09-27T14:28:55", "url": "https://files.pythonhosted.org/packages/51/b1/269366546b9e2ac2743bad0d577708ee1fbe4e6625d0270bf34b4ca2e614/pyoints-0.2.0a2.tar.gz" } ], "0.2.0a3": [ { "comment_text": "", "digests": { "md5": "cb8d1cab4deeb624a89d5718b8930f03", "sha256": "f7c6cae2ef5bcea7cff0f2298b5b604cd2867ef13fc98cfce3917a71022f03d8" }, "downloads": -1, "filename": "pyoints-0.2.0a3-py3-none-any.whl", "has_sig": false, "md5_digest": "cb8d1cab4deeb624a89d5718b8930f03", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 6535441, "upload_time": "2018-11-09T17:26:40", "url": "https://files.pythonhosted.org/packages/06/4f/6ca81a77c75cd271024032eaea798a95431262cfd81a838e8da9d2b28344/pyoints-0.2.0a3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f7209bafb16131f7566ee5d7acf80f8", "sha256": "3372f13da5c9c24846fb5e620fb357f46c2e255a8a02baa68506ac3b2ad37f8b" }, "downloads": -1, "filename": "pyoints-0.2.0a3.tar.gz", "has_sig": false, "md5_digest": "8f7209bafb16131f7566ee5d7acf80f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6480080, "upload_time": "2018-11-09T17:26:49", "url": "https://files.pythonhosted.org/packages/a1/a1/f301c4436a0937410caea130fb0030c040e7e7934d3618f659be6cc2bee4/pyoints-0.2.0a3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cb8d1cab4deeb624a89d5718b8930f03", "sha256": "f7c6cae2ef5bcea7cff0f2298b5b604cd2867ef13fc98cfce3917a71022f03d8" }, "downloads": -1, "filename": "pyoints-0.2.0a3-py3-none-any.whl", "has_sig": false, "md5_digest": "cb8d1cab4deeb624a89d5718b8930f03", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 6535441, "upload_time": "2018-11-09T17:26:40", "url": "https://files.pythonhosted.org/packages/06/4f/6ca81a77c75cd271024032eaea798a95431262cfd81a838e8da9d2b28344/pyoints-0.2.0a3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f7209bafb16131f7566ee5d7acf80f8", "sha256": "3372f13da5c9c24846fb5e620fb357f46c2e255a8a02baa68506ac3b2ad37f8b" }, "downloads": -1, "filename": "pyoints-0.2.0a3.tar.gz", "has_sig": false, "md5_digest": "8f7209bafb16131f7566ee5d7acf80f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6480080, "upload_time": "2018-11-09T17:26:49", "url": "https://files.pythonhosted.org/packages/a1/a1/f301c4436a0937410caea130fb0030c040e7e7934d3618f659be6cc2bee4/pyoints-0.2.0a3.tar.gz" } ] }