07.08.2020 09:32
1
Ahoj,

chtel bych se zeptat zdejsich vyvojaru mobilnich appek, jak je to s moznosti aplikace ohledne vyuziti GPS. Appka ma byt ve vysledku hybridni, nakonec jsem vybral technologii Ionic frameworku. Ted testujeme na Androidu. Uz jsme udelali nejaky prototyp appky, ktery testujeme v praxi, ale trapi nas dve veci.:

1/ GPS neukazuje presne - ustreli se treba o 80 metru, coz ve chvili, kdy ma poznat pruchod cilem je dost mimo. Vyvojar ale vyuziva pry knihovnu GeoLocation, tak je mi divne, ze by nefungovala. Je to i na miste s jasnym vyhledem na oblohu, deje se to temer vzdy, takze to neni signalem, atd.

2/ prubezne odesilani polohy, i kdyz je appka na pozadi. Kdyz appka bezi v popredi, vse v poradku a do API nam posila vse potrebne v pravidelnem intervalu. Jsou potreba nejaka specialni prava? Appka ma pry v kodu jakysi "background mode", kde by tohle melo fungovat, ale zatim nefunguje...

Dekuji vsem za informace.
07.08.2020 10:43
2
ad 1) Sami google mapy mají v návodu, že rozdíl může být až 20 metrů v přesnosti polohy. Zpřesnit polohu lze pomocí BT nebo WiFi, řešili ste tuto možnost? Možná pomůže tenhle odkaz https://www.gpsworld.com/how-to-achi...cy-in-android/. Kalibraci GPS ste zkoušeli?

ad 2) Nemáte na telefonu nastaven úsporný režim nebo nastaven přísný power management, který ukončuje aplikace na pozadí?
07.08.2020 11:01
3
Jak jste ověřil, že to není signálem? Pokud máte telefon v kapse, nacházíte se ve městě a podobně, tak nemáte dokonalý výhled na oblohu. 80 metrů by odpovídalo špatnému umístění gps antény nebo například odrazům od budov.

K druhému problému si nastudujte téma "background timer throttling"
07.08.2020 11:14
4
android nebo ios?

Dnešní gps chipy jsou hybridní a používají kde co k odhadu nebo upřesnění polohy. To, že nějakou polohu ti vrátí neříká, že je přesná. Fix polohy z několika satelitů trvá 30s ale i 1m.

Na androidu můžeš sledovat eventy, pro tebe je třeba užitečný GPS_EVENT_FIRST_FIX, který říka, že už máš z pár satelitů polohu dopočítanou, dokumentace k api je tady https://developer.android.com/refere...tion/GpsStatus

Běh na pozadí je popsaný v dokumentaci, aktualizací polohy dostáváš pomálu, ale je možné to nastavit, viz https://developer.android.com/about/...ocation-limits a https://developer.android.com/traini...ation-settings

U iOS to je trochu složitější, tam potřebuješ schválené api a není tak sdílný...
07.08.2020 12:13
5
Původně odeslal TomášX
Dnešní gps chipy jsou hybridní a používají kde co k odhadu nebo upřesnění polohy. To, že nějakou polohu ti vrátí neříká, že je přesná. Fix polohy z několika satelitů trvá 30s ale i 1m.
Těch 30 vteřin je pro cold start. V tracking režimu jsou to obvykle 2-4 vteřiny. GPS modul neumí říct, že vypočítal polohu o 5 metrů vedle oproti skutečnosti, ale obvykle umí vypočítat orientační rádius nepřesnosti na základě HDOP a dalších parametrů. Liší se to dle výrobce i dle typu GPS modulu.

Co se týká zpřesňování GPS, to je u mobilů založené především na využití dat z gyroskopu, magnetometru a vyžaduje to pohyb. Tzn. lze pak predikovat směr i rychlost pohybu a tedy i polohy. Ale to není zpřesnění již získané GPS polohy, spíš kontrola, že GPS není úplně vedle oproti očekávání. Samotné GPS moduly mohou mít funkci dead reckoning, což je výpočet předpokládané polohy na základě těch předchozích. Smysl to dává například v tunelech nebo ve vysoké zástavbě. Na straně aplikace lze pak využít zarovnávání polohy, tedy nepřesnou polohu vztáhnout obvykle ke komunikaci v mapě, což se i děje u snad všech mapových navigací a díky tomu má uživatel pocit, že GPS je super přesná i když realita je trochu jiná.

Původně odeslal TomášX
Na androidu můžeš sledovat eventy, pro tebe je třeba užitečný GPS_EVENT_FIRST_FIX, který říka, že už máš z pár satelitů polohu dopočítanou, dokumentace k api je tady https://developer.android.com/refere...tion/GpsStatus

Běh na pozadí je popsaný v dokumentaci, aktualizací polohy dostáváš pomálu, ale je možné to nastavit, viz https://developer.android.com/about/...ocation-limits a https://developer.android.com/traini...ation-settings
Ptá se na hybridní aplikace, tam jsou možnosti trochu omezené. Co se běhu na pozadí týče, do toho vstupuje rychlost vykonávání javascriptu na pozadí i další faktory, například úplné vypnutí requestAnimationFrame, což je časovač, který lze využívat (a využívá se) i k jiným věcem, než k animaci.
07.08.2020 12:24
6
Původně odeslal Jan Stejskal
GPS modul neumí říct, že vypočítal polohu o 5 metrů vedle oproti skutečnosti, ale obvykle umí vypočítat orientační rádius nepřesnosti na základě HDOP a dalších parametrů. Liší se to dle výrobce i dle typu GPS modulu.
GPS umí říct moznou odchylku. Pokud to není v API na androidu je věc jiné.
07.08.2020 12:28
7
měl jsem na mysli třeba A-GPS. Ano, myslel jsem cold start nebo-li také time to first fix, od toho i ten event. Díky za upřesnění, nedělám v tom denně.

Mám trochu zmatek co se označuje jako hybridní aplikace, jak jsem v oboru dlouho, slovo hybridní se používá postupně na vše. Pokud to jsou aplikace, které běží přes webView či podobné interfacy, ty to neumí zjistit přesně. Pokud to jsou aplikace psané v jednom jazyku a jej se kompilují do více cílových prostředí, tam to možné je, pokud je k dispozici u nativní aplikace plné api.

V javascriptových aplikacích o možnosti jak zjistit nějaká metadata k gps nevím, tam to je očesané. Leda si na pozadí spustit jiný thread, který ty data bude získávat, v prohlížeči to možné není vůbec.
07.08.2020 12:36
8
Původně odeslal josef.jebavy
GPS umí říct moznou odchylku. Pokud to není v API na androidu je věc jiné.
Pouze na základě DOP (Dilution of precision). To znamená, že ani takto vypočtená hodnota nepřesnosti není přesná. Nezahrnuje ionosférickou a troposférickou refrakci, nezahrnuje možný odraz od budov, skal a podobně. Jinými slovy, ten údaj je tak orientační, že je v praxi nepoužitelný.
07.08.2020 13:22
9
Dekuji moc za vase odpovedi. O necem se tu polemizuje, takze uvadim toto:

- hybridni appka ve smyslu jeden kod a pak kompilace na vice platforem (pokud to bude nutne, nemam problem to oddelit)
- nyni to mame na androidu
- formulace, ze je to nepresne treba o 80m urcite neni tim, ze bych to mel v kapse. Jednak uz se to testovali asi na 10 mistech, jednak opravdu jdu a koukam na telefon v ruce
- nepresnost je videt tak, ze telefon snima polohy treba dve minuty, pohybuju se s nim, ale ma tam tu odchylku. Neni to tak, ze bych zapnul appku, pockal na prvni nacteni GPS a z toho udelal zaver ze je to nepresne


Radili byste mi tedy spise udelat appku pro kazdou platformu zvlast a tam zkusit tyhle veci s polohou uplne vyladit? Vyuziti v praxi bude stejne asi jen na Androidu z 95%, takze iOS bych asi zatim neresil.