2015-06-22 5 views
1

Руководство по языку API Overpass позволяет использовать логические операторы при сопоставлении значения тега ... например: ["name"~"holtorf|Gielgen"] будет возвращать любой объект с именем = holtorf или name = Gielgen.в API Overpass есть способ использовать логические операторы при существовании тегов?

Вы также можете комбинировать условия и они станут и ... так, например:

["name"]["name"="holtorf"]. Средство поиска объектов, имеющих тег «имя», и имя тега равно «holtorf».

Но то, что я хочу, это оператор OR ... что-то вроде:

["name"="holtorf"]|["name:eng"holtorf"]

В моем конкретном приложении, я просто хочу знать, если есть какие-либо теги, которые начинаются с «именем» .. поэтому мне хотелось бы сделать это в API: ["^name"] (причина в этом API «^» означает «начинается с»). Но, конечно, он ищет буквальное имя «^» и ничего не возвращает.

Есть ли способ обхода? не

ответ

1

Существует нет операции ИЛИ, но вы можете использовать UNION

(
    way["name"="holtorf"]; 
    way["name:eng"=holtorf"] 
); 

Существует также разница и переговоры http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Difference

И в вашем конкретном случае, вы можете использовать ключ-значение regexpressions соответствия. 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"]; 
+0

К сожалению, может быть, я недоразумение ... но ты говоришь, что правильный способ сделать '[ "^"] имя' 'является [~ "^ имя. * $"]'? Я получаю сообщение «Ошибка: строка 10: ошибка синтаксического анализа: регулярное выражение для ключа может быть объединено только с регулярным выражением в качестве критерия значения». Меня не волнует «holtorf», я просто хочу найти любые объекты, у которых есть тег «name» или «name: en» или «name: fr» и т. Д. Спасибо! –

+1

Извините, я не проверял вариант '[~"^name. * $ "=" Holtorf "]'. Просто используйте '[~"^name. * $ "~"^Holtorf $ "]' Если вы хотите, чтобы все объекты с именем: * и не заботились о значении, вам все равно придется использовать регулярное выражение для ключа и для значения (извините Я вводил вас в заблуждение с выражениями только для ключа). Например, '[~"^name:. * $ "~" ^. * $ "]' Примечание: я не уверен, должен ли я избегать ':' в regexp или нет. – dkiselev

+0

И если у вас есть конечный набор ключей - используйте union: '(way [name]; way [" name: en "]; way [" name: fr "]; way [" name: and_so_on "];);' – dkiselev