pointclouds 0.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,95 @@
1
+ Metadata-Version: 2.5
2
+ Name: pointclouds
3
+ Version: 0.0.0
4
+ Summary: Point cloud (LAS/LAZ/COPC) I/O, filtering, decimation and gridding
5
+ Project-URL: homepage, https://github.com/serapeum-org/pointclouds
6
+ Project-URL: repository, https://github.com/serapeum-org/pointclouds
7
+ Project-URL: documentation, https://serapeum-org.github.io/pointclouds
8
+ Project-URL: Changelog, https://github.com/serapeum-org/pointclouds/blob/main/docs/change-log.md
9
+ Author-email: Mostafa Farrag <moah.farag@gmail.com>
10
+ License: GNU General Public License v3
11
+ License-File: LICENSE.md
12
+ Keywords: COPC,GIS,LAS,LAZ,lidar,point cloud,pointcloud
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
18
+ Classifier: Natural Language :: English
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Scientific/Engineering :: GIS
25
+ Requires-Python: <4,>=3.11
26
+ Requires-Dist: laspy[lazrs]>=2.5
27
+ Requires-Dist: numpy>=2.0.0
28
+ Requires-Dist: pyproj>=3.7
29
+ Requires-Dist: scipy>=1.10
30
+ Provides-Extra: all
31
+ Requires-Dist: fsspec>=2024.1; extra == 'all'
32
+ Requires-Dist: pyramids-core>=0.70.0; extra == 'all'
33
+ Requires-Dist: s3fs; extra == 'all'
34
+ Provides-Extra: cloud
35
+ Requires-Dist: fsspec>=2024.1; extra == 'cloud'
36
+ Requires-Dist: s3fs; extra == 'cloud'
37
+ Provides-Extra: gis
38
+ Requires-Dist: pyramids-core>=0.70.0; extra == 'gis'
39
+ Description-Content-Type: text/markdown
40
+
41
+ # pointclouds
42
+
43
+ Read, filter, decimate and grid **point clouds** (LAS / LAZ, and COPC/EPT) in Python.
44
+
45
+ A *point cloud* is a set of 3-D measured points - typically from lidar or photogrammetry - each carrying `x`, `y`,
46
+ `z` plus per-point attributes such as intensity, return number and ASPRS classification. `pointclouds` reads the
47
+ standard exchange formats, exposes the header without touching the records, and provides the operations a cloud
48
+ needs before analysis or rendering: classification filtering, decimation, reprojection, and gridding to a raster
49
+ surface (DSM / DTM / density).
50
+
51
+ ## Install
52
+
53
+ ```bash
54
+ pip install pointclouds # core: reads LAS/LAZ, grids to arrays, no GDAL required
55
+ pip install pointclouds[gis] # + pyramids-gis: to_dataset() / to_feature_collection()
56
+ pip install pointclouds[cloud] # + fsspec/s3fs: remote LAZ / COPC
57
+ pip install pointclouds[all] # everything
58
+ ```
59
+
60
+ The core depends only on `numpy`, `laspy`, `pyproj` and `scipy` - no GDAL - so it installs anywhere numpy runs.
61
+ GIS interoperability (turning a cloud into a `pyramids` `Dataset` or `FeatureCollection`) is an optional extra.
62
+
63
+ ## Quick look
64
+
65
+ ```python
66
+ import pointclouds as pc
67
+
68
+ cloud = pc.PointCloud.read_file("survey.laz")
69
+ cloud.crs, cloud.bounds, cloud.count # from the header, no record read
70
+ xyz = cloud.to_array(("X", "Y", "Z")) # (N, 3) float64
71
+
72
+ # COPC: read a window instead of the whole cloud - only the chunks that overlap are decompressed
73
+ box = pc.PointCloud.read_window("survey.copc.laz", bbox=(155000, 463000, 156000, 464000))
74
+ coarse = pc.PointCloud.read_window("survey.copc.laz", resolution=5.0) # ~one point per 5 m
75
+
76
+ # EPT (Entwine): same windowed read, by directory or URL (remote needs the [cloud] extra)
77
+ box = pc.PointCloud.read_window("s3://bucket/survey-ept", bbox=(155000, 463000, 156000, 464000))
78
+
79
+ ground = cloud.filter(classification=2)
80
+ thin = ground.decimate(target=2_000_000, method="random")
81
+
82
+ arr, transform, crs = ground.to_grid(cell_size=1.0, aggregate="min") # pure NumPy
83
+ dtm = ground.to_dataset(cell_size=1.0, aggregate="min") # needs [gis]
84
+ ```
85
+
86
+ ## Where it sits
87
+
88
+ `pointclouds` is an independent package in the serapeum-org stack. It interoperates with
89
+ [`pyramids`](https://github.com/serapeum-org/pyramids) (the raster/vector GIS engine) through two converter methods
90
+ behind the `[gis]` extra, but does not depend on it for reading, gridding or classification. See
91
+ `planning/placement-decision.md` for the full architecture rationale.
92
+
93
+ ## License
94
+
95
+ GPLv3.
@@ -0,0 +1,21 @@
1
+ pointclouds/__init__.py,sha256=r5Vcelidd-D85BjucV8Z_RiEyIANNBKzi_ExsqMa5as,703
2
+ pointclouds/convert.py,sha256=rwv999k19YT3___MASD2hAQPz8Nsnv0dTQgii2UFpS8,1544
3
+ pointclouds/points.py,sha256=R4JTaFWKBAs_oDQTogTbWwCeu-lm7H7rmxa58gwuo1Y,39026
4
+ pointclouds/classify/__init__.py,sha256=YNnJYgTa9c7Asad3GacD-5oB-qsikbeQMPidIiP_VhA,64
5
+ pointclouds/classify/ground.py,sha256=Uq1z0mTmyTJ8FbJQ4HKwskiw76BeVkG8CNMxk-8K7zU,101
6
+ pointclouds/classify/trees.py,sha256=1o9s8lx7dhW2VsO2qMszJBT6XZRCUzKkOUqgqpfGEeI,104
7
+ pointclouds/io/__init__.py,sha256=TvFBTSg5kFUCeC_hlu5N4yV9WhbKBMOn00haTSHdGFY,48
8
+ pointclouds/io/_records.py,sha256=wPawV4ZDdKcXFSFy2MO2meyjuZUbme1s5WSXlhX5Bhg,8705
9
+ pointclouds/io/copc.py,sha256=PH7HwWg_CQ7H-imLbd6imlSgtKsLkOurMISXk-aWNeo,27561
10
+ pointclouds/io/ept.py,sha256=s9IMAOlqwpTCrLi3tv-YKiaV4rWWctCtQhjj5JaU32A,28480
11
+ pointclouds/io/las.py,sha256=IOhhUEUt7a0n3Buyetl_8AmS0WwYYm0Rn9jiE4676lM,4595
12
+ pointclouds/ops/__init__.py,sha256=1Lm6B3nlsUlG_E0tabGCTEbMlNevuixwumdUvaqhQrU,72
13
+ pointclouds/ops/clip.py,sha256=WjPf7XHh-2-_O1jqN3MPoZnKeDnvFODfX198Y2jyRzQ,4138
14
+ pointclouds/ops/decimate.py,sha256=8-E89rPhq5ibfDXUUEk3pxdLxFfBqb-Y4AH-imBgL4M,4572
15
+ pointclouds/ops/filter.py,sha256=cAKxV3vPePRAOzluUMoLtR8w44LPRYzjo_U1g05dIPo,4572
16
+ pointclouds/ops/grid.py,sha256=FLlvGut04H8d7v7kOmdseUlvmsPUX7-d8r2aDWunn9c,12051
17
+ pointclouds/ops/merge.py,sha256=dyzkHdRYoQjjjuewoioHThUqk5xAoHsqR_sjH_CbXgs,4691
18
+ pointclouds-0.0.0.dist-info/METADATA,sha256=bSZMMbLoLCz_h4wicV71PCxgA9sn51f-A1f-t49HDns,4243
19
+ pointclouds-0.0.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
20
+ pointclouds-0.0.0.dist-info/licenses/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
21
+ pointclouds-0.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any