В настоящее время я использую GraphHopper в приложении, которое определяет, проходит ли маршрут клиента мимо определенной точки интереса (PoI). Одна PoI имеет одну или несколько дорог, по которым может проехать клиент (заранее определено для каждой PoI).
Я думаю, что самый быстрый способ сделать это — найти каждый клиентский маршрут и посмотреть, включают ли ребра внутри маршрута какие-либо ребра, которые проходят PoI. Следующий код находит все ребра, ближайшие к точкам, хранящимся в объекте GHResponse (называемым «маршрутом» в приведенном ниже коде).
QueryResult qr;
HashMap<String, EdgeIteratorState> routeEdges= new HashMap<String, EdgeIteratorState>();
for(GHPoint p:route.getPoints()){
qr = index.findClosest(p.getLat(), p.getLon(), EdgeFilter.ALL_EDGES );
routeEdges.put(qr.getClosestEdge().toString(), qr.getClosestEdge());
}
Это использует конечные точки каждой дороги и ищет ближайшее ребро, которое я мог бы вернуть любому из ребер в этом узле. Я бы предпочел список edgeID внутри маршрута, чтобы вместо этого сравнивать их с ребрами для каждой PoI.
Любые советы будут высоко ценится. Ваше здоровье!