3 puan yazan GN⁺ 2023-08-28 | 1 yorum | WhatsApp'ta paylaş
  • Enlem/boylam koordinatlarına metre cinsinden x,y ofseti eklerken, hareket mesafesi birkaç km’nin altındaysa ve kutuplara yakın değilse basit bir yaklaşık formülle hızlıca hesaplama yapılabilir
  • Temel hesap, y yönünde 111.111 m’yi enlemde 1 derece, x yönünde 111.111 * cos(latitude) m’yi boylamda 1 derece kabul eder; bu durumda kuzeye 100 m hareket için 100 / 111111 derece eklenir
  • Aynı fikir, Dünya yarıçapı R=6378137 olan bir küre varsayılarak dLat=dn/R, dLon=de/(R*cos(lat)) şeklinde de hesaplanabilir; enlem 51 derecede dn=100, de=100 ise latO=51.00089832, lonO=0.001427437 elde edilir
  • Doğruluk gereksinimi 10 m içinde ise ve ofset 1 km’ye kadarsa Aviation Formulary gibi daha karmaşık formüller kullanılabilir, ancak basit düzlemsel yaklaşımın da 1 km ofsette 50 m’den az hata vermesi beklenir
  • Enleme göre 1 derecenin uzunluğunun değişmesi etkisini de hesaba katmak gerekiyorsa meters per degree formülü kullanılabilir ya da yerel projeksiyon koordinat sistemine dönüştürüp ofset eklendikten sonra tekrar enlem/boylama çevirmek daha güvenlidir

Kısa mesafeli hareketlerde 111.111 m/derece yaklaşımı yeterlidir

  • Küçük hareket miktarlarında enlem/boylam değişimi şu yaklaşıklarla hesaplanabilir
    • y yönünde 111.111 m ≈ enlemde 1 derece
    • x yönünde 111.111 * cos(latitude) m ≈ boylamda 1 derece
  • Yeni koordinatlar yaklaşık olarak şöyle bulunur
    • lat_new = lat + dy / 111111
    • lon_new = lon + dx / (111111 * cos(latitude))
  • cos(latitude) içine çalışılan ortama uygun birim verilmelidir
    • Radyan gereken ortamlarda latitude * pi / 180 dönüşümü gerekir
  • Bu yaklaşım, hareket miktarı çok büyük değilse, kutupların hemen yakınında değilse ve istenen doğruluk çok yüksek değilse uygundur

111.111 m sayısının dayanağı ve hata aralığı

  • 111.111 değeri, metrenin tarihsel tanımıyla bağlantılıdır
    • Çünkü Fransa başlangıçta metreyi ekvatordan kuzey kutbuna kadar Paris meridyeni boyunca ölçülen mesafenin 10^7de 1’i olarak tanımlamıştı
    • 10^7 / 90 = 111.111,1 m enlemde 1 dereceye karşılık gelir
  • Yorumlardaki doğrulamada, x ve y yönlerinde ayrı ayrı 1400 m, toplamda 2 km yer değiştirme için UTM hesabıyla karşılaştırıldığında sonucun 8,6 m altında kaldığı görüldü
    • Bu koşullarda en kötü enlem 81 dereceydi
    • Hata 89,6 derecenin ötesine kadar 10 m’nin altında kaldı
  • Basit formül, kutuplara gidildikçe boylamların daralması etkisini cos(latitude) ile yansıtır
    • Boylamda 1 derecenin gerçek mesafesi küçüldüğü için, x yönünde aynı metre cinsinden hareket yüksek enlemlerde daha büyük bir boylam değişimine dönüşür

Dünya yarıçapını kullanan aynı hesap

  • Aynı hesap, Dünya yarıçapı tabanlı formülle de ifade edilebilir
//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
  • Bu örnek şu sonucu döndürür
latO = 51,00089832
lonO = 0,001427437
  • Bu yöntem, 111.111 m/derece yaklaşımıyla neredeyse aynı çözümdür; fark, yarıçap tabanlı olarak 111.319,5 m değerine yakın bir sayı kullanmasıdır
  • x hareketi gerçek doğu-batı yönüne, y hareketi ise kuzey-güney yönüne yakın olmalıdır
    • Yerel projeksiyon koordinat sistemindeki easting/northing bileşenleri döndürülmüşse, önce doğu-batı ve kuzey-güney bileşenlerine dönüştürülmeleri gerekir

Daha fazla doğruluk gerektiğinde seçenekler

  • Aviation Formulary içindeki “lat/long given radial and distance” formülü, mesafe ve kerterizden yeni enlem/boylam hesaplamak için kullanılabilir
    • Trigonometrik fonksiyon kullanımını azaltmak isteyen gömülü sistemler için biraz karmaşık olabilir
    • Mesafe parametresi, radyan cinsinden distance / earth radius biçiminde ele alınır
  • Bölgeye uygun düzlemsel bir koordinat sistemine projekte edip ofset ekleme yöntemi de kullanılabilir
flat_coordinate = latlon_to_utm(original_coordinate)
new_flat_coordinate = flat_coordinate + (x,y)
result_coordinate = utm_to_latlon(new_flat_coordinate)
  • Bu yöntemde yalnızca UTM kullanmak gerekmez; ilgili bölgeye uygun herhangi bir düzlemsel koordinat sistemi kullanılabilir
  • Ancak UTM zone sınırında hareket sonrası başka bir UTM zone’a geçiliyorsa bunu doğrudan uygulamak zordur

Dillere göre uygulama örnekleri ve enleme göre hassas formül

  • Python örneği, 111.111 m/derece yaklaşımını doğrudan fonksiyona dönüştürür
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 örneği de aynı hesabı yapar
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))
}
  • Enleme göre daha hassas meters per degree formülü şu şekilde kullanılabilir
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))
  • Bu hassas formül, enleme bağlı olarak enlemde 1 derece ile boylamda 1 derecenin uzunluğunun sürekli değişmesini hesaba katar
  • Swift örneği, enleme göre Dünya yarıçapını hesaplayıp mesafe ve kerterizden yeni CLLocationCoordinate2D üretme yaklaşımını kullanır

1 yorum

 
GN⁺ 2023-08-28
Hacker News yorumları
  • Metre, 1791'de Paris'ten geçen çeyrek meridyenin, yani 90 derecelik yay uzunluğunun 10 milyonda biri olarak yeniden tanımlandı
    Dolayısıyla 1° ≡ 1/90 × 10^7 m = 111.111,111... m olur; Dünya'nın çevresi de kabaca 40 milyon m, yani 40.000 km olur
    Metrenin ilk tanımı saniye sarkacıydı; yani periyodu 2 saniye olan bir sarkacın uzunluğu. T ≈ 2π√(L/g) formülünde T = 2, L = 1 koyarsak 1 = π√(1/g), 1 = π²/g olur
    Bu yüzden g'nin π²'ye yakın olması da tamamen tesadüf sayılmaz; 1 cm³ suyun 1 g olması da uzun süre gramın tanımı olduğu içindir

    • Saniye, metrenin yeniden tanımından daha eski bir birim ve günü “güzel” biçimde bölmekten geldiği için hâlâ bir miktar tesadüf kalmış görünüyor
      Metre saniye sarkacıyla tanımlandığında, saniyenin tanımına ve g değerine bütünüyle bağlıydı; formülle yazarsak 1 m = 1 s² × g / π²
      g ≈ π² doğal olarak ortaya çıkar, ama Dünya çevresinin 40.000 km'ye yeterince yakın olup metrenin 10'un kuvvetleriyle yeniden tanımlanmasına rağmen değişimin büyük olmaması tesadüf gibi görünüyor
      https://en.wikipedia.org/wiki/Second#Fraction_of_solar_day
    • 32 bitlik bir tamsayı ile enlemi ya da boylamı yaklaşık 1 cm doğrulukla ifade edebilirsiniz :D
    • Metre aslında 3 Paris fitine de epey yakındır; yaklaşık 0,97 m eder
      3 İngiliz fiti ise yalnızca yaklaşık 0,91 m'dir
      O dönemde insanlar vakum içinde en ilkesel ya da kozmik açıdan en zarif uzunluk birimini türetmiş değillerdi; daha çok zaten kullanılan birimi “şuradaki çubuğun uzunluğu” olmayan bir yolla tanımlamaya çalışıyorlardı
    • GPS koordinat sisteminin keşke doğrudan kilometre olsaydı diye düşünüyorum
      360 derece yerine 40.000 km kullanılır, gerçek hesaplamalarda gerçek mesafe kullanılırdı; yaklaşık değerler de yeterince yakın olurdu
      Böylece en azından metrik sistem kullanıcıları için mesafeye dönüştürme gereği ortadan kalkardı
      Derece biriminin sorunu, kullanışlı bir mesafeye çevrilmesinin zor olması; böyle pratik kurallar yardımcı olsa da en baştan dönüşüm olmaması daha iyi
    • Fransa açılara da ondalıklaştırma uyguladığı için, aslında 1 gon = 100 km ve 1 km de yalnızca 1 centigon'dur
  • 1 deniz mili, yaklaşık 6076 ft, Dünya ekvatorunda tam olarak 1 yay dakikasına karşılık gelir
    Denizcilik açısından bakınca keşke bütün miller deniz mili olsaydı
    Deniz milinin gerçek bir anlamı var; 5280 ft'nin ne anlamı var ki?

    • Milin 5280 ft olmasının nedeni 80 chain uzunluğunda olmasıdır
      Chain uzunluğu, acre üzerinden vergilendirme yapan İngiliz arazi vergisi yasalarının bir yan ürünüdür
      Roma mili 1000 adım, yani 5000 ft idi; bu biraz daha mantıklıydı
      https://en.wikipedia.org/wiki/Gunter%27s_chain
    • Diğer “mil”lerin çoğu Roma milinden türedi; foot, yard, inch, barleycorn gibi İngiliz birimlerinden bir ölçüde bağımsız geliştiği için dönüşüm katsayıları garipleşti
      Başlangıçta Roma mili 5000 Roma fitiydi
      Aslında 1 nmi ≡ 1,852 km olarak tam tanımlıdır
      Metrenin özgün tanımında da 1/60 × 1/90 × 10^7 = 1851,85185185... m çıkar
      SI ve onun öncülleri olan MKS ile CGS'nin temel özelliği, en baştan birimler arası dönüştürülebilirlikti; bu yüzden 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 gibi ilişkiler vardır
      Buradaki ≡ işaretini katı bir eşdeğerlik değil, dönüşüm katsayısını gevşekçe belirtmek anlamında kullandım
      SI'da istisnaya yakın olanlar kelvin, mol, kandela ve bunlardan türeyen birimlerdir; ilk ikisi Boltzmann sabiti ve Avogadro sabitiyle temiz biçimde ele alınabilir
      Kandelanın SI içinde yer almasından kişisel olarak memnun değilim
    • İlginç biçimde mil başlangıçta daha az tuhaf olan 5000 ft idi
      Fakat 1500'lerde İngiltere, o dönemin tarımsal ölçüm hesaplarını çok daha kolaylaştırmak için mili 8 furlong olarak değiştirdi
      https://en.m.wikipedia.org/wiki/Furlong
    • Orta Çağ insanları keşke mili 5040 ft olarak tanımlasaydı; o zaman 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'ye bölünebilirdi
    • “Deniz milinin gerçek bir anlamı var” derken gerçek ile ne kastedildiğini merak ediyorum
      Bana, 10'u yalnızca tam sayılarla 3'e bölemediğimiz için geleneksel birimlerin daha iyi olduğunu savunmaya benziyor
      Çemberi 360 yaya bölerseniz, odaktan belirli bir uzaklıktaki yerde o yaylardan birinin bir anlam taşıdığı düşünülüyor gibi
      Ama yaklaşık 2000 yıl önce Yunanların Babil'in 360 kullanımını devraldığını, Babil'in de ondan önceki 2000 yıl boyunca astronomide kullandığı yaklaşık bir yıl gün sayısı ölçümünü iyileştirerek bu sayıya ulaştığını düşünürsek, deniz milinin anlamı “gerçek” olmaktan çok türetilmiş ve rastlantısal bir anlama daha yakın
      Üstelik Dünya'nın basık küremsi olduğu da hesaba katılırsa, deniz milinin uzunluğu konuma göre değişir
  • ABD’de 10 yıldan uzun süredir yaşamama rağmen hâlâ imperial ölçü sistemine alışamadım; bundan sonra da alışacak gibi değilim
    Hiç mantıklı değil
    Metrik sistem saf altın gibi: 1cm = 10mm, 1m = 100cm, 1km = 1000m, 1kg = 1000g, 1ton = 1000kg
    Imperial sistem ise “bir saniye” deyip 1in = ???, 1ft = 12in, 1yd = 3ft, 1mile = 5280ft, 1lb = 16oz gibi gidiyor
    Bu çılgınlığı kimin uydurduğunu gerçekten bilmiyorum

    • ABD’de yaşarken fark ettiğim şey şu: Amerikalıların çoğu gerçekten gerekmedikçe birimleri birbirine dönüştürmüyor
      Bu yüzden sorun sanıldığından daha az ortaya çıkıyor
      Bir şey tesadüfen metrik sistemle belirtilmiş olsa bile birimi dönüştürmemeleri dikkat çekiyor
      Örneğin 1L yerine 1000mL, 3.5kg yerine 3500g yazmak gibi
      Avrupalı biri “bu taraf 600m, şu taraf 1.2km” diyebilir; ama bir Amerikalı neredeyse hiç “bu taraf 800 yard, şu taraf 1 mil” demez
      Avrupalı biri “4L su taşımam gerektiği için çantam 4kg ağırlaştı” diyebilir
      Amerikalı ise “şişem 24 sıvı ons, yani kabaca 24 ağırlık onsu eder” diyebilir; ama galon söz konusuysa muhtemelen ağırlığının da yaklaşık bir galon olduğunu söyler
      Sonuçta birim dönüştürme sorunu sandığımdan daha azdı; çünkü Amerikalılar her cümlede birim dönüştürerek dolaşmıyor
    • ABD’de büyümüş insanlar arasında bile bu sistemi tamamen anlamayan epey kişi olduğunu düşünüyorum
      Bir bardak suda kaç ons olduğunu, 1 milin kaç fit ettiğini bilenler nüfusun %50’sini aşarsa şaşırırım
      Yine de ABD’de bilim dünyasında metrik sistemin standart olarak kullanılması sevindirici
    • Aradaki birkaç birimi atlamışsın; onları bilince biraz daha açıklanabilir oluyor
      Ölçüm aletlerinden gelen chain 22 yard’dır
      Bir chain aynı zamanda 4 rod eder; dolayısıyla bir rod 5½ yard olur, bu da epey tuhaf
      10 chain bir furlong, 8 furlong ise 1 mil eder
      Bu arada acre, 1 furlong × 1 chain’dir
      Çılgınca görünse de içinde kendince bir sistem var
    • İnçleri neye dönüştürmek gerekiyor ki?
      İnçleri mile dönüştürmeye neden ihtiyaç olsun?
      Hayatında inçleri ya da fit ve inçleri mile çevirmen gereken bir durum yok
    • Birim dönüştürmek de zahmetli, ama bence asıl en kötüsü kesirli uzunluk gösterimi
      Marangozlukta ya da el işlerinde kökeni açısından mantıklı olabilir; peki ya diğer kullanımlar?
      Imperial bir cetvelde 2 3/16" değerini, 5.6cm’yi okuduğun kadar hızlı okumayı dene
      Vida boyutları da bundan etkileniyor
  • Işığın hızıyla 1 nanosaniye boyunca gidilen mesafe de yaklaşık 1 fittir

    • Gerçeğe şaşırtıcı derecede yakın
      Etkileyici :)
      $ units c ft/ns sonucu * 0.98357106
    • Sesin hızıyla 1 milisaniye boyunca gidilen mesafe de yaklaşık 1 fittir
    • Zamanı değiştirip 1 chrono = ışığın 1e9 m gitmesi için gereken süre diye tanımlasak güzel olurdu
      1 kilochrono 55 dakikadır; birimleri Güneş gününe bağlayamayacağın uzay yolculuğu gibi durumlarda epey işe yarar
    • Bir yıldaki saniye sayısı da π*10^7’ye yeterince yakındır
    • 1 googol femtobarns da yaklaşık 1 square teraparsecs eder
  • Dünya basık küre ise 1 derece enlemin gerçek yay uzunluğu değişmez mi?
    “Güvenilebilir” derken sadece “işe yarayacak kadar yakın” mı denmek isteniyor, merak ediyorum
    Coğrafyayla ilgisiz işlerle o kadar uzun süre uğraştım ki eskiden bildiğim şeyi unutmuş gibiyim

    • Güvenilebilir demek, işe yarayacak kadar yakın demek; nüfusun yoğun yaşadığı bölgelerde tahmin de oldukça isabetli
      Bunu öğrendiğim kullanım örneğimi burada da bir ölçüde yazmıştım: https://twitter.com/mholt6/status/1695685022710477043
      Benim durumumda birkaç km düzeyinde hata olsa bile kutup bölgelerine yakın olma ihtimali düşük; eğer kutup bölgesindeyse de “tamam, anladım, kutuptasın” deyip geçilebilir
    • Dünya’nın ekvator çapı, kutup çapından 43 km daha büyüktür
      Dünya yörüngesi de buna benzer
      Okulda elips diye öğreniriz ama gerçek şekle dair pek sezgi edinmeyiz; çoğu çizim de tamamen yanlış bir izlenim verir
    • Sadece yazının başlığına bakınca 1 derece enlemin uzunluğundaki değişimin 1 desimetreden bile az olduğu düşünülebilir; ama elbette öyle değil
      Yine de pek çok pratik amaç için yeterince yakın
  • Bu yazıda 111,111 * cos(latitude) m ifadesinin 1 derece boylam için iyi bir pratik kural olduğu da var
    Düzeltme hoşuma gitti
    Aslında basit sabitler kullanmak da yeterli: 25° yaklaşık 100,000m, 44° yaklaşık 80,000m, 57° yaklaşık 60,000m