android aplikaciju za suradno opažanje · za mjerenje promjene brzine u danim trenucima se koristi...
TRANSCRIPT
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
ZAVRŠNI RAD br. 4466
Android aplikaciju za suradno opažanje
semafora
Vladimir Dragutin Livaja
Zagreb, lipanj 2016.
1
2
3
Sadržaj
Uvod……………………………………………………………………………………….4
1. Korištenje ugrađenog akcelerometra.........................................................5
1.1. Akcelerometar s poništenom gravitacijom…………..……..….…...7
2. Poslužiteljska komponenta aplikacije…………………………….…………..8
2.1. Sučelje REST za dohvat senzorskih očitanja…………...………….8
2.2 Sučelje REST za unos senzorskih očitanja …………………...……9
3. Prepoznavanje aktivnosti korisnika……………….…………………………12
4. Prikazivanje podataka na karti……………………...………………………..13
5. Klijentska komponenta aplikacije……………………………………….……14
5.1. Dizajn sustava………..………………………………………………15
5.2. Tehničke značajke…………………………………………………...17
5.3. Programske značajke……….……………………………………….19
5.4. Funkcionalni zahtjevi……….……..………………………………....25
5.5. Upute za instalaciju…..………………………………………………26
Zaključak………………………………………………………………………………..27
Literatura..………………………………………………………………………………28
Sažetak…….……………………………………………………………………………29
4
Uvod
Zadatak ovog rada bio je ostvarenje aplikacije za označavanje semafora koji usporavaju promet na karti. Takvi semafori uzrokuju pretjeran broj zaustavljanja i naglih ubrzanja. Razvijena aplikacija prepoznaje i pohranjuje podatke o takvim semaforima te korisnicima omogućava prikaz problematičnih semafora na karti.
Aplikacija je razvijena za operacijski sustav Android te je testirana u stvarnoj upotrebi.
Za izradu ove aplikacije koristilo se već ugrađeni senzor u uređaje s operacijskim sustavom android zvan akcelerometar. Ovaj senzor prepoznaje ubrzavanje i usporavanje u m/s2. Aplikacija ima i poslužiteljski dio na koji se sprema lokacija prepoznatog semafora te se dohvaćaju informacije o semaforima za prikaz korisniku. Komunikacija između poslužitelja i klijenta je ostvarena korištenjem sučelja REST, a razmijenjene poruke su u formatu GeoJSON. Konačno, aplikacija koristi i Googlovu programsku knjižnicu ActivityRecognition API za prepoznavanje vrste kretanja korisnika tj. razlikovanje kretanja u automobilu od stajanja u mjestu.
5
1. Korištenje ugrađenog akcelerometra
Za mjerenje promjene brzine u danim trenucima se koristi već ugrađeni senzor
akcelerometar. Akcelerometri se općenito koriste za detekciju kretanja i za
mjerenje promjena u brzini kretanja. Akcelerometri su još poznati kao „gravitacijski
senzori“ jer mjere akceleraciju na temelju kretanja i gravitacije.
Akceleracija se može mjeriti u tri dimenzije:
a. Lijevo-desno (bočno)
b. Naprijed-nazad (uzdužni)
c. Gore-dole (vertikalni)
Androidova komponenta „Sensor Manager“ dojavljuje senzorske promjene
akcelerometra u svim smjerovima.
Slika 1. prikazuje mapiranje svih smjerova akceleracije u odnosu na uređaj u
mirovanju u svojoj prirodnoj orijentaciji.
a. X-os (bočni) – Bočna (lijevo-desno) akceleracija, za koje pozitivne
vrijednosti predstavljaju pokreti udesno, a negativne vrijednosti
akceleracije predstavljaju pokreti ulijevo.
b. Y-os (uzdužni) – Akceleracija unaprijed ili unazad, za koje vrijedi da
akceleracija unaprijed predstavlja pokret u kojem gornji dio uređaja
se pomiče prema naprijed, a to rezultira pozitivnom akceleracijom,
dok unazad predstavlja negativnu vrijednost akceleracije.
c. Z-os (vertikalni) – Gore/dole akceleracija za koju vrijedi da kretanje
uređaja prema gore predstavlja pozitivnu vrijednost akceleracije, a
prema dole predstavlja negativnu vrijednost akceleracije. Uređaj u
prirodnoj orijentaciji pri mirovanju će registrirati -9.8m/s2 kao rezultat
djelovanja gravitacije.
6
Za praćenje promjene u akceleraciji se koristiti slušač senzorskog događaja(engl.
sensor event listener) kao što je prikazano na slici 2.
Slika 1. prikaz akceleracijski osi na uređaju.
7
Slika 2. slušač senzorskog događaja
1.1 Akcelerometar s poništenom gravitacijom
Za potrebe ove aplikacije akcelerometar je korišten na način da zamjećuje nagla
ubrzavanja pa pritom treba otkloniti utjecaj već postojeće gravitacije. Kako bi se to
izvelo, u metodi „onSensorChanged“ se rješava taj problem kao što je prikazano
na slici 3.
8
Slika 3. Programski kod za uklanjanje gravitacije.
2. Poslužiteljska aplikacija
Poslužiteljska komponenta omogućava pohranjivanje novih senzorskih očitanja te dohvaćanje prethodno pohranjenih podataka. Komunikacija između klijentske i poslužiteljske komponente ostvarena je korištenjem sučelja REST. Razmijenjene poruke su u formatu GeoJSON.
2.1 Sučelje REST za dohvat senzorskih očitanja
Poslužitelj pruža REST sučelje za dohvat senzorskih podataka koje je prikazano na slici 4. Za dohvat podataka se na poslužitelj šalje HTTP GET zahtjev. Parametrima se filtriraju traženi podaci, pri čemu su parametri opcionalni. Uz ograničenje da se pri slanju zahtjeva preda barem jedan parametar, jer bi se u suprotnom dohvatio cjelokupni skup podataka. Poslužitelj šalje odgovor u kojem su podaci strukturirani kao GeoJSON. Slika 4 prikazuje primjer odgovora GET zahtjeva. Za Potrebe ove Androidove aplikacije, nama isključivo treba parametar sensorType pomoću kojeg možemo označavati da se radi o senzoru koji opaža semafore. GET zahtjevi se upućuju na URL
„http://161.53.19.88:3001/api/readings“.
9
Slika 4. Dohvat senzorskih očitanja za koordinate semafora.
U kodu se pristup poslužitelju obavlja u pozadinskoj dretvi pomoću klase
„HttpUrlConnection“ koja obavlja dohvaćanje podataka.
2.2 Sučelje REST za unos senzorskih očitanja
Poslužitelj pruža REST sučelje za unos senzorskih očitanja. Za unos senzorskih očitanja šalje se HTTP POST zahtjev(slika 5). Podaci se šalju u tijelu HTTP poruke, pri čemu su strukturirani u GeoJSON formatu.
10
Slika 5. POST zahtjev na poslužitelj
Na slici 6 je prikazana struktura zahtjeva pri unosu problematičnog semafora i odgovor od strane poslužitelja.
11
Slika 6. struktura zahtjeva i odgovora za poslužitelja
12
3. Prepoznavanje aktivnosti korisnika
ActivityRecognition API je Google-ova programska knjižnica za detekciju aktivnosti
korisnika. Aktivnosti su detektirane periodički pomoću senzora ugrađenih u uređaj
s operacijskim sustavom Android. ActivityRecognition API koristi samo senzore s
malim troškom energije tako da omogući što dulje trajanje bateriju uređaja. Na
primjer, korištenjem ove programske knjižnice se iz aplikacije može detektirati
hoda li trenutno korisnik ili se vozi u motornom vozilu, na biciklu ili stoji na mjestu.
Vremenski interval detekcije aktivnosti korisnika se može kontrolirati parametrom
„detectionIntervalMillis“. Veće vrijednosti tog parametra će rezultirati manjim
brojem detekcija aktivnosti, ali u poboljšanje trajanje baterije tj. uštedu energije.
Manje vrijednosti tog parametra će rezultirati većim brojem detekcija aktivnosti
korisnika, ali uz konzumiranje više energije i skraćivanje trajanja baterije uređaja.
Kako bi se sačuvala baterija i produljio njeno trajanje, objavljivanje detekcije
aktivnosti se može zaustaviti ako je uređaj nepokretan dulje vremena. Detekcija
aktivnosti će se nakon toga nastaviti kad uređaj bude bio u pokretu ponovno. Ovo
se odvija samo na uređajima koji podržavaju tip senzora
„Sensor.TYPE_SIGNIFICANT_MOTION“.
Aktivnosti koje su mogu detektirati su definirane u klasi DetectedActivity, a to
su:
1. IN_VEHICLE – uređaj se nalazi u motornom vozilu
2. ON_BICYCLE – uređaj se nalazi kod korisnika koji je na biciklu
3. ON_FOOT – uređaj je kod korisnika koji je na nogama
4. RUNNING – uređaj je kod korisnika koji trći
5. STILL – uređaj je u nepokretnom stanju
6. TILTING – nagim uređaja relativno u odnosu na gravitaciju se drastično
promijenio
7. UNKNOWN – nemoguće je detektirati aktivnost
8. WALKING – uređaj je kod korisnika koji hoda
13
Dvije metode najveće važnosti za dobivanje trenutne aktivnosti korisnika i
postotak sigurnosti vezano za tu detekciju su getConfidence() i getType().
Metoda getType vraća tip aktivnosti koji je detektiran, a getConfidence vraća
broj između 0 i 100. Za broj iznad 50, se pretpostavlja da je detekcija točna.
Na slici 7 je vidljiv primjer koda koji koristi ActivityRecognition API radi ispitivanja
detektiranih aktivnosti u logu.
Slika 7. Primjer korištenja ActivityRecognition API-ja
4. Prikazivanje podataka na karti
Biblioteka Google maps android API utility nudi mogućnosti stvaranja toplinskih
karata, pretvaranja KML objekata u geografske, stvaranje slojeva na mapi,
upravljanje markerima u obliku grozda, izračun udaljenosti i površina pomoću
sferne geometrije i prikaz informacija na zasebnim markerima. Zasebni markeri
omogućuju da ikone markera izgledaju kao informacijski prozori, koji sadrže tekst i
14
druge stvari. Prednost ovakvih markera leži u tome što više od jednog markera
može biti otvoren u istom trenutku, dok samo jedan informacijski prozor može biti
otvoren u nekom danom trenutku. Također se mogu koristit razni stilovi markera, a
njihova orijentacija se može mijenjati.
5. O razvijenoj aplikaciji
U ovom poglavlju se detaljno opisuje aplikacija za suradno opažanje semafora
koja predstavlja praktični dio ovog završnog rada. Ona omogućava korisnicima da
na brz i jednostavan način pri vožnji opažaju semafore koji izazivaju nagla
usporenja i nagla ubrzanja motornog vozila te da ih spremi za kasnije prikazivanje
i pregledavanje. Aplikacija pri radu koristi unutarnje senzore samog uređaja za
prepoznavanje pozitivne i negativne akceleracije tj. ubrzavanje i usporenje.
Potreban joj je stalni pristup internetu za komunikaciju s poslužiteljem tj.
spremanje trenutnih podataka o lokaciji opaženog semafora te pristup lokaciji
korisnika(GPS) za dobivanje informacije o geografskoj širini i geografskoj dužini.
Pojedinačne komponente aplikacije se izvode u zasebnim dretvama kako bi rad
same aplikacije bio optimiziran.
15
5.1. Dizajn Sustava
Sučelje aplikacije se sastoji od dva Activity-a; MainActivity i
GoogleMapsActivity(SemaforMaps). MainActivity prikazan na slici 8. se prikazuje
prvi pri pokretanju aplikacije i nudi korisniku dvije opcije pomoću dva gumba, a to
su „Start App“ koji pokreće rad aplikacije tj. suradno opažanje semafora i gumb
„View Semaphores On Map“ koja prebacuje korisnika na GoogleMaps tj. slikoviti
prikaz semafora koji su bili do sad zabilježeni i spremljeni.
Slika 8. MainActivity
Nakon što korisnik stisne na Gumb „Start App“, na sredini ekrana se pojavljuje
komponenta za prikaz količine obavljenog posla(engl. progressbar) kao što
prikazuje slika 9; koji služi lakšem razumijevanju korisnika da se nešto obrađuje u
pozadini. Pri tome se naziv gumba mijenja iz „Start App“ u „Stop App“. U sredini
komponente za prikaz količine obavljenog posla(engl. progressbar) se nalazi i
16
kučica za tekst(engl. textbox) koji služi kao brojač dodanih semafora tijekom
korištenja aplikacije. Također preostaje gumb „View Semaphores On Map“ koji
opet vodi do slikovitog prikaza semafora na karti.
Slika 9. MainActivity nakon stiskanja Start App
Nakon stiskanja gumba „View Semaphores On Map “, vidljivi su svi semafori kao što prikazuje slika 10.“GoogleMapsActivity“ koristi poseban marker koji cijelo
17
vrijeme prikazuje informacije tj. u ovom slučaju prikazuje datum kad je određeni semafor opažen.
Slika 10. prikaz semafora na karti
5.2. Tehničke značajke
Za izradu aplikacije korištena je objektno usmjerena arhitektura
programskog jezika Java (jdk 1.8.0_20) uz programski okvir Android Tools (23.0.1)
unutar razvojnog okruženja Android Studio verzije 1.0. Ovo okruženje je
namijenjeno i specijalizirano za razvoj i testiranje Android aplikacija. Android
Studio nudi mnoge dodatke i proširenja koja olakšavaju izradu same aplikacije. Za
pokretanje, testiranje i nadogradnju aplikacije zadužen je sustav Gradle Build
(Gradle 2.2.1) koji generira izvršnu Android .apk datoteku za pokretanje aplikacije
18
na mobilnom uređaju. Ovaj sustav sadrži build.gradle datoteku s konfiguracijskim
opcijama specifičnim za izgradnju Androidove aplikacije i deklaracijama svih
ovisnosti (engl. dependencies) koje se uključuju prilikom prevođenja (slika 11).
Slika 11. build.gradle datoteka aplikacije
Kako bi biblioteke bile uključene u izgradnju projekta moraju se nalaziti unutar
ovisnosti(engl. dependencies) elementa koji kod razvijene aplikacije sadrži
podršku Android biblioteka com.android.support:appcompat-v7 ,
com.google.android.gms:play-services:8.1.0 i com.google.maps.android:android-
maps-utils:0.3+.Prva biblioteka omogućava korištenje razreda ActionBar za
implementaciju alatne trake, a druga korištenje Googleov API ActivityRecognition
API za detektiranje aktivnosti korisnika i treća je za korištenje posebnih vrsta
markera za označivanje karte u GoogleMapsu. Prve dvije biblioteke predstavljaju
proširenja za Android uređaje s razinom API-ja većom od 7, a treća za Android
uređaje s razinom API-ja većom od 9. Proširenje za izradu posebnih markera na
19
Google karti(engl. Google maps) omogućena je uključivanjem biblioteke
com.google.maps.android.ui.IconGenerator, a programska podrška za
ActivityRecognition API u kodu je osigurana uključivanjem biblioteke
com.google.android.gms.location.ActivtiyRecognitionResult.
5.3. Programske značajke
Aplikacija se sastoji od dva Activity-a, glavnog Activity-a zvan MainActivity za pokretanje opažanje semafora koji se otvara odmah pri pokretanju i Activity-a PrikazSemaforaMaps koji se rabi za pregledavanje lokaciju semafora na karti.
Također postoji još i usluga DetectedActivitiesIntentService koji se pokreće pri pokretanju aplikacije tj. stiskom na gumb „Start App“ koji se nalazi u MainActivity-u. Ta usluga u pozadini motri aktivnosti korisnika i šalje globalnu objavu(engl. broadcast) čim dobavi trenutne aktivnosti korisnika koji se pritom koriste u MainActivity-u i dobavljaju pomoću „broadcast receiver-a“. Usluge se mora deklarirati u manifestu android aplikacije što je prikazano na slici 12.
Slika 12. deklaracija servisa u android manifestu.
U MainActivity-u osim pokretanja servisa implementiramo još i sučelja SensorEventListener i LocationListener koja nam nude mogućnost
nadjačavanja specifičnih metoda od kojih su najvažniji „onSensorChanged“ koji uz
deklariranja akcelerometra bilježi sve promjene u akceleraciji; odsječak koda se vidi na slici 13.
20
Slika 13. odsječak metode onSensorChange
Također implementirajući LocationListener-a i stvaranjem objekta tipa
LocationManager motrimo promjene u lokaciji korisnika. Nadjačana metoda
onLocationChanged se može vidjeti na slici 14, a u njoj se samo spremaju
trenutne vrijednosti geografske širine i geografske dužine.
Slika 14. nadjačana metoda onLocationChanged
Komunikacija sa poslužiteljem se obavlja za spremanje geografske širine i geografske dužine i za dobavljanje svih lokacija tih semafora. Spremanje tih lokacija se obavlja u pozadinskoj dretvi u kojemu pomoću HttpUrlConnection-a uspostavljamo konekciju sa poslužiteljem. Zahtjev prema poslužitelju mora biti složen u GeoJSON formatu da bi se uspješno spremio, a primjer toga je vidljiv na slici 15.
21
Slika 15 . Trenutna lokacija spremljena u GeoJSON formatu
Za rad aplikacije je potrebno imat stalnu vezu s internetom i uključen GPS što povlači da moraju biti definirana određena dopuštenja(engl. permissions) u Android manifest datoteci. Od raznih dopuštenja, definirana moraju biti dopuštenja za grubu(engl. coarse) lokaciju, preciznu(engl. fine) lokaciju, dopuštenje za Internet, dopuštenje za ActivityRecognition API, dopuštenje za pristup stanju mreže (engl. access network state), dopuštenje za čitanje i pisanje na vanjskim izvorima (engl. write external storage). Sva dopuštenja su definirana u manifest datoteci i vidljiva su na slici 16.
Slika 16. dopuštenja u manifest datoteci
U Activity-u PrikazSemaforaMaps pozivamo metodu httpGet u onCreate metodi
u kojoj je sadržan i u kojem se pokreće pozadinska dretva u kojem se dohvaćaju svi trenutno spremljeni semafori i prikazuju na karti što je vidljivo na slici 17.
22
Slika 17. GET zahtjev za dobivanje svih semafora
Nakon GET zahtjeva, poslužitelj nam pošalje informacije vezane za semafore u obliku GeoJSON-a iz kojih se pritom izvlači nužne informacije tj. geografsku širinu i dužinu semafora što je vidljivo na slici 18.
23
Slika 18. izvlačenje koordinata iz GeoJSON zapisa.
Kad se sve koordinate semafora dohvate s poslužitelja, spremaju se u listu koje
sadrži objekte tipa „LatLng“, a koje se pritom u onPostExecute metodi ispisu na
karti koristeći posebno definiranu metodu koja upravo koristi biblioteku Google
maps Utility za posebne(engl. custom) markere. Slika 19 prikazuje metodu
addIcon.
Slika 19. dodavanje posebnih markera na karti.
24
Vrlo je bitna usluga „DetectedActivitiesIntentService“ koji prati detektirane
aktivnosti korisnika i u metodi onHandleInent objavljuje (engl. broadcast)
informacije o aktivnostima korisnika ostalim Activity-ima u aplikaciji(slika 20).
Slika 20. slanje obavijesti o aktivnostima korisnika
Da bi se koristio ActivityRecognition API mora se implementirat Googleov API
klijent koji se izvodi u metodi „buildGoogleApiClient“(slika 21).
Slika 21. gradnja google-ovog api klijenta
Pritom pritiskom gumba „Start App“ se pokreće praćenje korisnikove aktivnosti, a stiskom na „Stop App“ se zaustavlja praćenje korisnikove aktivnosti. Primjer toga je vidljiv na slici 22.
Slika 22. pokretanje praćenje korisnikove aktivnost
25
5.4. Funkcionalni zahtjevi
Cilj aplikacije je omogućivanju korisniku da pri vožnji u automobilu samo pokrene
aplikaciju i ne dira ju, jer sama aplikacija sve motri i obavlja dok korisnik sam ne
odluči zaustavit njen rad. Sama aplikacija mora opažat semafore pomoću
ugrađenih senzora te uspostavit konekciju s poslužiteljem i uz konstantno praćenje
trenutne lokacije korisnika, spremit lokaciju opaženog semafora. Također korisniku
treba omogućiti pregledavanje trenutnih semafora koji su dosad bili opaženi od
strane aplikacije. Funkcionalni zahtjevi aplikacije su vidljivi na slici 23.
Slika 13. funkcionalni zahtjevi aplikacije
26
5.5. Upute za instalaciju
Instalacija same aplikacije je izuzetno jednostavna i obavlja se u nekoliko koraka:
1. Prvo treba ući u postavke i dalje u sigurnost u kojoj treba stavit kvačicu na „Nepoznati izvori“ koja dopušta instalaciju aplikacija i iz pouzdanih i iz nepouzdanih izvora.
2. Potom treba povezati računalo i Android uređaj pomoću USB kabela i omogućiti prijenos datoteka s računala na Android uređaj.
3. Zatim treba prenijeti app-debug.apk datoteku s računala na Android uređaj.
4. Odspojiti USB sa Android uređaja i računala.
5. Konačno je potrebno pronaći prebačenu/kopiranu datoteku(app-debug.apk) na uređaju, otvoriti datoteku, instalirati je i na kraju pokrenuti aplikaciju.
27
Zaključak
U današnjem svijetu se mnoge aplikacije fokusiraju na stvarne događaje i opažanje različitih radnji korisnika u stvarnom vremenu. Aplikacija za opažanje semafora je samo jedna od mnogih koji slijede taj obrazac. Opažanjem problematičnih semafora se korisniku pomaže u prepoznavanju puteva koji zbog loše sinkroniziranih semafora nisu najbolji ako korisnik želi doći iz točke A u točci B u najkraćem mogućem vremenu, iako s po kilometrima najkraći. Operacijski sustav Android i njegova platforma omogućuju jednostavno korištenje senzora Android uređaja.
Aplikaciju je moguće poboljšati na sljedeće načine: prilagodba za ostale mobilne platforme, izrada web sučelja pomoću kojeg bi se na karti mogli pregledavati opaženi semafori. Također uz korištenje senzora magnetskog polja u kombinaciji s akcelerometrom bi se mogla otkriti orijentacija kretanja korisnika pa bi se na karti moglo označit semafore koji u trenucima gužve uzrokuju zaustavljanje vozila nešto dalje od semafora zbog vozila koja se nalaze ispred njega.
28
Literatura:
[1] Reto Meier, „Professional Android 4 application development“,
http://www.wrox.com/WileyCDA/WroxTitle/Professional-Android-4-Application-Development.productCd-1118102274.html
[2] W. Frank Ableson, „Android in action third edition“
[3] Charlie Collins „Android in practice“
[4]ActivityRecognitionApi,
https://developers.google.com/android/reference/com/google/android/gms/location
/ActivityRecognitionApi#public-method-summary
[5] Stepehen Mcdonald, „Google maps Android API utility“,
https://github.com/googlemaps/android-maps-utils
[6]ActivityRecognitionApi,https://github.com/googlesamples/androidplaylocation/tre
e/master/ActivityRecognition
29
Android aplikaciju za suradno opažanje semafora
Sažetak
Akcelerometar je jednostavan, osjetljiv i lagan senzor za koristit kao i ostali
ugrađeni senzori u androidu. Pogodan je za praćenje svih vrsta promjene brzine, a
u kombinaciji sa LocationListenerom koji prati promjene u lokaciji toliko često
koliko programer sam odluči definirat predstavlja snažan duet i omogućava samo
po sebi rješavanje raznih problema. Također i Googleovih API-ji predstavljaju
moćno oružje, kao u našem slučaju ActivityRecognition API koji kao što se vidjelo,
zahtijeva jako malo koda da se piše od strane programera, jednostavan je i lagan
za koristiti. . Razvijena Android aplikacija nudi korisniku jednostavno sučelje za
opažanje i spremanje semafora te pregled tih semafora na karti poslije.
Ključne riječi: ActivityRecognition API, Akcelerometar, Lokacija, GeoJSON,
android aplikacija, REST sučelje.
30
An Application for Crowdsensing of Traffic Lights
Abstract
Accelerometer is a simple, sensitive and easy sensor to use just like the other in
built sensors in android. The accelerometer is great for tracking changes in
velocity in all directions and in combination with the LocationListener which tracks
changes in location as often as the programmer decides; represents a powerful
tool and enables solving many problems. Google Api's also represent a powerful
tool, like in our instance of the ActivityRecognitionApi, which as we have seen
requires very little code from the programmer; it's very easy and simple to use.
The developed android application offers the user an easy user interface for
crowdensing traffic lights, saving their locations and viewing these locations on a
map later.
Key words: Activity Recognition api, Accelerometer, Location, GeoJSON,
android application, REST interface.