Пропоную мізкошторм.
Є завдання (сам собі придумав) зробити додаток, котрий працював би дещо як strava - слідкував за локацією користувача і будував з того маршрут.
Ідея така - коли я катаюсь на ровері, воно будуватиме шлях. Далі, на основі цих точок та даних про моменти в часі, коли я був в тих точках, було б файно визначити тривалість всього маршруту, його складність, час, котрий я стояв на одному місці та оптимізувати відпавку та обробку всіх цих даних.
З тривалістю все ясно - час кінця катання мінус час початку. З довжиною маршруту теж - просто додати відстань між усіма послідновними точками.
Щодо складності - тут не все так просто, бо люди різні, і що легко одному, те важко іншому, але можна порахувати відстань/час, котрий припав на підйоми та спуск, і якось то порахувати. Наприклад, якщо підйомів і спусків не було, то складність "Середня", якщо весь час був спуск, то "Легка", а якщо весь час підйом, то "Складна". Якщо ж 50% на 50%, то виходить середня, а якщо 20% підйомів на 80% спусків, то легше середнього, чи що?...
Час простою теж ніби легко порахувати, потрібно проаналізувати всі точки послідовно - як тільки знаходимо дві точки з відстанню меншої зазначенної, то рахуємо це за простоювання, а яка саме відстань має бути - хз, треба експерементально якось визначати, або ж визначити середню відстань між усіма послідновними точками, і за простоювання брати ту, що нижча, але при підйомах відстань може повільно змінюватись, хоча це зовсім не простоювання...
Щодо оптимізації. Нехай я оновлюю локацію кожні дві секунди, і фіксую чотири значення - час, довжину, широту та висоту над рівнем моря. Нехай кожне значення число, що складається з 8-ми байтів, матимемо 32 байти.
Нехай користувач катається годину (відправляємо дані кожні 2 секунди), тоді це буде 1800 шматків даних по 32 байти, і того виходе 56.25 мегабайтів. Чи не занадто багато це є? Мабуть, варто буде розібратись, чи справді мені треба 4 шматки даних по 8 байтів, і чи можна на висоту, або час, наприклад, взяти 4 байти. І ще треба буде погуглити стиснення.
Також, відправляти шматочок даних 1800 разів на годину якось не дуже круто, може відправляти їх батчами по, наприклад, 100 штук? Або ж взагалі - чекати закінчення поїздки і тоді відразу купою все відправити?
До того ж, якщо людина стоїть на місці і ми маємо приблизно однакову локацію, то може таку локацію краще взагалі ігнорувати? Так, дані тоді будуть не зовсім точні, але може ця точність не нашкодить нічому особливо?
p.s. тільки що придумав, однакову позицію можна представити просто у вигляді якогось числа, типу 42, бо вона ж все одно збережена у вигляді попередньої точки.