Gebäude die mehr als X Stockwerke haben

Guten Abend,
ich möchte mit der Overpass API Gebäude die mehr als X Stockwerke haben finden.
Die Abfrage nach einer bestimmten Anzahl ist relativ einfach.

way["building:levels"="2"]({{bbox}});

Auf dem Blog zu Overpass bin ich auch Working with Numbers gestoßen:
http://dev.overpass-api.de/blog/numbers.html

Dort ist unter anderem das Beispiel gegeben:

way({{bbox}})[highway=motorway]
  [maxspeed](if:t["maxspeed"]>120);
out geom;

Ich schaffe es nicht die Abfrage so umzubauen das sie auch für Gebäude funktioniert, ich habe dazu auch drei Fragen.

  1. highway=motorway und building:levels
    Warum wird der highway mit z. B. maxspeed=* und die Gebäude mit building:level=* näher beschrieben ?
    Es gibt bestimmt einen Grund warum das für einen Neuling nicht einheitlich ist oder ?

  2. Was bedeutet das t in

if:t[..

Dazu habe ich leider keine Erklärung gefunden.

  1. Mein Ausdruck liefert in Köln keine Daten zurück, obwohl ich glaube das es dort Gebäude mit mehr als zwei Stockwerken gibt:
area({{bbox}})[building=apartments]
  [levels](if:t["levels"]>2);
out geom;

Vielen Dank im voraus und Gruß
Kai

Grad mal getestet:

Für Hamm funzt folgende Abfrage:


[out:json][timeout:45];
// gather results
(
  way["building"](if:t["building:levels"]>=3)({{bbox}});
);
// print results
out body;
>;
out skel qt;

Bei einigen Gebäuden ist levels statt building:levels angegeben, ist das ein Fehler?

EDIT:
https://wiki.openstreetmap.org/wiki/Key%3Abuilding%3Alevels
Also: JA, Fehler.

Man sollte bei 3D die “building:part” nicht vergessen. Edit: Und die Relationen.
Außerdem haben bei weitem nicht alle Gebäude eine Eigenschaft, wie “building=apartments”. Es gibt sehr viele “yes” und knapp 8000 Values: https://taginfo.openstreetmap.org/keys/building#values

[out:json][timeout:45];
// gather results
(
  way["building"](if:t["building:levels"]>=10)({{bbox}});
  way["building:part"](if:t["building:levels"]>=10)({{bbox}});
);
// print results
out body;
>;
out skel qt;

Bei größeren Anlagen verzichte ich schon immer darauf, dem ganzen Gebäude 3D-Eigenschaften zu geben. Die gehen Dir dann durch die Lappen :wink:

Nein, das ist so “historisch gewachsen”.
“level” war schon vergeben (2010 → https://wiki.openstreetmap.org/wiki/Key:level ) und man wollte 2011 die Geschosszahl taggen ( https://wiki.openstreetmap.org/w/index.php?title=Key:building:levels ).

Vielen Dank für die Antworten.
Beide Abfragen funktionieren und liefern bis jetzt gute Ergebnisse zurück.

Meine Abfrage funktioniert so auch:

area({{bbox}})[building]
  ["building:levels"](if:t["building:levels"]>2);
out geom;

Aber nur mit

if:t

wenn ich nur

if

ausführe werden auch Gebäude mit weniger als X Stockwerken anzgezeigt.

Ich habe noch eine letzte Frage. Ihr sucht beide nach

way

sind die Gebäude nicht

 area

Gruß Kai

Bei OSM gibt es nur node, way und relation als Datentyp. Die meisten building sind als (closed-) way eingetragen, was anhand des keys dann als Fläche interpretiert wird.

Der Gedanke ist aber prinzipiell richtig: Wenn man nur nach Ways sucht, fehlen im Ergebnis Gebäude, die als Multipolygon-Relation gemappt sind.