plateau_lod2_mesh — DRIVE japan op

• Datenarten: any → table

• Aufruf: import fullseye as fs; fs.ledger.plateau_lod2_mesh(source: 'str | Path | bytes', *, origin: 'tuple[float, float, float] | None' = None, ids: 'Iterable[str] | None' = None, bbox_latlon: 'tuple[float, float, float, float] | None' = None, on_bad_polygon: 'str' = 'raise') -> 'dict[str, Any]' (die Implementierung direkt: import driveplateau; driveplateau.plateau_lod2_mesh(source: 'str | Path | bytes', *, origin: 'tuple[float, float, float] | None' = None, ids: 'Iterable[str] | None' = None, bbox_latlon: 'tuple[float, float, float, float] | None' = None, on_bad_polygon: 'str' = 'raise') -> 'dict[str, Any]'; aus dem Register: opsdrive.get("plateau_lod2_mesh"))

• GPU: nein (nur CPU-Referenzimplementierung)

Verwendung

Liest LOD2-Gebäude aus PLATEAU-CityGML und gibt ein Dreiecksnetz (V, F) in lokalen metrischen Koordinaten samt Attributen je Gebäude zurück.

Liest bldg:Building per iterparse als Strom und behandelt den Gebäudekörper und jedes bldg:BuildingPart als je ein Teil (unit). Die Flächen stammen aus dem lod2MultiSurface der thematischen Flächen (GroundSurface / WallSurface / RoofSurface / OuterCeilingSurface / OuterFloorSurface / ClosureSurface); die Flächenart steht in face_kind. Jede Fläche, auf die lod2Solid per xlink:href verweist, muss gefunden werden. Löcher (gml:interior) werden per Brücke an den Außenring angeschlossen und per Ohrenschneiden trianguliert; die Dreiecke behalten die Orientierung des Originalrings (Außennormalen).

Die Koordinaten werden exakt von EPSG:6697 (JGD2011 Breite, Länge, Höhe) über erdzentrierte kartesische GRS80-Koordinaten in das ENU-System der Tangentialebene im Ursprung (x Ost, y Nord, z oben, Meter) überführt. Der Standardursprung ist der

Schwerpunkt des Bodens: Mittel von Breite/Länge der GroundSurface-Vertices und deren tiefste Höhe (ohne Boden alle Vertices).

fail-closed: ein srsName außer 6697, ein srsDimension ungleich 3, ein unbekanntes gml-Element in der LOD2-Geometrie (Triangle, OrientableSurface, pos-Punktlisten, ...), eine thematische Fläche, die nicht in der Tabelle steht, ein nicht auflösbarer xlink und eine measuredHeight-Einheit außer m werden nicht übersprungen, sondern lösen ValueError aus.

Args:

source: CityGML-Text (beginnt mit <), bytes oder ein Dateipfad (str/Path).

origin: Ursprung des lokalen Systems (lat0 [deg], lon0 [deg], h0 [m]). Bei None der Schwerpunkt des Bodens.

ids: gml:id der zu lesenden Gebäude (die id von bldg:Building). Bei None alle.

bbox_latlon: (lat_min, lon_min, lat_max, lon_max). Nur Teile, deren mittlerer Vertex in dieser Box liegt, bleiben.

on_bad_polygon: Umgang mit einem nicht triangulierbaren Polygon (Fläche 0, Selbstschnitt). "raise" (Standard) oder

"skip" (gezählt in n_bad_polygons).

Returns:

{"V": (n,3) float64 [m], "F": (m,3) int64, "face_unit": (m,) int64, "face_kind": (m,) int8, "kinds": LOD2_KINDS, "units": [...], "origin": (lat0, lon0, h0), "crs": str, "n_buildings": int, "n_no_lod2": int, "n_bad_polygons": int, "max_nonplanarity_m": float}.

units[i] ist {"building_id", "part", "gml_id", "measured_height", "attrs", "z_min", "z_max", "ground_z", "height_mesh", "extent_xy", "lat", "lon", "n_faces"}. height_mesh ist

z_max − ground_z (der mit measuredHeight zu vergleichende Wert); extent_xy ist die ENU-(x-Breite, y-Breite) [m].

Raises:

ValueError: die obigen fail-closed-Bedingungen, eine leere oder ungültige source, kaputtes XML, kein passendes Teil,

ein unbekanntes on_bad_polygon oder ein ungültiges origin / bbox_latlon.

Examples:

>>> import driveplateau as PL

>>> m = PL.plateau_lod2_mesh(PL._citygml_lod2_example())

>>> [round(u["height_mesh"], 3) for u in m["units"]]

[12.0, 4.0]

>>> m["V"].shape[1], m["F"].shape[1], sorted(set(m["face_kind"].tolist()))

(3, 3, [0, 1, 2])

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• poc_plateau_venue_lod2 — py -3.11 examples/poc_plateau_venue_lod2.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Gleiche Kategorie (japan)

osm_synthetic · osm_parse · osm_road_graph · osm_road_mask · osm_road_loops · osm_route · japan_world · japan_stats


*Provenance: driveplateau.py — DRIVE Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.