tb_dem_ecef_to_geodetic — 2D typed op

• Data kinds: points → points

• Call: fullseye.apply(img, "tb_dem_ecef_to_geodetic", a=0.5, b=0.5) (2-D model = एक image + दो scalar knobs a,b∈[0,1])

*कोई figure नहीं: type तो पहुँचता है, पर सामान्य synthetic input इस op के domain में नहीं आता — ECEF は地球表面座標(中心から ~6.4M m)を要るが、画像由来の合成点は原点付近で楕円体の evolute 内に落ち必ず拒否される। उपयोग का तरीका नीचे "चलाए जा सकने वाले उदाहरण" में देखें।*

उपयोग

ECEF → geodetic coordinates। (..., 3) के रूप में (अक्षांश[डिग्री], देशांतर[डिग्री], ऊँचाई[m]) लौटाता है।

Bowring (1976) के closed form के क़रीब का तरीका। round trip (geodetic → ECEF → geodetic) की त्रुटि sample कहाँ से लिया गया उसके अनुसार 1 order of magnitude से ज़्यादा बदलती है, इसलिए इसे range के साथ लिखा गया है (2026-09-08 को दोबारा मापा गया। पहले "latitude, longitude 1e-12 डिग्री से कम, ऊँचाई 1e-7 m से कम" लिखा था, लेकिन ★latitude ±85 डिग्री, ऊँचाई -500 से 9000 m के 4000 points पर ही यह अधिकतम 6.4e-12 डिग्री / 8.5e-07 m से पार हो चुका था —— इसे median 2.6e-13 डिग्री / 3.3e-08 m से गड़बड़ा दिया गया था):

• latitude ±85 डिग्री, ऊँचाई -500 से 9000 m … latitude median 2.6e-13 / अधिकतम 6.4e-12 डिग्री, ऊँचाई median 3.3e-08 / अधिकतम 8.5e-07 m

• latitude ±89.9 डिग्री, ऊँचाई -11 km से 40 km … latitude median 2.9e-12 / अधिकतम 1.3e-10 डिग्री, ऊँचाई median 3.5e-07 / अधिकतम 1.7e-05 m (ध्रुवों की ओर जाने पर 20 गुना ख़राब होता है)

longitude दोनों में अधिकतम 2.8e-14 डिग्री है। ज़मीन पर ये सब µm से कम हैं, और व्यवहार में इन्हें "error floor" मान सकते हैं, लेकिन median को अधिकतम मान के रूप में उद्धृत न करें।

अगर सिर्फ़ geocentric spherical coordinates चाहिए, तो r = |xyz| और geocentric_lat = asin(z/r) काफ़ी हैं —— लेकिन वह geodetic latitude नहीं है (दोनों में अधिकतम 0.19 डिग्री, दूरी में लगभग 21 km का अंतर होता है)। यह op जो लौटाता है वह नक्शे और GPS वाला geodetic latitude है।

★पृथ्वी के केंद्र के पास यह fail-closed तरीके से reject करता है (2026-09-08, poc_geodetic_height_frames इससे टकराया)। ellipsoid के evolute (a·p)^(2/3) + (b·|z|)^(2/3) < (a²-b²)^(2/3) के अंदर, ellipsoid की सतह से खड़ा किया गया normal केवल 1 तय नहीं होता, और geodetic latitude ही अद्वितीय नहीं होता। तब तक यहाँ चुपचाप lat = 180° लौटाया जाता था —— जो latitude के रूप में अस्तित्व में ही नहीं है, और ऊपर से इसका अपना inverse function dem_geodetic_to_ecef इसे "lat_deg must be within [-90, 90]" कहकर reject करता है। यह क्षेत्र equatorial plane में axis से e²a = 42697.7 m तक और polar axis पर (a²-b²)/b = 42841.3 m तक है (मापा गया: 42600 m पर 180 डिग्री, 42700 m पर 0 डिग्री —— closed form की सीमा से ठीक मेल)।

2-D evolution registry में bridge किया गया dem का op dem_ecef_to_geodetic। implementation वही है, केवल calling convention को op(v, a, b) के अनुरूप किया गया है। इस op में कोई tuning knob नहीं है; a और b दोनों का उपयोग नहीं होता।

संदर्भ (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 के स्रोत।

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

नीचे के उदाहरण मूल ledger op dem_ecef_to_geodetic को call करते हैं। यह bridge op वही implementation है, बस fn(v, a, b) convention के अनुसार ढाला गया है, इसलिए व्यवहार वैसा ही लागू होता है (केवल call का रूप अलग है)।

• dem_geodesy_tour — py -3.11 examples/dem_geodesy_tour.py

• poc_geodetic_benchmarks_real — py -3.11 examples/poc_geodetic_benchmarks_real.py

• poc_geodetic_height_frames — py -3.11 examples/poc_geodetic_height_frames.py

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

identity · tb_points_to_voxel · tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal

इसी category के (typed)

tb_points_to_voxel · tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal · tb_voxel_grid_downsample


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

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