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)
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])
• 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.
• poc_plateau_venue_lod2 — py -3.11 examples/poc_plateau_venue_lod2.py
table als Eingabe)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
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.