1

根据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标签。如果您只要求nameor name: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;

在立交桥上看到它 ,它工作正常(通过 找不到“duma” name,但用 找到name:en),但我发现它冗长且有些重复。

我想使用涉及nameandname: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 的坐标和一个空结果。对格式错误的查询做出反应通常非常严格。提前致谢。

4

1 回答 1

0

这确实是 Overpass API 实现中有关不区分大小写的密钥正则表达式匹配的错误,请参阅此 Github 票以获取详细信息。

暂时你已经可以在开发盒上测试补丁了:

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

顺便说一句:如果您不需要不区分大小写的正则表达式匹配,那么从今天开始,这应该已经在 overpass-api.de 上工作了。

于 2015-08-19T07:55:24.483 回答