[Python] Uluslararası Uzay İstasyonu Nerede?

Merhaba arkadaşalar, bu yazımda ISS (Uluslararası Uzay İstasyonu) anlık enlem ve boylam bilgisini çekerek 2B bir harita üzerinde konumunu göstericeğiz. Proje’nin tamamı bana ait değildir, yararlandığım kaynağı en alt kısımda ulaşabilirsiniz. Bu projeyi yapmak için temel Python bilgisi yeterli olucaktır. Öncelikle bizim ISS’ın konum bilgisini çekmemiz gerekli bunun için yapılmış bir WEB servisi var. İlk olarak bu URL’yi açın: http://api.open-notify.org/iss-now.json  Karşınızda şu şekilde veriler gelmeli;

{"message": "success", "timestamp": 1532258191, "iss_position": {"longitude": "-94.0437", "latitude": "9.4929"}}

Bu ISS’nin son konumunu gösteren bir json objesidir. Sayfayı her yenilediğinizde değerlerin değişiyor olduğunu görüceksiniz. Şimdi bizim bu URL’yi açıp okumamız lazım bunun için bize urllib modülünün içindeki requests sınıfı gerekli. Ayrıca okunan veriler bize string olarak dönmekte bunu dict (sözlük) veri tipine dönüştürüp enlem ve boylam bilgisini rahatlıkla parçalayabiliriz.

import urllib.requests, json

 url = 'http://api.open-notify.org/iss-now.json'
data = json.loads(urllib.request.urlopen(url).read().decode('utf-8')

Data değişkeninin veri tipine bakdığınızda dict olduğunu görüceksiniz. Arkadaşlar dict veri tipinde değerleri almak için o değerin karşısındaki anahtar kelimeyi vermemiz gererkiyordu. Bizim yapımız sözlük içinde 3 adet sözlükten oluşuyor. Biz “iss_position” adlı anahtar kelimenin değerlerine erişmeye çalışacağız öncelikle şöyle bişey yapalım;

iss = data['iss_position']

Karşımıza şu şekilde bir adet daha dict çıkacak.

{"longitude": "-94.0437", "latitude": "9.4929"}

Biz buradan “longitude” ve “latitude” adlı anahtar kelimelerinin karşısındaki değerleri enlem ve boylam olarak alalım.

lon = data['iss_position']['longitude'] #boylam
lat = data['iss_position']['latitude'] #enlem

Kodumuzun daha düzenli ve kullanışlı olabilmesi için bu kodların hepsini konum adlı bir fonksiyonun içerisine yazalım. Enlem ve boylam bilgisini de float veri tipinde dönelim.

def location():
    url = 'http://api.open-notify.org/iss-now.json'
    data = json.loads(urllib.request.urlopen(url).read().decode('utf-8'))

    lon = data['iss_position']['longitude'] #boylam
    lat = data['iss_position']['latitude'] #enlem

    return (float(lon), float(lat)) #tuple

Şimdi ise bu konum bilgilerini bir harita üzerinde göstermeliyiz bu işi Python içinde dahil olarak gelen bir çizim modülü olan turtle ile yapacağız. Öncelike modülümüzü dahil edelim ve screen isminde bir nesne oluşturalım ekran ile ilgili methotları bu nesne üzerinden gerçekleştireceğiz.

import turtle

screen = turtle.Screen()

Bunu yapıp çalıştırdığımızda karşımıza boş bir pencere açılacak.

Öncelikle enlem ve boylam bilgisinin ekran ile uyuşması lazım bu sayede konumu daha rahat bulabileceğiz. Bunu şu kod satırıya yapıp içine 4 adet argüman veriyoruz.

screen.setworldcoordinates(-180, -90, 180, 90)

Şimdi ie ekliceğimiz resmin boyutlarına göre penceremizin poyutlarını ayarlıyoruz.

screen.setup(720, 360) #720px 360px

Şimdi ise Dünya görselini arkaplana ekleyelim. Görseli buradan indirebilirsiniz. Görseli şu şekilde ekliyoruz. Ve kodumuzu çalıştırıyoruz.

screen.bgpic('map.jpg')

turtle-2

Şimdi ise ISS’nin yerini göstericek bir şekil gerekli. Varsayılan olarak turtle modülünde bir kaplumbağa görseli yer alır. Bunu değiştirebilmek mümkün ama ekleyeceğiniz resmin .gif formatında olması gereklidir. Benim şekilimi buradan indirebilirsiniz. Öncelikle şekli kullanambilmek için eklememiz gerekli.

iss_image = 'iss-circle.gif'
screen.addshape(iss_image)

Sonrasında ise turtle.Turtle() sınıfının içine argüman olarak şekil ismimini veriyoruz. Ve iss isminde bir nesne oluşturuyoruz. Artık biz bu şekli iss adlı nesne yardımıya kontrol edebiliriz.

iss = turtle.Turtle(shape = iss_image)

Son kısıma yaklaştık yapmamız gereken tek şey şekle gideceği konum bilgisini vermek. Bunun için goto() isimli fonksiyona enlem ve boylam bilgilerini yukarda tanımladığım fonksiyona göre veriyoruz.

iss.goto(location()[0], location()[1])

Ama öncesinde şu ayrıntıyı anlamak lazım turtle modülünde kalem denilen bir mevzu vardır. Sizin büzün çizdiğiniz şeyler gerçek hayattaki gibidir. Bişeyler çizmek için kalemi indiririz çizmeyeceğimiz zamanda kalemi kaldırırız. Bu mantıkla yola çıkarsak bizim başlangıç konumundan ISS’nin olduğu konuma giderken kalemi kaldırmassak bir çizgi oluşacaktır aynen şu şekilde;

turtle-3

Biraz görülmesi zor ama siyah ince bir çizgi oluşmakta. Bunu önlemk içinse konuma gitmeden önce kalemi kaldırması gerektiğini söylüyoruz.

iss.penup()

turtle-4

Şu şekilde ISS konumunu sarı bir şekille haritada işaretlemiş olduk. Eğer emin olamadıysanız bu WEB sayfasından ISS konumu izleyip bu proje ile karşılaştırabilirsiniz. Kodun tam ve ekleme yapılmış kısmına buradan ulaşabilirsiniz, ayrıca bilgisayarında Python yorumlayıcısı olmayanlar ise buradan .exe formatındaki halini indirebilirler. Benden bu kadar umarım hoşunuza gitmiştir. Yorum yaparsanız sevinirim. Bir başka yazımda görüşmek üzere hoşçakalın, iyi çalışmalar (:

Kaynakça: https://projects.raspberrypi.org/en/projects/where-is-the-space-station

[Python] Uluslararası Uzay İstasyonu Nerede?” için 7 yorum

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s