为什么 graphhopper 使用一些 OpenStreetMap 铁路元素来构建汽车图
Why does graphopper use some OpenStreeMap railway elements for car graph build up
Graphhopper 项目(OpenStreetMap 的开源路由)导入
稍后将在道路网络图中使用的特定铁路元素。
在文件 CarFlagEncoder.java 中,允许将存储在 acceptedRailways
中的一些特定铁路类型添加到图表中:
// do not drive cars over railways (sometimes incorrectly mapped!)
if (way.hasTag("railway") && !way.hasTag("railway", acceptedRailways))
return 0;
acceptedRailways 在 AbstractFlagEncoder 中定义:
acceptedRailways.add("tram");
acceptedRailways.add("abandoned");
acceptedRailways.add("abandoned_tram");
acceptedRailways.add("disused");
acceptedRailways.add("dismantled");
acceptedRailways.add("razed");
acceptedRailways.add("historic");
acceptedRailways.add("obliterated");
虽然我能理解为什么使用"tram"(汽车和有轨电车有时共用一条道路,所以汽车可以在上面行驶),但我不明白其他铁路类型。
为什么需要它们?谁想通过历史悠久的不存在的铁路路线?
如此处所示 http://wiki.openstreetmap.org/wiki/Demolished_Railway
我不熟悉具体的项目,我想我可以从design/code评论的角度回答你的具体问题。
Why are they needed? Who want to route via an historic non existing
railway?
我认为我们需要关注路由的来源。
graphhopper 项目事前使用 OpenStreetMap 数据源中的所有路线。该项目似乎包含所有类型的路线。这意味着事前所有路线都是有效的;高速公路/轮渡/铁路。
然后在建图的时候解析下来。您可以在您提到的 acceptWay 函数中看到这一点。这里各种标签是必需的或受限制的。
注意前几行:我们已经需要 highway 标签。 (或处理其他案件)。
String highwayValue = way.getTag("highway");
if (highwayValue == null)
{
if (way.hasTag("route", ferries))
{
String motorcarTag = way.getTag("motorcar");
if (motorcarTag == null)
motorcarTag = way.getTag("motor_vehicle");
if (motorcarTag == null && !way.hasTag("foot") && !way.hasTag("bicycle") || "yes".equals(motorcarTag))
return acceptBit | ferryBit;
}
return 0;
}
一旦我们通过了主要的 highway 标签检查,就会执行其他检查。 铁路 支票就是其中一项支票。
现在:为什么我们要允许那些其他子类型的铁路?
因为,这些类型的铁路可能目前可以通行。
acceptedRailways.add("tram");
acceptedRailways.add("abandoned");
acceptedRailways.add("abandoned_tram");
acceptedRailways.add("disused");
acceptedRailways.add("dismantled");
acceptedRailways.add("razed");
acceptedRailways.add("historic");
acceptedRailways.add("obliterated");
进一步支持:除了电车之外,所有这些词都表示某种形式的当前不存在。
有时,map/route 会包含旧标记。
所以,我有根据的猜测是程序的设计者做出了权衡。
如果 acceptedRailways
是 高速公路 并且满足有效 高速公路 的所有条件,则允许它。否则,它会像其他任何东西一样失败。
(它也可以看作是对 无铁路标签 检查的限制的放松;设计者不愿意冒险允许一条路线与铁路标签,没有特殊的、不存在的标签。即使它可能有公路标签!)
这是由于 OSM 中的奇怪标记而引入的,并导致铁路用于汽车,这是不可接受的。
现在 'OSM market power' 我们正在考虑完全删除此解决方法并修复数据。这不仅是更好的方法,而且还会导致其他地方出现当前行为问题,请参阅 here 了解更详细的讨论。
Graphhopper 项目(OpenStreetMap 的开源路由)导入 稍后将在道路网络图中使用的特定铁路元素。
在文件 CarFlagEncoder.java 中,允许将存储在 acceptedRailways
中的一些特定铁路类型添加到图表中:
// do not drive cars over railways (sometimes incorrectly mapped!)
if (way.hasTag("railway") && !way.hasTag("railway", acceptedRailways))
return 0;
acceptedRailways 在 AbstractFlagEncoder 中定义:
acceptedRailways.add("tram");
acceptedRailways.add("abandoned");
acceptedRailways.add("abandoned_tram");
acceptedRailways.add("disused");
acceptedRailways.add("dismantled");
acceptedRailways.add("razed");
acceptedRailways.add("historic");
acceptedRailways.add("obliterated");
虽然我能理解为什么使用"tram"(汽车和有轨电车有时共用一条道路,所以汽车可以在上面行驶),但我不明白其他铁路类型。
为什么需要它们?谁想通过历史悠久的不存在的铁路路线? 如此处所示 http://wiki.openstreetmap.org/wiki/Demolished_Railway
我不熟悉具体的项目,我想我可以从design/code评论的角度回答你的具体问题。
Why are they needed? Who want to route via an historic non existing railway?
我认为我们需要关注路由的来源。
graphhopper 项目事前使用 OpenStreetMap 数据源中的所有路线。该项目似乎包含所有类型的路线。这意味着事前所有路线都是有效的;高速公路/轮渡/铁路。
然后在建图的时候解析下来。您可以在您提到的 acceptWay 函数中看到这一点。这里各种标签是必需的或受限制的。
注意前几行:我们已经需要 highway 标签。 (或处理其他案件)。
String highwayValue = way.getTag("highway");
if (highwayValue == null)
{
if (way.hasTag("route", ferries))
{
String motorcarTag = way.getTag("motorcar");
if (motorcarTag == null)
motorcarTag = way.getTag("motor_vehicle");
if (motorcarTag == null && !way.hasTag("foot") && !way.hasTag("bicycle") || "yes".equals(motorcarTag))
return acceptBit | ferryBit;
}
return 0;
}
一旦我们通过了主要的 highway 标签检查,就会执行其他检查。 铁路 支票就是其中一项支票。
现在:为什么我们要允许那些其他子类型的铁路?
因为,这些类型的铁路可能目前可以通行。
acceptedRailways.add("tram");
acceptedRailways.add("abandoned");
acceptedRailways.add("abandoned_tram");
acceptedRailways.add("disused");
acceptedRailways.add("dismantled");
acceptedRailways.add("razed");
acceptedRailways.add("historic");
acceptedRailways.add("obliterated");
进一步支持:除了电车之外,所有这些词都表示某种形式的当前不存在。
有时,map/route 会包含旧标记。 所以,我有根据的猜测是程序的设计者做出了权衡。
如果 acceptedRailways
是 高速公路 并且满足有效 高速公路 的所有条件,则允许它。否则,它会像其他任何东西一样失败。
(它也可以看作是对 无铁路标签 检查的限制的放松;设计者不愿意冒险允许一条路线与铁路标签,没有特殊的、不存在的标签。即使它可能有公路标签!)
这是由于 OSM 中的奇怪标记而引入的,并导致铁路用于汽车,这是不可接受的。
现在 'OSM market power' 我们正在考虑完全删除此解决方法并修复数据。这不仅是更好的方法,而且还会导致其他地方出现当前行为问题,请参阅 here 了解更详细的讨论。