brouter/brouter-server/src/main/java/btools/server/NearRecentWps.java
2022-07-25 06:14:46 +02:00

62 lines
1.4 KiB
Java

package btools.server;
import java.util.List;
import btools.mapaccess.OsmNode;
import btools.router.OsmNodeNamed;
public class NearRecentWps {
private OsmNodeNamed[] recentWaypoints = new OsmNodeNamed[2000];
private int nextRecentIndex = 0;
public void add(List<OsmNodeNamed> wplist) {
synchronized (recentWaypoints) {
for (OsmNodeNamed wp : wplist) {
add(wp);
}
}
}
public void add(OsmNodeNamed wp) {
recentWaypoints[nextRecentIndex++] = wp;
if (nextRecentIndex >= recentWaypoints.length) {
nextRecentIndex = 0;
}
}
public int count(long id) {
int cnt = 0;
OsmNode n = new OsmNode(id);
synchronized (recentWaypoints) {
for (int i = 0; i < recentWaypoints.length; i++) {
OsmNodeNamed nn = recentWaypoints[i];
if (nn != null) {
if (nn.calcDistance(n) < 4000) {
cnt++;
}
}
}
}
return cnt;
}
public OsmNodeNamed closest(long id) {
int dmin = 0;
OsmNodeNamed nc = null;
OsmNode n = new OsmNode(id);
synchronized (recentWaypoints) {
for (int i = 0; i < recentWaypoints.length; i++) {
OsmNodeNamed nn = recentWaypoints[i];
if (nn != null) {
int d = nn.calcDistance(n);
if (d < 4000 && (nc == null || d < dmin)) {
dmin = d;
nc = nn;
}
}
}
}
return nc;
}
}