我正在为自行车的轨道路线做一个申请。
我每秒都取得所有纬度和经度。
现在我想将这个纬度和经度存储在我的本地数据库或服务器上。但问题是数据变得非常大。所以我想用优化存储这些数据,意味着我想要相同的结果,但我想减少数据大小。
如果有人知道任何算法或任何事情,请帮助我。
答案 0 :(得分:2)
如果您想在设备端执行此操作,Android地图团队会创建一个开源地图实用程序库,其中包含将一组LatLng
个对象编码为encoded Polyline string的方法
Android Maps Utils库项目: https://github.com/googlemaps/android-maps-utils
示例应用程序,显示如何使用该库: https://github.com/googlemaps/hellomap-android
在项目中使用此库,然后调用PolyUtil.encode()
方法将一组LatLng
个对象编码为String,您可以将其存储在数据库中:
https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/PolyUtil.java#L68
然后,调用PolyUtils.decode()
方法从同一个String解码一组LatLng对象:
https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/PolyUtil.java#L29
答案 1 :(得分:1)
最简单,更实用的解决方案是降低位置更新的频率:
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,refresh_freq, 0, locListener);
尝试每3秒更新一次您的位置(refresh_freq = 3000)而不是每一秒(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 (位置定位)方法中插入所有这些行。现在您不需要将您的职位存储在数据库中。