3 पॉइंट द्वारा GN⁺ 2023-08-28 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • अक्षांश/देशांतर 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 टिप्पणियां

 
GN⁺ 2023-08-28
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 की परिभाषा थी

    • second, मीटर की फिर से परिभाषा से पुरानी इकाई है, और चूंकि यह दिन को “अच्छे तरीके से” बांटने से आया है, इसलिए अब भी थोड़ा संयोग बचा हुआ लगता है
      जब मीटर 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
    • 32-bit integer से latitude या longitude को लगभग 1cm accuracy तक व्यक्त किया जा सकता है :D
    • मीटर असल में 3 Paris feet के भी करीब है, इसलिए लगभग 0.97m होता है
      3 English feet सिर्फ लगभग 0.91m होते हैं
      उस समय लोगों ने vacuum में कोई सबसे सिद्धांतनिष्ठ या cosmically सुंदर लंबाई इकाई नहीं निकाली थी; वे ज़्यादा उस दिशा में थे कि पहले से इस्तेमाल हो रही इकाई को “वहां रखी छड़ की लंबाई” के बजाय किसी और तरीके से define किया जाए
    • लगता है GPS coordinate system बस kilometers में होता तो अच्छा होता
      360 degrees के बजाय 40,000 km इस्तेमाल करते, और असली calculations में actual distance लेते, जबकि approximation काफी करीब रहती
      तब कम-से-कम metric system users के लिए distance में बदलने वाला conversion जरूरी नहीं रहता
      degrees की समस्या यह है कि उन्हें उपयोगी distance में बदलना मुश्किल है; ऐसी तरकीबें मदद करती हैं, लेकिन शुरुआत से ही conversion न होना बेहतर है
    • France ने angles पर भी decimalization लागू किया था, इसलिए असल में 1 gon = 100 km है और 1 km बस 1 centigon है
  • 1 nautical mile, लगभग 6076 ft, पृथ्वी के equator पर ठीक 1 minute of arc के बराबर होता है
    navigation करने वालों के लिए तो अच्छा होता कि सभी miles nautical miles ही होते
    nautical mile का वास्तविक अर्थ है; 5280 ft का आखिर क्या अर्थ है, समझ नहीं आता

    • mile के 5280 ft होने की वजह यह है कि यह 80 chains की लंबाई है
      chain की लंबाई, acres के आधार पर tax लगाने वाले British land tax law का byproduct है
      Roman mile 1000 paces, यानी 5000 ft था, इसलिए वह थोड़ा ज़्यादा समझ में आता था
      https://en.wikipedia.org/wiki/Gunter%27s_chain
    • ज्यादातर दूसरी “miles” Roman mile से निकलीं, और foot·yard·inch·barleycorn जैसी British units से कुछ हद तक स्वतंत्र रूप से विकसित हुईं, इसलिए conversion factors अजीब हो गए
      मूल 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 में होना मुझे निजी तौर पर पसंद नहीं है
    • दिलचस्प बात यह है कि mile मूल रूप से कम अजीब 5000 ft था
      लेकिन 1500s में England ने उस समय की agricultural measurement calculations को बहुत आसान बनाने के लिए mile को 8 furlongs में बदल दिया
      https://en.m.wikipedia.org/wiki/Furlong
    • अच्छा होता अगर medieval लोगों ने mile को 5040 ft के रूप में define किया होता; तब यह 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 28, 30, 35, 36, 40, 42, 45, 48, 56, 60, 63, 70, 72, 80, 84, 90, 105, 112, 120, 126, 140, 144, 168, 180, 210, 240, 252, 280, 315, 336, 360, 420, 504, 560, 630, 720, 840, 1008, 1260, 1680, 2520 से विभाज्य होता
    • “nautical mile का वास्तविक अर्थ है” में वास्तविक से क्या मतलब है, यह सोचने वाली बात है
      यह कुछ ऐसा दावा लगता है कि 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 जैसी चीज़ें
    समझ नहीं आता आखिर यह पागलपन किसने बनाया

    • अमेरिका में रहते हुए मैंने यह समझा कि ज़्यादातर अमेरिकी सच में ज़रूरत न हो तो units के बीच conversion नहीं करते
      इसलिए समस्या उतनी बार सामने नहीं आती जितनी सोचते हैं
      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 करते हुए नहीं घूमते
    • अमेरिका में पले-बढ़े लोगों में भी काफी लोग शायद इस system को पूरी तरह नहीं समझते
      अगर आबादी के 50% से ज़्यादा लोग जानते हों कि एक cup पानी में कितने ounces होते हैं, या 1 mile में कितने feet होते हैं, तो मुझे हैरानी होगी
      फिर भी अच्छा है कि अमेरिका में भी science community metric system को standard के तौर पर इस्तेमाल करती है
    • बीच की कुछ units छूट गई हैं, और उन्हें जानने पर थोड़ी व्याख्या मिलती है
      surveying tool से निकली chain 22 yards की होती है
      एक chain 4 rod भी होती है, इसलिए एक rod 5½ yards का होता है, जो बड़ा अजीब है
      10 chains मिलकर furlong बनते हैं, और 8 furlongs 1 mile होते हैं
      संदर्भ के लिए, acre 1 furlong × 1 chain होता है
      पागलपन जैसा लगे, फिर भी इसके भीतर अपनी एक व्यवस्था है
    • inches को आखिर किसमें convert करना है?
      inches को miles में convert करने की ज़रूरत क्यों पड़ेगी?
      ज़िंदगी में inches, या feet और inches को miles में बदलने की नौबत नहीं आती
    • unit conversion भी असुविधाजनक है, लेकिन मेरे हिसाब से सबसे बुरा fractional length notation है
      woodworking या handicraft में इसकी उत्पत्ति के हिसाब से बात समझ आ सकती है, लेकिन बाकी इस्तेमालों में क्या?
      imperial ruler पर 2 3/16" को उतनी ही तेज़ी से पढ़कर देखिए जितनी तेज़ी से 5.6cm पढ़ते हैं
      screw sizes भी इससे प्रभावित होते हैं
  • रोशनी की गति से 1 nanosecond में तय की गई दूरी भी लगभग 1 foot होती है

    • असलियत के हैरान करने लायक करीब है
      प्रभावशाली है :)
      $ units c ft/ns का result * 0.98357106 है
    • sound की गति से 1 millisecond में तय की गई दूरी भी लगभग 1 foot होती है
    • अगर समय को बदलकर 1 chrono = रोशनी को 1e9 m जाने में लगने वाला समय define करें, तो अच्छा लगेगा
      1 kilochrono 55 मिनट होता है, और space travel जैसी स्थितियों में जहां units को solar day पर निर्भर नहीं रख सकते, यह काफी उपयोगी होगा
    • एक साल में seconds की संख्या भी π*10^7 के काफी करीब है
    • 1 googol femtobarns भी लगभग 1 square teraparsecs है
  • अगर पृथ्वी oblate spheroid है, तो latitude के 1 degree की वास्तविक arc length बदलती नहीं है क्या?
    सोच रहा हूं कि “reliable” का मतलब बस “काम चलाने लायक करीब” है क्या
    geography से असंबंधित काम बहुत लंबे समय से कर रहा हूं, इसलिए लगता है पहले जो जानता था वह भूल गया हूं

    • reliable का मतलब काम चलाने लायक करीब है, और ज़्यादा आबादी वाले क्षेत्रों में estimate भी काफी accurate है
      जिस use case में मुझे यह बात पता चली, उसके बारे में मैंने यहां कुछ हद तक लिखा है: https://twitter.com/mholt6/status/1695685022710477043
      भले ही मेरे मामले में कुछ km का error हो, इसके polar regions के पास होने की संभावना कम है; और अगर polar region ही हुआ तो “ठीक है, समझ गया, तुम pole पर हो” कहकर आगे बढ़ सकते हैं
    • पृथ्वी का equatorial diameter, polar diameter से 43 km ज़्यादा है
      पृथ्वी की orbit भी ऐसी ही है
      स्कूल में हमें ellipse कहा जाता है, लेकिन असल आकार का एहसास लगभग नहीं मिलता, और ज़्यादातर drawings पूरी तरह गलत impression देती हैं
    • सिर्फ title देखकर लग सकता है कि latitude के 1 degree की length में बदलाव 1 decimeter से भी कम है, लेकिन जाहिर है ऐसा नहीं है
      फिर भी कई practical purposes के लिए यह पर्याप्त रूप से करीब है
  • इस लेख में यह अच्छा rule of thumb भी है कि 111,111 * cos(latitude) m longitude का 1 degree होता है
    correction मुझे पसंद है
    असल में आसान constants भी इस्तेमाल किए जा सकते हैं: 25° पर लगभग 100,000m, 44° पर लगभग 80,000m, 57° पर लगभग 60,000m