Post Page Advertisement [Top]

     Merhaba, bu serimizle aslında daha önce veridiğim webinerlerin makale versiyonunu elde edeceğiz ve HERE Maps'i eski adıyla NOKIA Maps'i daha detaylı inceleme imkanı bulacağız.İlk serimizde device'den nasıl lokasyon verisi alırız bunu görelim.

Önce VS' da bir Windows Phone projesi oluşturalım ve Properties'ten WMAppManifest.xm dosysına ulaşıp capabilites kısmında Map ve Location gerekliliklerini işaretleyelim eğer bunu ilk başta yapmazsak projemiz çalışmayacaktır.

  Bu aslında markette uygulamanın harita ve konum gereksinimlerini ifade eder.

           



Capabilities kısmında bu işlemleri yaptıktan sonra aşağıdaki gibi bir watcher tanımlayarak gps sensörüne erişip location bilgimizi elde edebiliriz. Aşağıda hem senkron bir şekilde bu bilgiye erişim var asenkron olarak erişime makalenin sonunda yer vereceğim.
Aşagıdaki using deyimlerini de kullanmayı unutmuyoruz.

using System.Device.Location;
using Microsoft.Phone.Maps.Controls;

namespace MapApp1
{
    public partial class MainPage : PhoneApplicationPage
    {


        GeoCoordinateWatcher watcher;
        public GeoCoordinate konumum = null;

        // Constructor
        public MainPage()
        {
            InitializeComponent();

            if (watcher == null)
            {
                watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High)
                {
                    MovementThreshold = 10
                };
                watcher.Start();
                watcher.PositionChanged += watcher_PositionChanged;

            }
        }

Burda ilginç bir nokta da aslında MovementTreshold değeri peki bu değer nedir ? Bu değer GPS konumunun hassasiyeti ile alakalıdır aslında kaç gps sensöründe kaç location noktası değiştiğinde Location Changed Event ‘in fırlatılıacağını gösterir. Bu değer çok yüksek olduğunda hassasiyet düşük olacaktır,değer çok az olduğunda da hassasiyet yüksek fakat telefonun şarjı daha fazla kullanılacaktır.Oyleyse yapılan uygulamanın türüne göre bu değer uygun bir değerde setlenmelidir.

Aşagıdaki sunumda MovementThreshold değeri ifade edilmekte:






Bundan sonra kodumuzda dispatcherbeginınvoke ile Konum değişti adında bir event fırlatarak farklı bir thread ‘da konum bilgimizi alacağız.

        void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
        {
            Dispatcher.BeginInvoke(() => KonumUpdate(e));
        }

        void KonumUpdate(GeoPositionChangedEventArgs<GeoCoordinate> e)
        {


            try
            {
                konumum = new GeoCoordinate(e.Position.Location.Latitude, e.Position.Location.Longitude);
                map1.SetView(konumum, 14, MapAnimationKind.Parabolic);


            }
            catch
            {
                // Couldn't get current location - location might be disabled in settings
                MessageBox.Show("Konumunuz bulunamıyor.", AppResources.ApplicationTitle, MessageBoxButton.OK);
            }

        }

Böylece konum bilgisini elde etmiş oluruz haritamızı açtığımızda konumumuza haritanın odaklandığını görebiliriz.

Bir sonraki makalemizde konumumuzun olduğu enlem ve boylama bir POI(Point of Interest)ekleyeceğiz,bunu UserControl kullanarak yapacağız.






Hiç yorum yok:

Yorum Gönder

Bottom Ad [Post Page]