-1

我正在为自行车的轨道路线做一项申请。

我每秒获取所有的纬度和经度。

现在我想将该纬度和经度存储在我的本地数据库或服务器上。但问题是数据变得非常大。所以我想通过优化存储该数据,这意味着我想要相同的结果,但我想减少数据大小。

如果有人知道任何算法或任何东西,请帮助我。

4

2 回答 2

2

如果您想在设备端执行此操作,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

于 2013-07-23T20:10:33.517 回答
1

最简单实用的解决方案是减少位置更新的频率:

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) 方法中插入所有这些行。现在您不需要将您的头寸存储在数据库中。

于 2013-07-23T13:36:26.350 回答