Geolocation di Windows Phone

Hai all, sesuai judul diatas di postingan kali ini kita akan coba membahas lebih detail mengenai teknologi geolocation di Windows Phone. Mulai dari apa itu geolocation, bagaimana memanfaatkan geolocation di Windows Phone, dan bagaimana cara kerja geolocation itu sendiri.

Disini kita juga akan membicarakan tentang background tracking di Windows Phone, bagaimana berinteraksi dengan Map Control Windows Phone, mengatur map layer Windows Phone lalu melakukan routing, sehingga kita bisa bekerja dengan kordinat pengguna dan bagaimana mempublish aplikasi yang mengunakan map control.

Geolocation di Windows Phone

Semua device windows phone telah di built-in dengan teknologi geolocation. Dengan menggunakan kombinasi teknologi 3G, Wi-Fi, dan signal GPS, phone ini mampu mengidentifikasi lokasi pengguna dan membuatnya bisa digunakan di setiap aplikasi, dan ini telah di set juga pada API yang sudah include di Windows Runtime. Geolocation merupakan salah satu teknologi yang ada di API. Awalnya ini ada di Sliverlight framework, tapi sekarang telah di gabungkan pada Windows Runtime. Nah, untuk menggunakan teknologi ini pada windows phone, kita harus enable ID_CAP_LOCATION yang ada di file manifest project.

Langkah pertama untuk menggunakan geolocation service adalah dengan mengecek value property LocationStatus dari class Geolocaton untuk mengidentifikasi status dari service-nya, yang artinya kita harus mengatur status PositiinStatus.Disabled. Dalam kasus ini, user telah men-disable service geolocationnya, jadi kita tidak akan bisa mengeksekusi apapun operasi yang menggunakan geolocation. Jika kita ingin tetap melakukan tracking status service geolocation, ada acara spesifik yang bisa digunakan yang dinamakan StatusChanged, yang memanggil perubahan status setiap saat. Ini membantu kita untuk mengindentifikasinya, contohnya gini : GPS telah disable oleh user atau user berada di lokasi yang susah di track (susah di jangkau).

Ada 2 cara untuk berinteraksi dengan class Geolocator: pertama adalah dengan bertanya untuk satu posisi (contohnya, sebuah twitter client membutuhkan geolocation dari sebuah tweet), atau event handler yang bisa digunakan terus menerus untuk track lokasi user (contohnya aplikasi running tracker).

Untuk menanyakan satu posisi, kita hanya perlu memanggil method asynchronous GetGeopositionAsync(). Itu akan mengembalikasi object Geoposition menjadi sebuah property Coordinate yang akan membantu kita untuk mengidentifikasi dimana user berada. Berikut contoh demonstrasi code untuk mendapatkan satu posisi user:

Untuk melakukan tracking posisi user secara berkelanjutan, kita perlu menggunakan event handler PosisitionChanged, yang mana ini memanggil setiap saat perpindahan user dari lokasi sebelumnya. Kita bisa mengontrol event ini dalam 3 properties dari object Geolocatornya:

  • DesiredAccuracy, adalah yang menggunakan akurasi geolocation. Ini di-set dengan teknologi tinggi dan dengan hasil presisi yang tinggi pula, dan tentunya mengkonsumsi battery yang lebih banyak.
  • MovementThreshold, merupakan jarak dalam meter, user harus berpindah dari lokasi sebelumnya untuk melihat event PosistionChanged bekerja.
  • ReportInterval, yang merupakan nilai minimum dari miliseconds.

Event PositionChanged mengembalikan parameter yang mengandung property Position dari tipe Geoposition yang dinamakan method GetGeopositionAsync().

Di Contoh sebelumnya, kita bisa track user setiap dia berpindah 100 meter dari posisi lokasi sebelumnya, paling tidak 1 detik dari pendeteksian sebelumnya. Setiap event PositionChanged dipanggil, ini akan menampilkan nilai property dari Lattitude dan Longtitude dalam 2 TextBlock control yang berbeda.

 

Background tracking

Windows Phone 8 mampu melakukan tracking posisi user walaupun aplikasi dalam kondisi suspended. Ini artinya event handler dari PositionChanged akan terus berjalan walaupun aplikasi tidak berjalan di depan.

Backgorund tracking bisa terus digunakan hanya jika:

  • Aplikasi berhenti tracking lokasi user dengan menonatifkan event handler dari PositionChanged dan StatusChanged.
  • Aplikasi telah berjalan terus di background dalam waktu 4 jam tanpa digunakan kembali
  • Mode battery saver aktif
  • Phone berjalan dalam kondisi memory yang tidak cukup
  • Service Geolocationnya di disable.
  • User membuka aplikasi lain yang juga melakukan tracking lokasinya di background (menimpa).

Untuk mengatifkan background tracking, kita harus mengedit file manifestnya di editor manual project (klik kanan file, lalu View code). Kita bisa mengedit default tasknya menjadi seperti berikut:

Sekarang, jika sudah diganti aplikasi akan tetap melakukan tracking walaupun tidak berjalan di depan.

Jika kita ini meng-custom user experience yang base-nya dari aplikasi cuaca yang berjalan di background, kita bisa menggunakan event dari object PhoneApplicationService, yang telah dideklrasikan di file App.xaml. Event handler ini dinamakan RunningInBackground dan ini digunakan setiap kali aplikasi dalam kondisi suspended. Berikut contoh dari deklarasi PhoneApplicationService jika kita menggunakanya:

Setelah dipanggil, kita bisa mengaturnya lagi di App.xaml.cs, contohnya sebuah aplikasi yang bisa tetap tracking lokasi user dan menampilkannya di map. Seperti berikut:

Di contoh sebelumnya, kita telah men-set property (IsRunningInBackground) untuk mengetahui aplikasi cuaca yang berjalan di background. Kita telah men-set-nya menjadi true ketika event RunningInBackground di panggil, dan men-set-nya flase ketikan event Actived digunakan, ini artinya aplikasi dalam kondisi digunakan kembali.

 

Berinteraksi dengan Map control

Windows Phone telah di built-in dengan Map control yang bisa digunakan untuk embed sebuah map dalam halaman aplikasi dan bisa dikombinasikan dengan services geolocation. Control ini telah di tingkat dari control yang ada sebelumnya di Windows Phone 7, dan sekarang base-nya pada Nokia cartography. Di penambahan ini, telah disupport dengan offline maps “jika user mendwonload map sebelumnya), controlnya akan bisa digunakan secara otomatis setelah user mendownloadnya. Map control merupakan bagian dari namespace Microsoft.Phone.Maps.Control, jadi kita bisa menambahkannya di halaman XAML dengan menggunakan ini:

Map Control
Map Control

Map control bisa di custime dengan banyak property. Kebanyakan menggunakan salah satu dari ini:

  • Center, kordinat geolocation map-nya adalah pusatnya.
  • ZoomLevel, yang mana berguna untuk zoom pada level 1 (min) – 19 (max).
  • CartographycMode, yang mana bisa digunakan untuk mengganti antara Aerial (tampilan satelit), Road (tampilan jalan), Terrain (tampilan dalam bentuk pemandangan), dan Hybrid (kombinasi dari semunya).
  • ColordMode, bisa digunakan untuk mengatur terang atau gelapnya tampilan map.

Dalam hal ini bisa menggunakan code Map control berikut di halaman aplikasi:

Menggunakan map control yang dikombinasikan dengan service geolocation harusnya itu mudah: kita hanya perlu men-set property Center dari Map object Geopositionnya dengan class Geolocator. Seperti code berikut:

 

Layers

Layer di Map Control
Layer di Map Control

Map control juga disupport dengan layers yang bida ditambahkan diatas map. Sebuah layer merupakan object visual yang bisa ditampilkan di map, dan ini berarti menggunakan class MapLayer. Ini artinya kita bisa menambahkan beberapa object yang di inginkan di atas map, dengan XAML yang ada di framework.

Dengan mengikuti contoh berikut, kita akan membuat sebuah object kotan dan di set menjadi Content object dari MapOverlay dengan cara menambahkan layer baru seperti berikut:

 

Rute

Rute di Map Control
Rute di Map Control

Salah satu scenario untuk bekerja dengan Map control adalah dengan rute, dimana kita bisa menampilkan rute di map. Walaupun ini terdengan sulit, tapi sebenarnya ini mudah diimplementasikan hanya dengan menggunakan RouteQuery class, yang mana memperbolehkan kita:

  • Men-set rute berbeda dari pilihan yang ada menggunakan property TravelMode dan RouteOptimization.
  • Menambahkan sebuah list tujuan untuk menampilkan rute

Berikut contoh code rutenya:

TravelMode dan RouteOptimization bisa du gunakan untuk men-cutom rute yang sama dengan banyak GPS navigator lakukan pada umumnya. Class RouteQuery bekerja dengan pendekatan callback. Kita menggunakan method QueryAsync() dan event QueryCompleted, yang mana ini dipicu oleh penghitungan seperti contoh berikut:

Menampilkan rute di map control itu mudah, kita hanya perlu membuat object MapRoute yang baru, melalui hasil query yang menjadi parameternya dan kemudian menambahkan nya ke Map menggunakan method AddRoute().

 

Bekerja dengan coodinates

Sampai sekarang, diasumsikan kita telah mengerti dan bisa bekerja dengan kordinat geolocation yang base-nya dari latitude dan longtitude, tetapi user akan lebih mudah mengerti jika kita menampilkan kordinatnya dalam bentuk alamat lengkap (contoh kota, kecataman, jalan, dll). Windows Phone 8 telah memperkenalkan 2 class yang bisa mengkonversi geocoding, yaitu: GeoCodeQuery (untuk mengkonversi alaman menjadi kordinat berupa number) dan ReserveGeocodeQuery (untuk mengkonversi latitude dan longtitude menjadi sebuah alama).

Keduanya sebenarnya sama, sama-sama menggunakan cara panggil yang sama untuk menampilkan rute. Setelah kita mendefinisikan operasinya, kita bisa memulai pencarian menggunakan method QueryAsync(). Ketika proses pencarian selesai, kita bisa menggunakan event handler QueryCompleted untuk mengatur hasilnya.

Class GeocodeQuery akan meminta kita untuk men-set 2  parameter, yaitu GeoCoordinate dan yang paling pentih adalah SearchTerm, yang menjadi kata kuncinya. Untuk menset parameter GeoCoordinate bisa dengan contoh berikut:

Class ReserveGeoCodeQuery hanya meminta property GeoCoordinate untuk bisa di set dengan lokasi kordinat.

Event handler QueryCompleted hamper sama dengan kedua class dan mengembalikasn object MapLocation nantinya. Jika kita menggunakan class GeocodeQuery, kita akan tertarik dengan object GeoCoordinate, yang mana ini lahyang menampilkan latitude dan longtitude dari lokasi pencarian.

Di contoh sebelumnya kita melihat cara untuk menampilkan pusat dari map dengan mengambalikan nilai posisi dengna services. Nah, jika kita menggunakan class ReserveGeocodeQuery, kita akan menemukan informasi yang menunjukkan kita tentang property Information yang isinya seperti Kota, Jalan, Alamat, dsb.

Di kedua class ini, even handler mengembalikai object dari MapLocation karena jika kita mencari sebuah loksai dengan sebuah keyword, service bisa menampilkan hasil yang lebih dari satu.

 

Bagaimana mem-publish aplikasi yang menggunakan Map control ?

Kita bisa menggunakan Map control saat pengembangan aplikasi, tapi saat kita submit aplikasi ke Store, kita harus punya production credentials. Artinya harus ada tahapan dimana aplikasi mempunya Toke pada Map service. Ini berisikan 2 baris code yang dinamakan ApplicationId dan AuthenticationToke. Seperti berikut:

Id dan tokennya bisa kita dapatkan saat submit aplikasi melalui akun store yang kita gunakan. Caranya cukup genereate token pada dashboard aplikasi di akun store kita.

Well, terkait geolocation mungkin sampai disini dulu, insya Allah akan ditambah lagi jika ada update terbaru,

Semoga Bermanfaat ..!! 😉

Iklan

4 pemikiran pada “Geolocation di Windows Phone

Good People write good comments ..

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s