plateau_lod2_mesh — DRIVE japan op

• Data kinds: any → table

• Call: 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]' (implementation को सीधे call करना हो तो 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]', registry से लेना हो तो opsdrive.get("plateau_lod2_mesh"))

• GPU: नहीं (केवल CPU reference implementation)

उपयोग

PLATEAU के CityGML से LOD2 इमारतें पढ़कर स्थानीय मीट्रिक निर्देशांकों में triangle mesh (V, F) और हर इमारत के attributes लौटाता है।

iterparse से bldg:Building को stream में पढ़ता है और इमारत के मुख्य भाग तथा हर bldg:BuildingPart को एक-एक भाग (unit) मानता है। faces thematic surfaces (GroundSurface / WallSurface / RoofSurface / OuterCeilingSurface / OuterFloorSurface / ClosureSurface) के lod2MultiSurface से लिए जाते हैं और surface का प्रकार face_kind में रहता है। lod2Solid जिन faces को xlink:href से संदर्भित करता है, वे सभी मिलने चाहिए। छेद (gml:interior) बाहरी ring से bridge करके ear clipping से triangles में बदले जाते हैं; triangles मूल ring की दिशा (बाहर की ओर normal) बनाए रखते हैं।

निर्देशांक EPSG:6697 (JGD2011 अक्षांश, देशांतर, ऊँचाई) से GRS80 पृथ्वी-केंद्रित कार्तीय निर्देशांकों के माध्यम से मूल बिंदु के tangent plane के ENU (x पूर्व, y उत्तर, z ऊपर, मीटर) में बिना सन्निकटन के बदले जाते हैं। डिफ़ॉल्ट मूल बिंदु ज़मीन का centroid है: GroundSurface vertices के अक्षांश/देशांतर का औसत और उनकी न्यूनतम ऊँचाई (ज़मीन न हो तो सभी vertices)।

fail-closed: 6697 के अलावा srsName, 3 के अलावा srsDimension, LOD2 ज्यामिति में अज्ञात gml element (Triangle, OrientableSurface, pos point lists आदि), तालिका में न होने वाली thematic surface, न मिलने वाला xlink और m के अलावा इकाई वाली measuredHeight को छोड़ा नहीं जाता, बल्कि ValueError दिया जाता है।

Args:

source: CityGML text (< से शुरू), bytes, या फ़ाइल path (str/Path)।

origin: स्थानीय निर्देशांकों का मूल बिंदु (lat0 [deg], lon0 [deg], h0 [m])। None हो तो ज़मीन का centroid।

ids: पढ़ी जाने वाली इमारतों के gml:id (bldg:Building का id)। None हो तो सभी।

bbox_latlon: (lat_min, lon_min, lat_max, lon_max)। केवल वे भाग रहते हैं जिनके vertices का औसत इस box में हो।

on_bad_polygon: triangles में न बदल सकने वाले Polygon (क्षेत्रफल 0, स्व-प्रतिच्छेदन) का व्यवहार। "raise" (डिफ़ॉल्ट) या

"skip" (गिनकर 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] है {"building_id", "part", "gml_id", "measured_height", "attrs", "z_min", "z_max", "ground_z", "height_mesh", "extent_xy", "lat", "lon", "n_faces"}। height_mesh है

z_max − ground_z (measuredHeight से तुलना का मान); extent_xy ENU की (x चौड़ाई, y चौड़ाई) [m] है।

Raises:

ValueError: ऊपर की fail-closed शर्तें, खाली या अमान्य source, टूटा XML, कोई मेल खाता भाग नहीं,

अज्ञात on_bad_polygon, या अमान्य 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])

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_plateau_venue_lod2 — py -3.11 examples/poc_plateau_venue_lod2.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

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

इसी category के (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. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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