- 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
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
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
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ı
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
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?
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
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
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
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
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
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
Ö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 mile dönüştürmeye neden ihtiyaç olsun?
Hayatında inçleri ya da fit ve inçleri mile çevirmen gereken bir durum yok
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
Etkileyici :)
$ units c ft/nssonucu* 0.983571061 kilochrono 55 dakikadır; birimleri Güneş gününe bağlayamayacağın uzay yolculuğu gibi durumlarda epey işe yarar
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
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 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
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