gpt4 book ai didi

java - 在 Graphhopper 中,如何检索路径中包含的边集?

转载 作者:太空宇宙 更新时间:2023-11-04 13:57:19 25 4
gpt4 key购买 nike

我目前正在一个应用程序中使用 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());
}

这使用每条道路的端点并搜索最近的边缘,我可能会返回该节点处的任何边缘。我更喜欢 route 的 EdgeID 列表,这样我就可以将它们与每个 PoI 的边缘进行比较。

如有任何建议,我们将不胜感激。干杯!

最佳答案

感谢 Karussell 的建议,我创建了自己的自定义 GraphHopper 对象,该对象实现了特定方法来返回 route 使用的边。

public class GraphHopperWithPaths extends GraphHopper {

public List<Integer> routePaths(double startY, double startX, double endY, double endX){

//Examine a route and return edgeIDs that GraphHopper uses
LocationIndex index = this.getLocationIndex();
GHRequest request = new GHRequest(startY, startX, endY, endX);
GHResponse response = new GHResponse();
List<Path> paths = getPaths(request, response);
List<Integer> edges = new ArrayList<Integer>();
for(Path p:paths){
for(EdgeIteratorState e:p.calcEdges()){
edges.add(e.getEdge());
}
}
if (response.hasErrors()) return null;

//Get edges for start and end point as well
QueryResult qr = index.findClosest(startY, startX, EdgeFilter.ALL_EDGES );
edges.add(qr.getClosestEdge().getEdge());
qr = index.findClosest(endY, endX, EdgeFilter.ALL_EDGES );
edges.add(qr.getClosestEdge().getEdge());

return edges;
}

}

此方法不返回路线本身,这意味着如果您想要路线和边缘,则应该修改它。同时运行此自定义 GraphHopper 对象的 routeroutePaths 方法效率很低。

关于java - 在 Graphhopper 中,如何检索路径中包含的边集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29690820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com