Herkese merhaba! Bugün Android işletim sistemi üzerinde çalışan cep telefonları için, üniversite 3. sınıfta "SE 310" kodlu, "İleri C++: Şablonlar ve Soysal Programlama" dersinde Javascript, XHTML, Google Map API(V3) ve Qt kütüphanesini kullanarak yazdığım daha çok tasarım odaklı olan "Izmir Mass Transit Guide" projesini anlatacağım. Proje kısaca İzmir belediye sınırları içerisinde seçilen iki nokta arasında, başlangıç noktasından varış noktasına en hızlı ulaşımı sağlayacak şekilde belediye otobüslerini kullanarak aktarmaları da göz önünde bulundurup seyahat planı oluşturup, oluşturulan planı Google Map üzerinde gösteriyor. Projeyi açıklamaya başlamadan önce ufak bir kaç noktaya değinmek istiyorum. Bu proje client(müşteri) ve server(sunucu) olmak üzere iki kısma ayrılıyor. Projenin client yani istek talep eden kısmını ben yazdım. Ancak projenin server kısmı, dersi aldığımız öğretim görevlisi tarafından verildi. Bu yüzden projenin sadece client kısmına ait kaynak kodunu paylaşacağım. Projeyi tekrar kısaca anlatacak olursam, kullanıcı programı açtığı zaman karşısına aşağıdaki gibi bir ekran gelmektedir. Programın çalışma prensibi oldukça basit. Bulunduğumuz ve varmak istediğimiz noktanın bilgilerini sunucu tarafında çalışan koda yolluyoruz, sunucu almış olduğu bu verilere göre başlangıç noktasından varış noktasına en hızlı ulaşımı sağlayacak şekilde, aktarmaları da göz önünde bulunduracak şekilde bir seyahat planı oluşturuyor. Son olarak bu plan client tarafına iletiliyor. Ve bu veriyi javascript aracılığı ile işleyip, ekrana bastırıyorum.
Yukarıdaki resimde ilk nokta olarak "Bornova" semti alınmıştır. Aşağıdaki resimde ise varmak istediğimiz nokta "İzmir Ekonomi Üniversitesi" olup sunucudan gelen veri işlenmiş ve Google Map API(V3) aracılığı ile ekrana çizdirilmiştir. Değinmek istediğim başka bir nokta ise, en aşağıda açılan bilgi kısmı. Bu kısımda hangi duraktan kaç nolu otobüse binileceği ve hangi duraklarda aktarma yapılacağı gibi bilgiler yer almaktadır.
Yukarıdaki resimde ise bu sefer varmak istediğimiz nokta olarak "Narlıdere" semti alınmıştır. Aşağıdaki resimde ise durakların üzerine tıklanıldığında o durağın ismi ve durak ile ilgili ufak bir bilgi yer alıyor.(durağın ilk durak, son durak ya da aktarma durağı olup olmaması)
Değinmek istediğim başka bir konu(aslında bir problem) daha var. Ve bu problem, projeyi yaparken beni en çok zorlayan şeydi. Eğer dikkat ettiyseniz, yol çizilirken, kırmızı ve mavi olmak üzere iki çeşit renk kullanılıyor. Bu ikisininde anlamı var. Kırmızı çizgiler direkt olarak iki nokta arasında çizilen doğrular. Yani yol varmış, yokmuş kontrol edilmeden çizilen doğrular. Maviler ise kırmızı çizgiler gibi değil, yol üzerinden giden çizgiler. Siz iki nokta veriyorsunuz, Google Map API bu iki nokta arasındaki yolu belirleyip, çizmeye başlıyor. API'nin sağlamış olduğu ufak bir hizmet, ancak bu hizmeti kullanmanında bir sınırı var, eğer durak sayısı 10'dan fazla ise bu hizmeti kullanamıyorsunuz.(Şayet API'nin premium versiyonunu satın almazsanız). Ancak ben bunun içinde ufak bir algoritma geliştirdim. Eğer durak sayımız 10'dan fazla ise, yazmış olduğum bu algoritma belli 10 tane durağı seçiyor ve yolu çizdiriyor. Ancak belirtmekte fayda var, her zaman doğru yol göstermiyor ara sıra otobüsün genel hatlardan saptığını görebiliyorsunuz.
Proje genel hatları ile bu kadar. İlgilenenler kaynak kodu buradan indirebilir. Kaynak kod yukarıda da dediğim gibi sunucu kısmını kapsamıyor. Sadece benim yazdığım client kısmı var. Ayrıca proje ile ilgilenenler, projeyi geliştirmekte serbestler. Mesela yukarıdada değindiğim Google Map API(V3)'sinden kaynaklanan kısıtlama problemi için yazmış olduğum algoritma, bu projenin en zayif kısmıdır, bu algoritma daha da geliştirilebilir. Uygulamanın facebook, twitter gibi sosyal medya tarafıyla ilgili bir şeyler yapılabilir. Şimdilik aklıma gelenler bunlar. Proje Javascript, XHTML, Google Map API(V3) ve Qt kütüphanesi kullanılarak yazılmıştır. Ben en son Ubuntu 11.10 üzerinde Necessitas 0.2.1 aracılığı ile derleyip sorunsuz bir şekilde çalıştırdım. Sizde projeyi kendi bilgisayarınızda derleyip çalıştırabilirsiniz. Belki ufak birkaç değişiklik isteyebilir. İyi günler.
No comments:
Post a Comment