Windows Mobile 6 GPS Koordinatları ve GoogleMap Kullanımı

Batuhan Düzgün tarafından yayınlanmıştır 10. February 2012 08:31

Merhaba arkadaşlar, sizlere bu makalede Windows Mobile 6 yüklü cihazlarda GPS özelliğinin kullanılması ve alınan koordinatların GoogleMap üzerinde gösterilmesi konusuna eğileceğim.

BÖLÜM – 1  FakeGPS Kurulumu

Projeye başlarken, File >> New >> Project >> Smart Device ile yeni bir Windows mobile projesi oluşturuyoruz. Açtığımız projede GPS özelliğini kullanabilmek için birkaç ayar yapmamız lazım. Çünkü çalıştığımız ortam Emulator ortamı olduğu için GPS donanımı olmadığı için, Fake GPS adından bir bileşen kullanılması gerekecektir. Bunun için Windows Mobile 6 SDK ‘nın kurulu olduğu dizine erişilir. Aşağıda benim bilgisayarımda kurulu olan dizine erişim gösterilmiştir.

 

Daha sonra açtığımız boş projeyi derliyoruz. Yukarıdaki dizinde yer alan FakeGPS.cab dosyasını emulatore yüklenilecek ve ardından birkaç ayarlama ile FakeGPS çalışmaya başlayacak. Böylece emulatorde sanki GPS donanımı varmışçasına  sinyal üretecek. Emulator açıldığında File >> Configure ile ayarlar penceresi açılır. 

 

Yukarıdaki gibi GPS ‘in bulunduğu dizini yapıştıyoruz. Böylece emulatorun Hafıza Kartını görmesini sağlıyoruz. Ardından OK deyip, işlemi bitiriyoruz. Emulatorden “Start” menüsünden, “Programs”  seçeneğine tıklanır. Daha sonra “File Explorer” simgesine tıklanılır. Ardından,  “Storage Card” seçilir.

Bundan sonra ise “Tools >> GPS” dizinine gidilir. Aşağıdaki gibi .cab uzantılı dosyaya tıklanır.

 

Ardından aşağıdaki gibi install seçeneğine tıklanır.

 

Ardından Start menüsünden FakeGPS programı görülür. Program simgesine tıklanır ve gerekli ayarlar aşağıdaki gibi yapılır.

 

“Done”  seçeneğine tıklanır ve FakeGPS kullanıma hazırdır.

 

BÖLÜM-2  Emulator İnternet Erişiminin Sağlanması

İkinci bölümde ise Emulator’e internet ayarlarının yapılmasını sağlayacağız. Bunu yapabilmek için Virtual PC 2007 programını Microsoft sitesinden indirip kuruyoruz. Aşağıdaki linkten temin edebilirsiniz.

http://www.microsoft.com/download/en/details.aspx?id=4580

 

Yukarıdaki gibi Next Next diyerek Virtual PC 2007 kurabilirsiniz. Kurulum bittikten sonra, emulatoru çalıştırıp, ardından File >> Configure seçeneğini seçilir. “Network” sekmesine gelinir. Aşağıdaki gibi ağ kartınızın bulunduğu seçeneğini seçerek, ayarlamaların bir kısmını halletmiş oluyoruz.

 

 Daha sonra, emulatorde Start >> Settings >> Connections tabına tıklanarak, bağlantı ayarları düzenlenir.

 

“Connections” sekmesine tıklanır, “Advanced” sekmesine tıklanır. “Select Networks” seçilir.

 

Daha sonra ise son olarak, aşağıdaki gibi ayarlar yapılır. İnternet erişimi için her şey hazırlanmış olur.

 

BÖLÜM – 3  GPS Koordinaları Almak ve GoogleMap Kullanımı

Bu bölümde projemize ait kodları yazacağım ve birkaç ayarlama yapacağım. Özellikle, GPS ile ilgili işlemleri yapabilmek için Windows Mobile 6 SDK içinde Sample klasöründe açık kaynak kodlu bir GPS  frameworku var. Bu proje içindeki kodlar ve sınıflar yardımıyla GPS’ten sinyal alma ve işleme işlemleri daha kolay hale getirilmiş. Bir bakıma hazır kütüphane gibidir. İşte bu projeyi derlediğiniz zaman projenin klasörü içinde bir DLL dosyası oluşur. Bu dosyayı alıp, kendi projemize referans olarak eklenir. Böylece, açık kaynak kodlu bu projedeki metodları ve sınıfları kullanma şansına sahip oluruz. Aynı zamanda bu açık kaynak kodlu projeye katkı yapıp DLL üretebilirsiniz.

SDK samples içindeki klasörde yer alan projeyi Visual Studio 2008 ile açıp, derledim ve DLL dosyasını elde ettim. 

 

Projeyi Visual Studio 2008 ile açıp, derliyoruz. Ardından aşağıdaki gibi DLL dosya elde edilir.

 

Projemize Browse diyerek referans olarak eklenir.

 

GPS cihazdan gelen sinyalleri işleyecek ve değerleri oluşturacak olan sınıfımızı hazırlıyoruz. Ben ismine “GPS_Process” şeklinde verdim. Bu sınıfın görevi GPS ile ilgili bütün işlemleri üstelenecek olması, konum bilgisi alıcak, GPS cihaz kapalı ise otomatik olarak açacak, ardından enlem boylam bilgilerini kullanıma açacak.

usingSystem;

usingSystem.Linq;

usingSystem.Collections.Generic;

usingSystem.Text;

// Eklediğimiz GPS DLL dosyasını çağırıyoruz.

usingMicrosoft.WindowsMobile.Samples.Location;

 

namespaceWindowsMobileGPS_Ornek

{

    class GPS_Process

    {

        private Gps GPS_Device;

        private GpsPosition GPS_Positioner;

        private string GoogleMapLinkPrefix;

        private string GoogleAPIKey;

        private string Latitude;

        private string Longtitude;

        private bool Flag = true;

        public GPS_Process() {

            // google map'e bağlantı sağlayan link.

            GoogleMapLinkPrefix = "http://maps.google.com/staticmap?size=1000x1000&markers=";

            GoogleAPIKey = "&key=ABQIAAAA3lJ6auW4Fmh-oVG_dtMJ6xRSwx6AEvwHLP2s283omk4dRIjT0hQq9UZqvjX58eVs6CcaLBkP8abFHg";

            GPS_Device = new Gps();

            // GPS modülü kapalıysa otomatik olarak açıyoruz.Kurucu içerisinde.

            if (!GPS_Device.Opened) {

                GPS_Device.Open();

            }

        }

        public void Process_GPS_Coordinates() {

            // GPS'den gelen konum bilgisini alıyoruz.

            GPS_Positioner = GPS_Device.GetPosition();

            // Daha sonra aşağıda ondalıklı sayı şeklinde gelen bilgiyi string şekilde,

            // gerekli alanlara atama yapıyoruz. Enlem-Boylam bilgilerini hazırlıyoruz.

            Latitude = GPS_Positioner.Latitude.ToString();

            Longtitude = GPS_Positioner.Longitude.ToString();

            Latitude = Latitude.Replace(',','.');

            Longtitude = Longtitude.Replace(',','.');

            AddGoogleLinkToList();

        }

        // hazırladığımız linki listeye ekliyoruz.

        private void AddGoogleLinkToList() {

 

            if (Flag)

            {

                this.GoogleMapLinkPrefix =  this.GoogleMapLinkPrefix + GetLatitude() + "," + GetLongtitude() + GoogleAPIKey;

                Flag = false;

            }

            else {

                this.GoogleMapLinkPrefix = this.GoogleMapLinkPrefix + "red|" + GetLatitude() + "," + GetLongtitude() + GoogleAPIKey;

            }

            CoordinatesRepository.CoordinatesDB.Add(this.GoogleMapLinkPrefix);

        }

        // Enlem ve Boylam bilgilerini kullanıma açan metodlar.

        public string GetLatitude() {

            return this.Latitude;

        }

        public string GetLongtitude() {

            return this.Longtitude;

        }

    }

}

 

GPS ile  ilgili işlemleri tamamladıktan sonra, GPS işlemleri sırasında hazırladığımız linklerin kaydedilecek olduğu static bir sınıf tanımlanır. Bu sınıf içinde List tipinde bir collection olacaktır. Böylece, hazırlanan link cümleleri static olan bir noktadan her yere erişime açık olacaktır. Bu sayede link bilgilerini teker teker alıp, web browserda gösterilecek olan formda kullanılabilecektir.

usingSystem;

usingSystem.Linq;

usingSystem.Collections.Generic;

usingSystem.Text;

 

namespaceWindowsMobileGPS_Ornek

{

    // GPS 'den aldığımız koordinatları, depoladığımız statik List yapısı.

    // Böylece list'e her noktadan erişimi sağlamış oluyoruz. Bunu static anahtar kelimesi ile başardık.

    static class CoordinatesRepository

    {

        public static List CoordinatesDB = new List();

    }

}

 

Projemize sağ tıklayıp, yeni bir form bileşeni eklenir. Ben ismini “Group“ olarak belirledim. Bir Webbrowser ve iki adet Button eklenir. Görsel aşağıdaki gibi olmalıdır.

 

Group adlı formun arkasında yer alan kodlar aşağıdaki gibidir.

usingSystem;

usingSystem.Linq;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

 

namespaceWindowsMobileGPS_Ornek

{

    public partial class GPS_Results : Form

    {

        private static int IndexofPage = -1;

 

        public GPS_Results()

        {

            InitializeComponent();

        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

        {

        }

        private void button2_Click(object sender, EventArgs e)

        {

            // Sırayla sakladığımız koordinatları harita üzerinde gösteriyoruz.

            IndexofPage++;

            webBrowser1.Navigate(new Uri(CoordinatesRepository.CoordinatesDB[IndexofPage]));

           

        }

        private void button1_Click(object sender, EventArgs e)

        {

            // Sırayla sakladığımız koordinatları harita üzerinde gösteriyoruz.

            IndexofPage--;

            webBrowser1.Navigate(new Uri(CoordinatesRepository.CoordinatesDB[IndexofPage]));

           

        }

 

        private void GPS_Results_Load(object sender, EventArgs e)

        {

            webBrowser1.Navigate(new Uri("http://maps.google.com/?q=0,0"));

        }

    }

}

Son olarak giriş formunun ekran görüntüsü aşağıdaki gibi olacaktır. Bir adet Listbox, iki adet Textbox ve bir Button eklenir. 

 

Form1’e ait form arkası kodlar.

usingSystem;

usingSystem.Linq;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

 

namespaceWindowsMobileGPS_Ornek

{

    public partial class Form1 : Form

    {

        GPS_Process FakeGps_Device;

       

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            FakeGps_Device = new GPS_Process();

            timer1.Enabled = true;

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

            // Her 1 dakikada bir GPS'den gelen sinyali alıp,

            // Listeye eklemek yapacak.

            FakeGps_Device.Process_GPS_Coordinates();

            textBox1.Text = FakeGps_Device.GetLatitude();

            textBox2.Text = FakeGps_Device.GetLongtitude();

            listBox1.Items.Add("Enlem : "+FakeGps_Device.GetLatitude() +" "+"Boylam : "+FakeGps_Device.GetLongtitude());

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            GPS_Results GpsResultForm = new GPS_Results();

            GpsResultForm.Show();

        }

    }

}

Projeyi derleyip çalıştıralım.

 

Projeyi tamamlamış olduk. Bir sonraki makalemde görüşmek dileğiyle …

Batuhan Düzgün

Bilgisayar Mühendisi

Endüstri Mühendisi 

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Windows Mobile 6

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  July 2018  >>
MoTuWeThFrSaSu
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

Yazıları geniş takvimde göster