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