Source code for py3dtiles.tileset.utils

import json
from pathlib import Path

from .content import Pnts, read_binary_tile_content


[docs] def number_of_points_in_tileset(tileset_path: Path) -> int: with tileset_path.open() as f: tileset = json.load(f) nb_points = 0 children_tileset_info = [(tileset["root"], tileset["root"]["refine"])] while children_tileset_info: child_tileset, parent_refine = children_tileset_info.pop() child_refine = ( child_tileset["refine"] if child_tileset.get("refine") else parent_refine ) if "content" in child_tileset: content = tileset_path.parent / child_tileset["content"]["uri"] pnts_should_count = "children" not in child_tileset or child_refine == "ADD" if content.suffix == ".pnts" and pnts_should_count: tile = read_binary_tile_content(content) if isinstance(tile, Pnts): nb_points += tile.body.feature_table.nb_points() elif content.suffix == ".json": with content.open() as f: sub_tileset = json.load(f) children_tileset_info.append((sub_tileset["root"], child_refine)) if "children" in child_tileset: children_tileset_info += [ (sub_child_tileset, child_refine) for sub_child_tileset in child_tileset["children"] ] return nb_points