将 GPS 线保存到阵列中
Posted
技术标签:
【中文标题】将 GPS 线保存到阵列中【英文标题】:Saving gps cords into Array 【发布时间】:2014-06-23 13:46:42 【问题描述】:这听起来可能很基本,但我真的想知道标准是什么。 为了收集 GPS 线,并在(最好)一个数组中保存纬度和经度,什么算法带来了最好的性能? 我的方法好吗?还有其他(更好的)建议吗? 谢谢
public void onLocationChanged(Location loc)
// new I and J, in increment
givemeIandJ()
Array[i][j]=(loc.getLatitude());
Array[i][j]=(loc.getLongitude());
【问题讨论】:
为什么还要有一个二维数组?你知道什么是数组吗? @323go mmm 我不需要它们来保存纬度和经度吗?我希望任何给定点都有一个唯一的索引 我不明白你在问什么。而且我猜你不知道数组是如何工作的? @XaverKapeller 你错了 想详细说明一下?您将经度和纬度都分配给数组中的同一个元素,因此用另一个值覆盖一个值,如果您知道数组是如何工作的,这会如何发生? 【参考方案1】:节省内存的最佳性能是将纬度和经度存储在不同的数组中:
int[] longitudes = new int[maxSize];
int[] latitudes = new int[maxSize];
longitudes[i] = loc.getLongitude() * 1E7; / 1E7 = 1000000: converts to integer
latitudes[i] = loc.getLatitdue() * 1E7;
maxSize
可能是写入存储之前的最大缓冲区大小。
Java 中的二维数组需要更多空间(比 C 中的),因为二维数组是 int[] 类型对象的一维数组,每个 (1-d) 条目会丢失 20 个字节。
如果需要,您甚至可以将 lat/lon 存储在一个 int[] 数组中:
int[] latLongs= new int[2 * maxSize];
latLongs[2*i] = (int) (loc.getLongitude() * 1E7);
latLongs[2*i + 1] = (int) (loc.getLatitude() * 1E7);
如果您想省略 faktor 1E7,只需使用 double[](或 float[])数组即可。
【讨论】:
Weel 解释道。但是关于索引的增量:在每次调用时简单地增加它们就可以了? 是的,一旦您从位置 API 接收到位置,就增加缓冲区索引并存储该位置。确保索引不超过最大大小。以上是关于将 GPS 线保存到阵列中的主要内容,如果未能解决你的问题,请参考以下文章