- अक्षांश/देशांतर coordinates में मीटर unit के x,y displacement जोड़ते समय, अगर दूरी कुछ km से कम हो और poles के पास न हो, तो simple approximation से भी तेज़ी से calculation की जा सकती है
- basic calculation में y-direction में 111,111m को latitude का 1 degree, और x-direction में
111,111 * cos(latitude)m को longitude का 1 degree माना जाता है; 100m north जाने पर 100 / 111111 degree जोड़ना होता है
- यही idea पृथ्वी को radius
R=6378137 वाले sphere के रूप में मानकर dLat=dn/R, dLon=de/(R*cos(lat)) से भी calculate किया जा सकता है; latitude 51 degrees पर dn=100, de=100 हो तो latO=51.00089832, lonO=0.001427437 मिलता है
- अगर accuracy requirement 10m के भीतर है और offset 1km तक है, तो Aviation Formulary जैसे अधिक complex formulas इस्तेमाल किए जा सकते हैं, लेकिन simple plane approximation से भी 1km offset पर error 50m से कम रहने की उम्मीद है
- अगर latitude के अनुसार 1 degree की length बदलने वाले effect तक handle करना है, तो meters per degree formula इस्तेमाल करना या local projected coordinate system में convert करके displacement जोड़ना और फिर वापस latitude/longitude में लौटाना ज्यादा safe है
छोटी दूरी के movement के लिए 111,111m/degree approximation पर्याप्त है
- छोटे displacement के लिए निम्न approximation से latitude/longitude में change calculate किया जा सकता है
- y-direction 111,111m ≈ latitude का 1 degree
- x-direction
111,111 * cos(latitude)m ≈ longitude का 1 degree
- नए coordinates लगभग इस तरह निकाले जाते हैं
lat_new = lat + dy / 111111
lon_new = lon + dx / (111111 * cos(latitude))
cos(latitude) में runtime environment के अनुसार सही unit डालनी चाहिए
- जिन environments में radians चाहिए, वहाँ
latitude * pi / 180 conversion ज़रूरी है
- यह approximation तब उपयुक्त है जब movement बहुत बड़ा न हो, pole के बिल्कुल पास न हो, और required accuracy बहुत अधिक न हो
111,111m संख्या का आधार और error range
- 111,111 value meter की historical definition से जुड़ी है
- क्योंकि France ने मूल रूप से meter को equator से North Pole तक Paris meridian के along measured distance के
10^7वें हिस्से के रूप में define किया था
10^7 / 90 = 111,111.1m latitude के 1 degree के बराबर होता है
- comments में verification के दौरान, x,y में प्रत्येक 1400m, कुल displacement 2km को UTM calculation से compare करने पर result 8.6m या कम तक match हुआ
- उस condition में worst latitude 81 degrees था
- error 89.6 degrees से आगे तक 10m से कम बना रहा
- simple formula longitude के polar regions की ओर संकरा होने वाले effect को
cos(latitude) से reflect करता है
- क्योंकि longitude के 1 degree की actual distance घटती है, इसलिए समान x-direction meter movement high latitudes पर बड़े longitude change में convert होता है
पृथ्वी के radius का उपयोग करने वाली वही calculation
- वही calculation पृथ्वी के radius based formula से भी express की जा सकती है
//Position, decimal degrees
lat = 51.0
lon = 0.0
//Earth’s radius, sphere
R=6378137
//offsets in meters
dn = 100
de = 100
//Coordinate offsets in radians
dLat = dn/R
dLon = de/(R*Cos(Pi*lat/180))
//OffsetPosition, decimal degrees
latO = lat + dLat * 180/Pi
lonO = lon + dLon * 180/Pi
- यह example निम्न result return करता है
latO = 51,00089832
lonO = 0,001427437
- यह तरीका 111,111m/degree approximation जैसा ही लगभग solution है; फर्क इतना है कि यह
111,319.5m के करीब radius-based value इस्तेमाल करता है
- x movement वास्तविक east-west direction, और y movement north-south direction के करीब होना चाहिए
- अगर local projected coordinate system की easting/northing rotate की हुई है, तो पहले उसे east-west और north-south components में convert करना चाहिए
जब और accuracy चाहिए तो विकल्प
- Aviation Formulary का “lat/long given radial and distance” formula distance और bearing angle से नया latitude/longitude calculate करते समय इस्तेमाल किया जा सकता है
- trigonometric functions का use घटाना चाहने वाले embedded environment के लिए यह थोड़ा complex हो सकता है
- distance parameter को
distance / earth radius के रूप में radian value के तौर पर handle किया जाता है
- local plane coordinate system में project करके offset जोड़ने का तरीका भी संभव है
flat_coordinate = latlon_to_utm(original_coordinate)
new_flat_coordinate = flat_coordinate + (x,y)
result_coordinate = utm_to_latlon(new_flat_coordinate)
- इस तरीके में केवल UTM ही ज़रूरी नहीं; उस region के लिए उपयुक्त कोई भी plane coordinate system इस्तेमाल किया जा सकता है
- हालांकि UTM zone boundary पर movement के बाद दूसरे UTM zone में चले जाने की स्थिति में इसे वैसे ही apply करना मुश्किल है
भाषा-वार implementation examples और latitude-wise precise formula
- Python example 111,111m/degree approximation को वैसा ही function में बदलता है
from math import cos, radians
def meters_to_lat_lon_displacement(m, origin_latitude):
lat = m / 111111
lon = m / (111111 * cos(radians(origin_latitude)))
return lat, lon
- R example भी वही calculation करता है
deg2rad = function(deg) {(deg * pi) / (180)}
meters_to_lat_lon_displacement = function(m, origin_latitude){
lat = m / 111111
lon = m / (111111 * cos((deg2rad(origin_latitude))))
return(list(lat=lat,lon=lon))
}
- अधिक precise latitude-wise meters per degree formula इस तरह इस्तेमाल किया जा सकता है
meters_per_degree_lat = (111132.92 - 559.82 * np.cos(2 * lat0_rad) +
1.175 * np.cos(4 * lat0_rad) - 0.0023 * np.cos(6 * lat0_rad))
meters_per_degree_lon = (111412.84 * np.cos(lat0_rad) -
93.5 * np.cos(3 * lat0_rad) + 0.118 * np.cos(5 * lat0_rad))
- यह precise formula latitude के अनुसार latitude के 1 degree और longitude के 1 degree की length लगातार बदलती है, इसे reflect करता है
- Swift example latitude के अनुसार पृथ्वी का radius calculate करता है और distance तथा bearing angle से नया
CLLocationCoordinate2D निकालने का रूप इस्तेमाल करता है
1 टिप्पणियां
Hacker News की राय
मीटर को 1791 में पेरिस से गुजरने वाली quadrant meridian, यानी 90-degree arc की लंबाई के 1 करोड़वें हिस्से के रूप में फिर से परिभाषित किया गया था
इसलिए 1° ≡ 1/90 × 10^7 m = 111,111.111... m होता है, और पृथ्वी की परिधि भी लगभग 4 करोड़ m, यानी 40,000 km होती है
मीटर की शुरुआती परिभाषा seconds pendulum, यानी 2 सेकंड period वाले pendulum की लंबाई थी, और T ≈ 2π√(L/g) में T = 2, L = 1 रखने पर 1 = π√(1/g), 1 = π²/g बनता है
इसलिए g का π² के करीब होना भी सिर्फ संयोग नहीं है, और 1 cm³ पानी का 1 g होना भी इसलिए है क्योंकि लंबे समय तक यही gram की परिभाषा थी
जब मीटर seconds pendulum से परिभाषित था, तब वह second की परिभाषा और g के मान से पूरी तरह बंधा था; formula में लिखें तो 1 m = 1 s² × g / π²
g ≈ π² स्वाभाविक रूप से आता है, लेकिन पृथ्वी की परिधि 40,000 km के इतनी करीब थी कि मीटर को 10 की घातों के आधार पर फिर से परिभाषित करने पर भी बदलाव बहुत बड़ा नहीं हुआ—यह संयोग जैसा लगता है
https://en.wikipedia.org/wiki/Second#Fraction_of_solar_day
3 English feet सिर्फ लगभग 0.91m होते हैं
उस समय लोगों ने vacuum में कोई सबसे सिद्धांतनिष्ठ या cosmically सुंदर लंबाई इकाई नहीं निकाली थी; वे ज़्यादा उस दिशा में थे कि पहले से इस्तेमाल हो रही इकाई को “वहां रखी छड़ की लंबाई” के बजाय किसी और तरीके से define किया जाए
360 degrees के बजाय 40,000 km इस्तेमाल करते, और असली calculations में actual distance लेते, जबकि approximation काफी करीब रहती
तब कम-से-कम metric system users के लिए distance में बदलने वाला conversion जरूरी नहीं रहता
degrees की समस्या यह है कि उन्हें उपयोगी distance में बदलना मुश्किल है; ऐसी तरकीबें मदद करती हैं, लेकिन शुरुआत से ही conversion न होना बेहतर है
1 nautical mile, लगभग 6076 ft, पृथ्वी के equator पर ठीक 1 minute of arc के बराबर होता है
navigation करने वालों के लिए तो अच्छा होता कि सभी miles nautical miles ही होते
nautical mile का वास्तविक अर्थ है; 5280 ft का आखिर क्या अर्थ है, समझ नहीं आता
chain की लंबाई, acres के आधार पर tax लगाने वाले British land tax law का byproduct है
Roman mile 1000 paces, यानी 5000 ft था, इसलिए वह थोड़ा ज़्यादा समझ में आता था
https://en.wikipedia.org/wiki/Gunter%27s_chain
मूल Roman mile 5000 Roman feet का था
वास्तव में 1 nmi ≡ 1.852 km के रूप में ठीक-ठीक define किया गया है
meter की मूल परिभाषा में भी 1/60 × 1/90 × 10^7 = 1851.85185185... m निकलता है
SI और उसके predecessors MKS, CGS की मुख्य खासियत शुरुआत से ही units के बीच convertibility थी, इसलिए 1 m ≡ 1 s ≡ 1 kg ≡ 1 N ≡ 1 Pa ≡ 1 J ≡ 1 A ≡ 1 C ≡ 1 V ≡ 1 Ω ≡ 1 F ≡ 1 W ≡ 1 Wb ≡ 1 T ≡ 1 H ≡ 1 Hz जैसे संबंध हैं
यहां ≡ को सख्त equivalence नहीं, बल्कि conversion factor को ढीले अर्थ में दिखाने के लिए इस्तेमाल किया गया है
SI में लगभग exceptions kelvin, mole, candela और उनकी derived units हैं; इनमें पहले दो को Boltzmann constant और Avogadro constant से साफ-सुथरे तरीके से handle किया जा सकता है
candela का SI में होना मुझे निजी तौर पर पसंद नहीं है
लेकिन 1500s में England ने उस समय की agricultural measurement calculations को बहुत आसान बनाने के लिए mile को 8 furlongs में बदल दिया
https://en.m.wikipedia.org/wiki/Furlong
यह कुछ ऐसा दावा लगता है कि 10 को integers से 3 में divide नहीं किया जा सकता, इसलिए customary units बेहतर हैं
अगर circle को 360 arcs में बांटें, तो लगता है कि focus से किसी खास दूरी पर उस arc में से एक का कोई अर्थ है
लेकिन यह देखते हुए कि लगभग 2000 साल पहले Greeks ने Babylonians के 360 के इस्तेमाल को अपनाया, और Babylonians भी उससे पहले 2000 साल तक astronomy में इस्तेमाल होने वाले साल के दिनों की मोटी गणना को refine करके उस संख्या तक पहुंचे थे, nautical mile का अर्थ “वास्तविक” से ज्यादा derived और accidental अर्थ के करीब है
ऊपर से, अगर यह भी मानें कि पृथ्वी oblate spheroid है, तो nautical mile की लंबाई स्थान के हिसाब से बदलती है
अमेरिका में 10 साल से ज़्यादा रहने के बावजूद मैं अब भी imperial system का आदी नहीं हुआ हूं, और लगता है आगे भी नहीं हो पाऊंगा
यह बिल्कुल समझ में नहीं आता
metric system तो शुद्ध सोने जैसा है: 1cm = 10mm, 1m = 100cm, 1km = 1000m, 1kg = 1000g, 1ton = 1000kg
imperial system ऐसा है जैसे “ज़रा रुको” और फिर 1in = ???, 1ft = 12in, 1yd = 3ft, 1mile = 5280ft, 1lb = 16oz जैसी चीज़ें
समझ नहीं आता आखिर यह पागलपन किसने बनाया
इसलिए समस्या उतनी बार सामने नहीं आती जितनी सोचते हैं
metric में लिखे होने पर भी units convert न करना ध्यान खींचता है
जैसे 1L के बजाय 1000mL, 3.5kg के बजाय 3500g लिखना
यूरोप का कोई व्यक्ति कह सकता है “इस तरफ 600m, उस तरफ 1.2km”, लेकिन अमेरिकी शायद ही कहें “इस तरफ 800 yards, उस तरफ 1 mile”
यूरोपीय कह सकता है “4L पानी ले जाना है, इसलिए बैग 4kg भारी हो गया”
अमेरिकी कह सकता है “मेरी bottle 24 fluid ounces की है, तो लगभग 24 weight ounces होगी”, लेकिन अगर gallon हो तो शायद बस कहेगा कि इसका वज़न भी लगभग gallon जितना है
आखिरकार unit conversion की समस्या मेरी कल्पना से कम निकली, क्योंकि अमेरिकी हर वाक्य में units convert करते हुए नहीं घूमते
अगर आबादी के 50% से ज़्यादा लोग जानते हों कि एक cup पानी में कितने ounces होते हैं, या 1 mile में कितने feet होते हैं, तो मुझे हैरानी होगी
फिर भी अच्छा है कि अमेरिका में भी science community metric system को standard के तौर पर इस्तेमाल करती है
surveying tool से निकली chain 22 yards की होती है
एक chain 4 rod भी होती है, इसलिए एक rod 5½ yards का होता है, जो बड़ा अजीब है
10 chains मिलकर furlong बनते हैं, और 8 furlongs 1 mile होते हैं
संदर्भ के लिए, acre 1 furlong × 1 chain होता है
पागलपन जैसा लगे, फिर भी इसके भीतर अपनी एक व्यवस्था है
inches को miles में convert करने की ज़रूरत क्यों पड़ेगी?
ज़िंदगी में inches, या feet और inches को miles में बदलने की नौबत नहीं आती
woodworking या handicraft में इसकी उत्पत्ति के हिसाब से बात समझ आ सकती है, लेकिन बाकी इस्तेमालों में क्या?
imperial ruler पर 2 3/16" को उतनी ही तेज़ी से पढ़कर देखिए जितनी तेज़ी से 5.6cm पढ़ते हैं
screw sizes भी इससे प्रभावित होते हैं
रोशनी की गति से 1 nanosecond में तय की गई दूरी भी लगभग 1 foot होती है
प्रभावशाली है :)
$ units c ft/nsका result* 0.98357106है1 kilochrono 55 मिनट होता है, और space travel जैसी स्थितियों में जहां units को solar day पर निर्भर नहीं रख सकते, यह काफी उपयोगी होगा
अगर पृथ्वी oblate spheroid है, तो latitude के 1 degree की वास्तविक arc length बदलती नहीं है क्या?
सोच रहा हूं कि “reliable” का मतलब बस “काम चलाने लायक करीब” है क्या
geography से असंबंधित काम बहुत लंबे समय से कर रहा हूं, इसलिए लगता है पहले जो जानता था वह भूल गया हूं
जिस use case में मुझे यह बात पता चली, उसके बारे में मैंने यहां कुछ हद तक लिखा है: https://twitter.com/mholt6/status/1695685022710477043
भले ही मेरे मामले में कुछ km का error हो, इसके polar regions के पास होने की संभावना कम है; और अगर polar region ही हुआ तो “ठीक है, समझ गया, तुम pole पर हो” कहकर आगे बढ़ सकते हैं
पृथ्वी की orbit भी ऐसी ही है
स्कूल में हमें ellipse कहा जाता है, लेकिन असल आकार का एहसास लगभग नहीं मिलता, और ज़्यादातर drawings पूरी तरह गलत impression देती हैं
फिर भी कई practical purposes के लिए यह पर्याप्त रूप से करीब है
इस लेख में यह अच्छा rule of thumb भी है कि 111,111 * cos(latitude) m longitude का 1 degree होता है
correction मुझे पसंद है
असल में आसान constants भी इस्तेमाल किए जा सकते हैं: 25° पर लगभग 100,000m, 44° पर लगभग 80,000m, 57° पर लगभग 60,000m