我正在为自行车的轨道路线做一项申请。
我每秒获取所有的纬度和经度。
现在我想将该纬度和经度存储在我的本地数据库或服务器上。但问题是数据变得非常大。所以我想通过优化存储该数据,这意味着我想要相同的结果,但我想减少数据大小。
如果有人知道任何算法或任何东西,请帮助我。
我正在为自行车的轨道路线做一项申请。
我每秒获取所有的纬度和经度。
现在我想将该纬度和经度存储在我的本地数据库或服务器上。但问题是数据变得非常大。所以我想通过优化存储该数据,这意味着我想要相同的结果,但我想减少数据大小。
如果有人知道任何算法或任何东西,请帮助我。
如果您想在设备端执行此操作,Android 地图团队创建了一个开源地图实用程序库,其中包含将一组LatLng
对象编码为编码折线字符串的方法。
Android Maps Utils 库项目: https ://github.com/googlemaps/android-maps-utils
展示如何使用该库的示例应用程序: https ://github.com/googlemaps/hellomap-android
在您的项目中使用此库,然后调用该PolyUtil.encode()
方法将一组LatLng
对象编码为一个字符串,您可以将其存储在您的数据库中:
https ://github.com/googlemaps/android-maps-utils/blob/master/library /src/com/google/maps/android/PolyUtil.java#L68
然后,调用PolyUtils.decode()
方法从同一字符串中解码一组 LatLng 对象:
https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/PolyUtil。爪哇#L29
最简单实用的解决方案是减少位置更新的频率:
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,refresh_freq, 0, locListener);
尝试每 3 秒(refresh_freq = 3000)而不是每 1 秒(refresh_freq = 1000)更新您的位置,这会将您的数据减少到三分之一。(考虑到车速不高,不会影响你的精准度)
编辑:根据您在上一个答案中的评论,我可以理解您只需要获得速度和距离。那么为什么不立即计算它们并在每次更新中覆盖它们:
distance = (distance + old_location.distanceTo(new_location));
average_speed = (distance/(total_time/1000))*3.6;
instant_speed = (((old_location.distanceTo(new_location))/refresh_freq)/1000)
if (instant_speed>max_speed){
max_speed = instant_speed;
}
在您的 onLocationChanged (Location loc) 方法中插入所有这些行。现在您不需要将您的头寸存储在数据库中。