dem_ecef_to_geodetic — DEM geodesy op

• Data kinds: points → points

• Call: import fullseye as fs; fs.ledger.dem_ecef_to_geodetic(xyz) (implementation को सीधे call करना हो तो import demops; demops.dem_ecef_to_geodetic(xyz), registry से लेना हो तो opsdem.get("dem_ecef_to_geodetic"))

उपयोग

ECEF → geodetic coordinate। (..., 3) के रूप में (latitude[deg], longitude[deg], height[m]) लौटाता है।

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

• अक्षांश ±85 degrees, ऊँचाई -500 से 9000 m ... अक्षांश median 2.6e-13 / अधिकतम 6.4e-12 degrees, ऊँचाई median 3.3e-08 / अधिकतम 8.5e-07 m

• अक्षांश ±89.9 degrees, ऊँचाई -11 km से 40 km ... अक्षांश median 2.9e-12 / अधिकतम 1.3e-10 degrees, ऊँचाई median 3.5e-07 / अधिकतम 1.7e-05 m (ध्रुवों की ओर धकेलने से यह 20x बदतर हो जाता है)

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

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

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

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

• dem_terrain_analysis 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 करते हैं)

• 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 के रूप में लेते हैं)

dem_geodetic_from_enu

इसी category के (geodesy)

dem_geodetic_to_ecef · dem_geocentric_grid · dem_earth_curvature_drop · dem_cell_size_webmercator · dem_geodetic_slope · dem_geoid_height · dem_height_frame_convert · dem_height_frame_residual


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

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