Podemos formular la respuesta de diferentes maneras:
Opción 1:
Básicamente, quieres eliminar esos amenity=embassy
de su lista de resultados actual, que tienen un diplomatic
valor que no sea embajada (suponiendo que tengan un diplomatic
etiqueta en absoluto).
Para ello, he utilizado el -
(diferencia) operador para reducir el conjunto de resultados actual para cada nodo, vía y relación:
[out:json];
(
( node[amenity=embassy]; - node[amenity=embassy][diplomatic][diplomatic!=embassy]; );
( way[amenity=embassy]; - way[amenity=embassy][diplomatic][diplomatic!=embassy]; );
( rel[amenity=embassy]; - rel[amenity=embassy][diplomatic][diplomatic!=embassy]; );
);
out tags;
enlace turbo del paso superior: http://overpass-turbo.eu/s/mXx
Opción 2:
Este enfoque alternativo devuelve efectivamente el mismo resultado, pero puede ser un poco más fácil de entender. En la siguiente consulta, creamos una unión de
- todos los elementos con
amenity=embassy
pero no diplomatic
y
-
todos los elementos con amenity=embassy
y diplomatic=embassy
[out:json];
(
node[amenity=embassy][!diplomatic];
node[amenity=embassy][diplomatic=embassy];
way[amenity=embassy][!diplomatic];
way[amenity=embassy][diplomatic=embassy];
rel[amenity=embassy][!diplomatic];
rel[amenity=embassy][diplomatic=embassy];
);
out tags;
enlace turbo del paso superior: http://overpass-turbo.eu/s/mY8
NB: Los operadores booleanos que mencionas no están disponibles como tales:
- Las condiciones AND deben ser formuladas por una lista de filtros de etiquetas, como
[tag_A][tag_B]
- Para las condiciones OR, puede utilizar expresiones regulares o consultar cada etiqueta individual y crear una UNIÓN de los respectivos resultados.
También puede probar el asistente de turbo de overpass si no quiere jugar con esos detalles.
En el asistente de turbo overpass, puede crear fácilmente la consulta mencionada en la opción 2 anterior utilizando la siguiente expresión:
(amenity=embassy and diplomatic!=*) or (amenity=embassy and diplomatic=embassy) global
Por fin es algo fácilmente digerible.