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 オブジェクトの 2 つのデータ構造 (LinkedList など) があるとします。

  • 未訪問の場所
  • 訪れた場所

ユーザーに表示されるリストは、unvisitedLocations データ構造の内容に基づいています。

リアルタイムの場所に基づいて、選択した特定の半径しきい値に基づいて、unvisitedLocations データ構造内の各 Location オブジェクトへの近接を検出する必要があります。これを行うには、各場所を LocationManager.addProximityAlert() メソッド (近接を検出すると PendingIntent を発生させる) で登録するか、unvisitedLocations データ構造をループして自分でこれを行います。次のようにします。

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

これにより、リアルタイムの場所に基づいて、現在訪問済みおよび未訪問の場所のリストが表示されます。

unvisitedLocations の初期サイズが大きくなると、パフォーマンスが問題になることに注意してください。これは、データ構造の内容全体をループして、GPS から 1 秒に 1 回行われる可能性のあるリアルタイムの位置更新ごとに位置の近さを判断するためです。パフォーマンスが問題になる場合は、近接検出をサーバー側に移動し、特殊なデータ構造を持つ空間データベースを使用して、近接検出の負荷を大幅に軽減することを検討する必要があります。

于 2012-12-18T16:45:12.460 に答える