立交桥涡轮增压:关系_inside_ area?

时间:2017-09-11 10:54:53

标签: overpass-api

此代码

rel[name="Rheinisch-Bergischer Kreis"][admin_level=6][boundary=administrative];
out geom;

在德国输出我的目标区域“Rheinisch-Bergischer Kreis”。使用此代码

area[name="Rheinisch-Bergischer Kreis"][admin_level=6][boundary=administrative];
rel(area)[boundary="postal_code"];
out geom;

我正在尝试获取那些位于该目标区域内的postal_code关系。如果比较两个输出,则可以看到第二个查询中的选定区域大于第一个查询中的选定区域。 但它的大小应该相同

在西端有一小部分关系到达我的目标区域,因此它们被包含在输出中。我怎样才能得到中心位于目标区域内的关系?或者只是完全属于我的目标区域的关系?

修改

谢谢mmd。我接受了死胡同,现在我提出了我的“解决方案”(以及我的实际问题!),也许这将有助于未来的人:

我正在使用此代码

[timeout:900];

area[name="Nordrhein-Westfalen"][admin_level=4][boundary=administrative];

rel(area)[admin_level=5][boundary=administrative]; // regierungsbezirke

foreach(
  out geom;
  map_to_area;
  rel(area)[admin_level=6][boundary=administrative]; // kreise
  foreach(
    out geom;
    map_to_area;
    rel(area)[boundary="postal_code"];
    out geom;
  );
);

获取OSM文件,首先输出admin_level 5,然后输出admin_level 6,然后输出属于该admin_level 6的每个邮政编码。我的目标是获取将邮政编码映射到admin_level 6到admin_level 5的字典。从OSM文件中的顺序我可以搞清楚。 不幸的是,上面的代码在OSM文件中多次报告37个邮政编码(grep用于标记 - >打印postal_code(例如awk) - > sort - > uniq -c - > sort -k 1,1 )。这就是我发现我在最小例子问题中所描述的行为的方式。所以我现在要做的是过滤那些在OSM文件中多次出现的邮政编码。然后我可以从OSM文件构建我的字典以获得该映射。

1 个答案:

答案 0 :(得分:2)

关于您的初始问题,我建议采用一种利用相应区域中现有节点的方法。它假定每个postal_boundary至少有一个位置节点。如果由于某种原因情况并非如此,您可以使用[舒适性]代替。这非常接近它。

rel[name="Rheinisch-Bergischer Kreis"][admin_level=6][boundary=administrative];
map_to_area;
node(area)[place];
is_in;
rel(pivot)[boundary="postal_code"];
out geom;