Android谷歌地图纬度和经度压缩

时间:2013-07-23 12:56:16

标签: android google-maps-android-api-2

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

我每秒都取得所有纬度和经度。

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

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

2 个答案:

答案 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 (位置定位)方法中插入所有这些行。现在您不需要将您的职位存储在数据库中。