Java 是否有方法获取边所属方式的ID?
可能吗?我需要从任何边缘跳到一个地方。考虑到它已经在OSM中生成,WayID看起来非常方便。但是我什么也找不到。如果你想知道为什么我需要这个,它很简单-一种方法可以用作一组边的公共属性的容器。它消除了重复信息的需要Java 是否有方法获取边所属方式的ID?,java,openstreetmap,graphhopper,Java,Openstreetmap,Graphhopper,可能吗?我需要从任何边缘跳到一个地方。考虑到它已经在OSM中生成,WayID看起来非常方便。但是我什么也找不到。如果你想知道为什么我需要这个,它很简单-一种方法可以用作一组边的公共属性的容器。它消除了重复信息的需要 AllEdgesIterator ei = graph.getGraph().getAllEdges(); logger.info("Wring {} edges...", ei.getMaxId()); while (ei.next()) {
AllEdgesIterator ei = graph.getGraph().getAllEdges();
logger.info("Wring {} edges...", ei.getMaxId());
while (ei.next()) {
// TODO (ds): get way ID here
...
}
OSM通道id未存储在GraphHopper中。您需要在导入时创建一个长值数组来维护它们:
arr[edgeId]=osmId
是 啊我开始在OSMReader中添加这一点。这有点复杂,因为只有OSMReader在创建边时才能处理它。我用edge存储它们,这需要在序列化部分做一些工作。是的,也许我们应该为此提供一个钩子。您使用edge存储它们是什么意思?你是说你扩展了GraphOpperStorage来做这个吗?您可能只需要一个DataAccess对象(类似于一个数组,但带有序列化),但实际上并不需要。我将
wayId
添加到边缘和几个访问者,getWayId
,setWayId
。很好。不幸的是,它在大小上造成了很大的影响:显然,它增加了8个字节,使edge类和edge文件的大小增加了一倍。从这个角度来看,我想知道我是否需要long
作为道路ID。GH将其定义为long
,但我不认为OSM数据超出了max int。接下来的事情是获取可用于分析的way标记。GH非常棒,我相信我可以让它更具信息性。顺便说一句,我确实尝试过使用类似于名称存储方式的方法,但后来又放弃了,因为除了ID存储方式之外,没有其他方法。但是对于标签,我可能必须按照您的建议使用DataAccess
,因为标签太多了。。。重新标记:在核心GH中也很好,例如通过配置。也许您可以提供一个PR:)嘿,您是否最终实现了一个解决方案,在将OSM方式和节点元数据导入Graphhopper后,您可以通过该解决方案向后访问它们?对不起,我不记得我最终得到了什么--已经有一段时间了