OSM 获取方式的来源和目的地

OSM get source and destination of way

我在 Java 中使用 Osmosis 框架编写代码,特别是用于 Java 的 OsmosisReader,用于 OSM 处理。

为此,我需要将 OSM 的路径转换为路径源和目标之间的边。
例如,采取这种方式:

  <way id='155117788' timestamp='2021-11-04T10:33:53Z' uid='1935374' user='alxm' visible='true' version='16' changeset='113364120'>
    <nd ref='985633394' />
    <nd ref='5329510726' />
    <nd ref='7203635659' />
    <nd ref='5329510348' />
    <nd ref='5329510364' />
    <nd ref='5329510331' />
    <nd ref='5329510322' />
    <nd ref='5329508418' />
    <nd ref='5329510351' />
    <nd ref='5329510360' />
    <nd ref='5329510663' />
    <nd ref='5329510698' />
    <nd ref='5329510730' />
    <nd ref='6453015430' />
    <nd ref='7264736136' />
    <nd ref='5329510752' />
    <nd ref='5329510751' />
    <nd ref='5329510674' />
    <nd ref='5329510688' />
    <nd ref='5329510408' />
    <nd ref='5329510709' />
    <nd ref='5329510414' />
    <nd ref='5329510382' />
    <nd ref='5329510384' />
    <nd ref='5329510795' />
    <nd ref='5329510794' />
    <nd ref='5329510656' />
    <nd ref='5329510358' />
    <nd ref='5329510359' />
    <nd ref='5329510653' />
    <nd ref='5329510381' />
    <nd ref='5329510654' />
    <nd ref='6819115285' />
    <nd ref='992691843' />
    <tag k='highway' v='secondary' />
    <tag k='name:en' v='Ron Nachman' />
    <tag k='name:etymology:wikidata' v='Q361323' />
    <tag k='oneway' v='yes' />
    <tag k='ref' v='4775' />
    <tag k='surface' v='asphalt' />
  </way>

如何查看哪个节点是路径的源头,哪个节点是目的地?

OpenStreetMap 数据库中的所有方式都有方向。这是由引用节点的顺序定义的:它们是从开始到结束的顺序。

就其本身而言,这个方向没有意义——它只取决于制图器开始绘制的位置。但是道路上的某些标签是指道路的方向。如果这些标签出现在路上,您需要考虑方向。

这些标签的示例出现在 OSM wiki 的文档中:

如果您要为路由创建边缘,您还应该考虑...

  • ...可以在与其他路径共享的任何节点处留下路径,而不仅仅是在第一个和最后一个节点处。因此,路由图中的 OSM 路和边之间没有 1:1 关系。
  • ... turn restrictions 可以防止共享节点的一些转弯。
  • ...可能的行进方向取决于您的交通方式(例如,一条道路可能是汽车的单行道,但 two-way for bicycles)。
  • ...除了您的交通方式之外,其他因素也会影响行进方向,例如可逆单程的时间。然而,这是很多专业的路由引擎都无法完全支持的。