让 IOS 设备模拟自己在操场跑步
- 背景
- 我的解决方案:
- 其他解决方案:
- 具体步骤
- 1. 在 Xcode 上新建一个含GPX文件的 IOS 项目
- 2. Google 地图密集 标一圈操场,获得位置信息
- 3. Google Map 坐标转换
- 3. 防反作弊识别
- 4. 缺点
- 5. 改进
背景
新学期学校日常体育锻炼打卡形式改变,成了使用 APP 每周在学校的操场跑 2 次 3.5 公里以上。一来自己新学期的锻炼形式变成了在健身房锻炼,防霾 + 保护膝盖;二来3.5公里实在太长,虽然实际跑的话可能 2.7 公里就会判定为 3.5 公里;三来每天要定时定点去跑,打乱了自己的安排;四来最初使用阶段,pyq 经常有吐槽软件不好使用。
于是我就去谷歌 IOS 设备能不能模拟 GPS,让 APP 误以为是你在跑。
我的解决方案:
IOS 模拟 GPS 跑圈
其他解决方案:
模拟传感器摇动 / 摇步器 —— ugly
解析 APP,找到数据上传接口,直接上传数据 —— too hard
具体步骤
1. 在 Xcode 上新建一个含GPX文件的 IOS 项目
GPX 文件可以在 IOS 设备连接 mac,并处于开发者模式 IOS 进行模拟定位
具体如何创建 gpx 文件可参考:http://pingguohe.net/2017/10/13/GPX-mock.html
遇到问题:如何模拟跑圈?
解决办法:
2. Google 地图密集 标一圈操场,获得位置信息
大概标了40个点,沿操场一圈,虽然(费时间 + 丑陋),但是没有找到好的方便方法
大致思路就是每两个点之间走直线,但是因为标点密集,最后可以近似为沿操场走
3. Google Map 坐标转换
Google map 中提取的坐标似乎无法直接在 GPX 中使用,需要转换过格式
试了几个在线转换的工具,发现下面这个可以比较好的进行转化:
https://mapstogpx.com/index.php# 这个网站可以直接将 Google Map 里分享的路线转化为 GPX 可用的代码
但是这里我只要位置信息,所以需要另写一个脚本,单独提取位置信息(直接坐标转化的我试了几个都不行,发现这个可以我就懒得再找了)
遇到问题:gpx 默认的速度很快,如何控制速度?
解决办法:参考 https://stackoverflow.com/questions/9439495/when-using-gpx-in-xcode-to-simulate-location-changes-is-there-a-way-to-control 中的第二条回答
3. 防反作弊识别
思路:跑每圈的时候,每个标定点坐标、两点之间时间随机偏移;每次使用都重新生成一个新的 gpx 文件,避免跑步数据重合
4. 缺点
必须把手机连接 mac,且因为使用非官版连接线,连接可能会断掉,需要在运行的时候偶尔留意一下是否在正常跑了
断开连接后,IOS 设备的位置信息可能会一直停在那里(iphone xs max无),想要恢复正常定位,需要(删掉软件+重启) or 在 Xcode 上把模拟 GPS 关掉再重新跑一遍
5. 改进
路线机器识别没有问题,但是人眼识别还是过于整齐,路线的首尾单独设计可能效果更好
自动化
Charlie
10.8
海宁