Skip to main content

Python module for 3D tiles format

Project description

chat link Build pipeline status Py3dtiles version on pypi Supported python versions Code coverage py3dtiles GitLab last commit Py3dtiles license

Py3dtiles

Py3dtiles is a CLI tool and a library writing with Python for creating and manipulating 3D Tiles.

Features

Tileset manipulation

  • Read tileset lazily (to avoid useless memory consumption)

  • Write tilesets with their tile contents

  • Browse the tile structure, access to the properties and tile content with the ability to modify them

  • Read and write pnts and b3dm with the batch table support

Tiling tools

All tiling tools are available with the API and the CLI

  • Convert data into 3d tiles (tileset.json + pnts/b3dm files). The supported file formats are:
    • las/laz

    • xyz

    • ply

    • wkb

  • Merge 3D Tiles tilesets into one tileset

  • Read pnts and b3dm files and print a summary of their contents

Installation

With pip

To install Py3dtiles with pip (recommended method)

pip install py3dtiles

For installing specific format dependencies (las/laz, ply, postgis, install from source…), please read the installation section in the documentation.

With docker

docker run -it --rm \
    --mount type=bind,source="$(pwd)",target=/data/ \
    --volume /etc/passwd:/etc/passwd:ro \
    --volume /etc/group:/etc/group:ro \
    --user $(id -u):$(id -g) \
    py3dtiles/py3dtiles:<version> \
    convert <file>

The 3dtiles/ directory should appear in your current directory.

NOTE:

  • the –mount option is necessary for docker to read your source data and to write the result. The way it is written in this example only allows you to read source files in the current folder or in a subfolder

  • This line –volume /etc/passwd:/etc/passwd:ro –volume /etc/group:/etc/group:ro –user $(id -u):$(id -g) is only necessary if your uid is different from 1000.

API basic example

>>> from pathlib import Path
>>>
>>> from py3dtiles.tileset.tileset import TileSet
>>>
>>> tileset = TileSet.from_file(Path("tests/fixtures/tiles/tileset.json"))
>>> all_tiles = (tileset.root_tile, *tileset.root_tile.get_all_children())
>>> for tile in all_tiles:
...     if not tile.has_content():
...         continue
...     tile_content = tile.get_or_fetch_content(tileset.root_uri)
...     print(f"The tile {tile.content_uri} has a content of {type(tile_content)} type")
...     print(f"with this bounding volume: {tile.bounding_volume.to_dict()}")
The tile r.pnts has a content of <class 'py3dtiles.tileset.content.pnts.Pnts'> type
with this bounding volume: {'box': [np.float64(0.390625), np.float64(0.3125), np.float64(0.0), np.float64(0.390625), np.float64(0.0), np.float64(0.0), np.float64(0.0), np.float64(0.3125), np.float64(0.0), np.float64(0.0), np.float64(0.0), np.float64(0.0)]}
The tile r1.pnts has a...

Result example

The data visualized on this website is generated with the convert and merge CLI command of Py3dtiles: https://giro3d.org/examples/lidar_hd.html

The library used on this site is giro3d but there are other 3dtiles viewers.

Lidar HD data converted into 3d tiles visualized with giro3d

Documentation

The CLI and API documentation with examples are available here:

Roadmap

The objectives are:

  • to support the standard at version 1.1 (mainly gltf as content)

  • to convert more file formats

  • to have a better tiler for geometries

Contributing

We welcome new contributions. This may be fixing an issue or adding a feature, but also:

  • reporting an issue

  • reviewing a MR

  • improving the documentation or creating a tutorial

  • talking about this project to others

  • help others on the [chat room](https://matrix.to/#/#py3dtiles:matrix.org)

We have written a contributing guide to help you for your first contribution.

License

Py3dtiles is distributed under the Apache 2 Licence.

Thanks

The following entities have funded py3dtiles:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py3dtiles-12.1.0.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py3dtiles-12.1.0-py3-none-any.whl (123.3 kB view details)

Uploaded Python 3

File details

Details for the file py3dtiles-12.1.0.tar.gz.

File metadata

  • Download URL: py3dtiles-12.1.0.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for py3dtiles-12.1.0.tar.gz
Algorithm Hash digest
SHA256 0a8713f91e0d859a1d457405d1ddad0fe4dbaf87b86bdbe7987d01e88748c17f
MD5 768cb5abe18392aff94f496fd25e26c0
BLAKE2b-256 d385d6b7e9b418c90802e29fc31fd0ebef0beea804429e55cf723912ac313216

See more details on using hashes here.

File details

Details for the file py3dtiles-12.1.0-py3-none-any.whl.

File metadata

  • Download URL: py3dtiles-12.1.0-py3-none-any.whl
  • Upload date:
  • Size: 123.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for py3dtiles-12.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6ec439e33fa676698e94c8b1adc196242d8a82f775af57b5d3cab0c53259b380
MD5 532eda1cbd70717d10983bc70f74b534
BLAKE2b-256 85c30c46100f459f002a2be8b203a0d266358cc53909a2d0814141ed36c85cdf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page