dem_skyline — GEOCAM skyline op

• Data kinds: depth → table

• Call: import fullseye as fs; fs.ledger.dem_skyline(dem, cell_size, observer_rc, eye_height=1.5, az_step_deg=1.0, max_distance=None, earth_curvature=True) (implementation को सीधे call करना हो तो import geocam; geocam.dem_skyline(dem, cell_size, observer_rc, eye_height=1.5, az_step_deg=1.0, max_distance=None, earth_curvature=True), registry से लेना हो तो opsgeocam.get("dem_skyline"))

उपयोग

DEM के 1 point से दिखने वाली सभी दिशाओं की skyline (हर azimuth पर horizon elevation) → table।

dem_horizon_angle "सभी cells × 1 azimuth" है, और यह "1 point × सभी azimuths" -- fixed camera की दिशा तय करने के लिए बाद वाला चाहिए। हर azimuth में cell_size / 2 के step से line of sight आगे बढ़ाई जाती है (elevation bilinear interpolation से), और atan((z_j − z_0 − drop(d)) / d) का maximum उस azimuth का elevation angle बनता है। drop(d) = d² / (2 R_eff) वह मात्रा है जितना पृथ्वी की गोलाई और atmospheric refraction (effective radius R / (1 − 0.13)) से दूर के पहाड़ नीचे डूबते हैं। line of sight DEM से बाहर निकले तो वहीं रुकती है (max_distance पर भी रुकती है)। DEM के बाहर यह माना जाता है कि "DEM की सबसे कम elevation वाला plane horizon तक चलता है", और elevation angle की निचली सीमा horizon dip −sqrt(2 h / R_eff) रखी जाती है (h = observer की सबसे कम elevation से ऊँचाई) -- ताकि finite DEM के किनारे पर संयोग से कोई नीचा point देखकर, −7° जैसा "छेद" जो असल में पृथ्वी की गोलाई के कारण दिखता ही नहीं, आसमान न बन जाए (horizon_dip_deg में लौटाया जाता है)।

Args:

dem: (H, W) elevation [m]। row 0 उत्तरी किनारा है।

cell_size: [m/cell]।

observer_rc: observation point (row, col)। float चलेगा (cell के अंदर खड़ा)।

eye_height: ज़मीन से camera की ऊँचाई [m]।

az_step_deg: azimuth का step [degree]।

max_distance: line of sight की अधिकतम दूरी [m] (None = DEM के किनारे तक)।

earth_curvature: False हो तो सपाट पृथ्वी।

Returns:

table: azimuth_deg (M,) / elevation_deg (M,) / distance_m (M,) (elevation angle तय करने वाले

point तक की दूरी) / observer_elevation_m / horizon_dip_deg / n। azimuth 0 या उससे ज़्यादा और

360 से कम, बढ़ते क्रम में।

उपयोग की विस्तृत guide

• geocam family guide

संदर्भ (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_public_camera_heading — py -3.11 examples/poc_public_camera_heading.py

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

render_skyline_view · camera_orientation_from_skyline

इसी category के (skyline)

skyline_extract · render_skyline_view


*Provenance: geocam.py — GEOCAM operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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