我正在尝试获取 EdgeIteratorState e 的基数和 adj 节点的纬度/隆。我正在路由并从路由请求中获取路径。从 Path 对象中,我得到了 EdgeIteratorStates。
我是这样做的:
double lat = this.getGraphHopperStorage().getNodeAccess().getLatitude(e.getBaseNode());
double lon = this.getGraphHopperStorage().getNodeAccess().getLongitude(e.getBaseNode());
double latadj = this.getGraphHopperStorage().getNodeAccess().getLatitude(e.getAdjNode());
double lonadj = this.getGraphHopperStorage().getNodeAccess().getLongitude(e.getAdjNode());
这适用于大多数边缘。但在某些情况下(每个路线计算 2 次),我得到的边长度很短,只有几米,但两个节点中的一个位于 1000 公里之外。
举个例子:
edgeid: 23883882
base: 53.45419410886304, 10.13771746615434;
adj: 47.80398136684257, 10.344953879973751;
length of edge: 75.45741857808768 m
speed: 45.0
waygeometry: (47.80348739333795,10.34522731628777,741.0), (47.80375542798092,10.345045708381662,741.0), (47.80398136684257,10.344953879973751,733.0)
我做错了什么?有没有其他方法可以查询节点属性?
你最终指的是虚拟节点的问题吗?边缘状态是否来自由 QueryGraph 提供的算法?
代替"图形存储",您需要此"查询图形"来正确回答这些请求。
此外,我们应该为这些请求失败,而不是静默地允许它们,请参阅此处的问题:https://github.com/graphhopper/graphhopper/issues/642