【问题标题】:Saving gps cords into Array将 GPS 线保存到阵列中
【发布时间】: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 你错了
  • 想详细说明一下?您将经度和纬度都分配给数组中的同一个元素,因此用另一个值覆盖一个值,如果您知道数组是如何工作的,这会如何发生?

标签: android arrays gps save increment


【解决方案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 接收到位置,就增加缓冲区索引并存储该位置。确保索引不超过最大大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 2014-01-14
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多