japan op• 資料種類:any → table
• 呼叫: 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]'(要直接呼叫實作,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]';從台帳取用則 opsdrive.get("plateau_lod2_mesh"))
• GPU:無(僅 CPU 參考實作)
從 PLATEAU 的 CityGML 讀取 LOD2 建物,回傳局部公尺座標的三角網格 (V, F) 以及每棟建物的屬性。
用 iterparse 串流讀取 bldg:Building,把建物本體和每個 bldg:BuildingPart 各當作一個部位(unit)。面取自主題面(GroundSurface / WallSurface / RoofSurface / OuterCeilingSurface / OuterFloorSurface / ClosureSurface)的 lod2MultiSurface,面的種類保存在 face_kind。確認 lod2Solid 以 xlink:href 參照的面全部存在。孔(gml:interior)以橋接到外環後用耳切法三角化,三角形保持原環的方向(外法線)。
座標從 EPSG:6697(JGD2011 的緯度、經度、標高)經 GRS80 地心直角座標嚴格轉換到原點切平面的 ENU(x 東、y 北、z 上,公尺)。預設原點是地面的重心:GroundSurface 頂點經緯度的平均與其最低標高(沒有地面時用全部頂點)。
fail-closed:6697 以外的 srsName、srsDimension 不是 3、LOD2 幾何中未知的 gml 元素(Triangle、OrientableSurface、pos 點列等)、表中沒有的主題面、找不到的 xlink、單位不是 m 的 measuredHeight,都不略過,而是回報 ValueError。
Args:
source: CityGML 字串(以 < 開頭)、bytes 或檔案路徑(str/Path)。
origin: 局部座標原點 (lat0 [deg], lon0 [deg], h0 [m])。None 則為地面的重心。
ids: 要讀取的建物的 gml:id(bldg:Building 的 id)。None 則全部。
bbox_latlon: (lat_min, lon_min, lat_max, lon_max)。只保留頂點平均落在此框內的部位。
on_bad_polygon: 無法三角化的 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])
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• 演算法的正典(作者、年份)與用途見上面的族使用指南。
• poc_plateau_venue_lod2 — py -3.11 examples/poc_plateau_venue_lod2.py
table 作為輸入)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 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.