2

我有一些位置(经纬度),我需要在列表视图中显示这些位置。我可以完美地做到这一点。

但现在我想显示在我当前位置之前的位置。这意味着我想跳过我在驾驶过程中已经经过的位置。

让我更清楚地澄清。我们有像 loc1 (lat,lon) , loc2(lat,lon), loc3(lat,lon).. loc100 (lat,lon) 这样的位置。在我开车的过程中,我喜欢查看位置(loc1 - loc100)。但现在我想隐藏从当前位置/位置经过的位置(在 loc1 到 loc100 之间)。比如说,我已经通过了 loc1、loc3、loc5,所以我需要从列表视图中的列表中跳过这 3 个位置。为了实现这一点,我需要知道哪些位置(loc1 - loc100)在我当前位置(gps 当前位置)之后,以便我可以跳过这些位置。

任何的想法?我如何在我的代码中实现这一点?请帮助解决这个问题。

4

1 回答 1

0

我将有两个 Location 对象的数据结构(例如,LinkedList):

  • 未访问的地点
  • 访问地点

您向用户显示的列表将基于 unvisitedLocations 数据结构的内容。

根据您的实时位置,您需要根据您选择的给定半径阈值检测与 unvisitedLocations 数据结构中每个 Location 对象的接近度。为此,您可以使用 LocationManager.addProximityAlert() 方法注册每个位置(在检测到接近度时将触发 PendingIntent),或者循环遍历 unvisitedLocations 数据结构并自行执行此操作 - 例如:

if(currentLocation.distanceTo(unvisitedLocations[i]) < threshold){
    visitedLocations.add(unvisitedLocations[i]);        
    unvisitedLocations.remove(i);
}

这将根据您的实时位置为您提供当前访问和未访问位置的列表。

请注意,随着 unvisitedLocations 初始大小的增长,性能将成为一个问题,因为您将遍历整个数据结构内容以确定每次实时位置更新的位置接近度,这可能是 GPS 每秒一次。如果性能成为问题,您应该考虑移动接近检测服务器端并使用空间数据库,该数据库具有特殊的数据结构,可以大大降低接近检测的密集度。

于 2012-12-18T16:45:12.460 回答