此代码
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文件构建我的字典以获得该映射。
答案 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;