背景#
最近使用了一个 iPhone 上的应用 anydistance,可以记录比如跑步或者骑车的路径,更惊喜的是它会记录海拔高度,并且支持生成 3d 的路径。
这时上次去湖州一段路上所记录,看起来挺酷的。
所以想着自己做个 demo。
体验链接是 http://geo-path.pages.dev/
技术细节#
技术上,navigator.geolocation支持获取用户当前的地理信息,然后我们用three.js画出路径。
geoloation#
这里有两点需要注意的。
首先是有些浏览器不支持 altitude 属性也就是海拔高度,比如安卓上的 chrome。
其次是 enableHighAccuracy 这个属性,设为 true 表示支持高准确性,最好设置成 true。我在小区跑了一圈测试比对了下,没有设置高准确性时,路径会显得很没有杂乱。
three.js#
首先是需要数据的转换,还是以上述提到的绕小区跑一圈为例子,经度的范围是 120.11420594721491 到 120.11537834321953,相差非常非常小,如果用这个数据显示的话,在画布上很难看清形状,所以需要做相应的数据转换
路径#
使用 Line 来表示路径,并且我们把这个 line 的中心放到原点。
表示当前位置的点#
使用 Points 来表示当前位置的点。
动画#
效果#
其他#
上面只是 demo,要做好这个产品其实还有些情况需要考虑,现在是 1 秒记录 20 次,如果用户的路径很长,则数据就会很多,数据的存储,还有展示时选择合适的数据颗粒度,都是需要考虑的。