Hirdetés

Alkalmazásfejlesztés badára: Helymeghatározás a térképen

A mai bejegyzésben tovább bővítjük az elmúlt bejegyzésekben hegesztett térkép-alkalmazásunkat. Aki lemaradt volna, a térkép kirajzolását ebben a posztban taglaljuk, a zoomolást pedig itt magyarázzuk el, ma pedig a GPS-szenzortól elkért koordinátáknak megfelelően pozicionáljuk a térképet. Itt ragadnám meg az alkalmat, hogy kiegészítsem az előző két bejegyzést Karma észrevételével: ha ki szeretnénk használni a deCarta szolgáltatásait egy, a Samsung Apps-be feltöltött alkalmazásban, a cég bannerjét meg kell jelenítenünk a programunkban.

A térkép középponját a megadott koordinátára állítjuk
A térkép középponját a megadott koordinátára állítjuk

A koordináták lekérésével szintén foglalkoztunk már a bada fejlesztői blog keretein belül, az ott írt kódrészletet használjuk fel ma, azaz egy LocationProvider segtségével lekérjük a koordinátákat az OnLocationUpdated() függvényben. Ez után a kapott adatokat meg kell etetnünk a térképünkkel, a szélességi és hosszúsági köröknek megfelelő számokat a Map példányunk SetCenter függvényébe kell betöltenünk. A metódus harmadik változója egy boolean, ami a mozgási animációt engedélyezi; bár nem túl látványos a dolog, azért érdemes igazra állítani, a mozgás egy kicsit azért feldobja az amúgy igen puritán deCarta térképet.

Egyelőre annyit értünk el, hogy a térképünk középpontja mindig az aktuális koordinátán lesz, viszont ha már itt vagyunk, jelöljük is meg a helyet a képernyőn! Erre az úgynevezett MapOverlayMarker osztály szolgál, amely alapértelmezett esetben egy kis piros kört rajzol ki a térkép koordinátákkal megadott pontjába. Magának a markernek is meg kell adnunk a pozíciót (SetCoordinates() függvény), majd rá kell raknunk a térképre az AddMapOverlay() metóduson keresztül.

Az első képernyőn egy custom marker, a másodikon pedig az alap kép látható.
Az első képernyőn egy custom marker, a másodikon pedig az alap kép látható.

Akinek nem tetszik a marker alapértelmezett ikonja, egy sajátot is definiálhat. Ehhez a kiválasztott képet be kell olvasni egy bitmapbe, ezt az Image::DecodeN() függvénnyel lehet megtenni. Ez után felül kell írnunk a képet a MapOverlayMarker példányunkban (SetImage() funkció), valamint érdemes kikapcsolni az árnyékolást (SetShadowEnabled(false)), az ínyencek esetleg saját árnyékot is definiálhatnak, ennek a menete megegyezik a saját ikon felvételénél tapasztalttal.

A példakód természetesen ismét elérhető a Mobilarénás SVN-en keresztül.

dr. Kind

Azóta történt

Előzmények