Overpass API 语言指南确实允许在匹配标签值时使用逻辑运算符...例如:
["name"~"holtorf|Gielgen"]
将返回 name=holtorf 或 name=Gielgen 的任何对象。
您还可以组合条件,它们将成为 AND...例如:
["name"]["name"="holtorf"]
。意味着搜索具有标签“name”且标签名称等于“holtorf”的事物。
但我想要的是一个 OR 运算符...类似:
["name"="holtorf"]|["name:eng"holtorf"]
在我的特定应用程序中,我只想知道是否有任何以“name”开头的标签...所以我想做的是将其放入API中:
["^name"]
(因为在此API中“^”意思是“开始于”)。但当然它搜索文字“^name”并没有返回任何内容。
有什么解决办法吗?
没有OR运算,但可以使用UNION
(
way["name"="holtorf"];
way["name:eng"=holtorf"]
);
还有差异和协商http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Difference
在您的特定情况下,您可以使用键值正则表达式匹配。 http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Key.2Fvalue_matches_regular_expression_.28.7E.22key_regex.22.7E.22value_regex.22.29
[~"^name.*$"~"^holtorf$"];
//or only for key
[~"^name.*$"="Holtorf"];
你可以尝试这样的事情
node["place"~"village|city|town|metropolis"]["name"~"^A"](area:3602145268);