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 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 में दिए गए हैं।
• poc_plateau_venue_lod2 — py -3.11 examples/poc_plateau_venue_lod2.py
table को input के रूप में लेते हैं)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. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.