overpass turbo - Objekte ohne Bilder anzeigen etc.

Moin

ich habe folgende Abfrage:


/*
This has been generated by the overpass-turbo wizard.
The original search was:
“heritage=*”
*/
[out:json][timeout:25];
// gather results
(
  // query part for: “heritage=*”
  node["heritage"]["image"!~"."]({{bbox}});
  way["heritage"]["image"!~"."]({{bbox}});
  relation["heritage"]["image"!~"."]({{bbox}});
  
  node["amenity"="place_of_worship"]["image"!~"."]({{bbox}});
  way["amenity"="place_of_worship"]["image"!~"."]({{bbox}});
  relation["amenity"="place_of_worship"]["image"!~"."]({{bbox}});
);
// print results
out body;
>;
out skel qt;


{{style:
  node{
    color: #ffffff;
    fill-color: #ff0000;
    fill-opacity: 0.8;
  }
  node[heritage]{
    color: #0000ff;
    fill-color: #888888;
    fill-opacity: 0.8;
  }
  node[amenity=place_of_worship]{
    color: #00ff00;
    fill-color: #;
    fill-opacity: 0.8;
  }
}}


Es sollen alle Objekte angezeigt werden die ein Denkmal sind und kein Bild haben.

Bei dem “kein Bild” haben hatte ich bisher das image herangezogen.

Nun könnte aber auch ein wikimedia_commons vorhanden sein und damit wäre das Objekt auch nicht anzeigen.

Quasi IsDenkmal und hat kein (Bild oder wikimedia_commons).

Kann mir einer verraten, wie ich das anpassen muss?

Gruß Jan

Wenn ich dich nicht falsch verstehe, sollte das hier tun - https://overpass-turbo.eu/s/15xc


[out:json][timeout:60];

// erstmal alle Denkmäler in der bbox suchen und
// speichern in .denkmaeler:
(
  nwr["heritage"]({{bbox}});
  nwr["amenity"="place_of_worship"]({{bbox}});
) -> .alle_denkmaeler;

// aus .denkmaeler raussuchen, welche "image" haben
(
	nwr.alle_denkmaeler["image"];
) -> .hat_bilder;

// aus .denkmaeler raussuchen, welche "wikimedia_commons" haben
(
	nwr.alle_denkmaeler["wikimedia_commons"];
) -> .hat_wmcommons;


// (alles - hat image) - hat wikimedia_commons = suchmenge
(
  (
	nwr.alle_denkmaeler;
    - nwr.hat_bilder;
  );
  - nwr.hat_wmcommons;
) -> .suchmenge;

// hier angeben, ob du "alle_denkmaeler" oder
// nur "suchmenge" anzeigen willst
// bei "alle_denkmaeler" sorgt das Style dazu, dass die
// "suchmenge" rot angezeigt wird, alle anderen grün
.alle_denkmaeler out geom;
//.suchmenge out geom;

{{style:
  node, area, way, relation {
    color:      red;
    fill-color: red;
  }

  node[image],
  area[image],
  way[image],
  relation[image] {
    color:      green;
    fill-color: green;
  }

  node[wikimedia_commons],
  area[wikimedia_commons],
  way[wikimedia_commons],
  relation[wikimedia_commons] {
    color:      green;
    fill-color: green;
  }
}}

Sprich im ersten Abschnitt hast du 2 Abfragen, mit denen du erstmal alle Objekte holst, in welchen du genauer schauen willst. Denkmäler sind ja für dich sowohl alles was “heritage” hat oder halt “amenity=place_of_worship”. Hier solltest überlegen, ob du da wirklich auch relationen drin haben willst. Ansonsten halt


(
  node["heritage"]({{bbox}});
  way["heritage"]({{bbox}});
  node["amenity"="place_of_worship"]({{bbox}});
  way["amenity"="place_of_worship"]({{bbox}});
) -> .alle_denkmaeler;

draus machen.

Danach wird in der Menge “.alle_denkmaeler” dann geschaut was “image” hat und dann was “wikimedia_commons”.
Dann werden alle Objekte von “alle_denkmaeler” abgezogen, welche halt in image ODER wikimedia_commons drin sind.
D.h. wenn also image ODER wikimedia_commons gesetzt sind, werden die aus der “suchmenge” entfernt".

Und zum Schluss halt ausgegeben. Du kannst dann entweder

mit “.suchmenge” ausgeben, oder halt “.alle_denkmaeler” und das folgende Style sorgt dafür, dass alle mit image oder wikimedia_commons halt grün markiert werden, der Rest (also deine Suchmenge) rot.

Gruß,
asca

Und ja, es geht “kürzer”, aber ich finde eine “Langversion” ist gerade für Laien oft besser verstehbar:


[out:json][timeout:60];

(
  nwr["heritage"]({{bbox}});
  nwr["amenity"="place_of_worship"]({{bbox}});
);

(
  nwr._;
  - nwr._[~"^(image|wikimedia_commons)$"~"."];
);

out geom;

Moin!

die Langversion ist in weiten Teilen sicherlich besser zu verstehen.

Aber ich wollte alle Denkmäler abfragen, die keine Bilder haben - das im wesentlichen.

Dann kam noch dazu - alle Kirchen OHNE Bilder - unabhängig von dem Denkmal.

Gruß Jan

JA, das tut es doch auch!

“alles MINUS hat_Bilder MINUS hat_wmcommons” = alles ohne Bilder oder wmcommons

nur damit ich das “minus x” und “minus y” muss man halt einmal raussuchen, was x und y überhaupt ist.

Und Kirchen ist doch in “alles” mit drin. Dazu dient der erste Abfragen Teil “alles = heritage + place_of_worship”

Moin!

also wäre vielleicht auch besser

durch

zu ersetzen. Dann könnte ich auch alle Brücken ohne Bilder (image / commons) leicht verständlich erweitern?

Gruß Jan

Ich glaube, was ihr braucht ist:


nwr[heritage][!image][!wikimedia_commons]({{bbox}});
out geom;

oder beides zusammen:

(
  nwr[heritage][!image][!wikimedia_commons]({{bbox}});
  nwr[amenity=place_of_worship][!image][!wikimedia_commons]({{bbox}});
);  
out geom;

hier liegt es ja wirklich in der Kürze.

Ich habe die kurze Variante nochmal auf Brücken erweitert.

nwr[bridge=yes][!image][!wikimedia_commons]({{bbox}});

Gibt es jetzt noch einen Shorty für die Begrenzung auf secoundary, primar, und … (nicht die einfachen Fuss- und Radwegbrücken)

Jan

Ja stimmt, “.grundmenge” trifft es besser.

Also:
https://overpass-turbo.eu/s/15xi

Ggf. ist es auch dann sinniger, wenn die Grundmenge deutlich größer wird, dann wirklich nur die Suchmenge auszugeben und dann passende Icons jeweils, z.B. so:
https://overpass-turbo.eu/s/15xk

Genau, statt

// welche aus Grundmenge hat "image"?
(
	nwr.grundmenge["image"];
) -> .hat_image;

// welche aus Grundmenge hat "wikimedia_commons"?
(
	nwr.grundmenge["wikimedia_commons"];
) -> .hat_wmcommons;


// Grundmenge - hat image - hat wikimedia_commons = suchmenge
(
  (
	nwr.grundmenge;
    - nwr.hat_image;
  );
  - nwr.hat_wmcommons;
) -> .suchmenge;

schreibt der Laie einfach:

nwr.grundmenge[!"image"][!"wikimedia_commons"]->.suchmenge;

Beides macht dasselbe.

hier liegt es ja wirklich in der Kürze.

Ich habe die kurze Variante nochmal auf Brücken erweitert.

nwr[bridge=yes][!image][!wikimedia_commons]({{bbox}});

Gibt es jetzt noch einen Shorty für die Begrenzung auf secoundary, primar, und … (nicht die einfachen Fuss- und Radwegbrücken)

Jan

PS: mir ist jetzt noch ein Gedanke durch den Kopf gegangen um die Daten besser bewerten zu können.

Schön wäre es jetzt noch alle bisher erfassten Denkmäler zu zeigen. Die die ein Bild oder commons haben.

Der Style hat aber als Auswertemenge nur die ohne eine bildliche Darstellung.

Wie bekomme ich noch die “vollständig” erfassten Denkmäler eingeblendet?

Gruß Jan

@Lübeck
Etwas aus meinem Fundus auf die schnelle Umgebaut. Prämisse ist, dass im Idealfall ein Einzelbild UND eine Bild-Kategorie per wikimedia_commons eingebaut ist (dann grün)
http://overpass-turbo.eu/s/15xP

Wobei derzeit KEINE Kontrolle auf die Sinnhaftigkeit des Values stattfindet.
Was ich damit meine ist z.B. dieses “grün” mit doppelter Bild- statt Kategorie-Einbindung, wobei das eine Commons-Bild dann auch noch über die de.wikipedia eingebunden ist:
https://www.openstreetmap.org/way/37326551
Schau Dir bitte bitte mal “meine” Flora als Beispiel/Vorlage an
https://www.openstreetmap.org/node/674919702