overpass-api:键上的正则表达式

时间:2015-08-17 17:42:18

标签: overpass-api

根据http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL 查询可以在值和键上使用正则表达式。虽然我对值使用正则表达式没有任何问题,但我遇到了键问题。

上面引用的wiki上的示例(以及其他示例):

/* finds addr:* tags with value exactly "Foo" */
node[~"^addr:.*$"~"^Foo$"];    

所以,这是在键和值上使用正则表达式的一个例子。

我感兴趣的是name键。特别是name:en密钥。按名称搜索有几个问题。并非所有名称都是英文名称,对于那些名称不是英文的节点/方式/关系,不能保证会有一个name:en标签,其中包含英文版本的名称。

一般情况下,无法提前知道名称是英文还是name:en标记。如果您只询问namename:en,则可能会遇到无法点击的风险。 (当然,搜索两者并不能保证成功。)

我有一个案例,我知道name失败,但name:en成功。那是我的测试用例。我可以使用以下方法查询overpass-api.de/api/interpreter:

[out:json][timeout:25][bbox:33.465530,36.156006,33.608615,36.574516];

(
  node[name~"duma",i][place];
  way[name~"duma",i][place];
  >;
  relation[name~"duma",i][place];
  node["name:en"~"duma",i][place];
  way["name:en"~"duma",i][place];
  >;relation["name:en"~"duma",i][place];
);

out center;

see it on overpass 并且它工作正常(“duma”未在name找到,但它与name:en)一起找到,但我发现它冗长而且有些重复。

我想使用涉及namename:en标记的正则表达式,但是服务器不理解查询,或者我只是使用了不正确的正则表达式。

使用wiki中显示的示例:node[~"^addr:.*$"~"^Foo$"] 我试过了:

[~"name|name:en"~"duma",i]  
[~"name.*"~"duma",i]  
[~"^name.*$"~"duma",i]  

和其他几个人。我甚至用[~"^name:.*"~"duma",i]模仿了这个例子,看看是否会返回任何内容。

overpass-api.de是否识别键上的正则表达式或者我是否只有正则表达式错误?我没有从overpass-api.de得到错误,只是bbox的坐标和一个空结果。对于对格式化的查询做出反应通常非常严格。提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是关于不区分大小写的密钥正则表达式匹配的Overpass API实现中的一个错误,有关详细信息,请参阅this Github ticket

目前,您已经可以在开发框上测试补丁:

http://overpass-turbo.eu/s/b1l

BTW:如果需要不区分大小写的正则表达式匹配,那么截至今天,这应该已经在overpass-api.de上运行了。