立交桥-api:按键上的正则表达式
overpass-api: regex on keys
根据http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL
查询可以在值和键上使用正则表达式。虽然我在值上使用正则表达式没有问题,但键有问题。
上面引用的 wiki 上的示例(以及其他示例)说:
/* finds addr:* tags with value exactly "Foo" */
node[~"^addr:.*$"~"^Foo$"];
所以,这是在键和值上使用正则表达式的示例。
我感兴趣的是name
键。特别是 name:en
键。按名称搜索有几个问题。并不是所有的名字都是英文的,对于那些 nodes/way/relations 名字不是英文的人,不能保证 name:en
标签会有英文版本的名字。
一般情况下,无法提前知道名称是否为英文或是否有 name:en
标签。如果你只要求 name
或 name:en
,你 运行 有找不到命中的风险。 (当然,两者都搜索也不能保证成功。)
我有一个案例,我知道 name
失败了,但是 name:en
成功了。那是我的测试用例。我可以查询立交桥-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
找到的),但我发现它冗长且有些重复。
我想使用涉及 name
和 name: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 的坐标和空结果。对于格式不正确的查询的反应通常非常严格。提前致谢。
这确实是 Overpass API 实现中有关不区分大小写的密钥正则表达式匹配的错误,有关详细信息,请参阅 this Github ticket。
暂时已经可以在开发盒上测试补丁了:
http://overpass-turbo.eu/s/b1l
顺便说一句:如果您不需要 需要不区分大小写的正则表达式匹配,那么从今天开始这应该已经可以在 overpass-api.de 上使用了。
根据http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL 查询可以在值和键上使用正则表达式。虽然我在值上使用正则表达式没有问题,但键有问题。
上面引用的 wiki 上的示例(以及其他示例)说:
/* finds addr:* tags with value exactly "Foo" */
node[~"^addr:.*$"~"^Foo$"];
所以,这是在键和值上使用正则表达式的示例。
我感兴趣的是name
键。特别是 name:en
键。按名称搜索有几个问题。并不是所有的名字都是英文的,对于那些 nodes/way/relations 名字不是英文的人,不能保证 name:en
标签会有英文版本的名字。
一般情况下,无法提前知道名称是否为英文或是否有 name:en
标签。如果你只要求 name
或 name:en
,你 运行 有找不到命中的风险。 (当然,两者都搜索也不能保证成功。)
我有一个案例,我知道 name
失败了,但是 name:en
成功了。那是我的测试用例。我可以查询立交桥-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
找到的),但我发现它冗长且有些重复。
我想使用涉及 name
和 name: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 的坐标和空结果。对于格式不正确的查询的反应通常非常严格。提前致谢。
这确实是 Overpass API 实现中有关不区分大小写的密钥正则表达式匹配的错误,有关详细信息,请参阅 this Github ticket。
暂时已经可以在开发盒上测试补丁了:
http://overpass-turbo.eu/s/b1l
顺便说一句:如果您不需要 需要不区分大小写的正则表达式匹配,那么从今天开始这应该已经可以在 overpass-api.de 上使用了。