OSM:在某种程度上比定义的节点更多的节点

OSM : More nodes in a way than defined nodes

使用OverPass我正在请求特定区域中的所有方式和节点。

文档说:"The nodes defining the geometry of the way are enumerated in the correct order, and indicated only by reference using their unique identifier. These nodes must have been already defined separately with their coordinates."

但在我得到的结果中,一些节点的定义丢失了,因为我得到了一些我在节点定义中找不到的节点 ID 子节点。

这是我的 OverPass QL 查询:

[bbox:{{bbox}}];
(
node;
<;
);
out;

我遗漏了什么?

谢谢。

您的查询未请求全部 "ways and nodes"。相反,它只是请求节点并执行 "recurse up" 以获取这些节点所属的方式。但是,对于这些方式,您只能从初始查询中获取节点。您将需要一个额外的 "recurse down" 来查询所有其他节点,这些方式包括:

[bbox:{{bbox}}];
(
node;
<;
);
out body;
>;
out;

示例:https://overpass-turbo.eu/s/FGj

严格来说,基于<(向上递归)语句的解决方案不符合您的要求。为了找出原因,我们看一下 Overpass QL documentation:

The recurse up standalone query is written as a single less than symbol, "<".

It takes an input set. It produces a result set. Its result set is composed of:

  • all ways that have a node which appears in the input set; plus
  • all relations that have a node or way which appears in the input set; plus
  • all relations that have a way which appears in the result set

您会注意到您的查询也 returns 许多关系,尽管在您的问题中您提到您只需要结果中的节点和方式。

正确的查询如下所示。我们没有使用 <,而是在 QL 中明确地告诉我们只需要一组节点的方法,并且再一次,一组方法的所有节点 - 没有别的!

(
  node({{bbox}});
  way(bn);
  node(w);
);
out meta;

(顺便说一句:请忘记上面提到的 Overpass 语言指南。它不完整,目前没有维护)。